大道至簡:這一輪人工智能(AI)突破的原因其實很「簡單」

0 評論 2201 瀏覽 9 收藏 24 分鐘

大道至簡,本文用通俗易懂的語言解釋了Transformer的核心原理,對于我們這種沒有基礎的普通人,也是能快速理解的,也能對當前的大模型有更深入的認識。

過去幾年中,人工智能(AI)技術的澎湃發展引領了一場前所未有的工業和科技革命。在這場革命的前沿,以OpenAI的GPT系列為代表的大型語言模型(LLM)成為了研究和應用的熱點。

IDC近日發布發布的《全球人工智能和生成式人工智能支出指南》顯示,2022年全球人工智能(AI)IT總投資規模為1324.9億美元,并有望在2027年增至5124.2億美元,年復合增長率(CAGR)為31.1%。

而帶來這一輪人工智能科技革命的技術突破是來自2017年的一篇論文《Attention is All You Need》,在這篇論文中,首次提出了Transformer架構,這個架構是目前大語言模型的核心技術基礎。GPT中的T就是Transformer的縮寫。

下面,我先帶大家簡明了解下這個突破性架構的核心原理(原文:What Are Transformer Models and How Do They Work?),其實大道至簡,原理沒有很復雜,對于我們這種沒有基礎的普通人,也是能快速理解的,也能對當前的大模型有更深入的認識。

順便拋出一個問題,為什么這輪技術變革不是來自Google、Meta、百度阿里這樣的「傳統」AI強勢公司,而是初創公司OpenAI引領的呢?

Transformer是機器學習中最令人興奮的新進展之一。它們首次在論文《Attention is All You Need》中被介紹。Transformer可以用來寫故事、論文、詩歌,回答問題,進行語言翻譯,與人聊天,甚至能通過一些對人類來說很難的考試!但它們究竟是什么呢?你會高興地發現,Transformer模型的架構并不復雜,它實際上是一些非常有用的組件的組合,每個組件都有其特定的功能。在這篇博客文章中,你將了解所有這些組件。

這篇文章包含了一個簡單的概念性介紹。如果你想了解更多關于Transformer模型及其工作原理的詳細描述,請查看Jay Alammar在Cohere發布的兩篇出色的文章:

  1. The illustrated transformer 《圖解Transformer》
  2. How GPT3 works 《GPT3是如何工作的》

簡單來說,Transformer都做些什么呢?

想象一下你在手機上寫短信。每打一個詞,手機可能會推薦給你三個詞。例如,如果你輸入“Hello, how are”,手機可能會推薦“you”或者“your”作為下一個詞。當然,如果你繼續選擇手機推薦的詞語,你會很快發現這些詞語組成的信息毫無意義。如果你看看每組連續的三四個詞,它們可能聽起來有點道理,但這些詞并沒有連貫地組成有意義的句子。這是因為手機中的模型不會攜帶整個信息的上下文,它只是預測在最近的幾個詞之后,哪個詞更可能出現。而Transformer則不同,它們能夠追蹤正在寫的內容的上下文,這就是為什么它們寫出的文本通常都是有意義的。

手機可以對短信中使用的下一個單詞給出建議,但沒有生成連貫文本的能力

我必須得說,當我第一次發現Transformer是一次生成一個詞來構建文本的時候,我簡直不敢相信。首先,這不是人類形成句子和思想的方式。我們通常先形成一個基本的思想,然后開始細化它,添加詞匯。這也不是機器學習模型處理其他事情的方式。例如,圖像的生成就不是這樣的。大多數基于神經網絡的圖形模型會先形成圖像的粗略版本,然后慢慢細化或增加細節,直到完美。那么,為什么Transformer模型要一詞一詞地構建文本呢?一個答案是,因為這樣做效果非常好。更令人滿意的答案是,因為Transformer在跟蹤上下文方面實在是太厲害了,所以它選擇的下一個詞正是繼續推進一個想法所需要的。

那么,Transformer是如何被訓練的呢?需要大量的數據,實際上是互聯網上的所有數據。所以,當你在Transformer輸入句子“Hello, how are”時,它就知道,基于互聯網上的所有文本,最好的下一個詞是“you”。如果你給它一個更復雜的命令,比如說,“write a story.”,它可能會想出來下一個合適的詞是“Once”。然后它將這個詞添加到命令中,發現下一個合適的詞是“upon”,依此類推。一詞一詞地,它將繼續寫下去,直到寫出一個故事。

命令:Write a story.

回應:Once

下一個命令:Write a story. Once

回應:upon

下一個命令:Write a story. Once upon

回應:a

下一個命令:Write a story. Once upon a

回應:time

下一個命令:Write a story. Once upon a time

回應:there

等等。

現在我們知道了Transformer都做些什么,讓我們來看看它的架構。如果你見過Transformer模型的架構,你可能像我第一次看到它時一樣驚嘆,它看起來相當復雜!然而,當你把它分解成最重要的部分時,就沒那么難了。

Transformer主要有四個部分:

  1. 分詞(Tokenization)
  2. 嵌入(Embedding)
  3. 位置編碼(Positional encoding)
  4. Transformer塊(好幾個這樣的塊)
  5. Softmax

其中,第4個部分,即Transformer塊,是所有部分中最復雜的。這些塊可以被連在一起,每個塊包含兩個主要部分:注意力機制和前饋組件。

讓我們逐個學習這些部分。

一、Tokenization(分詞)

分詞是最基本的步驟。它涵蓋了一個龐大的詞匯庫,包括所有的單詞、標點符號等。分詞步驟會處理每一個單詞、前綴、后綴以及標點符號,并將它們轉換為詞庫中已知的詞匯。

舉例來說,如果句子是“Write a story.”,那么對應的4個token將是<write>,<a>,<story>和<.>。

二、Embedding

一旦輸入內容被分詞后,就需要將單詞轉換成機器更容易處理的數字了。為此,我們使用embedding(嵌入)技術。Embedding是任何大型語言模型中最重要的部分之一;它是實現文本與數字轉換的橋梁。由于人類善于處理文本而計算機善于處理數字,因此這個橋梁越強大,語言模型就越強大。

簡而言之,文本嵌入將每個文本轉換為一個向量。如果兩個文本片段相似,則其對應向量中的數字也相似(這意味著同一位置上的每對數字都相似)。否則,如果兩個文本片段不同,則其對應向量中的數字也不同。

盡管嵌入是數值化的,但我喜歡從幾何角度來想象它們。試想一下存在一個非常簡單的嵌入方式,可以將每個單詞映射到長度為2(即包含2個數值) 的向量上。如果我們按照這兩個數值所表示坐標定位每個單詞(比如在街道和大道上),那么所有單詞都站在一個巨大平面上。在這張平面上,相似的單詞會靠近彼此,而不同的單詞則會遠離。例如,在下面這個嵌入中,“cherry”的坐標是[6,4],與“strawberry” [5,4] 接近但與“castle” [1,2] 相距較遠。

在更大的embedding情況下,每個單詞都被賦值到一個更長的向量(比如長度為4096),那么這些單詞不再存在于二維平面上,而是存在于一個大的4096維空間中。然而,在這個高維大空間中,我們仍然可以認為單詞之間有近有遠,因此embedding概念仍然具有意義。

詞embedding可以推廣到文本embedding,包括整個句子、段落甚至更長的文本都會被賦值到一個向量中。然而,在transformer的情形中,我們將使用詞嵌入,這意味著句子中的每個單詞都會被賦值到相應的向量中。更具體地說,輸入文本中的每個token都將被定位到其對應的embedding向量中。

例如,如果我們正在考慮的句子是“Write a story.”并且標記是<write>,<a>,<story>和<.>。那么每個標記都將被賦值到一個向量中,并且我們將有四個向量。

通常embedding將每個單詞(token)賦值到一個數字列表中

三、Positional encoding(位置編碼)

一旦我們獲得了與句子中每個token對應的向量,下一步就是將它們全部轉換為一個向量進行處理。將一堆向量轉換為一個向量最常見的方法是逐分量相加。

也就是說,我們單獨添加每個坐標。例如,如果這些(長度為2)向量分別是[1,2]和[3,4],則它們對應的總和為[1+3, 2+4],即[4,6]。這種方法可以工作,但有一個小細節需要注意:加法滿足交換律,也就是說如果你以不同順序添加相同的數字,則會得到相同的結果。

在這種情況下,“我不難過我很開心”和“我不開心我很難過”兩句話將得到相同的向量結果(假設它們具有相同單詞但順序不同)。

這并不好。

因此我們必須想出一些方法來給出兩個句子不同的向量表示方式。多種方法可行,在本文中我們選擇其中之一:位置編碼(Positional Encoding) 。位置編碼包括將預定義序列中的一系列向量添加到單詞嵌入(embedding) 向量上去,并確保我們獲得每個句子都有唯一表示形式且具有相似語義結構、僅單詞順序不同的句子將被分配到不同的向量。在下面的示例中,“Write”、“a”、“story”和“.”所對應的向量成為帶有位置信息標簽“Write(1)”,“a(2)”,“story(3)”和“. (4)”的修改后向量。

位置編碼會為每個單詞添加一個位置向量,以便跟蹤單詞的位置

現在我們知道每個句子都有一個獨特的向量,這個向量攜帶了句子中所有單詞及其順序的信息,因此我們可以進入下一步。

四、Transformer block

讓我們回顧一下目前為止的內容。單詞被輸入并轉換成token(分詞),然后考慮到它們的順序(位置編碼)。這給了我們每個輸入模型的token一個向量。現在,下一步是預測這個句子中的下一個單詞。這是通過一個非常大、非常復雜的神經網絡來完成的,該網絡專門訓練用于預測句子中的下一個單詞。

我們可以訓練這樣一個大型網絡,但是通過添加關鍵步驟:Attention(注意力)組件,我們可以極大地改進它。在開創性論文《Attention is All you Need》中引入的注意力機制是Transformer模型的關鍵成分之一,也是它們如此有效的原因之一。下面將解釋注意力機制,但現在先想象它作為一種向文本中每個單詞添加上下文的方式。

在前饋網絡的每個塊中都添加了注意力組件。因此,如果您想象一個大型前饋神經網絡,其目標是預測下一個單詞,并由幾個較小的神經網絡塊組成,則在每個這些塊中都添加了注意力組件。然后,Transformer的每個組件(稱為transformer 塊)由兩個主要組件構成:

  1. 注意力組件
  2. 前饋組件

Transformer是許多Transformer塊的串聯。

Transformer是許多Transformer塊的串聯。每個Transformer塊由一個注意力組件和一個前饋組件(神經網絡)組成。

Attention

Attention步驟涉及一個非常重要的問題:上下文問題。有時,同一個單詞可以用不同的意思。這往往會讓語言模型感到困惑,因為embedding只是將單詞賦值到向量中,而不知道他們使用的單詞定義。

Attention是一種非常有用的技術,可以幫助語言模型理解上下文。為了理解Attention的工作原理,請考慮以下兩個句子:

句子1:The bank of the river句子2:Money in the bank.

正如您所看到的,單詞“bank”在兩個句子中都出現了,但含義不同。在第一個句子中,我們指的是河流旁邊的土地,在第二個句子中則指持有貨幣的機構。計算機對此一無所知,因此我們需要以某種方式將這些知識注入其中。什么能幫助我們呢?好吧,似乎句子中其他單詞可以拯救我們。對于第一個句子,“the”和“of”這些單詞對我們沒有任何作用。但是,“river”這個單詞讓我們知道正在談論河流旁邊的土地。同樣,在第二個句子中,“money”這個單詞讓我們明白“bank”的意思現在是指持有貨幣的機構。

Attention有助于根據句子(或文本)中的其他單詞為每個單詞提供上下文

簡而言之,注意力機制的作用是將句子(或文本片段)中的單詞在詞嵌入中靠近。這樣,在句子“Money in the bank”中,“bank”一詞將被移動到“money”的附近。同樣,在句子“The bank of the river”中,“bank”一詞將被移動到“river”的附近。這樣,兩個句子中修改后的單詞“bank”都會攜帶周圍單詞的某些信息,為其添加上下文。

Transformer模型中使用的注意力機制實際上更加強大,它被稱為多頭注意力。在多頭注意力中,使用了幾個不同的嵌入來修改向量并為其添加上下文。多頭注意力已經幫助語言模型在處理和生成文本時達到了更高的效率水平。如果您想更詳細地了解注意力機制,請查看這篇博客文章及其相應視頻。

五、The Softmax Layer

現在你已經知道一個transformer是由許多層transformer塊組成的,每個塊都包含一個attention和一個feedforward層,你可以將它看作是一個大型神經網絡,用于預測句子中的下一個單詞。Transformer為所有單詞輸出分數,其中得分最高的單詞被賦予最有可能成為句子中下一個單詞的概率。

Transformer的最后一步是softmax層,它將這些分數轉換為概率(總和為1),其中得分最高對應著最高的概率。然后我們可以從這些概率中進行采樣以獲取下一個單詞。在下面的例子中,transformer給“Once”賦予了0.5的最高概率,并給“Somewhere”和“There”賦予了0.3和0.2 的概率。一旦我們進行采樣,“once”就被選定,并且那就是transformer 的輸出結果。

softmax層將分數轉換為概率,這些概率用于選擇文本中的下一個單詞

現在怎么辦?

我們只需要重復這個步驟。現在我們將文本“Write a story. Once”輸入模型中,很可能輸出結果是“upon”。再次重復此步驟,Transformer最終會寫出一個故事,例如:“Once upon a time, there was a …”(“從前有一天,有一個……”)。

Summary總結

在這篇文章中,您已經學習了transformers的工作原理。它們由幾個塊組成,每個塊都有自己的功能,共同工作以理解文本并生成下一個單詞。這些塊如下:

  • Tokenizer:將單詞轉換為token。
  • Embedding:將token轉換為數字(向量)。
  • Positional encoding:在文本中添加單詞順序。
  • Transformer block:猜測下一個單詞。它由注意力塊和前饋塊組成。
  • Attention:為文本添加上下文信息。
  • Feedforward:是Transformer神經網絡中的一個模塊,用于猜測下一個單詞。
  • Softmax函數: 將得分轉換為概率以便采樣出下一個單詞。

重復執行這些步驟就可以寫出您所看到的transformers創建的驚人文本。

Post Training(后期訓練)

現在你已經知道了Transformer是如何工作的,但我們還有一些工作要做。

想象一下:你扮演Transformer,“阿爾及利亞的首都是什么?” 我們希望它回答“阿爾及爾”,然后繼續進行。然而,這個Transformer是在整個互聯網上訓練出來的?;ヂ摼W很大,并不一定是最好的問題/答案庫。例如,許多頁面會列出長長的問題列表而沒有答案。

在這種情況下,“阿爾及利亞的首都是什么?”之后的下一個句子可能會是另一個問題,比如“阿爾及利亞人口數量?”,或者“布基納法索首都在哪里?”。Transformer不像人類那樣思考他們的回應,它只是模仿它看到過(或提供過)數據集中所見到內容。

那么我們該怎樣使Transformer回答問題呢?

答案就在于后期訓練。

就像您教導一個人完成某些任務一樣,您可以讓Transformer執行任務。一旦將Transformer訓練成整個互聯網上使用時,則需要再次對其進行大量數據集培訓以涉及各種問題和相應答案。Transformer(就像人類一樣)對他們最后學到的事情有偏見,因此后期訓練已被證明是幫助Transformer成功完成所要求任務的非常有用的步驟。

后期訓練還可以幫助處理許多其他任務。例如,可以使用大量對話數據集來進行Transformer的后期培訓,以使其作為聊天機器人表現良好,或者幫助我們編寫故事、詩歌甚至代碼。了解更多

如上所述,這是一個概念性的介紹,讓您了解transformers如何生成文本。如果您想要深入了解transformer背后的數學原理,請觀看以下視頻(YouTube)。寫在最后

正如你所看到的,Transformer的架構并不復雜。它們是由幾個塊連接而成,每個塊都有自己的功能。它們之所以能夠工作得如此出色,主要原因在于它們具有大量參數,可以捕捉上下文中許多方面的信息。我們很期待看到您使用Transformer模型構建什么!

最后,你知道為什么這輪技術變革不是來自人工智能強大的Google或者Facebook,而是來自像OpenAI這樣的初創公司呢?

本文由人人都是產品經理作者【南村小付】,微信公眾號:【南村小付】,原創/授權 發布于人人都是產品經理,未經許可,禁止轉載。

題圖來自Unsplash,基于 CC0 協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發揮!