機器學習-5

阿蘇爾發表於2018-04-17

本文來自於網易雲課堂

遷移學習

深度學習中最強大的一個理念是可以從一個任務中學到知識,並將這些知識應用到另一個獨立的任務中。比如說你訓練了一個神經網路可以識別貓的圖片,這個神經網路的知識或者部分知識可以用來閱讀x射線掃描圖。這就是所謂的遷移學習。
這裡寫圖片描述
假設你已經訓練好一個影像識別神經網路,比如說識別貓,如果你想要將學習到的知識應用到其他任務中,比如說識別x射線掃描圖,你可以做的是把神經網路最後的輸出層以及最後一層的權重刪掉,然後為最後一層重新賦予隨機權重,然後讓他在放射診斷資料上訓練。具體來說,在第一階段訓練過程中,當你進行影像識別訓練時,你可以訓練神經網路的所有常用引數,然後你就得到了一個能夠做影像識別的網路。訓練了這個網路之後,要實現遷移學習,你現在要做的是把資料集換成新的x,y對,你要做的就是初始化最後一層的權重。然後,在這個新資料集上重新訓練網路。要用放射科的資料重新訓練有幾種做法,經驗規則是,如果你的資料量較小,你可能只需要重新訓練最後一層的權重,並保持其他引數不變。如果你的資料量很多,你可以重新訓練神經網路中所有的層。如果你重新訓練神經網路中所有引數,那麼在影像識別資料的初期訓練階段,有時稱為預訓練,為你在用影像識別資料來預先初始化或者預訓練神經網路的權重。然後,如果你以後更新所有權重,然後在放射科資料上訓練,有時這個過程叫做微調。

為什麼這麼做有效果呢?有很多低層次的特徵比若說邊緣檢測,曲線檢測等,從非常大的識別資料庫中學得這些能力,可能有助於你的學習演算法在放射科診療中做的更好。演算法學到了很多資訊,包括結構資訊,影像形狀的資訊等,其中一些知識可能會有用。所以學會了影像識別,他就能知道不同影像的組成部分是怎樣的,學到點,曲線等知識,這些知識可能會幫助你處理放射科的資料。
這裡寫圖片描述
再比如你已經搭建了一個語音識別神經網路,你想將其應用到喚醒詞系統中去,比如說’你好百度’,就會將百度的裝置喚醒。要想這麼做,你必須將輸出層去掉,然後加上新的一層或者幾層網路,然後把新的資料對放進去進行訓練。
那麼遷移學習什麼時候會起作用呢?遷移學習起作用的場合是遷移來源問題有很多資料而遷移目標問題只有少量資料。例如,假如影像識別任務中有100萬個樣本,這個資料量很大,可以使神經網路學得低層次特徵,但是對於放射科資料,你可能只有100個樣本,所以你從影像識別中學到的很多知識都可以遷移並且幫你增強放射科識別任務的能力。所以你可以利用遷移學習從資料量大的地方轉移到資料量小的地方,但是反過來就沒有意義了。
這裡寫圖片描述
總結一下,什麼時候遷移學習有意義呢?對於任務A和B,A要遷移到B,第一是A和B都有相同的輸入,比如說都是影像識別或者都是語音識別。第二是A要比B的資料量多得多。第三如果你覺得A的低階特徵對B有幫助,那麼遷移學習的意義就更大一些。

多工學習

在遷移學習中,你的步驟是序列的,你從任務A中學到知識然後遷移給任務B,在多工學習中,你是同時學習的,試圖讓神經網路同時做幾件事,然後希望每個任務都能幫到其他任務。
這裡寫圖片描述
假設你在開發無人駕駛汽車,可能需要都是檢測不同物體,比如說行人車輛和停車標誌。那麼對於每個影像X(i)

X^{(i)}
,輸出則不是一維的,而是多維的,如Y(i)=0,1,1,0
Y^{(i)} = {0,1,1,0}
,現在可以做的就是訓練一個神經網路來預測這裡的y值。
與softmax的主要區別是,softmax把單個標籤分給單個樣本,而多工學習是單個樣本有多個標籤。如果你試圖建立一個神經網路,輸入一個圖希望系統檢測4個物體,那你做的就是多工學習。另外你也可以訓練多個不同的神經網路,而不是訓練一個神經網路做4件事,但神經網路的一些早期特徵在識別不同物體時都會用到。然後你會發現訓練一個網路來做4件事比訓練4個網路分別做4件事要好。
這裡寫圖片描述
另一個細節,即使每張圖只有部分標籤也可以處理。對於某些樣本,那些對資料做標籤的人說圖中有人但是沒有車,但是沒有標記是不是有停車標記,或者有沒有紅綠燈。即使是這樣的訓練集你可以訓練同時做4個任務。訓練的時候對於損失函式求和時就忽略掉沒有標籤的成分即可,只累加0和1的項。
那麼多工學習什麼情況下才有意義呢?當三件事為真時,它是有意義的。第一任務可以共享低階特徵。第二個準則沒有那麼絕對,所以不一定是對的。這個準則是說每個任務的資料都是相似的。第三個就是你可以訓練一個足夠大的網路能夠同時做好所有的工作。研究員Rich Carona幾年前發現相比單個神經網路識別單個任務,多工學習會降低效能的唯一情況就是訓練的神經網路不夠大。
在實踐中,多工學習的頻率要低於遷移學習。有許多遷移學習的應用,你需要解決一個問題,但資料量很少。所以你需要找一個資料量很多的相關問題來預先學習然後在遷移到目標應用中去。但多工學習比較少見,就是你需要同時處理很多工,都要做好。或許計算機視覺是一個例子,主要應用在物體檢測中。

端到端學習

什麼是端到端學習呢?簡而言之,就是以前有一些資料處理系統,他們需要多個階段的處理,端到端學習就是可以忽略所有這些不同的階段,用單個神經網路代替它。以音訊識別為例,給定一段音訊x,對映到y,也就是音訊的聽寫文字。傳統上,語音識別需要很多階段的處理,首先你需要提取一些特徵(可以用MFCC演算法),提取一些特徵以後米可以利用機器學習的一些演算法在音訊片段中找到音位然後組成單詞等。所以和這些有很多階段的流水線來比,端到端學習做的就是,你訓練一個巨大的神經網路,輸入就是一段音訊,輸出直接就是一段文字。AI的一個有趣的社會學效應就是隨著端到端深度學習系統開始表現的更好,有一些研究員花了大量時間或者事業生涯來設計流水線各個步驟,發了大量論文,而端到端學習只需要把訓練集拿過來直接學到了X到Y的函式對映,直接繞過了其中很多步驟。對於這些研究員來說是相當難受的。事實證明,端到端深度學習的挑戰之一是你可能需要大量資料才能讓系統表現良好。比如說你有3000h的資料可以讓舊的語音系統表現良好,那麼如果你有10000或者100000小時資料,端到端學習方法就會很厲害了。所以當你資料量小時傳統流水線方法也不錯,通常做的更好,你需要大量的資料集才能讓端到端系統真正散發耀眼光芒。
這裡給出了百度人臉識別的例子。你從門禁那過,如果系統檢測到你的臉就會讓你通過而不再需要RFID工卡。那麼怎樣搭建這樣的系統呢?這其實並不是一步完成的,因為每個人的位置不同,體型也不同。它是首先執行一個軟體,首先檢測到人臉,然後將人臉的部分放大居中,然後在喂到神經網路中去。通過這麼簡單的分步,第一步弄清臉在哪,第二步弄清臉是誰。研究人員發現這樣分解成2個演算法會得到更好的表現。
那麼為什麼兩步法會更好呢?實際上有2個原因,一是你解決的兩個問題,每一個實際上要簡單的多。第二個是每個子問題的資料都很多。具體來說,有很多資料可以用在人臉識別訓練。今天業界領先的人臉識別團隊擁有數以億計的圖片,可以用來識別是否是同一個人。相比之下如果你想一步到位,這樣x,y的資料就少的多,其中x是門禁系統拍攝的影像,y是那人的身份。因為你沒有足夠的資料來解決這個端到端的問題,但你卻有足夠的資料來解決分步驟的每個問題。而在機器翻譯領域,因為有很多資料,所以端到端的學習很好用。

什麼時候使用端到端學習系統

端到端學習的優缺點:
優點:
1.端到端系統是真的只讓資料說話。
2.所需手工設計的元件更少
缺點:
1.真的需要大資料
2.它排除了可能有用的手工設計元件
這裡寫圖片描述

相關文章