11.2 模型finetune

/home/liupc發表於2020-10-08

一、Transform Learning 與 Model Finetune

二、pytorch中的Finetune

 

一、Transfer Learning 與 Model Finetune

1. 什麼是Transfer Learning?

遷移學習是機器學習的一個分支,主要研究源域的知識如何應用到目標域當中。遷移學習是一個很大的概念。

怎麼理解源域的知識應用到目標域當中呢?上圖是來自一篇遷移學習的綜述。左邊是傳統機器學習的過程,對於不同的任務分別學習得到不同的模型。而右邊是遷移學習的示意圖,不同的任務會劃分為源任務和目標任務,對原任務進行學習,學習到的稱之為知識,而我們回利用知識和目標任務進行學習,得到模型。這個模型不僅用到了目標任務,還用到了原任務的知識。

遷移學習就是將源任務的知識應用到目標任務中。

2. 遷移學習與finetune之間的關係

我們訓練一個模型,就是不斷地更新他的權值。而整個模型最重要的東西也就是他的權值。這個權值呢,也就可以稱之為他的知識。而這些知識是可以進行遷移的。我們把這些知識遷移到新任務中,這就是模型微調。

 

為什麼我們使用model finetune這個trick呢?這是因為在新任務中,資料量較小。

我們來看,神經網路該如何遷移。我們對神經網路,通常會劃分為兩部分,前面一些列的卷積池化,我們認為是特徵提取。後面一些全連線層,我們稱之為分類器。

我們對特徵提取的部分,認為是比較有共性的地方。而分類器的引數呢,我們認為它與具體的任務有關,通常需要去改變。在這裡,有個非常重要的地方,通常都要去改變,這就是最後一個輸出層。比如原來是千分類任務,這裡是二分類任務,這就需要改變。

 

二、pytorch中的Finetune

下面我們來看模型finetune需要哪些步驟。

構建好模型之後,在訓練時也會常用一些trick。

1. 固定預訓練的引數(兩種方法:(1) requires_grad = False    (2)學習率設為0)

2. 使用較小的學習率。這時候就要用到params_group(引數組)的概念,讓不同的部分學習率不同。

 

三、舉例 

下面使用Resnet-18進行finetune。

 

(1)準備工作

 

模型下載:https://download.pytorch.org/models/resnet18-5c106cde.pth

 

 

相關文章