|
前言 筆者剛剛?cè)腴TNLP的時(shí)候,其實(shí)還和朋友們調(diào)侃過(guò)“attention is all you need'這么絕對(duì)的標(biāo)題也敢發(fā)出來(lái)?當(dāng)然似乎后來(lái)還有一個(gè)paper是“cnn is all you need”?但2021年,我再看深度學(xué)習(xí)領(lǐng)域,無(wú)論是自然語(yǔ)言處理、音頻信號(hào)處理、圖像處理、推薦系統(tǒng),似乎都看到attention混得風(fēng)生水起,只不過(guò)更多時(shí)候看到的是它的另一個(gè)代號(hào):Transformer。 我想大部分深度學(xué)習(xí)的同學(xué)除了在各大paper里看到Transformer,平常與Transformer打交道最多的時(shí)候,大概率都是在用一個(gè)叫做:HuggingFace/Transformers的Github代碼庫(kù)。用過(guò)的同志都說(shuō):真香。 那么我們用這個(gè)Transformers庫(kù)里的模型都是在干什么?歡迎大家評(píng)論、私聊筆者來(lái)探討你的用途。 我想大部分同學(xué)都是在“微調(diào)”(fine-tune)基于Transformers的“預(yù)訓(xùn)練“模型(比如BERT、Roberta),期望在自己的任務(wù)上(比如閱讀理解、實(shí)體識(shí)別、情感分類)取得新的SOTA吧?當(dāng)然也有少數(shù)土豪朋友們在不斷訓(xùn)練出新的“預(yù)訓(xùn)練“模型,幫助蒼生,提高SOTA。 那么如何科學(xué)的“微調(diào)”“預(yù)訓(xùn)練模型”自然而然便成為了一個(gè)重要的研究課題/方向/必備知識(shí)啦。 什么是“微調(diào)”Fine-tune? 為了講清楚今天的話題,首先得和讀者朋友們對(duì)齊一下背景知識(shí),即什么是“微調(diào)”?如果讀者朋友看章節(jié)題目就明白了,可以直接跳到下一章節(jié)繼續(xù)閱讀。 圖1 引用動(dòng)手學(xué)深度學(xué)習(xí)中的Fine-tune示意圖 “微調(diào)”這個(gè)詞并不是NLP的專用名詞,早在CV起飛的年代,“微調(diào)”就已經(jīng)被廣泛使用了,當(dāng)時(shí)將深度學(xué)習(xí)模型在ImageNet上預(yù)訓(xùn)練,然后在自己的任務(wù)上“微調(diào)”模型的部分參數(shù),便是當(dāng)年CV模型訓(xùn)練的常規(guī)方法。 “微調(diào)”/fine-tune通常指:一種深度學(xué)習(xí)模型的訓(xùn)練方式/步驟。
A、如圖中所示,不相同,意味著Target model的任務(wù)類型/目標(biāo)類型與Source model不一致; B、圖中未展示,相同,意味著Target model的任務(wù)類型/目標(biāo)類型與Source model一致; 所以“微調(diào)”也像字面意思一樣,對(duì)模型參數(shù)“微微”調(diào)整。 如果是隨機(jī)初始化并從頭開(kāi)始訓(xùn)練網(wǎng)絡(luò)則!=“微調(diào)”。
上面的“微調(diào)”示意圖也告訴我們,任何模型結(jié)構(gòu)都可以進(jìn)行微調(diào),包括不限于:Transformer、CNN、LSTM等。 預(yù)訓(xùn)練模型和常見(jiàn)NLP訓(xùn)練任務(wù) 如圖1所示,只要Target model中的全部/部分參數(shù)在見(jiàn)到Target data之前被訓(xùn)練過(guò),其實(shí)都可以叫做“預(yù)訓(xùn)練”。 預(yù)訓(xùn)練方法包括但不限于:語(yǔ)言模型無(wú)監(jiān)督預(yù)訓(xùn)練(BERT),目標(biāo)類似的其他數(shù)據(jù)集預(yù)訓(xùn)練,目標(biāo)不類似但相關(guān)的其他數(shù)據(jù)集預(yù)訓(xùn)練等。 NLP里常見(jiàn)的訓(xùn)練目標(biāo):句子分類、句子相似判斷、實(shí)體識(shí)別、閱讀理解(start、end token預(yù)測(cè))、語(yǔ)言模型等。 由于訓(xùn)練目標(biāo)不同,往往Output Layer參數(shù)的維度也不同。
圖2 幾個(gè)常見(jiàn)的NLP訓(xùn)練目標(biāo),不同任務(wù)往往有著不同的output layer 學(xué)習(xí)了什么是“微調(diào)”,什么是“預(yù)訓(xùn)練”之后,我們來(lái)看看近些年“微調(diào)”預(yù)訓(xùn)練的方法都有哪些。 “微調(diào)”預(yù)訓(xùn)練模型 我們知道微調(diào)的時(shí)候存在兩種情況:預(yù)訓(xùn)練任務(wù)和目標(biāo)任務(wù)相同、不相同。 我們也知道常見(jiàn)的預(yù)訓(xùn)練可以有這么幾種情況:
于是我們得到了這樣一張表格:每一列我們都可以選1個(gè)或者多個(gè)任務(wù)進(jìn)行預(yù)訓(xùn)練,看著這個(gè)表格應(yīng)該可以想到各種花式預(yù)訓(xùn)練排列組合啦吧哈哈哈。
這么多花式組合就不一一介紹了,下面終點(diǎn)介紹幾種最常用的組合吧:
圖3 最常用的Fine-tune:1B(BERT)+ 目標(biāo)任務(wù)(例如句子情感分類) 1B的含義:1無(wú)監(jiān)督+大規(guī)模數(shù)據(jù)預(yù)訓(xùn)練,B目標(biāo)任務(wù)和預(yù)訓(xùn)練任務(wù)不同。 圖3展示了最常用的“微調(diào)”預(yù)訓(xùn)練模型的方法,通俗的講就是:我們拿一個(gè)在大規(guī)模數(shù)據(jù)上訓(xùn)練好的BERT過(guò)來(lái),直接在BERt上添加一個(gè)Task-specific的Head/網(wǎng)絡(luò)層,然后在自己的數(shù)據(jù)集上稍加訓(xùn)練一下,得到新模型,跑出新SOTA。
圖4 Adaptive Fine-tune:1B+2B+目標(biāo)任務(wù) 圖4是圖3的一個(gè)加強(qiáng)版本,通俗的講:假設(shè)我們要對(duì)Wikipedia的問(wèn)題做閱讀理解,由于大部分大規(guī)模預(yù)訓(xùn)練模型并不只用wikipedia作為訓(xùn)練數(shù)據(jù),所以數(shù)據(jù)分布與wikipedia存在一定的差異,因此我們先在wikipedia數(shù)據(jù)上跑一下語(yǔ)言模型預(yù)訓(xùn)練,再對(duì)wikipedia數(shù)據(jù)上的問(wèn)答數(shù)據(jù)進(jìn)行訓(xùn)練。就像一個(gè)全能的新員工,咱們先帶著參觀一下工位、水吧、食堂,再開(kāi)始訓(xùn)練干活唄。
圖5: Behavior Fine-tune:1B+3A+目標(biāo)任務(wù) 圖5和圖4有一定的區(qū)別,還是以BERT為例,先將BERT+output layer在相關(guān)任務(wù)上預(yù)訓(xùn)練一下,再上在目標(biāo)任務(wù)上進(jìn)行訓(xùn)練。這種情況常常存在于:目標(biāo)任務(wù)的數(shù)據(jù)十分少,并且我們隨機(jī)初始化了一個(gè)output layer。 那么這個(gè)output layer十分不容易被訓(xùn)好,并且參數(shù)量大大的BERT也十分容易過(guò)擬合小數(shù)據(jù)集,因此效果很糟糕,那么我們先找點(diǎn)相關(guān)/相似的任務(wù),把BERT和output layer朝我們想要的方向調(diào)整調(diào)整,再對(duì)目標(biāo)任務(wù)進(jìn)行訓(xùn)練。
圖6: prefix fine-tune:1A+目標(biāo)任務(wù) 圖6是一種非常有趣的預(yù)訓(xùn)練+finetune的方式。也是2020/2021開(kāi)始熱起來(lái)的一種。 意思是:我們給預(yù)訓(xùn)練模型一點(diǎn)prefix/prompt(提示),讓模型通過(guò)這個(gè)prefix來(lái)區(qū)分不同的任務(wù),同時(shí)我們又將目標(biāo)任務(wù)改造成預(yù)訓(xùn)練模型一樣的目標(biāo)(比如將分類問(wèn)題轉(zhuǎn)化為seq2seq問(wèn)題)。
舉個(gè)例子:
圖7 目標(biāo)任務(wù)改造成預(yù)訓(xùn)練任務(wù) 如圖7所示,我們的目標(biāo)任務(wù)是:通過(guò)閱讀Passage,然后對(duì)Question做二分類判斷(yes/no);那么我們可以將這個(gè)任務(wù)改造成一個(gè)seq2seq的MLM任務(wù)。 passage(綠色)+ prefix/prompt(紅色)+Qeustion(藍(lán)色)+MASKED(黃色)。MASKED詞庫(kù)包含yes/no。 因此自然而然,原先的分類任務(wù)就變成了一個(gè)Mask Language Model啦。so far so cool! |
|
|