淺入淺出——生成式AI

團隊做 AI 助理,而我之前除了使用一些 AI 類產品,並沒有大模型相關的積累。故先補齊一些基本概念,避免和團隊同學溝通起來一頭霧水。這篇文章是學習李宏毅老師《生成式 AI 導論》的學習筆記。

生成式 AI 是怎麼回事
人工智慧(Artificial Intelligence)
“智慧”是一個廣泛而複雜的概念,其定義和應用範圍隨著技術、科學和社會的發展不斷演變。在當前的語境下,“智慧”通常與人工智慧(AI)相關聯,指的是透過機器模擬人類智慧行為的能力,包括感知、學習、推理、決策等能力。
上面這段話有很多模糊的詞語:廣泛而複雜、不斷演變、通常、等……為什麼會出現這個現象呢?因為“智慧”不是一個定義、也不是一個技術,只是一個目標。所以在相關的論文中從來不會出現“人工智慧”這個詞,因為論文要的是嚴謹,而智慧的標準每個人的認知是不同的。
機器學習
機器學習 ≈ 機器自動從資料中找到一個函式。
本科的時候,一個週末我坐了一個多小時的公交車,跑去餘家頭校區約一個老師詢問“模型”是怎麼回事,然後老師在黑板上給我寫下了一個函式:y = f(x) = ax + b,其中 a、b 為引數。他說這就是最簡單的模型,當給出樣本如 x=4,y=5 和 x=2,y=-1 即可得到一組 a、b,那麼就得到了這個函式,再輸入新的 x 時,即可輸出 y,完成預測。

所有的模型,都是 f(x) = ax + b 這個函式的演變,比如引數增加,x 變成非線性……到了機器學習,還是一個函式,只不過,這個函式的引數變多了,變成了上萬個。

這個函式,就是我老師說的“模型”,而機器學習就是透過訓練(training)、學習(learning) 把這上萬個引數找出來的過程用來找出上萬個引數的輸入輸出的資料,就是訓練資料。引數找出來之後,你代入新的輸入來檢視輸出,就是測試(testing)或推論(inference)。

深度學習
深度學習(Deep Learning,簡稱DL)是機器學習領域的一個重要分支,其核心思想是透過模仿人腦神經網路的結構和功能,利用多層非線性處理單元(即深度神經網路)來自動提取資料中的特徵,並解決複雜的模式識別問題。
簡單點理解,就是上面那上萬個引數不是簡單地線性疊加,而是透過多層互動得到

生成式人工智慧(Generative AI)
生成式人工智慧(Generative AI),題眼在生成,也就是產生新的。
除了生成式,人工智慧解決的更多是分類(Classification)問題,也就是從有限的選項中做選擇。比如垃圾郵件檢測、影像識別、商品排序等,類似於我們考試中的客觀題。
但生成式,就必須創造性回答,並不是在已有答案中選擇最好的,而是要不斷“生成”,還要確定是否答完了,擁有無限可能,類似於我們考試中的主觀題。
既然對於考試而言,主觀題比客觀題更難、分值更高,那麼在人工智慧領域,生成式也自然更難。李宏毅老師說,生成式人工智慧是機器產生複雜而有結構的物件,比如文章、影像、語音等。而什麼是“複雜”呢?所謂複雜,就是幾乎無法窮舉。
什麼叫幾乎不可窮舉呢?我們回過頭來看垃圾郵件檢測,結果就是 True/False;影像識別,結果就是各種物品、動植物、人等;商品排序,也就是在幾萬幾十萬的候選裡面去做排序。這些都是在確定的候選集裡面去做選擇,也就是可窮舉。而假設我們現在要寫 100 字的作文,標題叫《我愛我的祖國》,會有多少種可能性呢?常用漢字有 3500 個,我們假設最最最常用的有 1000 個,那麼 100 字的作文就是 1000 × 1000 × 1000 × … × 1000  = 1000^100 = 10^300 種可能,與之相對應的是宇宙中的粒子有 10^80 個。生成式就是從這近乎無窮的組合中找到一組比較好的組合。
ChatGPT & 語言模型
ChatGPT 的突然大火,讓大語言模型被高度關注,之後的大語言模型如雨後春筍一樣湧現出來。

ChatGPT 這種大語言模型本質上也是一個函式,只不過這個函式有上億個甚至數十億個引數。大語言模型又是怎麼解決前面無法窮舉的問題的呢?

文字接龍

和 ChatGPT 一樣的大語言模型並不是根據問題直接在無數種可能中預測出正確結果,而是隻預測後面一個字,完成文字接龍,這就把一個乘法運算變成了加法運算,計算量就瞬間可控了。也就是巧妙地用分類策略解決了生成式問題。

Transformer

模型的演進是一個過程,目前大模型主要使用的基本都是 Transformer。

Transformer 是一種深度學習模型,最初由 Google 在 2017 年提出,其核心思想是透過自注意力機制(Self-Attention Mechanism)來捕捉序列中各元素之間的關係,從而實現對輸入資料的高效處理。

大致的過程比較清晰,是一個從區域性到整體的過程,和我們平時工作流程差不多,先把細節的、模組的處理好,再整體通盤考慮進行整合,最終得到一個高質量的產出結果。在 Transformer 中,這個過程分為 5 步,分別是將輸入的文字轉換為 Token、理解每個 Token、理解上下文、整合思考、輸出結果

Tokenization:把文字轉成 token

token 是大語言模型處理的最小單位,一些大模型產品所說的可以支援多少 token 輸入、多少輸出,用的就是這個概念。但是一個 token 並不一定是一個詞或者一個字,而可能是一個單詞、片語或者是詞根,漢語的話可能是一個詞、一個字,也有可能一個字拆成兩個 token。這個 token list 是提前人工設定好的,每個語言模型的 token list 並不相同。

Input Layer:理解每個Token

在機器學習中,一般會把要處理的資料轉換為向量(Vector),也就是把高維資料對映到低維空間,這個轉換過程叫做 Embedding

把資料轉換為向量之後,就可以透過向量的計算來獲得資料的相似性。也就是說接近的 Embedding 其 token 的意思也是相近的。

要注意,這個 Embedding 是透過訓練獲得的引數,儲存在資料庫中,在使用的時候直接查表得到。在大模型的訓練過程中需要耗費大量資源,動輒訓練幾個月,其中一部分工作就是訓練這個 Embedding,開源模型開源的引數也有一部分是這個。

除了需要理解每個 token 的語意資訊,還需要理解 token 的位置資訊,因為一個字在不同位置含義差別很大。

Attention:理解上下文

相同的字詞,放在不同的語境中含義差別很大,比如“蘋果”,既可以指水果,也可以指一個電子產品的品牌。那麼就需要結合上下文資訊,來確定輸入想要表達的真實含義是哪一個。

Attention Weight
計算每個 token(其實是經過 embedding 後的向量)與其他 token 之間的相關性,用一個得分表示,也就是相關性權重,叫做 Attention Weight

Attention Matrix
把所有的 token 兩兩之間計算 Attention Weight,就可以得到一個矩陣 Attention Matrix

Causal Attention
在得到所有的 Attention Weight 後,需要把相關的資訊進行集合。而在實際的計算中,往往只需要考慮左邊的 token,也就是 Causal Attention。        

Multi-head Attention
在計算相關性的時候,其實是計算了某一個維度的相關性,也就是一個多維向量在某個低維平面的投影類似於我們看到的北斗七星、獵戶座,其實是從地球視角出發的一個二維平面上的投影,如果在宇宙中的另外一個角度去觀察,就會變成另外的形狀。所以說,如果進行一次相關性的計算,就會導致原始資訊的丟失,如果想要更多地保留原始資訊,就要找多個角度來計算相關性,也就是 Multi-head Attention

Feed Forward:整合思考

Feed Forward 是一個前饋網路元件,提供一個非線性變換能力,從而整合更多維度的資訊,提取更復雜的特徵和關係,提高模型的擬合能力。在前面 Multi-head Attention 中,我們計算了非常多的相關性,在這一步就會綜合考慮,得到一個最終的相關性結果。

Attention 和 Feed Forward 這兩個過程,統一叫做 Transformer Block,而在實際的工作中,為了擬合效果更好,往往要進行多層的 Transformer Block。

Output Layer:得到輸出

在前面的工作中,得到了一個非常高維度空間的資料,但是最終我們要使用的還是一個線性結果,也就是一個按照機率分佈的詞彙表。所以需要透過線性變化(Linear Transform)把一個高維資料對映到目標詞彙表的大小。然後再經過 Softmax 函式,將結果詞彙錶轉換為機率分佈,將每個元素歸一化為介於 0 到 1 之間的值,並確保所有輸出值的和為 1。

最終,我們得到的是一個歸一化的機率分佈詞彙(token)表,這也就解釋了為什麼每一次大模型輸出的結果都不相同,這是因為在文字接龍的時候,每次接龍的候選項都不是一個確定的值,而是一個候選項集合,裡面每個元素的機率不同,然後類似於我們擲骰子,每次擲一下從詞彙表得到一個結果,機率分佈相同,但是結果不同。

上面就是生成式 AI 相關的一些概念。我們整理一下它們的關係。

其中,人工智慧和生成式人工智慧都是我們的目標,而機器學習和深度學習是技術手段。但是在當今,生成式人工智慧都是透過深度學習這個技術手段來完成的,所以,可以適當調整上面的關係圖。

熟練使用生成式 AI
工具 –> 工具人
生成式人工智慧起步其實非常早了,但是被大家熱議,是從以 ChatGPT-3.5 為代表的大語言模型走入人們視野開始的。之前的生成式人工智慧,是以專業工具的形態出現的,如 google 翻譯;而現在的生成式人工智慧是以具備通才能力的工具人形態出現的。它不再是解決某一個領域的問題,而是像人一樣,具備非常多的知識,可以解決各個方面的問題。

基於這個認知,我們如何使用大模型,如何跟大模型溝通就比較清晰了:把大模型當做一個新人助理再解釋一下,就是它不瞭解專屬於你的知識、它擁有一般人的基本知識和理解能力

充分溝通,讓你的模型更強大

神奇咒語沒啥用

大模型剛出來的時候,出現了一個很奇葩的現象,就是做大模型的沒有賺到錢,但是教怎麼使用大模型的人賺得盆滿缽滿。這些人在教什麼呢?教提示詞、神奇咒語。有用嗎?貌似挺有用,但是除了上課跟著老師跑了幾個例子快樂一下外,並沒有其他的用處。就像你能夠寫程式碼打印出一行“Hello World!”和真正的程式設計師透過程式碼解決實際問題的差距一樣大。
有人專門去研究了比較流行的神奇咒語:
  • 讓模型思考(Chain of Thought,CoT)
  • Let's think step by step.(GPT-2有用,3.5 以上影響不大
  • 讓模型解釋自己的答案(GPT-3 有用,後面影響不大
  • 對模型進行情感綁架(部分有用
  • This is very important to me.
  • 對模型有禮貌(沒有用
為什麼很多後來都沒有用了呢?我個人的理解(不是李宏毅老師說的),是因為算力增強了、模型進化了。在過去,比如 GPT-2 的時候,算力還不夠,所以很多時候只能簡單回答,如果回答非常詳細會很慢甚至無法輸出結果,但是我們知道摩爾定律依舊在發揮威力,現在的算力已經非常強,好多大模型都給出了“深度思考”模式,人家自己都在深度思考了,你去提示人家要“step by step”,是模型傻還是你傻?還有就是模型的進化,越來越成熟、思考能力越來越強,一次答對的情況會大幅提高,不至於先隨便答一下,然後讓它解釋一下後再發現很多錯誤進行糾正。它是一個助理,具備一定的理解能力和基本知識,不需要像對待小孩子那樣去跟它說話。

提供足夠的資訊才有用

我之前看過一個溝通模型,是說你心裡想的資訊,從說出來、被聽到、被聽懂逐漸衰減,最後被對方記住的只有 20%。如果再疊加一些個人情緒,這個比例就會更低。

所以,溝通本來就是人類的一大難題,而前面提到,把大模型當做新人助理,那麼所謂的 Prompt 工程,就是解決如何跟人高效溝通的問題。所以,對大模型真正有效的是:
  • 補充前提:有一些專有知識,是屬於我們個人或者是我們所在的環境的。比如提起故宮,在北京和在臺北所指的就不是一個學校,所以要告訴大模型,你是哪裡人或者你問的是哪裡的故宮。
  • 提供大模型原本不知道的資訊:這是因為大模型在訓練完之後,知識儲備就已經確定了,不會繼續更新。所以在大模型訓練完之後產生的資訊,它是不知道的,你需要額外告訴它,比如給他一份新聞或者報告。
  • 提供範例(In-context learning):這個主要是依賴大模型的理解能力,你可以要求它按照某種格式輸出,或者按照某種新設定的規範產生判斷(即使不符合常識)。注意,這裡並沒有額外訓練模型,只是依賴理解能力完成當前交流。

拆解任務——當個好師兄

前面反覆提到,生成式 AI 是個新人助理,所以你交給大模型做的任務需要進行拆解,變成細粒度的、模組化的任務,就像職場中的師兄帶新人一樣。如果你直接丟給它一個複雜的任務,它肯定是一臉懵,不知道從哪裡開始。

在之前比較老的模型上面,Chain of Thought 之所以有效,就是因為模型會把過程一步一步列出來,相當於對任務進行了拆解。但是在模型迭代發展之後,對於一些簡單任務模型本身就可以拆解得很好了(可以觀察一下 DeepSeek 輸出的思考過程)。但是對於比較複雜的任務,還是需要進行人工拆解的,就像是給你師弟佈置任務一樣。
我想到另外一個問題,就是生成式 AI,要不斷接龍,那麼越往後積累的偏差也就越大,所以我們要儘量控制每項任務的粒度,讓模型不斷校準迴歸主線,才能保證交付質量。

自我反省

無論是對於人還是對於生成式 AI,都有一個現象是產生答案很難,但是檢查答案是否正確卻很容易。因為檢查並不需要走生成相同的路徑。比如你解一道方程,要非常麻煩,但是隻需要代入幾個數字就可以檢驗正確性。所以,利用模型的自我反省能力,可以提升輸出質量。

多次回答(Self-Consistency

這讓我想起我上學的時候解數學題,通常是使用多種方法得到相同結果後,才放心我的答案是對的。原來這裡還有個專有名詞 Self-Consistency,也就是自一致性。主要透過生成多個不同的推理路徑,並從中選擇最一致的答案來完成任務。

成年人的選擇——全都要
上面提到了一些有效的方法,那麼在我們實際的使用中,要採用哪些方法呢?當然是不做選擇,全都要(當然,也要看任務難度,比較簡單的也沒必要浪費這麼多算力,選擇合適的方案就行)。比如,一個叫 Tree of Thoughts(ToT)的方案。

當然,還有很多其他的方案,比如 Algorithm of Thoughts、Graph of Thoughts(GoT)等,但是基本上都是以上各個方法的不同組合方式。

取長補短

大模型一個比較的問題就是知識停止在訓練結束的那一刻,另一個是很容易產生幻覺,即使對於不確信的內容也可以陳述地頭頭是道。為了解決這個問題,就可以提供真實的資訊源,疊加大模型的理解、總結能力,得到更優質的答案,這個技術叫做搜尋增強生成(Retrieval Augmented Generation)。比如在一年前我就用秘塔搜尋取代了 Google 和百度,成為了我瀏覽器的預設搜尋引擎。

模型合作

除了藉助搜尋引擎等其他工具取長補短外,還可以藉助其他的語言模型,讓不同的語言模型發揮自己的特長,一起完成任務。

路由

路由模式由一個路由模型和其他幾個能力不同、版本不同或者是成本不同的專有模型組成,一個任務來了之後,先交給路由模型來確定該由哪個模型來執行任務,然後將任務交由相應的專有模型完成最終任務。

多模型討論

有句俗語,叫做“三個臭皮匠頂個諸葛亮”,三個臭皮匠是不是能頂個諸葛亮咱不知道,但是三個臭皮匠肯定頂過一個臭皮匠,三個諸葛亮也肯定頂過一個諸葛亮。經過實驗,也得出了明確的結論,就是多個模型討論的效果要好過一個模型自我反省

其中,參與的模型越多、討論的次數越多,準確率越高。

而討論的方式,也存在很多種,不同的任務最適合的討論方式也不一樣,目前並沒有一個明確優勢的方式勝出。

在多模型討論過程中,需要引入一個裁判來確定討論結束。但是並不需要擔心討論停不下來,因為大模型都太謙虛了,基本上很快就會達成一致。所以,為了避免馬上結束,需要給大模型一些指令:
  • 你並不需要完全同意對方的想法,可以提出自己的意見
  • 另一個模型的答案作為參考就好

角色扮演

這個比較容易理解,因為不同的模型本來擅長的工作不一樣,另外,給每個模型指定一個特定的角色代入,可以更好地完成相關任務。如果能把這個模式玩轉了,那麼就人人都是 CEO 了。

大語言模型的訓練階段
大語言模型是一個文字接龍游戲,輸入一些字,經過模型後返回接下來的字。

用前面的函式表示:

大模型的訓練,就是用機器學習的技術方法,使用大量的訓練資料,把這數十億的引數找出來。
大模型訓練失敗比較常見的存在兩個點:
  • 訓練失敗,也就是算不出這數十億個引數。這一般是由於在訓練開始前人工設定的超參(hyperparameter)不好導致的,所以需要重新換個超參再來一遍。我們平時開玩笑說演算法工程師就是調參工程師,調整的就是這個超參。
  • 訓練成功,但是測試失敗。這往往是發生了過擬合。解決這個問題主要是靠增加訓練資料的多樣性,或者初始引數使用一組更好的引數而非隨機(比如用開源模型公開的引數)。

特別注意一點,大語言模型的所有階段都是在學習文字接龍,不同訓練階段只是訓練資料不同。
1.Pre Train:自我學習,積累實力(自監督學習,Self-supervised Learning)

資料量

經常聽到大語言模型廠商披露說自己使用了多少 G、多少 T 的資料量,為什麼這麼大呢?其實,對於大模型要學習的知識主要分成兩種,語言知識和世界知識。

對於訓練一個模型而言,需要的這兩種訓練資料量差異是非常大的:
  • 語言知識:1 億個詞彙即可
  • 世界知識:300 億個詞彙還不夠

這也許就是為什麼檢查語法錯誤、翻譯相對比較容易,而具備思考能力的大語言模型在最近幾年才火起來的原因吧。

訓練資料獲取

目前主要是透過網路獲取資料。所以,資料的質量參差不齊,需要進行一系列處理。
  • 過濾有害內容
  • 去除 HTML tag 等符號(但會保留表情符號,因為 emoji 已經成為了文字的一部分)
  • 去除低品質資料,可以使用品質分類器(比較高品質的資料來源有維基百科、教科書等)
  • 去重,包含重複內容去除和文件去重
  • 測試集過濾

影響模型效果的因素

  • 先天條件:引數量
  • 後天努力:學習資料量
模型
引數量
資料量
GPT-1
117M(1 億)
7000 本書
GPT-2
1542M(15 億)
40G
GPT-3
175B(GPT-2 的 100 倍)
580G(300B tokens,30 萬遍哈利波特全集)
2.Instruction Fine-tuning:名師指點,發揮潛力(監督學習,Supervised Learning)
大量的訓練都是在第一階段機器透過自監督學習完成的。為何不使用監督學習呢?因為太貴了,需要大量的人力進行資料標註。但是在第二階段,就還是需要人為干預,進行指令微調,我們經常聽到的“對齊”就是在這個階段。

Adapter

一般為了保證效果,要求第二階段期指令微調後的引數與第一階段偏差不大。為了滿足這個要求,部分模型引入了一個 Adapter 的技術,也就是在原有引數上疊加少量引數,而不是直接對原有現場值進行修改。

舉一反三

Pre-train 已經學習到了非常複雜的規則,所以在做最佳化後,可以有很強的舉一反三的能力。比如只需要告訴大模型中國最長的河流是長江,那麼它就可以知道世界上最長的河流是尼羅河。

語言擴充套件

如果大模型已經在多種語言上做過預訓練,那麼在第二階段(指令微調)只需要學習一種語言的任務(比如閱讀理解),那麼就可以自動學會其他語言的同樣任務。
這個和我們人類類似,因為底層思維、世界知識是一樣的,語言只是一種表達。當我們透過母語學會了物理、數學知識後,我們並不需要用英語再學習一遍,只需要學習英文單詞、語法就可以透過英語解題了。

Fine-tuning 路線

之前,人們期待打造一個個專才,使用的技術是 Bert。但是後來發現需要的專才太多了,成本太高,完全訓練不過來。於是換個思路,直接訓練一個通才

現在流行的大模型都是通才的思路。訓練過程就是“不斷學習,定期複習”。

畫龍點睛

Instruction Fine-tuning 並不需要大量的資料,有兩句業內比較流行的話:
  • Quality Is All You Need.
  • Less Is More for Aligment.
兵在精而不在多”“少即是多”,看來這兩句頗具哲學意味的話在很多場合都適用。
3.Reinforcement Learning from Human Feedback (RLHF):參與實戰,打磨技巧(強化學習,Reinforcement Learning)
工作過的人都知道,很多知識都是在工作中為了解決問題實際使用後才真正理解的,能力也是這個時候才提升的,所謂“紙上得來終覺淺,絕知此事要躬行。”大模型也是經過前兩個階段的訓練、對齊,最後經過實戰不斷打磨,獲得終極能力。“實踐是檢驗真理的唯一標準”,在最後這步強化學習,最主要的就是按照最終目標,確定輸出結果的好壞。
訓練階段
學習方式
獲得能力
第一階段
 Pre-train
Self-supervised Learning
自監督學習
輸入:人工智
輸出:能
第二階段
Instruction Fine-tuning
Supervised Learning
監督學習
輸入:“USER:你是誰?AI:”
輸出:“我”
第三階段
RLHF
Reinforcement Learning
強化學習
輸入:“USER:中國最長的河流是哪條?AI:”
輸出:“長江” > “我不知道”
其中 RLHF 和 Instruction Fine-tuning 在訓練資料和目標上的差異:
Instruction Fine-tuning
RLHF
訓練資料生產
人工生產標註資料(很辛苦)
人工比較結果好壞(很容易)
模型學習
只看過程,不看結果(接龍)
只看結果,不看過程(通盤考慮)

語言模型 VS 下圍棋

大語言模型和下圍棋非常相似:
  • 每一步都是一個分類問題
  • 整體是一個生成式問題

兩者的學習過程:
第一階段&第二階段
第三階段(RL)
圍棋
跟棋譜學習:
老師下哪裡就下哪裡
提高能夠最終獲勝的棋步機率
(標準明確、結果單一:輸贏)
語言模型
 Pre-train,Instruction Fine-tuning
老師說什麼就跟著說什麼
提升好答案的機率
(標準不一,多個答案比較,而不是單一答案的評價)

反饋模型(Reward Model)

在第三步的實戰中,需要有一個反饋來迭代模型。比如我們常見的商品推薦系統,可以採集使用者的點選、收藏、下單等埋點資料用來反饋。而 ChatGPT 因為是一個線上服務,所以使用者也可以在獲取答案後來點選好或者不好,甚至是重新生成答案,以此來獲取反饋。但是這個資料量還是太少了,所以可以考慮使用反饋模型來擔任評分員。

甚至是可以使用同一個語言模型來完成相關工作,把 RLHF 變為 RLAIF。
不只問答——打造 Agent,獨立完成任務
我們對生成式 AI 的期待,肯定不只是問答、生圖這麼單一的訴求,我們期待大模型像一個專業人士一樣,可以解決一系列的問題,進而完成一個目標。這就是 AI Agent,也就是可以根據目標制定計劃、執行涉及某個專業的多個任務、並在進行中修改計劃的 AI 系統。

擁有記憶
打造 Agent,最關鍵的一個問題,就是把執行這個任務過程中短期獲得的經驗記錄下來,並且應用於接下來的動作(因為大模型在訓練完之後不再有迭代能力,新的知識無法輸入到模型;大模型的輸入輸出容量有限,即使當下可以不斷追加輸入輸出資訊,但是也不可能一個對話 session 無限期使用下去)。所以,我們需要額外幫助模型處理記憶問題。

虛擬村莊

這是斯坦福大學和谷歌合作的一個專案,使用 AI 村民運行了一個虛擬村莊,來研究 AI Agent,以此作為這篇文章的結尾吧。

服務最佳化新策略:AI大模型助力客戶對話分析
在數字化時代,企業面臨著海量客戶對話資料的處理挑戰,迫切需要從這些資料中提取有價值的洞察以提升服務質量和客戶體驗。本方案旨在介紹如何部署AI大模型實現對客戶對話的自動化分析,精準識別客戶意圖、評估服務互動質量,實現資料驅動決策。    
點選閱讀原文檢視詳情。

相關文章