ChatGPT驚艷眾人的背後 : NLP運用深度學習的幾個重要發展

DH Chen
Taiwan AI Academy
Published in
17 min readJan 7, 2023

前言

數年前,AI學者提出AI民主化的概念,希望AI可以成為人人都能使用的工具,幫助人類社會有更好的未來。幾年來AI已經應用在很多領域,有著不錯的成果。而去年(2022年)AI的發展,從文生圖模型 Midjourney 到 聊天機器人 ChatGPT,讓一般人更能直接感受到AI的威力。本篇文章將回顧,ChatGPT 所屬的自然語言處理(NLP)這個領域,運用深度學習(Deep Learning)幾個重要的發展,讓讀者能理解 ChatGPT 是基於哪些技術,今天才能展現如此強大的對話能力。

目錄

0. Basics : 深度學習與自然語言處理
1. Attention : 更了解文章的脈絡
2. BERT : 用預訓練來打好基礎
3. GPT-3 : 只有預訓練就無敵了
4. ChatGPT : 學習還是需要人類來監督
5. Summary : 總結

0. Basics : 深度學習 與 自然語言處理

讓我們先複習一下深度學習的核心 : 神經網路。

神經網路的設計理念之一

一個普適的神經網路架構,是讓電腦自己能基於數據然後找出網路的最佳參數,而參數也代表了特定的規則。
• AI is data-driven : general network => machine => parameters = rules
• Traditional rule-based : domain => human => rules

普適的神經網路架構,包含了輸入輸出的數據、神經元、以及內部的參數
普適的神經網路架構

神經網路的設計理念之二

人類發明一些特殊的網路架構,加入普適的網路架構中,讓電腦能更快找出更好的參數 :
• general + special network => machine => parameters = better rules
• 特殊的網路架構之一 : 卷積層 => 萃取圖片的特徵
• 特殊的網路架構之二 : 嵌入層 => 萃取單字的意義
• 特殊的網路架構之三 : 注意力機制 => 萃取文句的脈絡 (後面會提到)

在普適的網路架構前面,加入特殊的網路架構
加入特殊的網路架構

自然語言處理(NLP)之應用

NLP主要處理在人類的語言文字,主要下面四種應用的樣態:

1. 多對一 : 輸入一串文字,輸出一個字
• 應用 : 情意分析, 文章分類, 垃圾郵件

2. 多對多 (對稱) : 輸入一串文字,輸入每一個字的後,馬上輸出另一個文字,結果也是輸出一串文字
• 應用 : slot filling (語意角色標註), POS tagging (詞性標註)

3. 多對多 (先後) : 先輸入一整串的文字後,才輸出另一整串的文字
• 應用 : 文章摘要, 電腦翻譯, 問答系統, 對話機器人, 文章完成;語音辨識, 語音合成, 影片字幕

4. 一對多 : 輸入一個字,輸出一串文字
• 應用 : 文章生成

多對多(對稱)與多對多(先後)的差異
Source: 政大蔡炎龍老師 RNN教材

1. Attention : 更了解文章的脈絡

RNN (循環神經網路)

RNN作為神經網路的一支,因為有近似記憶的機制,所以大量運用在跟時間有關的應用上。下圖綠色的部分是單純的神經網路,而紅色的部分是RNN外加的連結 : 把上一時刻的輸出 (y1,y2),當成下一時刻的輸入 (h1, h2),也就是模型能保住之前的結果。

RNN的架構

文字的輸入與輸出是依時間一個一個前後所產生,也因此NLP早期在利用深度學習時多採用RNN的架構。

RNN的問題

以一般的神經網路訓練來說,因為RNN要依時間一個一個輸入,難以像其他的神經網路(譬如CNN)一樣可以平行化運算,所以訓練的時間無法縮短。
而對於NLP的應用來說有另外的問題 : 當輸入句子字太多時,前面的文字會因為RNN的機制被模型所淡忘,進一步造成模型無法透過前後文來判斷文字的意涵,前後文就是所謂文章的脈絡 (context)。脈絡是人類在理解語言與文字時的重要機制。

Context : 文章的脈絡、前後文

人類對於語言的理解,除了透過每個單字的意義外,還會根據前後文
來做判斷,就像下面兩句中的蘋果是不同的意涵 :
“Apple smartphone shipments is 80.1 million in Q4 2021.”
• 因為看到了smartphone, 所以你會知道Apple是指蘋果公司

“Tom gave Susan 3 apples to eat.”
• 因為看到了eat, 所以你會知道apples是指水果裡的蘋果

Google在2017提出了 “Attention Is All You Need” 的論文,提出了Attention的架構,解決了前面所提RNN的問題。

Attention : 注意力機制

前面提到 “特殊的網路架構”,注意力機制就是其中一種,設計來抓取文句的脈絡,以下面的圖示來說,就是中間藍色的部分。而 a1,a2,a3…代表輸入的一串文字,b1,b2,b3…代表輸出的一串文字並且是有考慮到前後文。

注意力機制的簡化架構
Self-Attention

Word Embedding : 詞嵌入

上述的 a1,a2,a3… 或是 b1,b2,b3… 在實務上會把輸入的文字 (單字或是詞) 轉換成帶有意義的編碼,也就是一串數字,這樣的動作叫做詞嵌入 (Word Embedding, WE)。
詞嵌入也可以透過神經網路,也就是深度學習來完成。
一個好的詞嵌入可以讓單字間有數學運算的關係 :
• WE of “國王” + WE of “女性” = WE of “皇后”
• WE of “octopus” + WE of “plural” = WE of “octopi”

Attention : 注意力機制 (例一)

例句 : “Apple smartphone shipments is 80.1 million in Q4 2021.”

假如 a1,a2,a3…代表這一串文字的詞嵌入,那 b1 就是“Apple”這個字經過Attention轉換後的詞嵌入。注意力機制會去前後找跟“Apple”這個字最有關聯的字,然後結合在一起,以這個句子來說就是 “smartphone”
• a1=WE of “apple”
• b1 =WE of “apple” + WE of “smartphone”

你可以視 b1 是有代表公司意涵的apple。所以後面神經網路就用這樣的意涵來去處理apple這個字 => 有考慮到前後文。
另外注意力機制還有一種設計(qkv),可以賦予這個apple主詞的意涵。

Attention : 注意力機制 (例二)

例句 : “Tom gave Susan 3 apples to eat.”

假如 a1,a2,a3,a4,a5…代表這一串文字的詞嵌入,那 b5 就是“apples”這個字經過Attention轉換後的詞嵌入。注意力機制會去前後找跟“apples”這個字最有關聯的字,然後結合在一起,以這個句子來說就是 “eat”
• a5=WE of “apple”
• b5 =WE of “apple” + WE of “eat”

你可以視b5是有代表水果意涵的apple。所以後面神經網路就用這樣的意涵來去處理apple這個字 => 有考慮到前後文
注意力機制還有一種設計(qkv),可以賦予這個apple受詞的意涵。

Attention and Transformer

前面提到 Google 2017 的論文,提出了Attention的架構。
其實這篇論文另一個重點是提出了 Transformer 的模型,Attention 只是其中一部分的架構。本文就不詳述 Transformer,下圖為正式論文裡的架構 :

The Transformer — model architecture

因為 Transformer 太重要,之後很多研究都是基於 Transformer 做演進的。我們後面會提到的BERT與GPT,它們的T都是Transformer的縮寫。

Introducing GPT-4

2. BERT : 用預訓練來打好基礎

BERT的全名是 Bidirectional Encoder Representations from Transformers
,是基於 Transformer 發展而成的,同樣是由 Google 於 2018 提出。BERT有兩組重要的技巧 :
• 預訓練 (Pre-train) + 微調 (Fine-tune)
• 自監督式學習 (Self-Supervised Learning, SSL) + 語言模型 (Language Model, LM)

預訓練 與 微調

網路上有很多現成與免費的文章,像是新聞、書籍、評論、知識庫等等,這些現成的資料,因為有一定品質,所以是否可以先拿來訓練一版模型 (預訓練 : Pre-train),然後再把我們想要做的工作,基於這版模型繼續訓練 (微調 : Fine-tune)
• 例子 : 我們想要訓練一個模型,對於臉書公開文章的下方留言進行分類,分成三類 : 支持這篇文章論點、反對這篇文章論點、或是表達其他意見。以機器學習的流程來說,我們要收集很多的留言 (資料收集),然後要請人來確認每一筆的留言是屬於哪一類 (資料標註),後者是需要花人力與時間。 假如我們能把許多沒有標註的留言進行某種程度的訓練,讓模型能先熟悉一般留言的語法,這對我們後來拿到有標註的資料再去訓練,會有一定的幫助。

監督式學習 (Supervised Learning)

前面提到了機器學習的重要步驟是收集資料並且標註資料,也就是你要告訴機器,利用資料對比上標註的結果 (也可視為答案) 來進行學習,這就是機器學習裡面重要的分支 - 監督式學習的精髓。
• 以上面舉的文章的例子 : 資料=留言、答案=類別 (支持、反對或其他)
• 以車牌辨識為例 : 資料=車牌的影像、答案=上面的數字
• 以商品推薦為例 : 資料=顧客的基本資料 (性別/年齡/職業…)、答案=商品的類別

預訓練 與 自監督式學習 (Self-Supervised Learning)

對於預訓練來說,你拿到很多現成的文章,但是你沒有標註或是答案,該怎麼辦 ? 該怎麼樣來訓練一個模型來完成甚麼樣的工作 ?
對於跟時間有關的資料,像是文句或是影片來說,有一個隱含的規則就是
“前面的數據可以推到出後面的數據”,也就是後面的數據可以說是前面數據的答案 :
• 原文 : “Tom gave Susan 3 apples to eat”
• 可以看成 : 資料=“Tom gave Susan 3 apples to”、答案=“eat”
• 我們就可以訓練模型來從前面的文字 ”Tom gave Susan 3 apples to”
,來預測出下一個文字 ”eat”
這種不需要特別標註或是答案的學習,就叫做自監督式學習。預訓練就可以用這種方式來學習。

Pre-train of BERT and GPT

因為不需要標註或答案,所以我們拿到了現有的文章,就可以來進行自監督式學習,也就是預訓練。在文字上的自監督式學習有以下兩種常見的方法 :

• 後面會提到的GPT,所使用就是前面所提的,輸入一串文字,要模型預測出下一個文字 => 像是一個文字接龍的遊戲
• 而本段介紹的 BERT,所使用的方式是,把現有的文句裡面,部分的文字挖掉,要模型來預測出這些空的文字是甚麼 => 像是英語測驗裡面的克漏字 (Please fill the blanks of the sentence : “Tom __ Susan 3 apples to __”)

這樣預訓練完的模型,就對文字與語言有初步的知識,可以做為之後進一步訓練的基礎。

語言模型 (Language Model)

文字上的自監督式學習上,都是要去預測哪一個文字會出現。在做法上是把所有可能的文字列出來,然後模型會計算出每一個文字會出現的機率,以機率最高的字作為預測結果。就像下面的例子所示,把 “improvisation” 這個字蓋掉,然後讓BERT來預測各個文字出現的機率,結果 “improvisation” 的機率最高。

BERT裡Language Model的運作
Jay Alammar : The Illustrated BERT, ELMo, and co.

一個語言中所有可能字彙的機率分布,我們稱之為語言模型。

3. GPT-3 : 只有預訓練就無敵了

GPT 的全名是 Generative Pre-trained Transformer。由全名可得知,它具有前面兩個章節所提的重要技術 :
• Transformer : 其中的 Attention 架構可以抓取文章內前後文的脈絡
• Pre-trained : GPT 也運用了Self-Supervised Learning 與 Language Model
進行 Pre-train

GPT是由非營利組織 OpenAI所開發 :
• 2018 GPT-1 第一代
• 2019 GPT-2
• 2020 GPT-3
• 2022 ChatGPT (下一章節會提到)

對於OpenAI這個組職有興趣的讀者,可以去閱讀這篇文章

LLM and GPT-3

因為基於語言模型的自監督式學習,可以利用網路上龐大的資料進行訓練,得到不錯NLP預訓練模型,所以眾多的研究機構將模型設計越來越巨大,參數量越來越多,試圖獲取網路上龐大資料背後的知識,下面就是一些著名的例子 : (模型 — 開發單位 — 發表時間 — 參數量)
• GPT-1 (OpenAI) : 2018, parameters=117M (參數量=1.17億)
• GPT-2 (OpenAI) : 2019, parameters=1.5B (參數量=15億)
• GPT-3 (OpenAI) : 2020, parameters=175B (參數量=1750億)
• Megatron-Turing NLG (Nvidia+Microsoft) : 2022 parameters=530B (參數量=5300億)
• PaLM (Google) : 2022 parameters=540B (參數量=5400億)

一般把參數量超過100B的NLP模型,稱為 Large Language Model (LLM)。GPT-3 為 LLM 的濫觴。所以GPT-1跟GPT-2對比GPT-3都還是小巫見大巫。

Fine-Tuning to In-Context Learning

前面提到預訓練的目標是基於語言模型來進行字詞的預測,與一般NLP的直接應用 (像是情意分析、文章分類、問答系統),層次不太一樣,所以需要微調 (Fine-tune) 的過程,再進行一個應用明確的監督式學習。
但是LLM搭配上包山包海的訓練資料,LLM訓練出來的模型可能已經具備了一般NLP應用的能力,我們不需要特別應用的資料與答案(監督式學習)進行完整的微調 (Fine-tune),只需要在使用預訓練的模型時(Inference),給一些範例,包括任務、資料以及答案,讓模型知道就好了,這個過程叫做“前後文內的學習” (In-Context Learning)。範例的提供有三種分類 : 給一些範例叫做 Few-shot,給一個範例叫做 One-shot,不給範例直接用叫做 Zero-shot。

Few-shot vs. One-shot vs. Zero-shot

下面的例子是擷取自OpenAI官方論文,利用在GPT-3上進行英文翻法文的任務 (沒有經過英文翻法文的微調訓練),來說明上面這三種學習 :

Few-shot
One-shot
Zero-shot

GPT-3 for Direct Use

GPT-3這類大型的語言模型 (LLM),經過巨量的文本資料進行預訓練後,不需要特定目標與任務的微調訓練,就具備了一定的能力,可以直接把這樣的模型,運用在不同目標的工作上 (像是情意分析、文章分類、問答系統等等)。

圖解 : BERT

BERT Diagram

圖解 : GPT-3

4. ChatGPT : 學習還是需要人類來監督

ChatGPT 從命名可得知,它是 OpenAI 在 GPT 系列發展中的一支,主
要在應用再對話(chat)上。 ChatGPT 的前身是 OpenAI 開發的另一模型 InstructGPT,兩者的核心設計相似,主要的差異是在於 InstructGPT 是基於我們前面提的GPT-3,而 ChatGPT 是基於 GPT-3.5,算是GPT-3的升級版本。所以 ChatGPT 的驚人表現,我們可以從 InstructGPT 的設計理念來做說明。

RLHF : 基於人類回饋的強化學習

InstructGPT的核心概念是 “基於人類回饋的強化學習”
(Reinforcement Learning from Human Feedback, 簡寫為 RLHF)。

前面提的GPT-3,基於LLM,所以幾乎可以不用 Fine-tune (也就是監督式學習),就能來完成特定的工作。但是回到對話這個目標上,如何讓AI能像人類甚至是專家一樣,流利地進行對話,甚至不被人類引導說出不適當的回應,像是仇恨或歧視的言論 (大家可以找Microsoft在2016推出的對話機器人Tay的新聞),還是需要人類的監督進行學習,所以RLHF的重點就是把原本GPT-3加入了人類的介入來進行學習。

RLHF有三個步驟 : 可以看成是兩個監督式學習加上強化學習

第一步、 監督式學習

目標 : 讓AI的模型知道所謂的好的回應是甚麼
1. 從資料庫裡選取一些問題
2. 由人類去回應這些問題,並且記錄下來
3. 問題與回應作成訓練資料,去微調原本GPT-3或是GPT-3.5的模型 (其實就是類似BERT的作法)

第二步、監督式學習

目標 : 訓練一個能辨別回應好壞的評分模型
1. 選取一些問題
2. 針對每一個問題,利用現有模型去收集不同的回應
3. 由人類給予每個回應評分
4. 把 “問題+回應” 與 “評分” 作成訓練集,利用神經網路,訓練出一個評分模型給下一步來使用

第三步、強化學習

目標 : 透過強化學習,讓模型try-and-error得到最好的回應
1. 將第一步產生的模型,放到強化學習的環境內,模型根據環境隨機給予的問題,產生回應
2. 將問題與回應,輸入第二步的評分模型,給出人類覺得好壞的分數,這個分數在強化學習的機制下 (強化學習稱之為Reward),讓模型自行修正參數,讓之後的問答過程中,可以得到更高的分數
3. 這個過程就是像訓練AI下圍棋或是玩電玩遊戲一樣,透過嘗試,讓AI的能力越來越強

下面是OpenAI在官網上所展示ChatGPT的圖示 :

5. Summary : 總結

我們常聽到說 “站在巨人的肩膀上”。ChatGPT的驚人表現,奠基於前述的幾項技術的突破,最後歸納如下 :

ChatGPT與之前的重要技術的總結

--

--