Pin-Jiun / Machine-Learing-NTU

0 stars 0 forks source link

9.1-Self-Supervised Learning-BERT #58

Open Pin-Jiun opened 1 year ago

Pin-Jiun commented 1 year ago

self-supervised learning的模型都是以芝麻街的人物命名

self-supervised learning裡面有一個模型叫做Embeddings from Language Modeling 它是最早的self-supervised learning的model, 縮寫就叫做ELMO 後來又有另外一個動物叫做Bert, 大家最耳熟能詳的Self-Supervised Model

Bert

Bert它是Bidirectional Encoder Representation from Transformers的縮寫 所以我們現在self-supervised learning的model裡面都有一堆芝麻街的人物

Bert是一個非常巨大的模型, 它有340個million的參數 作業四的模型它也是一個Transformer, 它只有0.1個million而已 image

ELMO有94個million Bert大了一點 340個million GPT-2它有一千五百個million的參數 Megatron有8個billion的參數, GPT-2的8倍左右 T5(有一款福特汽車叫T5, 雖然T5是Google做的) , T5有11個billion image

Turing NLG有17個billion GPT-3有Turing NLG的10倍大

現在看到最大的模型是Switch Transformer 它比GTP-3又再大了10倍


supervised Learning and Self-supervised Learning

supervised Learning = 在有label的情況下做learning(HW01~05) unsupervised Learning = 在沒有label的情況下做learning

Self-supervised Learning = 在沒有Label的情況下自己做supervised learning 因為Self-supervised Learning沒有用到label, 所以也是unsupervised Learning的一種

Self-supervised Learning將沒有label的x分成兩部分, x'和 x'' image

將x'輸入到模型裡, 輸出y train模型使y和x''(label = 學習的目標) 越接近越好

直接拿Bert作為 Self-supervised Learning舉例

Bert會做兩件事情: mask和Next Sentence Prediction

mask

有兩種蓋住(mask)的方法 第一種是使用特殊的token代表mask 第二種是使用隨機的字蓋住

image

Bert先決定那些中文字會被蓋起來, 再決定使用上述其中一種mask 將seq經過Transformer Encode(BERT)後 其中蓋住輸出的向量經過BERT 後再經過線性轉換(乘上一個矩陣) 最後softmax會得到一個distribution輸出

你要如何訓練Bert?

雖然Bert本身是不知道被蓋住的token是什麼 但我們其實知道原本被mask住的token(灣) 我們要訓練出被蓋住的token經過softmax後可以正確分類出正確答案(灣)

image

而其中Transformer Encode和linear是要一起訓練的


Next Sentence Prediction

CLS : sequence最前面的一個特殊符號token SEP : 句子和句子之間的分隔符號

image

將整個sequence經過Bert(Transformer Encode)後會輸出另一段sequence

接下來只看CLS, CLS經過線性轉換後要進行二元分類 判斷句子1和句子2是否相接, 相接->Yes

但Next Sentence Prediction 事實上並不是對訓練很有用 因為Next Sentence Prediction 這個任務可能過於簡單, 可能學不到太多東西

在文獻上SOP判斷句子的順序可能比較有用(使用再ALBERT)


Bert除了填空之外還能做額外衍伸的事情 = Downstream

image

Bert就有點像是胚胎的幹細胞, 具有無限的潛能可以分化成不能的細胞

Pre-train = 產生Bert的過程 (HW07要使用)

Fine-tune = Bert進化成不同task的model

要測量Bert pretrain的狀況通常會將bert分化成不同的model 之後使用不同的task去衡量這個bert, 最有名的就是GLUE任務集

image

GLUE任務集會測量9個任務, 測量其平均值得到Self-supervised Learning (pretrain) Bert的狀況 image


Bert的使用

image

Bert會使用已經學好填空題的transformer encoder的參數而不是隨機初始化-> Pretrain(Self-Supervised Learning) image

下游在分化成各種model, 但此時需要少量的label資料 所以事實上算是semi-Supervised Learning

image

image

image

CASE4-HW07 image

橘色和sequence相乘->取最大的得到開頭 image

藍色和sequence相乘->取最大的得到結尾 image

但通常不會把整個文章丟進去(sequence太長, 運算量會太大) 作業助教會把文章裁成一小部分一小部分


image

但事實上從填空就開始訓練是非常花費時間的...

image

雖然GOOGLE有公開了Bert的參數, 但學習的過程也是非常重要的


Bert也是可以pretrain seq2seq的訓練

image

給encoder的輸入, 故意給他一點擾動(弄壞) 而decoder輸出的句子, 要和弄壞前越接近越好

弄壞的方法有很多 image

像是mask, 刪除, 弄亂, 旋轉等等 (BART就是全用)

GOOGLE的T5 papper就有做過研究哪個最好

image