自督導式學習 (Self-supervised Learning)_李弘毅_ML2021#8

Z.H. Shen
12 min readOct 2, 2021

--

vedio ;slide;

self-supervised learning 皆以芝麻街人物為命名

ELMO 最早的 supervised learning →再來是 BERT →ERNIE → Big Bird

模型參數比例比較

  • ELMO(94M)
  • BERT(340M)
  • GPT-2(1542M)
  • Megatron(8B)
  • T5(11B, google 做的 model)
  • Turing NRG(17TB)
  • GPT-3(175B)
  • Switch Transfer(1.6T, google 做的 model)

什麼是 self-supervised learning?

supervised learning

有一些文章,和標注這些文章是正面或負面的 label(或是其他類型的 label),將這些文章訓練 neuron model ,輸出 y,這個 y 和 label 的差異越小越好。

而 self-supervised learning 是在沒有 label 的情況下,將資料分為兩部分,一部分當作 label(標注),一部分當作訓練 neuron model 輸入的資料,例如將資料 x,一部分作為 x’,一部分作為 x’’,將 x’ 輸入到模型中,輸出 y,我們要將 y 和 x’’(label 或標注) 越接近越好。

self-supervised learning 可看作是一種 unsupervised learning(沒有 label 的訓練方法),但因 unsupervised learning 是比較大的 family,有很多種不同的方法,為了比較明確的說明,所以稱為 self-supervised learning,這句話最早是 Yann LeCun 說的。

以 BERT 作為說明

BERT 是 transformer encoder (self-attention. residual. normalization…),也就是說輸入一排向量,輸出 sequence 長度=輸入 sequence 長度,通常用於 NLP ,但不只可以用於文字, 聲音. 圖像都可以被當作 sequence。

只是最早用於文字,這裡先用 NLP 來做介紹

step 1 : masking input

隨機決定一些文字要蓋住或是換成其他隨機的文字,蓋住也就是替換為一個非中文字,換成其他隨機文字,就是隨意填一個文字。

再來將蓋住的部份,所輸出的向量做 linear transform (也就是乘以的矩陣),再做 softmax 輸出得到一個分佈(因為有做 Softmax),輸出一個很長的向量,包含所有想要處理的文字,每字都對應到一個分數。

但我們知道蓋住的文字應該是什麼,比如說是“灣”,輸出與這個 ground truth 越接近越好(minimize cross entropy),就像是做分類,只是多少類別與感興趣的文字一樣多。

step2: next sentence prediction

通常做 BERT,同時ˇ也會做 next sentence prediction 從資料庫中拿出兩個句子,中間加入 [SEP] 表示分隔,開頭加入 [CLS] 表示起點,丟入 BERT,只看這兩個句子是否相接,但 RoBERTa 說這方法不太有用,因為看兩個句子是否是接起來的,可能太簡單了,但有另種方法和 next sentence prediction 很像,稱 SOP,文獻上說比較好用,方法是將一個句子拆兩個個部分,順序可能是顛倒的,丟入 BERT 問句子是否先後順序是怎麼樣,會將 SOP 用於 ALBERT。

這樣看來 BERT 只能做兩件事,一是做填空題,二是看句子是否接在一起,但二看起來不太有用,所以實際上只做填空題?這是不對的

BERT 會被實際運用會於無關填空題的地方,例如 downstream task,所謂 downstream task 就是我們真正實際在意的任務,也就是說,做完 BERT 後,在拿來去做各式各樣的事情,所以 BERT 就像胚胎幹細胞,之後可以分化為各式各樣的細胞,此稱為 fine-tune(將 BERT 做微調),而產生 BERT 的過程稱為 Pre-train。

BERT 的能力

因通常會將 BERT 做多種任務,其中的標竿任務集為 GLUE (General language understanding evaluation),要評估做的 BERT 好不好,就會將它分別微調到九個任務上,所以會得到九個模型,再算平均的準確率,表示 self-supervised learning 的好壞

GLUE 與人類判斷做比較,黑色線為人類,藍色虛線為 GLUE 平均,平均比較好可能只是代表這個資料集被完壞了,所以後來有其他的任務集被提出。

BERT 使用的 4 個 case 的例子

case1 sentiment analysis:

輸入一個 sequence,輸出一個類別,例如判斷一個句子是正面或負面。首先將一個 sequence 頭加入 [CLS],丟入 BERT 中,會得到 n+1 個輸出,現在只看 [CLS] 的輸出,做 linear. softmax,得到一個分類,linear 是隨機初始化的,BERT 是 init by pre-train(要得到 BERT model 之前,需要有大量標注過的資料,去訓練才能得到),會使用 init by pre-train 是因為比隨機初始化好,最後 BERT 和 Linear 都要做 gradient descent 來得到結果結果。

我們會說一個完成的 sentiment analysis model 就是 linear transformer+ BERT 的結果。

大量沒標註的資料+小量有標註的資料 = semi-supervised

比較 BERT 有去做 pre-train 和隨機初始化的差異

case 2 詞性標注:

輸入一個 sequence,輸入相同長度的 sequence。

[CLS]+sequence 輸入 BERT ,每個 token (在中文中,就是每個字)輸入到 BERT ,輸出向量,做 linear transform(乘上一個矩陣),再做 softmax,得到每個字屬於哪個詞性。此 BERT 不是隨機初始化,在 pre-train 中已經做過訓練。

case3: natural language inference (NLI)

輸入兩個 sequence,輸出一個類別。

例如:給機器前提(premise)和架設(hypothesis)的兩個句子,推出這兩個句子之間的關係。premise 是 A person on a horse jumps over a broken down airplane,hypothesis 是 A person is at a diner,推測這兩個句子是

  • contradiction:衝突
  • entailment:有因果關係
  • neutral:不衝突也沒有因果關係

> reference: https://www.itread01.com/content/1545195728.html

結果是 contradiction 。

或是在評論系統中,判斷留言和評價是的之間的關係。

BERT 如何解 case 3 呢?

將兩個句子丟到 BERT,兩個句子中間用 [SEP] 連起來,最前面放 [CLS] 的這個符號, 將一整串丟到 BERT,BERT 輸出一整串東西,只取 [CLS] 的輸出,做 linear transform (矩陣相乘),再做 softmax 的到一個分類 ,在 NLI 中就是兩個句子是否矛盾的三種情況,我們一樣需要一些標注資料才能訓練此模型,BERT 是經過 pre-train 的,而非隨機初始化的。

case 4:Extraction-base Question Answering (QA) 也就是問答系統

給機器一篇文章,問限制性的問題(extraction-base question 就是答案一定在文章中),機器給答案,輸入有 D. Q 的 Sequence,如果是中文的話 D 和 Q 皆表示中文的字,將 D 和 Q 丟到 QA model (經過 BERT pre-train 過的)中得到 s 和 e 的正整數的答案,s 和 e 表示答案在文章中詞彙第 s 個到第 e 個字。

講個更具體一點,將問題和文章用 [SEP] 相連,前放 [CLS],放到一個 pre-train 過的 BERT,會得到一連串的向量,拿 random initialized 的橙色向量(表示 answer 的起點)去與 document 經過 BERT 所得到的向量去做 inner product,再做 softmax,得到 n 個數值 (與 document 數量相同),相同的也拿藍色向量(是 random initialized,表示 answer 的終點)做相同的事情。

BERT 輸入長度理論沒有限制,但實際上運算量很大,例如 512 個字的文章,其中要做 inner product,就是 512*512。

Training BERT is challenging!!!

google 最初處理 BERT 的 training data 就是哈利波特全集的 3000 倍,實驗室試著做相同的事情,使用 TPU 要做八天,使用 Colab 至少要跑 200 天。

有沒有辦法加快 BERT 的訓練過程? 先自己訓練一個 BERT。

上面介紹的部分皆沒有包含 sequence2sequence 的 model,如果要做 sequence2sequence 的 model 的 pre-train,先將 encoder 的輸入 corrupted (弄壞),期望 decoder 的輸出,與 encoder 的輸入的 corrupted 之前的結果相同。

如何做 Corrupted 呢?

MASS 最先提出的方法是用 mask,將 encorder 的輸入蓋掉,之後還有刪除. 顛倒句子. 旋轉. mask+delete 的方法,後來有個方法稱為 BART,將上述所有方法都弄過一遍,認為這樣效果最好。

T5 是 transfer text-to-text transformer 的縮寫,因為有 5 個T所以稱為 T5,將所有上述所有的方法都做過一遍,T5 是訓練在 C4 上的 dataset,C4 有 7T,C4 去做前處理要做 300 天以上?!

為什麼 BERT 有用呢?

BERT 如何運作的?

因一字多義,同為“果“,向量卻差很遠。

評斷兩個果的相異程度

一個字個意思取決於上下文,BERT = word embedding 的 CBOW 的 deep learning version,此時 BERT 又稱為 contextualized word embedding。

將 BERT 用在 DNA

BERT 與 rand 結果的比較。

多語言的 BERT(Multi-lingual BERT)

不同語言的語言,詞彙越相近則 MRR 越高。

範例:

說明一下 GPT 模型,GPT 要做的是 predict next token,下面範例是用一個句子做訓練,實際上會拿很多句子去做訓練。

GPT 最有名的例子是利用 GPT 寫了一個關於獨角獸的新聞

GPT 沒有做 gradient descent

GPT v3 做 42 任務結果

--

--