深度學習其中一個最棒的想法是, 你可以把神經網路 從一個工作項學到的知識 套用到另一個工作項 所以舉例來說, 也許可以讓神經網路 學會識別像是貓咪這類的形體,然後 使用這知識 或部份的知識來 幫助你更看得懂X光掃描 這就是所謂的轉移學習。 我們繼續來探討 假設你以影像的辨識 來訓練你的神經網路 所以你會先以X Y配對組來訓練神經網路 X是影像,Y是某種物件 影像可以是貓、狗、鳥或其他物件 如果你要採用這個神經網路並調整 或者我們說轉移 所學到的套用至另一個任務 例如放射科診斷 也就是確實讀X光掃描 你可以做的就是將神經網路 的這最後輸出層刪除 同時也刪除 輸入那最後輸出層的權重 並僅針對最後一層 建立新一組的隨機初始化權重 並輸出放射科診斷 所以具體來說, 在你訓練影像辨識工作項時 的第一個訓練階段期間 你會訓練到神經網路所有的 一般參數、所有權重、 所有分層,現在你便有了 會學習預測影像辨識的能力 訓練完這樣的神經網路 現在如果您要建置轉移學習, 只要交換新的資料集 X,Y 而現在這些是放射影像 而 Y 是您想要預估的診斷 您要做的是初始 最後一層的權重 讓我們稱之為 W[l] 跟 b[l],隨機地 現在,重新訓練神經網路 在這個新的資料集 在這新的放射資料集上 您有一些選擇對於 如何使用放射科資料訓練神經網路 如果您只有小的放射資料集 您或許想只要重新訓練 最後一層的權重,只是 w[l] b[l],其他的參數保持固定 如果您有足夠的資料 您也可以重新訓練所有 其餘神經網路的各層 而準則是或許如果您有小的資料集 那只要訓練最後一層,輸出層 或者最後第一,第二層 但是如果您有很多的資料 那或許您可以重新訓練 在網路中所有的參數 而如果您重新訓練 所有神經網路中的參數 那這個初始階段在訓練 影像辨識有時候稱為預先訓練 因為您使用影像辨識資料來 預先初始,或者預先訓練神經網路的權重 而後如果您 更新所有的這些權重 那訓練在放射資料 有時候稱為微調 所以您聽到預先訓練跟微調 在深度學習文件時 他們指的是這個意思 預先訓練跟微調權重在 轉移學習資源中 而您在這個例子做的是 您使用您從 影像辨識學習到的知識,應用他們 或者轉移他們到放射診斷 而這會有所幫助 的原因是 很多的低階特徵像是偵測邊緣 偵測曲線,偵測正的物件 從很大的影像辨識資料集學習 或許會幫助您的學習演算法 在放射診斷做得更好 它就是已經學很多在影像中 會是怎樣的架構跟本性 而有些知識會很有用 所以學會了辨識影像 它或許足夠學會有關 哪一部分的影像會像什麼 這些知識包括有關線 點,曲線,等等 或許小部分的物件 這些知識可以幫助 您的放射診斷網路可以 學習得更快或者較少的資料 這裡有另一個例子 假設您訓練一個語音辨識系統 現在 X是語音輸入或者語音片段 而Y是墨水腳本 所以您訓練語音辨識系統,輸出您的腳本 假設您現在要建立一個“喚醒語句” 或者“觸發字”偵測系統 記得喚醒語句或者觸發字 是一些字眼我們說 為了喚醒語音控制設備 在我們的居家,像是說 "Alexa" 來喚醒亞馬遜 Echo, 或者說 "OK Google" 來喚醒谷歌設備 或者 "hey Siri" 來喚醒蘋果設備, 或者說 "你好,百度“ 來喚醒百度設備 所以為了做到這樣 您或許拿掉最後一層的 神經網路, 然後建立一個新的輸出節點 但有時候另一種方式您可以做的是, 實際上不只建立一個新的輸出 但實際上建立許多新的層 到您的神經網路 試著預估標籤 Y對於 您的喚醒語句偵測問題 再一次,依據您有多少資料 您或許只重新訓練這些新的網路層,或者 您可以甚至重新訓練 更多神經網路的各層 所以,什麼時候做 轉移學習才有意義? 轉移學習有意義 當您有很多的資料您可以 可以從轉移前訓練,而通常 相對比較小的資料集 在轉移後的問題上 舉個例子,假設您有上百萬個例子 對於影像辨識任務 所以那是很大量的資料來學習,很多的 低階特徵,或者學習很多 有用的特徵在 神經網路的早期幾層中 但對於放射診斷任務 或許您只有幾百個例子 所以您只有很少量的資料 在放射診斷問題上 或許只有 100 張X光掃描 所以很多的知識您從 影像辨識中學到的可以轉移, 可以真的幫助您繼續做 放射診斷辨識, 即使您並沒有很多的放射資料 對於語音辨識,或許您已經訓練 語音辨識系統在 10,000 小時的資料 所以您已經學很多人類的語音 聲音的樣子從 10,000 小時的資料,真的很多 但對於您的觸發詞偵測 或許您只有一小時的資料 所以那並不是很多的資料 來配很多的參數 這種情況下, 您學過的有關人聲的樣子 什麼是人類語音的元件等等 那可以很有幫助來建立 一個好的喚醒語句偵測 即使您只有相對小的資料集 至少少很多的資料集 對於喚醒語句的偵測任務 所以同樣在這兩個例子中 您轉移了問題從有很多 資料的問題 到相對比較小的資料 一種情況下, 轉移學習是沒有意義的 也就是如果事實恰好相反 假設您有上百張影像 來做影像辨識,而您 有上百張影像來做放射診斷, 甚至上千張的影像來做放射診斷 人們會想, 這是要做好放射診斷 假設你真的想在這個 放射診斷上做得很好 有了放射影像比 有貓和狗等圖像更有價值 因此, 這裡的每個例子都比 那裡的每個示例子都要重要得多 至少為著要建立 一個良好的放射系統的目的 如果你已經有了更多的放射資料 不太可能那些上百張影像的 您隨機的物件像是 狗,貓之類的會有所幫助 因為一張從您的影像辨識任務 像是貓跟狗的影像的價值 就是少於一張 X光影像用來建立 一個好的放射系統的任務 所以這是轉移訓練的一個例子 它可能不會造成傷害, 但我不期望它給你任何有意義的加分 而類似的,如果您建立 語音辨識系統在 `10 小時 的資料,而實際上您有 10 小時或者甚至更多 假設 50 小時的資料 來做喚醒語句的偵測 您知道,它或許不會造成傷害 或許不會造成傷害,如果您將那 10 小時的資料加入您的轉移訓練 但您就不會期待會有 有意義的加分 所以總結一下, 何時轉移學習會有意義? 如果您試著學習從 一些任務 A 然後 轉移一些知識到任務 B 當任務 A 跟 B 有一樣的輸入時 轉移學習才會有意義 在第一個例子 A 跟 B 都是用影像為輸入 在第二個例子 兩者都是語音片段當作輸入 對於任務A有多很多的資料 比起任務B而言似乎更有意義 所有這些都是假設 您真的要做好任務B 而因為任務B的資料 對於任務B更有價值 通常您需要更多的資料在任務A, 因為您知道 對於任務B而言,每個從任務A的例子 價值小於每個在任務B的例子, 最後,轉移學習會傾向更有意義,如果您懷疑 從任務A的低階特徵可能 對於學習任務B有所幫助 而在先前的例子中 或許學習影像辨識教您足夠 有關影像的知識來做放射診斷,或許 學習語音辨識教您有關 人類語音來幫助您 在做觸發語句的偵測 所以總結一下,轉移學習會是 有用的,如果您試著要做好任務B 通常是這個問題 您有相對比較少的資料 舉個例子,在放射診斷 您知道,要獲取那麼多 X光片掃描來建立一個 好的放射診斷系統是很困難的 這種情況下,您或許找到一個相關的任務 像是影像辨識 您或許可以拿到上百萬張影像, 從之學習很多低階特徵 所以您可以試著在 任務B做得很好 您的放射診斷任務, 儘管沒有很多的資料 當轉移學習有意義時 它的確會顯著地幫助您 在學習任務的表現 但我有時候會看到 轉移學習用在一些設定上 任務A實際上比任務B的資料更少的例子 您不期望看到 會有所收穫 所以這是轉移學習,當您 學習從一種任務試著 轉移到不同的任務 有另外一種版本 從多重任務的學習 也稱為多工學習 當我們試著同時從多重任務中學習 而不是從一個學習 然後依次地一個接著一個 或者在那之後,試著轉移道不同的任務 因此,在下一段影片 讓我們來討論多工學習