日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Chapter7-2_BERT and its family - Introduction and Fine-tune

發(fā)布時間:2024/7/5 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chapter7-2_BERT and its family - Introduction and Fine-tune 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 1 What is pre-train model
  • 2 How to fine-tune
    • 2.1 Input
    • 2.2 Output
    • 2.3 Fine-tune
    • 2.4 Weighted Features
  • 3 Why fine-tune

本文為李弘毅老師【BERT and its family - Introduction and Fine-tune】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。

下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權(quán),必定刪除。

文章索引:

上篇 - 7-1 Overview of NLP Tasks

下篇 - 7-3_BERT and its family - ELMo, BERT, GPT, XLNet, MASS, BART, UniLM, ELECTRA, and more

總目錄

1 What is pre-train model

我們這里所說的pre-train model就是輸入一串tokens,能夠輸出一串vectors,且每個vector可以表示對應(yīng)的token的語義的模型,這些vectors也被稱作為embeddings。

以前常用的模型有耳熟能詳?shù)膚ord2vec,Glove等等。但是英文的單詞太多了,這個時候來一個新單詞的話整個embedding的模型就要重新train了,為了解決整個問題,就有了fasttext。fasttext是針對英文的,針對中文的則是輸入圖片,讓模型通過圖片中文字的偏旁部首去預(yù)測出訓(xùn)練時沒見過的文字的embedding。這種訓(xùn)練embedding的方式,根據(jù)語言的不同會有不同的方法。

不過,這里還有一個問題,就是按照上述的方法,如果輸入的token是一樣的,那么每次出來的vector也不然hi一樣的。但實際情況下并非如此。比如下圖中"養(yǎng)只狗"的“狗”和“單身狗”的“狗”顯然是不同的意思。

于是,我們就希望模型可以在輸出某個token的embedding的時候,去考慮上下文的信息,這個叫做contextualized word embedding 。這樣的模型基本就是基于LSTM或者self-attention layer去搭建的一個seq2seq的模型(如Bert,Megatron,Turing NLG等),可以理解為之前的文章中講過的encoder,至于訓(xùn)練的方法,這里暫時先不講。也有用tree-based model去做的,但是因為效果沒有那么強,所以不太流行。

為了讓模型的效果變好,所使用的模型也就越來越大,參數(shù)已經(jīng)大到只有那些大公司才可以使用了。

當(dāng)然,窮人也有窮人的辦法,我們可以再不過多地損失模型精度的情況下,把模型變小一點,這里有很多模型壓縮方面的技術(shù),這里不細講了。

2 How to fine-tune

那么,我們?nèi)绾伟堰@個pre-train model應(yīng)用到各式各樣的NLP任務(wù)當(dāng)中去呢?上篇中我們已經(jīng)討論過了,NLP的任務(wù)可以按輸入和輸出分別分類,如下圖所示。那么接下來就來講一下,如何去應(yīng)對每一類。

2.1 Input

(1) One sentence

對于輸入只有一個句子的,那就直接輸入就可以了,因為pre-train model也是一個句子的輸入。

(2)multiple sentences
對于輸入有多個句子的,我們需要有一個叫做"[SEP]"的分隔符來把兩個句子拼成一個句子,然后再輸入就可以了。

2.2 Output

(1)One class
輸出只有一個分類的時候,可以有兩種做法,一種做法是,在輸入的開頭加一個叫做"[CLS]“的toekn,然后在這個”[CLS]“對應(yīng)的輸出的embedding后面加一個head,也就是比較淺的神經(jīng)網(wǎng)絡(luò),可以是一層全連接,然后輸出想要的類別數(shù)量;另一個做法是,把所有token的輸入都輸入到一個head當(dāng)中去,然后輸出想要的類別數(shù)量。

(2)Class for each token
當(dāng)每個token都要做分類時,那在模型的后面加一個seq2seq的head的就可以了。

(2)Copy from input
當(dāng)我們的任務(wù)是Extraction-based QA時,該怎么辦呢?因為輸入有question和document兩個,所以我們需要加入一個”[SEP]"分隔符,然后輸出是找出document中的哪個token為答案的start,哪個token為答案的end。這個時候,就要兩個額外的向量去分別和document中每個token的輸出做dot product,然后和start向量最相關(guān)的token就是start token,和end向量最相關(guān)的token就是end token。

(4)General Sequence
當(dāng)我們希望模型的輸出也是一個sequence的時候,我們可以把pre-train model的輸出作為輸入,在后面接一個decoder,讓這個decoder去完成輸出sequence的步驟。這樣的一個壞處就是decoder會是一個比較大的模型,而我們是希望沒有pre-train過的參數(shù)是越少越好的。

另一種做法是把pre-train的模型當(dāng)作decoder去做。這就需要我們在input的后面加一個類似于"[SEP]“的特殊符號,然后把這個符號的輸出丟到一個我們自定義的head當(dāng)中去,輸出一個token,然后把這個token當(dāng)作輸入,反復(fù)下去,直到輸出”"

2.3 Fine-tune

在訓(xùn)練的時候,我們可以把pre-trained model的weights都固定住,然后只去訓(xùn)練最后自定義加上去的head。

我們也可以直接訓(xùn)練整個模型,雖然整個模型很大,但大部分的weights是預(yù)訓(xùn)練過的,所以訓(xùn)練起來不會壞掉。實際經(jīng)驗也是這種方法要優(yōu)于上面的方法。

如果我們要用第二種方法的話,不同的task我們就需要train一個不同的模型,而這樣的模型往往非常大,這就很浪費資源(計算資源,存儲資源),所以就有了Adaptor。Adaptor是我們在pretrained-model里去加一些layer,然后訓(xùn)練的時候就訓(xùn)練這些layer和最后的head。這樣pretrained model還是不動的。

比如下圖就是一種插入Adaptor的方式。實驗證明,Adaptor可以讓模型調(diào)很少的參數(shù),卻達到fine-tune整個模型的效果。當(dāng)然,這個Adaptor如何加,還是一個值得深究的地方。

2.4 Weighted Features

由于pre-trained model往往很大,不同層得到的feature代表的意義也不同,所以也可以把各層的feature抽出來加權(quán)后輸入head中去,加權(quán)的weights可以是模型自己去學(xué)的。

3 Why fine-tune

那我們?yōu)槭裁匆胒ine-tune這樣的方法呢?一方面是因為trainning loss可以更快收斂,下圖是對比了隨機初始化訓(xùn)練和預(yù)訓(xùn)練后訓(xùn)練的training loss隨著epoch的變化過程,虛線為隨機初始化,實線為預(yù)訓(xùn)練的。很明顯,預(yù)訓(xùn)練的模型效果更好。

另一方面是因為fine-tune得到的模型有更好的泛化能力。下圖就是講模型變成二維下可視化的結(jié)果。可見右邊預(yù)訓(xùn)練的模型找到的極小值點的區(qū)域更加平緩,也就意味著泛化能力更好。

總結(jié)

以上是生活随笔為你收集整理的Chapter7-2_BERT and its family - Introduction and Fine-tune的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。