1. 程式人生 > >深度學習之---如何更好的finetune

深度學習之---如何更好的finetune

Deep Learning或者說CNN在影象識別這一領域取得了巨大的進步,那麼自然我們就想將CNN應用到我們自己的資料集上,但這時通常就會面臨一個問題:通常我們的dataset都不會特別大,一般不會超過1萬張,甚至更少。

這種情況下,直接使用train from scratch的方式在小資料集上容易過擬合,尤其是在資料分佈差異化很大的場景下。然後就有了遷移學習了,Transfer Learning關心的問題是:什麼是“知識”以及如何更好地運用之前得到的“知識”。這可以有很多方法和手段。而本文所說的pretrained+fine-tuning只是其中的一種手段。

這也是最常用的,因為一般我們並不會簡單的把模型像1一樣當做特徵提取器使用,而是讓模型去fit我們的訓練資料,使得效能更好。因此我們除了像第一步裡面一樣去掉最後一個FC層伊以外,在網路訓練過程中還要更新權重,進行BP傳導(方法見下文)。最簡單粗暴的就是對修改後的全部網路層進行權重更新(當自己的資料庫較大時),但是當我們本身任務的資料庫較小時,為了避免過擬合,我們需要對網路的前幾層固定引數(不更新權重),而只更新網路結構的後面幾層。這是因為網路的前幾層得到的特徵是比較基礎local的特徵,基本適用於全部任務(邊緣,角點特徵),而網路層數越高的層,和資料庫全域性資訊聯絡越緊密,(網路越靠後,資訊越global,越靠前,越local,local的資訊是多數情況共享的,而global的資訊和原圖緊密相關)



版權宣告:本文為博主原創文章,轉載請附上博文連結!
pretrained+fine-tuning有什麼好處

至少有以下兩方面:
1. 解決了我們小樣本下使用GoogLeNet這樣複雜的網路上容易過擬合的問題;
2. 節省了訓練時間。因為網路前面幾層提取的特徵具備一定的泛化能力(generic)。
pre-trained+finetuning都具有哪些方式:

pre-trained+finetuning通常有兩種方式:

    ConvNet as fixed feature extractor:拿來pretrained的模型,將最後一層全連線層(分類用)去掉,然後將剩下的部分看做一個特徵提取器,後面再加一個線性分類器就可以了。比如:在 AlexNet中會對每張圖片輸出4096維向量,這些向量是用於分類的,只要我們得到了所有圖片的這些向量就可以建立一個線性分類器用於新資料的分類了。
    Fine-tuning the ConvNet:和第一種方法不同的是,這裡不僅對頂層的分類進行重新替換和訓練,還對卷積層的一些引數通過反向傳播進行微調。可以對所有的引數都進行微調,也可以讓前幾層的引數固定只對高層部分進行微調(為防止過擬合,因為剛開始幾層的特徵一般是比較通用的,而後面幾層可能會包含更多原始訓練集的細節)。

具體實踐中如何選擇不同的pretrained+fine-tuning方式

pretrained+fine-tuning策略取決於多種因素,但最重要的是新資料集的大小以及新資料集與原資料集的相似度。謹記網路前面幾層的 DCNN 特徵更加泛型(generic),在後面層中更加具有資料集特定性(dataset-specific)。

  •     資料集很小並且與原資料集相似。由於資料集很小,不適合進行微調(可能會過擬合);由於資料類似於原資料,模型更高層次的特徵也與此資料集相關。所以最好是在 CNN 特徵上訓練一個線性分類器。(因為資料量小,所以使用全域性微調的話,前面幾層比較泛化的特徵可能會被訓練的過擬合)
  •     新資料集很小且與原資料集不同。由於資料庫較小,不適合進行finetune,由於資料庫差異大,應該在單獨訓練網路結構中較高的層,前面幾層泛化能力比較強的就不用訓練了,直接固定權值。(因為前幾層的資料泛化能力強,而我們需要隊後幾層包含特定的資料集特徵的層進行訓練)
  •     資料集很大並且與原資料集相似。由於資料多了,應該不會過擬合,可以通過試圖微調網路。
  •     資料集大而且與原資料集不同。由於資料集很大,我們可能會期望從頭開始訓練一個 DCNN。不過,在實踐中從一個預訓練模型開始初始化權重仍然是一種有益的方法。所以我們可以使用原模型為初始值然後對整個網路進行微調。
  •     這裡寫圖片描述

參考:
深度學習系列Part2:遷移學習和微調深度卷積神經網路 (原版英文連結Deep Learning Part 2: Transfer Learning and Fine-tuning Deep Convolutional Neural Networks)這篇文章通過了一個具體案例來介紹Fine-tuning,值得一看;
知乎 fine-tuning:利用已有模型訓練其他資料集 ,MXNet下Pretrained+Finetuning的正確姿勢這裡寫連結內容 ;
cs231n transfer learning (翻譯版CS231n 卷積神經網路與計算機視覺 11 卷積神經網路的 遷移學習 和微調) ;
遷移學習與fine-tuneing有什麼區別?
---------------------  
作者:NodYoung  
來源:CSDN  
原文:https://blog.csdn.net/nnnnnnnnnnnny/article/details/70156637?utm_source=copy  
版權宣告:本文為博主原創文章,轉載請附上博文連結!

參考:https://blog.csdn.net/TTdreamloong/article/details/80380736