37 微調(diào)【動(dòng)手學(xué)深度學(xué)習(xí)v2】

微調(diào)
- 深度學(xué)習(xí)中最重要的一個(gè)技術(shù)
標(biāo)注一個(gè)數(shù)據(jù)集很貴
- ImageNet 標(biāo)注了一千多萬張圖片,但是實(shí)際使用的只有 120 萬張圖片,類別數(shù)是 1000 ,它算是一個(gè)比較大的數(shù)據(jù)集
- Fashion-MNIST 一共有 6 萬張圖片,類別數(shù)是 10 , 算是一個(gè)比較小的數(shù)據(jù)集
- 通常自己的數(shù)據(jù)集規(guī)模通常在這兩者之間,大概在 5 萬張圖片左右,類別數(shù)大概是 100 左右,平均下來每一類物體大概有 500 張圖片左右
適合 ImageNet 的復(fù)雜模型可能會(huì)在自己的數(shù)據(jù)集上過擬合,另外由于訓(xùn)練樣本有限,訓(xùn)練模型的準(zhǔn)確性可能無法滿足實(shí)際要求,解決以上問題有兩種解決方案:
1、收集更多的數(shù)據(jù)。數(shù)據(jù)集越大越好,但是收集和標(biāo)記數(shù)據(jù)可能需要大量的時(shí)間和金錢。
2、應(yīng)用遷移學(xué)習(xí)(transfer leanring)。將從源數(shù)據(jù)集學(xué)到的知識(shí)遷移到目標(biāo)數(shù)據(jù)集,通常來說希望在大數(shù)據(jù)集上訓(xùn)練好的模型能夠提取到更通用的圖像特征,有助于識(shí)別邊緣、紋理、形狀和對(duì)象組合,從而幫助提升在自己數(shù)據(jù)集上的精度,核心思想是假設(shè)模型對(duì)整個(gè)物體識(shí)別有一定的基礎(chǔ)的情況下,不需要自己提供太大的數(shù)據(jù)集就能夠獲得很好的識(shí)別精度,這也是人工智能所追求的目標(biāo)
網(wǎng)絡(luò)架構(gòu)
一個(gè)神經(jīng)網(wǎng)絡(luò)一般可以分為兩塊,一部分做特征提取,一部分做線性分類
- 假設(shè)將一張圖像輸入到模型中,可以認(rèn)為最下面的一部分是在進(jìn)行特征提取(特征抽取就是將原始像素變成容易線性分割的特征,深度學(xué)習(xí)的突破性進(jìn)展就在于特征提取是可以學(xué)習(xí)的,而不用人工思考如何提供特征)
- 最后一部分就是一個(gè)全連接層和 softmax 來進(jìn)行分類(可以認(rèn)為是一個(gè)簡(jiǎn)單的線性分類器:Softmax 回歸)

微調(diào)

- 假設(shè)在源數(shù)據(jù)集(一個(gè)比較大的數(shù)據(jù)集)上已經(jīng)訓(xùn)練好了一個(gè)模型,模型中特征提取的部分對(duì)源數(shù)據(jù)集是有效的,那么它對(duì)目標(biāo)數(shù)據(jù)集也應(yīng)該是有效的,這樣做是優(yōu)于隨機(jī)生成提取特征的
- 最后一部分是不能直接使用的,因?yàn)?strong>標(biāo)號(hào)發(fā)生了改變,所以最后一部分難以進(jìn)行重用
- 微調(diào)的核心思想是:在一個(gè)比較大的源數(shù)據(jù)集上訓(xùn)練好的模型中用于特征提取的部分,在目標(biāo)數(shù)據(jù)集上提取特征時(shí)進(jìn)行重用
微調(diào)中的權(quán)重初始化

微調(diào)包括四個(gè)步驟:
- 在源數(shù)據(jù)集(例如 ImageNet 數(shù)據(jù)集)上預(yù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,即源模型(pre-train model)
- 創(chuàng)建一個(gè)新的神經(jīng)網(wǎng)絡(luò)模型,即目標(biāo)模型。新模型的初始化不再是隨機(jī)的初始化,而是復(fù)制源模型上的所有模型設(shè)計(jì)及其參數(shù)(輸出層除外)。假定這些模型參數(shù)包含從源數(shù)據(jù)集中學(xué)到的知識(shí),這些知識(shí)也將適用于目標(biāo)數(shù)據(jù)集,使得新模型在一開始就能很好地提取特征;同時(shí)假設(shè)源模型的輸出層與源數(shù)據(jù)集的標(biāo)簽密切相關(guān),因此不在目標(biāo)模型中使用該層
- 向目標(biāo)模型添加輸出層,其輸出數(shù)是目標(biāo)數(shù)據(jù)集中的類別數(shù),然后隨機(jī)初始化該層的模型參數(shù)(最后的分類部分由于標(biāo)號(hào)不同,因此還是做隨機(jī)初始化)
- 在目標(biāo)數(shù)據(jù)集上訓(xùn)練目標(biāo)模型。輸出層將從頭開始進(jìn)行訓(xùn)練,而所有其他層的參數(shù)將根據(jù)源模型的參數(shù)進(jìn)行微調(diào)
- 因?yàn)閾p失 Loss 是從后往前進(jìn)行傳遞的,所以最后的分類部分訓(xùn)練比較快,進(jìn)行隨機(jī)初始化也不會(huì)有太大的影響;而前面的特征提取的部分本身已經(jīng)具備很好的特征提取效果,只是根據(jù)源數(shù)據(jù)集和目標(biāo)數(shù)據(jù)集的差異進(jìn)行微調(diào),可能在最開始訓(xùn)練的時(shí)候就已經(jīng)比較接近最終的結(jié)果,所以不用做過多的訓(xùn)練和變動(dòng)
訓(xùn)練
是一個(gè)目標(biāo)數(shù)據(jù)集上的正常訓(xùn)練任務(wù),但使用更強(qiáng)的正則化(如果不使用預(yù)訓(xùn)練模型,直接在自己的數(shù)據(jù)集上正常訓(xùn)練,在時(shí)間足夠的情況下也是可以從隨機(jī)初始化訓(xùn)練到完全 fitting 自己的數(shù)據(jù)集,但是可能會(huì)導(dǎo)致 Overfitting ,這是沒有必要的,不如對(duì)預(yù)訓(xùn)練模型進(jìn)行微調(diào))
- 使用更小的學(xué)習(xí)率(已經(jīng)比較接近最優(yōu)解了,因此不需要太大的學(xué)習(xí)率)
- 使用更少的數(shù)據(jù)迭代
源數(shù)據(jù)集遠(yuǎn)遠(yuǎn)復(fù)雜于目標(biāo)數(shù)據(jù)集,通常微調(diào)的效果更好
- 源數(shù)據(jù)集的類別數(shù)、圖片數(shù)量、樣本個(gè)數(shù)通常是目標(biāo)數(shù)據(jù)集的 10 倍或者 100 倍,才能達(dá)到很好的微調(diào)效果,否則微調(diào)的效果不如直接在目標(biāo)數(shù)據(jù)集上進(jìn)行重新訓(xùn)練
重用分類器權(quán)重
- 源數(shù)據(jù)集中可能也有目標(biāo)數(shù)據(jù)中的標(biāo)號(hào)
- 可以使用預(yù)訓(xùn)練好的模型分類器中對(duì)應(yīng)標(biāo)號(hào)對(duì)應(yīng)的向量來做初始化
固定一些層

神經(jīng)網(wǎng)絡(luò)通常學(xué)習(xí)有層次的特征表示
- 低層次的特征更加通用(越低層次學(xué)習(xí)的是一些底層的細(xì)節(jié))
- 高層次的特征則更跟數(shù)據(jù)集相關(guān)(越高層次則更加語義化)
- 可以認(rèn)為越到后面和標(biāo)號(hào)的關(guān)聯(lián)度越大,約到前面則越低層,所以底層的特征更加通用,高層的特征和數(shù)據(jù)的關(guān)聯(lián)度更大
可以固定底部一些層的參數(shù),不參與更新(不做優(yōu)化,在微調(diào)的時(shí)候不改變底層類別的權(quán)重,因?yàn)檫@些參數(shù)不再發(fā)生變化,所以模型的復(fù)雜度變低了,可以認(rèn)為是更強(qiáng)的正則的效果)
- 更強(qiáng)的正則
通常來說,假設(shè)數(shù)據(jù)集很小,直接訓(xùn)練很容易過擬合的情況下,可以固定底部的一些參數(shù)不參與更新
總結(jié)
1、微調(diào)通過使用在大數(shù)據(jù)上得到的預(yù)訓(xùn)練好的模型來初始化目標(biāo)數(shù)據(jù)集上的模型權(quán)重來完成提升精度
2、預(yù)訓(xùn)練模型質(zhì)量很重要
3、微調(diào)通常速度更快,精度更高(可以借助在大數(shù)據(jù)集上所獲得的先驗(yàn)知識(shí))
4、建議盡量從微調(diào)開始訓(xùn)練,不要直接從目標(biāo)數(shù)據(jù)集上從零開始進(jìn)行訓(xùn)練
- 未來從原始數(shù)據(jù)集上進(jìn)行訓(xùn)練的會(huì)越來越少,主要是學(xué)術(shù)界或者大公司在很大的數(shù)據(jù)集上進(jìn)行重新訓(xùn)練
- 對(duì)于個(gè)人或者實(shí)際應(yīng)用來講,通常是使用微調(diào)
5、遷移學(xué)習(xí)將從源數(shù)據(jù)集中學(xué)到的知識(shí)“遷移”到目標(biāo)數(shù)據(jù)集,微調(diào)遷移學(xué)習(xí)的常見技巧
6、除輸出層外,目標(biāo)模型從源模型中復(fù)制所有模型設(shè)計(jì)及其參數(shù),并根據(jù)目標(biāo)數(shù)據(jù)集對(duì)這些參數(shù)進(jìn)行微調(diào),但是目標(biāo)模型的輸出層需要從頭開始訓(xùn)練
7、通常微調(diào)參數(shù)使用較小的學(xué)習(xí)率,而從頭開始訓(xùn)練輸出層可以使用更大的學(xué)習(xí)率
Q&A
- 1、微調(diào)這部分是意味著,神經(jīng)網(wǎng)絡(luò)進(jìn)行不同的目標(biāo)檢測(cè),前面層的網(wǎng)絡(luò)進(jìn)行特征提取是通用的嗎??QA P3 - 00:00?
- 2、老師,數(shù)據(jù)不平衡問題對(duì)特征提取器影響大還是分類器影響大??QA P3 - 00:26?
- 3、假設(shè) A 、 B 兩個(gè)數(shù)據(jù)集都很大,A 是 ImageNet,B 是醫(yī)學(xué)圖片。如果我要識(shí)別癌癥,那是用 pretrained A 的現(xiàn)成的模型然后加上 B 進(jìn)行微調(diào)的效果好,還是直接用 B 從頭進(jìn)行訓(xùn)練比較好??QA P3 - 00:54?
- 4、微調(diào)是不是就是遷移學(xué)習(xí)??jī)烧哂胁煌瑔幔?/strong>?QA P3 - 01:44?
- 5、老師,重用標(biāo)號(hào)的話,對(duì)于無關(guān)的標(biāo)號(hào)是直接刪除嗎,原始模型中沒有的標(biāo)號(hào)怎么加進(jìn)去呢??QA P3 - 02:03?
- 6、標(biāo)號(hào)那塊,是不是都是 label 的名稱字符串,對(duì)應(yīng)到數(shù)字上?微調(diào)中有相同標(biāo)號(hào),怎么做原始標(biāo)號(hào)和目標(biāo)標(biāo)號(hào)的對(duì)應(yīng)??QA P3 - 02:28?
- 7、老師,微調(diào)就是 transformer learning 嗎??QA P3 - 02:53?
- 8、ImageNet 是比較簡(jiǎn)單的話,能從哪些地方獲取一些更好的可用于微調(diào)的模型??QA P3 - 03:10?
- 9、如果源數(shù)據(jù)集和目標(biāo)數(shù)據(jù)集差異很大,微調(diào)的效果會(huì)下降嗎,例如 ImageNet 上的模型用到醫(yī)療影像分類??QA P3 - 03:45?
- 10、老師,微調(diào)的話,源數(shù)據(jù)集中的樣本是否必須包含目標(biāo)數(shù)據(jù)集中的類別??QA P3 - 04:06?
- 11、為什么微調(diào)中的歸一化保持一致很重要?是為了保留數(shù)據(jù)分布信息嗎??QA P3 - 04:19?
- 12、normalize 里的那些參數(shù)(2 行 3 列)是從哪里來的??QA P3 - 05:05?
- 13、finetune 需要更改 normalization 的參數(shù)為自己的數(shù)據(jù)集的均值和方差嗎??QA P3 - 05:17?
- 14、auto-gluon 這些自動(dòng)化框架會(huì)加入微調(diào)嗎??QA P3 - 05:36?
- 15、老師,請(qǐng)問比較常用的 CV 預(yù)訓(xùn)練模型有哪些?現(xiàn)在流行的 Transformer CV 預(yù)訓(xùn)練模型有沒有??QA P3 - 05:56?
- 16、關(guān)于“重用分類器權(quán)重”,對(duì)于一個(gè) 80 類的數(shù)據(jù)集,只想選用其中 5 類,加上另外的 4 類,怎么重用這 5 類的權(quán)重呢?有什么快速的方式么?我能想到的就是手動(dòng)提取?QA P3 - 06:18?
- 17、老師好,訓(xùn)練集的精度為什么一開始很高,然后急劇下降再穩(wěn)定呢??QA P3 - 06:50?
- 18、老師,微調(diào)是直接把別人在 ImageNet 上訓(xùn)練好的模型參數(shù)拿來當(dāng)作自己模型的初始化嗎?還是每次自己先用模型在 ImageNet 數(shù)據(jù)集上跑一遍,把參數(shù)記錄下來再跑自己的模型呢??QA P3 - 07:03?
- 19、計(jì)算損失的時(shí)候不都是用 label 對(duì)應(yīng)的標(biāo)號(hào)么,這塊用微調(diào)對(duì)應(yīng)的話感覺不知道怎么操作??QA P3 - 07:30?
- 20、老師,請(qǐng)問微調(diào)在學(xué)習(xí)率上還有什么有用的技巧??QA P3 - 07:59?
- 21、老師,遷移學(xué)習(xí)固定源模型中的層與目標(biāo)模型的對(duì)接的層之間有影響嗎??QA P3 - 08:12?
- 22、老師,在光學(xué)圖像上的訓(xùn)練好的模型,能否遷移到其他圖像的分類上?比如雷達(dá)圖像?還是說這種情況,應(yīng)該在雷達(dá)圖像上訓(xùn)練好的模型遷移到自己的小問題上??QA P3 - 09:04?
- 23、為什么不用微調(diào)一開始測(cè)試精度也很高??QA P3 - 10:30?
- 24、是不是已經(jīng)有過隨機(jī)是選擇層的實(shí)驗(yàn)了呢?如何選擇遷移那些層效果更好呢,就是靠測(cè)試嗎??QA P3 - 10:53?
----end----
其他參考
1、《動(dòng)手學(xué)深度學(xué)習(xí)》,課程安排,https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_6.pdf
2、《動(dòng)手學(xué)深度學(xué)習(xí)》,https://zh-v2.d2l.ai/chapter_computer-vision/fine-tuning.html