1 遷移學習(Transfer learning)
有的時候神經網絡可以從一個任務中習得知識,並將這些知識應用到另一個獨立的任務中,例如,也許你已經訓練好一個神經網絡,能夠識別像貓這樣的對象,然后使用那些知識,或者部分習得的知識去幫助您更好地閱讀 x 射線掃描圖,這就是所謂的遷移學習。
具體來說,在第一階段訓練過程中,當你進行圖像識別任務訓練時,你可以訓練神經網絡的所有常用參數,所有的權重,所有的層,然后你就得到了一個能夠做圖像識別預測的網絡。在訓練了這個神經網絡后,要實現遷移學習,你現在要做的是,把數據集換成新的(x, y)對,現在這些變成放射科圖像,而y是你想要預測的診斷,你要做的是初始化最后一層的權重,讓我們稱之為w[L]和b[L]隨機初始化。,如果你的放射科數據集很小,你可能只需要重新訓練最后一層的權重,或者也許是最后一兩層,就是w[L]和b[L],並保持其他參數不變。如果你有很多數據,那么也許你可以重新訓練網絡中的所有參數。如果你重新訓練神經網絡中的所有參數,那么這個在圖像識別數據的初期訓練階段,有時稱為預訓練(pre-training),因為你在用圖像識別數據去預先初始化,或者預訓練神經網絡的權重,然后,如果你以后更新所有權重,然后在放射科數據上訓練,有時這個過程叫微調(fine tuning),預訓練和微調的權重來源於遷移學習。
什么時候遷移學習是有意義的?如果你想從任務A學習並遷移一些知識到任務B,那么當任務A和任務B都有同樣的輸入x時,遷移學習是有意義的,比如A和B輸入都是圖像,或者輸入都是音頻。當任務A的數據比任務B多得多時,遷移學習意義更大,比如任務A有 1 百萬個樣本,任務B只有 1000 個樣本,那么你從這 1 百萬個樣本學到的知識,真的可以幫你增強對更小數據集任務B的訓練。
2 多任務學習(Multi-task learning)
在遷移學習中,你的步驟是串行的,你從任務A里學習只是然后遷移到任務B,在多任務學習中,你是同時開始學習的,試圖讓單個神經網絡同時做幾件事情,然后希望這里每個任務都能幫到其他所有任務。
舉一個例子,假設你在研發無人駕駛車輛,那么你的無人駕駛車可能需要同時檢測不同的物體,比如檢測行人、車輛、停車標志,還有交通燈各種其他東西,輸入圖像x(i),輸出標簽y(i)不再是一個,可能會是更高維度,這里暫時就假設y(i)是個 4×1 向量。輸入x,現在輸出是一個四維向量y,訓練一個神經網絡,需要定義神經網絡的損失函數,對於一個輸出y^,是個 4維向量,對於整個訓練集的平均損失:,
是單個預測的損失,標志L指的是 logistic 損失:
這與 softmax 回歸的主要區別在於,與 softmax 回歸不同,softmax 將單個標簽分配給單個樣本,這張圖可以有很多不同的標簽,因為多個物體可能同時出現在一張圖里。如果你訓練了一個神經網絡,試圖最小化這個成本函數,你做的就是多任務學習,當然我們也可以訓練四個不同的神經網絡,而不是訓練一個網絡做四件事情,但其實,訓練一個神經網絡做四件事情會比訓練四個完全獨立的神經網絡分別做四件事性能要更好,這就是多任務學習的力量。當你可以訓練一個足夠大的神經網絡,同時做好所有的工作,所以多任務學習的替代方法是為每個任務訓練一個單獨的神經網絡。
平均來說,目前遷移學習使用頻率更高。
3 端到端的深度學習(end-to-end deep learning)
以語音識別為例,你的目標是輸入x,比如說一段音頻,然后把它映射到一個輸出y,就是這段音頻的聽寫文本,所以傳統上,語音識別需要很多階段的處理,首先你會提取一些特征,然后一些手工設計的音頻特征,在提取出一些低層次特征之后,你可以應用機器學習算法在音頻片段中找到音位,然后你將音位串在一起構成獨立的詞,然后你將詞串起來構成音頻片段的聽寫文本。所以和這種有很多階段的流水線相比,端到端深度學習做的是,你訓練一個巨大的神經網絡,輸入就是一段音頻,輸出直接是聽寫文本,端到端深度學習就只需要把訓練集拿過來,直接學到了x和y之間的函數映射,直接繞過了其中很多步驟。事實證明,端到端深度學習的挑戰之一是,你可能需要大量數據才能讓系統表現良好,端到端深度學習可以表現很好,也可以簡化系統架構,讓你不需要搭建那么多手工設計的單獨組件,同時,正因為如此,端到端深度學習的弊端之一是它把可能有用的人工設計的組件排除在外了,有時候,精心設計的人工組件可能非常有用。