24模型微調(finetune)

一、Transfer Learning & Model Finetune

1.1 Transfer Learning

Transfer Learning:機器學習分支,研究源域(source domain)的知識如何應用到目標域(targetdomain)
在這裏插入圖片描述

傳統的機器學習:
對不同的任務分別訓練學習得到不同的learning system,即模型,如上圖有三個不同任務,就得到三個不同的模型

遷移學習:
先對源任務進行學習,得到知識,然後在目標任務中,會使用再源任務上學習得到的知識來學習訓練模型,也就是說該模型不僅用到了target tasks,也用到了source tasks

1.2 Model Finetune

1.2.1 Model Finetune概念

Model Finetune:模型的遷移學習在這裏插入圖片描述
模型微調:
模型微調就是一個遷移學習的過程,模型中訓練學習得到的權值,就是遷移學習中所謂的知識,而這些知識是可以進行遷移的,把這些知識遷移到新任務中,這就完成了遷移學習

微調的原因:
在新任務中,數據量太小,不足以去訓練一個較大的模型,從而選擇Model Finetune去輔助訓練一個較好的模型,使得訓練更快

卷積神經網絡的遷移:
在這裏插入圖片描述
將卷積神經網絡分成兩部分:features extractor + classifier

  • features extractor:模型的共性部分,通常對其進行保留
  • classifier:根據不同任務要求對輸出層進行finetune

1.2.2 Model Finetune步驟

在這裏插入圖片描述
Model Finetune:
先進行模型微調,加載模型參數,並根據任務要求修改模型,此過程稱預訓練,然後進行正式訓練,此時要注意預訓練的參數的保持,具體步驟和方法如下

模型微調步驟:

  1. 獲取預訓練模型參數
  2. 加載模型( load_state_dict)
  3. 修改輸出層

模型微調訓練方法:

  • 固定預訓練的參數,兩種方法:
    • requires_grad =False
    • lr=0
  • Features Extractor部分設置較小學習率( params_group)

1.2.3 Model Finetune實例

在這裏插入圖片描述
數據: https://download.pytorch.org/tutorial/hymenoptera_data.zip
模型: https://download.pytorch.org/models/resnet18-5c106cde.pth

二、Pytorch中的Finetune