遷移學習

遷移學習:把公共的數據集的知識遷移到自己的問題上,即將已經訓練好的模型的一部分知識(網絡結構)直接應用到另一個類似模型中去

小數據集:

利用遷移學習,應用其他研究者建立的模型和參數,用少量的數據僅訓練最後自定義的softmax網絡。從而能夠在小數據集上達到很好的效果。

例如:
ImageNet 數據集,它有 1000 個不同的類別,因此這個網絡會有一個 Softmax 單元,它可以輸出 1000 個可能類別之一
這裏寫圖片描述

問題:現在有一個三分類問題,圖片裏是 貓1還是貓2 ,或者都不是.如果訓練集很小
這裏寫圖片描述
把所有的層看作是凍結的,凍結網絡中所有層的參數,只需要訓練和問題的 Softmax 層有關的參數。

大數據集
如果擁有大量的數據集,可以多訓練後面的幾層,或者可以直接去掉這幾層,換成自己的隱藏單元和自己的 softmax 輸出層。
這裏寫圖片描述
總之隨着數據集的增加,我們需要“ freeze”的層數越來越少。最後如果我們有十分龐大的數據集,那麼我們可以訓練網絡模型的所有參數,將其他研究者訓練的模型參數作爲參數的初始化來替代隨機初始化,來加速我們模型的訓練。

詳細說明
假設你已經有了一個可以高精確度分辨貓和狗的深度神經網絡,之後想訓練一個能夠分別不同品種的狗的圖片模型,你可以利用訓練好的網絡,提取初級特徵,之後只訓練最後幾層神經元,讓其可以分辨狗的品種

遷移學習可以顯著的降低深度學習所需的硬件資源

舉圖像識別中最常見的例子,訓練一個神經網絡。來識別不同的品種的貓,你若是從頭開始訓練,你需要百萬級的帶標註數據,海量的顯卡資源。而若是使用遷移學習,你可以使用Google發佈的Inception或VGG16這樣成熟的物品分類的網絡,只訓練最後的softmax層,你只需要幾千張圖片,使用普通的CPU就能完成,而且模型的準確性不差。

使用遷移學習時要注意,預訓練模型應用場景,要和當前任務差距不大

1)待訓練的數據集較小,已訓練的模型和當前任務相似。此時可以只是重新訓練已有模型的靠近輸出的幾層,例如將ImageNet中輸出層原來可以判別一萬種輸出的網絡改爲只判別貓的品種,從而利用已有網絡來做低層次的特徵提取。

2)待訓練的數據集較小,已訓練的模型和當前任務場景差距較大。例如你有的已訓練網絡能識別出白天高速路上的違章車輛,你需要訓練一個能識別出夜間違章車輛的模型,由於不管白天夜晚,交通規則是沒有變化的,所以你需要將網絡靠近輸入的那幾層重新訓練,等到新的網絡能夠提取出夜間車輛的基本信息後,就可用預訓練模型,而不是從頭開始。

3)待訓練的數據集較大,已有模型的訓練數據和現有的訓練數據類似。此時應該使用原網絡的結構,並保留每一層的節點權重,再逐層微調。

4)待訓練的數據集較大,已有的模型和新模型的數據差異度很高。此時應該做的是從頭開始,重新訓練。

推薦資料:
遷移學習簡明手冊:https://github.com/jindongwang/transferlearning-tutorial

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章