大型語言模型 (LLM)
備註
有關更多詳細信息,請參閱 文本和圖像 選項卡!
在生成式 AI 的核心,大型語言模型 (LLM) 及其更緊湊的關係小型語言模型 (SLM) 封裝了詞彙表中單詞和短語之間的語言和語義關係。 模型可以使用這些關係來推理自然語言輸入並產生有意義且相關的回應。
從根本上說,LLM 經過訓練,可以根據提示生成補全。 將它們視為許多手機上預測文字功能的超級強大範例。 提示會啟動一連串的文字預測,導致語意上正確的完成。 訣竅在於,模型理解單詞之間的關係,並且可以識別到目前為止序列中的哪些單詞最有可能影響下一個單詞;並使用它來預測序列最可能的延續。
例如,考慮以下句子:
我聽到一隻狗對著一隻貓大聲吠叫
現在,假設你只聽到了前幾個字:“ 我聽到一隻狗......”。 您知道其中一些單詞比其他單詞更有用,可以告訴下一個單詞可能是什麼。 您知道“聽到”和“狗”是接下來會發生什麼的有力指標,這有助於您縮小概率範圍。 你知道這句話很有可能繼續為“我聽到狗叫”。
您可以猜出下一個單詞,因為:
- 你有大量的詞彙可以使用。
- 您已經學習了常見的語言結構,因此您知道單詞在有意義的句子中如何相互關聯。
- 你對與單詞相關的語義概念有所了解——你知道你聽到的東西一定是某種聲音,並且你知道狗發出的特定聲音。
那麼我們如何訓練模型具有這些相同的能力呢?
語彙基元化
第一個步驟是為模型提供大量的單字和片語詞彙;我們確實指的是「大量」。 最新一代的 LLM 具有由數十萬個標記組成的詞彙,這些詞彙基於來自互聯網和其他來源的大量訓練數據。
等一下。 代幣?
雖然我們傾向於以「單字」來思考語言,但 LLM 會將其詞彙細分為「語彙基元」。 標記包括單詞,但也包括 子單詞(如“難以置信”和“不太可能”中的“un”)、標點符號和其他常用的字符序列。 因此,訓練大型語言模型的第一步是將訓練文字分解為不同的標記,並為每個標記指派一個唯一的整數標識符,如下所示:
- 我 (1)
- 聽過 (2)
- 一個 (3)
- 狗 (4)
- 樹皮 (5)
- 大聲 (6)
- 於 (7)
- a (3) 已分配
- 貓 (8)
依此類推。
當您新增更多訓練資料時,更多詞元將被新增至詞彙表,並指派識別碼。因此,您最終可能會得到像是小 狗、滑板、汽車等單詞的詞元。
備註
在這個簡單的範例中,我們已根據 單字對範例文字進行標記化。 實際上,還會有子詞、標點符號和其他標記。
使用轉換器轉換代幣
現在我們有了一組具有唯一 ID 的令牌,我們需要找到一種方法將它們相互關聯。 為此,我們為每個標記分配一個 向量 (多個數值的陣列,例如 [1, 23, 45])。 每個向量都有多個數字 元素 或維度,我們可以使用這些元素或 維度來編碼令牌的語言和語義屬性,以幫助以有效的格式提供有關令牌 含義 及其與其他令牌的關係的大量資訊。
我們需要根據標記出現在訓練資料中的上下文,將標記的初始向量表示轉換為嵌入其中的語言和語義特徵的新向量。 因為新向量中嵌入了語義值,所以我們稱之為 嵌入。
為了完成這項任務,我們使用 transformer 模型。 這種模型由兩個「區塊」組成:
- 藉由套用稱為「注意力」的技術來建立內嵌的「編碼器」區塊。 注意力層依序檢查每個代幣,並確定它如何受到周圍代幣的影響。 為了使編碼過程更有效率,使用 多頭注意力機制 來並行評估符號的多個元素,並分配可用於計算新向量元素值的權重。 注意力層的結果被輸入到一個完全連接的神經網絡中,以找到嵌入的最佳向量表示。
- 「解碼器」階層,使用編碼器計算的內嵌,以判斷提示所啟動之序列中下一個最有可能的語彙基元。 解碼器還使用注意力和前饋神經網絡來進行預測。
備註
我們在描述和圖表中大大簡化了 Transformer 架構和流程。 不要太擔心注意力如何運作的具體細節 - 關鍵點是它有助於根據每個標記的使用上下文捕獲每個標記的語言和語義特徵。 如果您想要深入了解轉換器結構及其使用方式,您可以閱讀原始您只需要注意力的論文。
初始向量和位置編碼
最初,標記向量值是隨機分配的,然後通過轉換器饋送以創建嵌入向量。 標記向量與 位置編碼 一起輸入轉換器,該編碼指示標記在訓練文本序列中出現的位置(我們需要這樣做,因為標記在序列中出現的順序與它們之間的關係相關)。 例如,我們的代幣一開始可能如下所示:
| 代幣 | 語彙基元識別碼 | Position | Vector |
|---|---|---|---|
| I | 1 | 1 | [3, 7, 10] |
| 聽到 | 2 | 2 | [2, 15, 1] |
| a | 3 | 3 | [9, 11, 1] |
| 狗 | 4 | 4 | [2, 7, 11] |
| 吠 | 5 | 5 | [9, 12, 0] |
| 大聲 | 6 | 6 | [3, 8, 13] |
| at | 7 | 7 | [5, 7, 10] |
| a | 3 | 8 | [9, 11, 1] |
| 貓 | 8 | 9 | [8, -6, 9 ] |
| ... | ... | ... | ... |
| 小狗 | 127 | 45 | [7、7、-2 ] |
| 汽車 | 128 | 56 | [5, -5, 1 ] |
| 滑板 | 129 | 67 | [4, 7, 14] |
備註
我們通過使用只有三個元素的向量來保持簡單(這將幫助我們稍後在三維中可視化它們)。 實際上,向量有數千個元素。
注意力和內嵌
為了確定包含內嵌上下文信息的記號的向量表示,轉換器使用 注意力 層。 注意力層依次考慮每個標記,並在標記所在的序列上下文中進行分析。 目前標記周圍的標記會加權以反映其影響,而權重用於計算當前標記內嵌向量的元素值。 例如,在「我聽到一隻狗在叫」的內容中考慮語彙基元「叫」時,「聽到」和「狗」的語彙基元會獲指派比「我」或「一隻」更多的權數,因為它們是「叫」的更強指標。
最初,該模型「不知道」哪些代幣會影響其他代幣;但是,當它暴露於大量文本時,它可以迭代學習哪些標記通常一起出現,並開始找到模式,以幫助將值分配給反映標記的語言和語義特徵的向量元素,根據它們的接近程度和一起使用頻率。 通過使用 多頭注意力機制並行考慮向量的不同元素,這個過程變得更加高效。
編碼過程的結果是一組嵌入向量,包含詞彙中標記如何相互關聯的上下文信息。 真正的轉換器會產生包含數千個元素的嵌入,但為了簡化,我們在範例中僅考慮三維向量。 詞彙的編碼過程的結果可能如下所示:
| 代幣 | 語彙基元識別碼 | 內嵌 |
|---|---|---|
| I | 1 | [2, 0, -1 ] |
| 聽到 | 2 | [-2, 2, 4 ] |
| a | 3 | [ -3, 5, 5 ] |
| 狗 | 4 | [10, 3, 2 ] |
| 吠 | 5 | [9, 2, 10 ] |
| 大聲 | 6 | [-3, 8, 3 ] |
| at | 7 | [-5, -1, 1] |
| 貓 | 8 | [10, 3, 1] |
| 小狗 | 127 | [5, 3, 2 ] |
| 汽車 | 128 | [-2, -2, 1 ] |
| 滑板 | 129 | [-3, -2, 2 ] |
| 吠 | 203 | [2, -2, 3 ] |
如果您善於觀察,您可能發現我們的結果包含語彙基元「叫」的兩個內嵌。 請務必瞭解,嵌入向量代表特定內容的詞元,且一些詞元可能用於表示多種事物。 例如,「狗」的「叫」與「樹」的「皮」不同! 在多個上下文中常用的詞元可以產生多個嵌入。
我們可以將嵌入的元素視為多維向量空間中的維度。 在我們的簡單範例中,我們的嵌入只有三個元素,因此我們可以將它們視覺化為三維空間中的向量,如下所示:
因為維度是根據記號在語言上彼此關聯的方式來計算的,所以在類似環境定義中使用的記號 (因此具有類似的意義) 會產生具有類似方向的向量。 例如,「狗」和「小狗」點的內嵌方向或多或少相同,這與「貓」的內嵌並無太大不同;但與「滑板」或「汽車」的內嵌截然不同。 我們可以透過計算標記向量的 餘弦相似度 來衡量標記在語義上彼此之間的接近程度。
從提示預測完成結果
既然我們有一組內嵌封裝語彙基元之間內容相關的關聯性,我們可以使用轉換器的「解碼器」區塊,根據啟動「提示」反覆預測序列中的下一個文字。
再次, 注意力 用於在上下文中考慮每個標記;但這次要考慮的上下文只能包括我們試圖預測的標記 之前 的標記。 解碼器模型會藉由套用稱為「遮罩處理注意力」的技術來訓練,並使用我們已經擁有完整序列的資料;其中會忽略目前語彙基元之後的語彙基元。 由於我們在訓練過程中已經知道下一個token,因此transformer可以將其與預測的token進行比較,並在後期的訓練迭代中調整學習到的權重,以減少模型中的誤差。
預測新的完成時,下一個語彙基元為未知,而注意力階層會計算下一個語彙基元的可能向量,並使用轉送網路來協助判斷最有可能的候選項目。 然後將預測值添加到序列中,整個過程重複以預測 下一個 標記;依此類推,直到解碼器預測序列已經結束。
例如,給定序列「當我的狗是...」時,模型將評估到目前為止序列中的標記,使用 注意力 來分配權重,並預測下一個最可能的標記是“小狗”,而不是“貓”或“滑板”。