在人工智慧的浩瀚星空中,Transformer架構如同一顆璀璨的新星,為大型語言模型(LLM)的發展帶來了革命性的突破。然而,這顆新星是否真的是驅動LLM進化的核心力量?還是其他因素在背後默默支撐?讓我們一起踏上這段探索之旅,揭開Transformer背後的神秘面紗。 Transformer的魅力與挑戰 Transformer架構自問世以來,憑藉其獨特的注意力機制,讓模型能夠捕捉詞彙之間的複雜關聯,深入理解語言的精髓。這種能力使其在機器翻譯、文本摘要等任務中大放異彩。然而,正如每顆明星都有其陰影面,Transformer也面臨著自身的挑戰。 優勢: 並行計算:不同於傳統的循環神經網路(RNN),Transformer能同時處理序列中的所有詞彙,大幅提升訓練速度。 長程依賴:其注意力機制能有效捕捉長距離詞彙間的關聯,讓模型對長文本的理解更加透徹。 靈活性:透過調整架構和訓練數據,Transformer能適應多種自然語言處理任務。 挑戰: 資源需求:龐大的參數量使得訓練Transformer需要大量的計算資源,這對許多研究機構和企業而言是一大門檻。 解釋性不足:模型的決策過程如同黑箱,難以解釋其內部運作,影響在關鍵領域的應用。 數據依賴:對大量高品質數據的需求,可能導致模型產生偏見或泛化能力不足的問題。 LLM的進化之路:不止於Transformer 雖然Transformer為LLM的發展鋪平了道路,但單靠它並不足以支撐整個架構。模型的性能還取決於訓練數據的質量、參數的調整,以及優化策略的應用。此外,其他技術如高效的編碼器-解碼器架構、知識增強技術等,也在提升LLM的性能和應用範圍中扮演著重要角色。 未來展望:尋找新的可能性 隨著科技的日新月異,研究者們開始探索超越Transformer的替代技術。卷積神經網路(CNN)的改良、圖神經網路(GNN)的應用,以及記憶網路(Memory Networks)的進化,都是潛在的方向。這些新興技術可能帶來更精簡的模型架構,降低訓練成本,同時提升模型的泛化能力。 Transformer如同AI世界中的璀璨明星,為LLM的發展帶來了前所未有的突破。然而,真正的力量源泉在於多種技術的協同作用。未來,我們需要持續探索新的技術,並將其與現有架構相結合,才能推動LLM邁向更高的巔峰。 1. 簡介 (Introduction) 想像有一位博覽群書、懂各種領域的「AI 大師」坐在你面前,無論是中文、英文、法文,或是任何一種語言的疑難雜症,它都能在短短幾秒內為你給出答案。這聽起來是不是很神奇? 其實,這就是所謂的 大型語言模型(LLM, Large Language Model) 的概念。 LLM 通常預先在大量文本上進行訓練,例如 Common Crawl、Wikipedia 等等。它可以用來做文本的摘要、翻譯、生成等任務,也能對多種語言進行處理。它所依託的核心技術包括: 1. Transformer 模型架構:由編碼器(Encoder)與解碼器(Decoder)組成,掌握文字序列與上下文關係。 2. Attention 機制:讓模型能夠捕捉文本中遠距離的依存關係。 3. 自回歸式(Autoregressive)文字生成:模型依據先前產生的詞彙,一步一步生成後續的文字。 有名的 LLM 例子包括:OpenAI 的 GPT-3、GPT-4、Meta 的 LLaMA 2,以及 Google 的 Gemini。這些超強大模型正在顛覆搜索引擎、自然語言處理、醫療、機器人以及程式碼生成等各行各業。 來源: [klu.ai] 1.1 LLM 是如何構 建與訓練的? (How are LLMs built and trained?) 構建和訓練 LLM 是一個繁複的過程,基本流程如下: 1. 資料蒐集:從書籍、網路、社群媒體等取得大量文本資料,並做初步的清洗和格式化。 2. 模型架構:通常採用深度神經網路(Transformer、GPT、BERT…)並配備數十億參數。 3. 訓練:使用強大的運算資源(如 GPU、TPU),透過優化演算法讓模型在大量語料中學習如何「預測下一個字」。 4. 擴充:擴大資料、參數量及運算能力,讓模型逼近人類在語言理解和生成上的表現。 LLMOps 則專注在 部署、監控、維運 LLM,包括模型的版本控制、水平擴充與效能調校等等。 來源: [klu.ai] 1.2 背景:Transformer 之前的世界 (The Pre-Transformer Era) 在 Transformer 橫空出世前,學界常用的主流方法是 RNN(Recurrent Neural Network)以及 CNN(Convolutional Neural Network)。儘管它們在處理序列資料上取得相當成就,卻仍有一些限制性,使得大部分人開始尋覓新的解決方案。 1.2.1 多層感知器 (MLPs) —— 早期深度學習的代表 概述 多層感知器(MLPs, Multi-Layer Perceptrons)是深度學習最基本的模型之一,也是最早期成功的人工神經網路(ANN)架構。MLP 由多個全連接層(Fully Connected Layers)組成,每層神經元透過加權輸入、激活函數(Activation Function)進行變換,最後通過輸出層進行預測。這種架構在圖像分類、語音識別、基本的自然語言處理(NLP)等早期應用中發揮了重要作用。 架構 MLPs 的主要組成部分包括: • 輸入層(Input Layer):接受原始數據輸入(如圖像像素值、文本特徵向量等)。 • 隱藏層(Hidden Layers):通常由多個全連接層組成,每層神經元使用激活函數(如 ReLU、Sigmoid、Tanh)進行非線性變換。 • 輸出層(Output Layer):負責最終的分類或回歸結果輸出。 特性與優勢 1. 強大的非線性建模能力:MLP 透過多層隱藏層與非線性激活函數,能夠學習複雜的映射函數,比單純的線性模型更具表達能力。 2. 適用於結構化數據:MLP 在處理數字特徵、表格數據(tabular data)等結構化數據時表現良好。 3. 普遍適用的基本模型:MLP 是神經網路的基礎架構,可作為許多複雜深度學習模型(如 CNN、RNN、Transformer)的組成部分。 限制與挑戰 儘管 MLP 在許多領域中有不錯的表現,但它存在以下幾個主要問題: 1. 參數量龐大,容易過擬合 • MLP 需要對每一層的所有神經元進行全連接,因此當網路層數增多時,參數量會迅速增長,導致訓練成本提高,並且容易出現過擬合(Overfitting)。 2. 無法有效捕捉序列資訊 • MLP 在每一層中都是獨立的全連接運算,無法保留序列資訊。例如,在自然語言處理(NLP)或時序數據分析(如股市預測)中,MLP 無法學習數據的時間依賴性,這使得它難以處理長序列數據。相比之下,循環神經網路(RNN)或 Transformer 更適合這類任務。 3. 無法有效利用空間結構資訊 • MLP 的全連接層使得其難以直接利用圖像、語音等數據的空間結構。例如,在計算機視覺中,卷積神經網路(CNN)透過局部感受野(Receptive Field)來捕捉局部特徵,而 MLP 則無法直接做到這一點。 MLP 在現代深度學習中的角色 儘管傳統的 MLP 受到上述限制,但近年來一些新的研究重新探索了 MLP 架構的潛力,例如: • MLP-Mixer(2021):利用 MLP 來取代傳統的卷積操作,在某些視覺任務上達到了接近 CNN 和 Transformer 的效果。 • gMLP(2021):透過門控機制(Gated MLP)來增強 MLP 的表達能力,使其能夠在一定程度上捕捉序列資訊。 • FFN(Feed-Forward Network)在 Transformer 中的應用:現代 Transformer(如 GPT-4、BERT)中仍然包含 MLP 結構,作為前饋神經網路(Feed-Forward Network, FFN)的一部分。 結論 MLP 是深度學習發展的基礎,雖然其原始形式在許多應用場景下已被 CNN、RNN、Transformer 取代,但它仍然是許多現代架構的一部分,特別是在處理結構化數據時仍然具有競爭力。此外,近年的研究如 MLP-Mixer 和 gMLP 也讓 MLP 在深度學習領域重新受到關注。 [Credits: deeprevision] 1.2.2 循環神經網路 (RNNs) RNN 則能透過「循環機制」把先前狀態的資訊帶到下一個時間步,理論上可以捕捉長序列依存關係。 [插圖:Credits: experfy] 然而,一旦序列過長,梯度消失 或 梯度爆炸 問題就會變得嚴重。再加上 RNN 需要逐步處理資料,無法同時並行運算,導致在大型資料集上的訓練速度往往緩慢。 1.2.3 長短期記憶單元 (LSTM) LSTM 加入了「記憶體單元(Cell state)」與「門(Gate)」機制,用「選擇性記住或忘記」的方式來改良 RNN 的長序列依存問題。雖然 LSTM 解決了一部分問題,但若序列更長、或需要更高級特徵,依舊會出現 效能不彰的情形。 補充: 長短期記憶網路(LSTM, Long Short-Term Memory)詳解 上面這張圖顯示了一個 LSTM(Long Short-Term Memory) 單元的內部結構,它是一種 改進版的循環神經網絡(RNN),能夠有效解決 長期依賴問題(Long-Term Dependency Problem),在處理序列數據(如語言建模、語音識別、時間序列預測)時表現出色。 1. 為什麼需要 LSTM? 傳統 RNN 的問題: • RNN 主要依賴隱藏狀態(hidden state)來存儲過去的信息,但當序列過長時,舊信息會因 梯度消失(vanishing gradient)或梯度爆炸(exploding gradient) 而逐漸遺失,導致難以學習長距離依賴關係。 LSTM 的解決方案: • LSTM 引入了 記憶單元(Cell State, ) 和 門控機制(Gate Mechanism),透過這些設計來選擇性保留或丟棄信息,使得神經網絡能夠更有效地學習長期依賴。 2. LSTM 的核心結構 LSTM 的核心由以下三個「門」組成: (1) 忘記門(Forget Gate, ) • 負責決定 應該丟棄多少舊資訊,確保不必要的信息不會影響後續學習。 • 公式:(課程就不說那麼複雜) • (Sigmoid 函數):將輸出壓縮到 ,1 表示完全保留,0 表示完全丟棄。 • 和 是學習參數。 (2) 輸入門(Input Gate, ) • 負責決定 應該更新多少新資訊,讓新的輸入資訊影響記憶單元。 • 公式:(課程就不說那麼複雜) • 控制新訊息 如何影響記憶單元。 • 候選記憶資訊: • 是新的候選資訊,範圍在 ,可以存儲新的信息。 (3) 輸出門(Output Gate, ) • 負責決定 該輸出多少資訊到下一個時間步,也就是 當前時間步的隱藏狀態()。 • 公式:(課程就不說那麼複雜) • 決定 記憶單元 的哪些部分要輸出。 • 記憶單元的資訊經過 激活函數處理: • 作為當前時間步的輸出,並傳遞到下一個 LSTM 單元。 3. LSTM 記憶更新流程 (1) 忘記舊資訊 • 會決定是否保留之前時間步的資訊: (2) 記憶新資訊 • 候選記憶資訊 透過輸入門 決定要加進多少新資訊。 (3) 決定輸出 • 由輸出門 控制當前時間步的輸出資訊。 4. LSTM vs. 傳統 RNN 記憶能力 只保留短期記憶 能保留長期記憶 梯度消失問題 嚴重 改善 適用於長序列 否 是 結構 單純的 遞迴 引入 和門控機制 RNN 記憶能力:只保留短期記憶, 改善 適用於長序列:否, 結構:遞迴 LSTM 記憶能力 :能保留長期記憶, 改善 適用於長序列:是, 結構:引入 和門控機制 5. LSTM 的應用 LSTM 目前在許多 序列數據相關應用 中被廣泛使用,包括: • 自然語言處理(NLP): • 文字生成(如 ChatGPT 的基礎模型) • 機器翻譯(Google Translate 早期版本) • 語音識別(Siri、Google Assistant) • 時間序列分析: • 股票市場預測 • 氣象預測 • 音樂生成、影片分析: • 音樂旋律生成 • 影片中物體追蹤 6. 總結 LSTM 是 RNN 的改進版本,透過「忘記門、輸入門、輸出門」來控制信息流動,使其能夠有效地記住長序列的資訊,解決了 RNN 中的梯度消失問題。在 NLP、語音識別、時間序列分析等領域發揮了巨大作用。 🔹 關鍵點回顧: • LSTM 透過 記憶單元 保留長期資訊。 • 三個 門控機制(忘記門、輸入門、輸出門) 控制資訊流動。 • 相較於 RNN,LSTM 解決了梯度消失問題,更適合長序列任務。 這就是 LSTM 的完整解析!🎯 1.2.4 注意力機制 (Attention Mechanism) 在 RNN/LSTM 中引入 注意力機制(Attention),可以讓模型在翻譯或生成時,特別關注(focus)句子中的某些位置。然而,這依舊受制於必須逐字(或逐時間步)處理的限制,平行化程度不佳。 Attention Mechanism補充: 簡單易懂的 RNN/LSTM + 注意力機制解釋 在 RNN 或 LSTM 中,我們希望模型能夠處理 一整段句子或一連串時間序列數據,例如翻譯一段話或根據過去的股市走勢預測未來價格。但 RNN/LSTM 有兩個主要問題: 1. 逐步處理(Sequential Processing):模型必須一個接一個地讀取單詞或數據點,無法一次處理所有資訊,導致訓練與推理速度較慢,難以平行運算(parallelization)。 2. 長距離依賴問題(Long-term Dependency):當輸入的句子很長時,前面的資訊可能會被逐漸遺忘或影響變小,導致模型難以記住重要的內容。 為什麼需要「注意力機制(Attention)」? 想像你在閱讀一篇文章,當你讀到一個句子時,你不會只記住最後一個單詞,而是會根據句子的內容,把重點放在 「對當前理解最有幫助的單詞」 上。例如: 🔹 句子:「貓跳到屋頂上,然後優雅地跳下來。」 🔹 問題:「貓最後在哪裡?」 🔹 如果只記住最後幾個單詞:你可能記得「跳下來」,但不知道「從哪裡跳下來」。 🔹 如果使用注意力機制:模型會特別關注「屋頂」這個詞,因為這與「跳下來」的目標位置有關。 如何在 RNN/LSTM 中使用「注意力機制」? 注意力機制的核心思想是: 👉 在每個時間步(Time Step),讓模型「動態地選擇」哪些過去的單詞/資訊是最重要的,而不是只依賴最後的隱藏狀態。 💡 步驟簡單解釋: 1. 計算關鍵性(Attention Score):對當前輸出來說,過去每個時間步的重要性不同,因此計算「現在這一刻該關注哪些時間步」。 2. 加權求和(Weighted Sum):將重要的資訊加權平均,讓模型能夠更精確地獲取有價值的資訊。 3. 用於預測下一個單詞(或輸出):讓模型能夠根據「最相關的資訊」來做出更準確的決策。 仍然存在的問題: 即使加入了注意力機制,RNN/LSTM 還是必須逐步處理序列(例如翻譯一整段句子時,模型仍需「一個單詞一個單詞地生成」),這導致計算無法完全平行化,處理長句子時仍然會比較慢。 這也是為什麼後來 Transformer(如 GPT、BERT)取代了 RNN/LSTM —— 因為它完全依賴「自注意力機制(Self-Attention)」,可以一次性處理整個序列並且支持高度平行化運算,大幅提升了效率! 🚀 總結 ✅ RNN/LSTM 的問題: • 逐步處理,無法平行化 • 長序列可能會忘記重要信息 ✅ 注意力機制的解決方案: • 讓模型學習「關注」哪些部分比較重要,而不是只依賴最後的隱藏狀態 ✅ 仍然有的問題: • 仍然需要逐步運算,效率不如 Transformer 這也是為什麼 Transformer 取代了 RNN/LSTM,成為現在主流的深度學習架構! 💡 說到那麼多的記憶力機制加上注意力機制,又讓我想要延伸議題思考!! 那現在最火紅的Agent他又是怎麼記憶的?跟LSTM或Transformer的注意力機制好像聽起來有著微妙的關聯?又說不上哪裡有關聯是嗎? 沒關係我來寫一篇延伸思考跟大家討論一下...: 注意力機制(Attention) 與 AI 代理人(Agent) 的長短期記憶確實有關聯,尤其是在當前 AI 自主代理(Autonomous Agents) 越來越受關注的背景下。這不僅是一個技術性的話題,還能夠連結到 如何讓 AI 代理人具備更強的記憶能力與決策能力。如果要寫一個「延伸思考(Extended Thinking)」的部分,這會是一個很棒的方向。 🔍 延伸思考:從注意力機制到 AI 代理人的記憶設計 現代 AI 代理人,如 AutoGPT、BabyAGI、LangGraph Agents,通常需要: 1. 短期記憶(Short-term Memory):即時處理當前的任務,例如對話機器人回應當前的問題。 2. 長期記憶(Long-term Memory):記住過去的交互與經驗,以便未來決策能夠基於先前學習的資訊。 這與 注意力機制在 RNN/LSTM 中的角色相似: • 在 LSTM 中,記憶單元(Cell State, )決定長期資訊的保留與更新,類似於代理人的「長期知識庫」。 • 注意力機制(Attention)則負責動態選擇當前時刻最重要的資訊,類似於代理人每次決策時所「提取」的關鍵知識。 📌 1. AI 代理人的「注意力」:如何選擇關鍵資訊 在 AI 代理人架構中,關鍵問題之一是 如何從大量的記憶中檢索最相關的資訊,這與注意力機制的核心概念一致: • 在 LSTM 內部,注意力機制允許模型「關注」最重要的時間步,而不是僅依賴最終隱藏狀態(h_t ))。 • 在 AI 代理人中,我們希望它能從過去記憶中檢索出最相關的資訊來輔助決策(這與 RAG(檢索增強生成)技術息息相關)。 • 現代 AI 代理人的記憶系統(如 LangGraph)通常結合 向量數據庫(Vector Database) 來檢索過去的對話或行為,類似於 注意力機制在 Transformer 中的 Query-Key-Value 計算。 📌 2. 記憶的「動態更新」:如何平衡長短期記憶 在 LSTM 中,透過「忘記門(Forget Gate)」,模型能夠決定哪些資訊要遺忘,哪些要保留。這與 AI 代理人需要的「記憶管理」非常相似: • 如果 AI 代理人無法遺忘無關資訊,記憶會變得臃腫,影響檢索效率。 • 如果 AI 代理人遺忘太快,它就無法累積知識,影響長期規劃能力。 • 目前的解決方案包括: • 設計「記憶管理策略」,類似 LSTM 的門控機制(例如,LangGraph 讓代理人動態決定何時保留/遺忘某些知識)。 • 使用「檢索增強生成(RAG)」技術,讓代理人能夠檢索最相關的歷史記錄,而非存儲所有資訊。 這使得 AI 代理人能夠像人類一樣: ✅ 記住重要資訊,遺忘不必要細節 ✅ 動態選擇最適合當前決策的知識點 📌 3. 注意力機制與 AI 代理人的「專注力」 另一個有趣的關聯點是:如何讓 AI 代理人「專注於當前的關鍵任務」,而不被過多的記憶干擾? 在 Transformer 架構中,自注意力(Self-Attention) 能夠根據當前的上下文動態調整權重,確保模型不會被無關的資訊干擾。 同樣地,AI 代理人也可以: • 透過動態記憶檢索,確保每次行動都只使用最相關的知識,而不被大量過去資訊影響決策。 • 類似人類的「專注力」,確保 AI 代理人不會因為長期記憶太多而影響短期決策。 這讓 AI 代理人在長期任務(例如自動化研究、持續學習)時更加智能,並能夠根據當前的需求快速適應不同的場景。 📝 結論:從 RNN/LSTM 到 AI 代理人的記憶架構 🔹 LSTM 的記憶單元(Cell State)→ AI 代理人的長期記憶(Knowledge Base) 🔹 注意力機制(Attention)→ AI 代理人的知識檢索(RAG, Vector DB) 🔹 忘記門(Forget Gate)→ AI 代理人的記憶管理策略(Memory Pruning) 🔹 自注意力(Self-Attention)→ AI 代理人的專注力(Focused Task Execution) 👉 AI 代理人的長短期記憶機制,與 LSTM+Attention 有相似的設計哲學,只是應用場景不同。 👉 現代 AI 代理人透過 RAG、LangGraph、記憶管理技術,正在進化成更強大的「具備長短期記憶能力」的自主智能體! 這樣的探討可以作為你文章的 「延伸思考」,讓讀者理解從 RNN/LSTM 到 AI 代理人的技術演進。🔥 1.2.5 卷積神經網路 (CNNs) CNN 可以並行計算,且對區域性資訊敏感,但處理太長的序列(要關注到句子遠端的詞彙)時,仍顯得力不從心。 這時候,Transformer 便應運而生。 1.3 走進 Transformer (Introducing Transformers) Transformer 主打兩個重點: 1. 放棄了 RNN/CNN 的序列性運算,改用 自注意力(Self-Attention)。 2. 訓練可並行化,速度顯著提升。 讓我們先回顧三篇重要的先驅論文: 1. Sequence to Sequence Learning with Neural Networks 2. Neural Machine Translation by Jointly Learning to Align and Translate 3. Attention is All You Need 1.4 為什麼「Attention is All You Need」? (Why “Attention is All You Need”?) 1. 用自注意力取代 LSTM:使得訓練可並行化,大幅加快模型訓練速度。 2. 穩定的架構:加入多頭注意力(Multi-Head Attention)、位置編碼(Positional Encoding)等元素,使模型能不斷擴充。 3. 穩定的超參數:原始 Transformer 以 6 層編碼器及 6 層解碼器在多種 NLP 任務上都極具穩定性,使得後續研究廣泛沿用。 2. Transformer 架構 (Transformer Architecture) Transformer 的核心概念:給定一段文字(Prompt),模型預測下一個最有可能的詞彙。它可同時捕捉近距與遠距的相依關係。 Transformer 採用 「編碼器-解碼器」(Encoder-Decoder) 模式。編碼器負責將輸入序列壓縮成含上下文資訊的向量表示,解碼器根據這些表示一步步生成新的序列(譬如翻譯成另一種語言)。 2.1 嵌入 編碼器是 Transformer 架構的基本組成部分。編碼器的主要功能是將輸入的標記轉換為上下文表示。與早期獨立處理 token 的模型不同,Transformer 編碼器會捕捉相對於整個序列的每個 token 的上下文。 其結構組成如下: 文字輸入被分成更小的單位,稱為標記,可以是單字或子單字。這些標記被轉換成稱為嵌入的數字向量,用於捕捉單字的語義。 2.1.1 輸入嵌入 假設您想使用 Transformer 模型產生文字。您可以新增以下提示:“Data visualization empowers users to”。此輸入需要轉換成模型可以理解和處理的格式。這就是嵌入的作用所在:它將文字轉換為模型可以使用的數字表示形式。要將提示轉換為嵌入,我們需要 對輸入進行標記, 取得 token 嵌入, 添加位置信息,最後 將標記和位置編碼相加以獲得最終的嵌入。 讓我們看看每個步驟是如何完成的。 擴展嵌入層視圖,顯示輸入提示如何轉換為向量表示。該過程涉及(1)標記化,(2)標記嵌入,(3)位置編碼,以及(4)最終嵌入。 嵌入僅發生在最底部的編碼器。編碼器首先使用嵌入層將輸入標記(單字或子單字)轉換為向量。這些嵌入捕獲標記的語義含義並將其轉換為數字向量。 所有編碼器都會收到一個向量列表,每個向量的大小為 512(固定大小)。在底部編碼器中,這將是詞嵌入,但在其他編碼器中,這將是位於它們正下方的編碼器的輸出。 步驟 3:位置編碼 編碼器的工作流程。位置編碼 |圖片來源:Datacamp 圖片來源:Vaclar Kosar 自注意力機制最好的部分是它能夠根據特定詞語所使用的上下文產生動態上下文嵌入。此外,自註意力機制的一個主要優點是它允許並行計算所有上下文嵌入,從而可以快速處理大型文件。然而,這種並行處理有一個明顯的缺點:自注意力模組無法捕捉句子中單字的順序。例如,考慮以下兩句話: 拉維殺死了獅子。 獅子殺死了拉維。 如果您將這兩個句子都經過自我注意力模組,它將無法區分它們,因為它沒有捕捉到單字的順序。 這種限制可能會導致意義上的誤解,因為該模組將包含不同順序的相同單字的句子視為相同的句子。為了解決這個問題,Transformer 架構中引入了位置編碼。位置編碼提供有關句子中單字順序的信息,確保模型理解該序列並保持正確的上下文。 驟 4:最終嵌入 最後,我們將標記和位置編碼相加以獲得最終的嵌入表示。這種組合表示既捕獲了標記的語義含義,也捕獲了它們在輸入序列中的位置。 2.2 編碼器 編碼器層堆疊 編碼器的工作流程。編碼器層堆疊 |圖片來源:Datacamp Transformer 編碼器由一堆相同的層組成(原始 Transformer 模型中為 6 個)。這個數字是透過實驗獲得的,可以為各種任務提供最佳結果。 編碼器層用於將所有輸入序列轉換為連續的、抽象的表示,並封裝從整個序列中學習到的資訊。此層包含兩個子模組: 多頭注意力機制。 一個完全連接的網路。 但是這些區塊如何協同工作呢?編碼器區塊的實際架構包括附加元件,例如添加層和範數層以及殘差連接。這些確保資訊流在通過每個區塊時保持順暢。 輸入資料(通常是一批句子)進入第一個編碼器區塊,經過處理,然後輸出移動到下一個編碼器區塊。這個過程在所有六個編碼器區塊中持續進行,最終輸出被傳遞給解碼器。每個區塊以類似的方式處理數據,使得整個架構高度高效且結構化。 簡而言之,它結合了每個子層周圍的殘差連接,然後進行層規範化。 2.2.1 多頭自註意力 自註意力機制使模型能夠專注於輸入序列的相關部分,從而能夠捕捉資料中的複雜關係和依賴關係。讓我們看看如何一步一步計算這種自我注意力。 查詢、鍵和值矩陣 每個 token 的 embedding 向量轉換成三個向量:Query (Q)、Key (K)、 Value (V)。這些向量是透過將輸入嵌入矩陣與 Q、K 和 V 的學習權重矩陣相乘而得出的。 查詢(Q)是您在搜尋引擎欄中輸入的搜尋文字。這是您想要“查找更多資訊”的令牌。 鍵(K)是搜尋結果視窗中每個網頁的標題。它表示查詢可以關注的可能的標記。 價值(V)是網頁所顯示的實際內容。一旦我們將適當的搜尋字詞(查詢)與相關結果(鍵)匹配,我們就想要得到最相關頁面的內容(值)。 透過使用這些 QKV 值,模型可以計算注意力分數,這決定了每個標記在產生預測時應該獲得多少關注。 第一個自註意力模組使模型能夠從整個序列中捕獲上下文資訊。查詢、鍵和值不是執行單一的注意函數,而是線性投影 h 次。在每個查詢、鍵和值的投影版本上,注意機制並行執行,產生 h 維輸出值。 詳細架構如下: 矩陣乘法 (MatMul) — 查詢與鍵的點積 一旦查詢、鍵和值向量通過線性層,就會在查詢和鍵之間執行點積矩陣乘法,從而建立分數矩陣。 分數矩陣決定了每個單字對其他單字的強調程度。因此,每個單字都會根據同一時間步長內的其他單字被分配一個分數。分數越高,表示關注度越高。 該程序有效地將查詢映射到其對應的鍵。 編碼器的工作流程。注意機制——矩陣乘法。 降低注意力分數的大小 然後透過將分數除以查詢和鍵向量的維度的平方根來縮小分數。實施此步驟是為了確保梯度更穩定,因為值的乘積可能會導致過大的影響。 編碼器的工作流程。降低注意力分數。 |圖片來源:Datacamp 將 Softmax 應用於調整後的分數 隨後,將softmax函數應用於調整後的分數以獲得注意力權重。這會導致機率值的範圍從 0 到 1。 編碼器的工作流程。 Softmax 調整分數。 將 Softmax 結果與值向量結合 注意力機制的下一步是將來自softmax函數的權重與值向量相乘,得到輸出向量。 在這個過程中,只有那些呈現高softmax分數的單字才會被保留。最後,此輸出向量輸入到線性層進行進一步處理。 編碼器的工作流程。將 Softmax 結果與值向量結合。 |圖片來源:Datacamp 最後我們就得到了Attention機制的輸出! 那麼,你可能想知道為什麼它被稱為多頭注意力? 請記住,在整個過程開始之前,我們會將查詢、鍵和值分解 h 次。這個過程被稱為自我注意力,在每個較小的階段或「頭部」中分別發生。每個頭部都獨立發揮其魔力,產生一個輸出向量。 這個集合經過最後的線性層,很像一個微調其集體性能的過濾器。這裡的美妙之處在於每個頭部學習的多樣性,透過強大而多方面的理解豐富了編碼器模型。 2.2.2 歸一化和殘差連接 編碼器的工作流程。多頭注意力機制 (Multi-Head Attention) 後的歸一化與殘差連結。 |圖片來源:Datacamp 編碼器層中的每個子層後面都有一個標準化步驟。此外,每個子層輸出都添加到其輸入(殘差連接)中,以幫助緩解梯度消失問題,從而允許更深的模型。前饋神經網路之後也將重複這個過程。 2.2.3 前饋神經網絡 編碼器的工作流程。前饋神經網路子層。 歸一化殘差輸出的旅程繼續進行,因為它會透過逐點前饋網絡,這是進一步細化的關鍵階段。 將此網路想像為兩個線性層,其中 ReLU 激活層位於它們之間,充當橋樑。一旦經過處理,輸出就會踏上一條熟悉的路徑:它會循環回來並與逐點前饋網路的輸入合併。 這次重聚之後,又將進行新一輪的正常化,確保一切都調整好,為下一步行動同步進行。 2.2.4 編碼器的輸出 最後的編碼器層的輸出是一組向量,每個向量都以豐富的上下文理解來表示輸入序列。然後將此輸出用作 Transformer 模型中解碼器的輸入。 這種仔細的編碼為解碼器鋪平了道路,引導它在解碼時注意輸入中的正確單字。 想像建造一座塔,你可以在其中堆疊 N 個編碼器層。此堆疊中的每一層都有機會探索和學習注意力的不同方面,就像知識層一樣。這不僅使理解多樣化,而且可以顯著增強變壓器網路的預測能力。 2.3 解碼器 解碼器的作用在於製作文字序列。與編碼器類似,解碼器配備了一組類似的子層。它擁有兩個多頭注意層、一個逐點前饋層,並在每個子層之後結合了殘差連接和層規範化。 編碼器的全域結構。 |圖片來源:Datacamp 這些組件的功能類似於編碼器的層,但有一個不同之處:解碼器中的每個多頭注意層都有其獨特的使命。 解碼器過程的最後涉及一個線性層,作為分類器,頂部有一個softmax函數來計算不同單字的機率。 Transformer 解碼器具有專門設計的結構,透過逐步解碼編碼資訊來產生此輸出。 值得注意的是,解碼器以自回歸的方式運行,並以起始標記啟動其進程。它巧妙地使用先前生成的輸出列表作為其輸入,並與來自編碼器的富含初始輸入的注意力資訊的輸出相結合。 這種連續的解碼過程持續到解碼器到達一個關鍵時刻:產生一個標記,標誌著其輸出創建結束。 2.3.1 輸出嵌入 在解碼器的起始行,該過程與編碼器的過程相同。在這裡,輸入首先經過一個嵌入層 2.3.2 位置編碼 嵌入之後,就像解碼器一樣,輸入經過位置編碼層。該序列旨在產生位置嵌入。 然後,這些位置嵌入被引導到解碼器的第一個多頭注意層,在那裡精確計算特定於解碼器輸入的注意分數。 2.3.3 解碼器層的堆疊 解碼器由一組相同的層組成(原始 Transformer 模型中為 6 個)。每層都有三個主要子組件: 1. 掩蔽自註意力機制 這類似於編碼器中的自註意力機制,但有一個關鍵的區別:它防止位置關注後續位置,這意味著序列中的每個單字不受未來標記的影響。 例如,在計算單字「are」的注意力分數時,重要的是「are」不會被序列中的後續單字「you」所影響。 解碼器的工作流程。第一個多頭注意力遮罩。 這種掩蔽確保特定位置的預測只能依賴該位置之前已知的輸出。 2. 編碼器-解碼器多頭注意力或交叉注意力 在解碼器的第二個多頭注意層中,我們看到編碼器和解碼器元件之間的獨特相互作用。在這裡,編碼器的輸出既充當查詢又充當鍵的角色,而解碼器的第一個多頭注意層的輸出則充當值。 這種設定有效地將編碼器的輸入與解碼器的輸入對齊,使解碼器能夠識別並強調編碼器輸入中最相關的部分。 隨後,第二層多頭注意力的輸出將透過逐點前饋層進行細化,從而進一步增強處理。 解碼器的工作流程。編碼器-解碼器注意力機制。 在這個子層中,查詢來自前一個解碼器層,而鍵和值來自編碼器的輸出。這使得解碼器中的每個位置都能專注於輸入序列中的所有位置,從而有效地將來自編碼器的信息與解碼器中的信息整合在一起。 3.前饋神經網絡 與編碼器類似,每個解碼器層都包含一個完全連接的前饋網絡,分別且相同地應用於每個位置。 2.3.4 線性分類器和 Softmax 產生輸出機率 資料通過變換器模型的旅程最終會通過最後的線性層,該層起到分類器的作用。 這個分類器的大小與所涉及的類別的總數(詞彙表中包含的單字數)相對應。例如,在有 1000 個不同類別代表 1000 個不同單字的場景中,分類器的輸出將是一個包含 1000 個元素的陣列。 然後將該輸出引入到 softmax 層,將其轉換為一系列機率分數,每個分數介於 0 和 1 之間。 解碼器的工作流程。 Transformer 的最終輸出。 2.3.5 規範化和殘差連接 每個子層(掩蔽自註意力、編碼器-解碼器注意力、前饋網路)後面都有一個標準化步驟,每個子層還包括一個周圍的殘差連接。 2.3.6 解碼器的輸出 最後一層的輸出被轉換成預測序列,通常透過線性層然後是softmax來產生詞彙的機率。 解碼器在其操作流程中,將新產生的輸出合併到其不斷增長的輸入清單中,然後繼續解碼過程。這個循環重複進行,直到模型預測出一個特定的標記,表示完成。 預測機率最高的標記被指定為結論類,通常由結束標記表示。 再次記住,解碼器不僅限於單層。它可以由 N 層構成,每一層都基於從編碼器及其前一層接收的輸入來建構。這種分層架構允許模型分散其焦點並在其註意力頭中提取不同的注意力模式。 這種多層次的方法可以顯著增強模型的預測能力,因為它對不同的注意力組合有了更細緻的理解。 最終的架構與此類似(來自原始論文) Transformers 的原始結構。 3. LLM 架構 機器學習 (ML) 中的架構是指模型的神經元和層的排列。它就像一個藍圖,概述了模型如何從數據中學習。不同的架構捕捉資料中的不同關係,在訓練期間強調特定的組件。因此,架構會影響模型所擅長的任務及其所產生的輸出的品質。 3.1 Seq-2-Seq 模型(編碼器-解碼器) 圖片來源:Abhinav Kimothi 編碼器-解碼器由兩個元件組成: 編碼器-接受輸入資料並將其轉換為抽象的連續表示,以捕獲輸入的主要特徵。 解碼器-在吸收先前的輸出的同時,將連續表示轉換成可理解的輸出。 編碼和解碼過程使得模型能夠透過更有效的資料表示來處理複雜的語言任務,從而幫助模型做出連貫的回應。 這種雙過程架構在機器翻譯(將同一句話從一種語言轉換為另一種語言)和文字摘要(總結文字中的相同關鍵點)等生成任務中表現出色,在這些任務中,在生成輸出之前理解整個輸入至關重要。但是,由於需要先處理整體輸入,因此推理速度可能會較慢。 LLM 範例: 谷歌的 — T5、Flan-UL2和Flan-T5。 Meta 的BART。 3.2 自動編碼模型(僅限編碼器) 圖片來源:Abhinav Kimothi 流行的 BERT(“用於語言理解的深度雙向變壓器的預訓練”,2018)和 RoBERTa(“一種穩健優化的 BERT 預訓練方法”,2018)等模型使用僅編碼器架構將輸入轉換為豐富的、情境化的表示,而無需直接生成新序列。 例如,BERT 使用兩種創新方法在大量文字語料庫上進行預訓練:掩蔽語言建模 (MLM) 和下一句預測。 MLM 的工作原理是隱藏句子中的隨機標記,並訓練模型根據上下文預測這些標記。透過這種方式,模型可以理解左右上下文中單字之間的關係。這種「雙向」理解對於需要強大語言理解能力的任務至關重要,例如句子分類(例如情緒分析)或填補缺失的單字。 但與可以解釋和產生文字的編碼器-解碼器模型不同,它們本身無法產生長文字序列。他們更注重解釋輸入。 LLM 範例: Google 的BERT和ALBERT。 Meta 的RoBERTa。 微軟的DeBERTa。 3.3 自回歸模型(僅限解碼器) 圖片來源:Abhinav Kimothi 僅解碼器架構根據先前的上下文產生輸入序列的下一部分。與基於編碼器的模型不同,它們無法理解整個輸入,但擅長產生下一個可能的單字。因此,僅解碼器模型在輸出上更加“有創意”和“開放”。 這種逐個標記的輸出生成對於文字生成任務(如創意寫作、對話生成和故事完成)非常有效。 LLM 範例: Open AI 的GPT-4和GPT-3系列。 Google 的PaLM和Bard。 Meta 的LLaMA和OPT。 3.4 專家混合(MoE) Mistral 8x7B 等模型所採用的 MoE 與傳統的 Transformer 模型不同,它建立在這樣一個觀察基礎之上:單一整體語言模型可以分解為更小的、專門的子模型。在模型之間分配任務(例如切換輸入標記)的門控網路協調這些子模型,這些子模型專注於輸入資料的各個方面。 這種方法可以實現擴展(高效計算和資源分配)和多樣化技能,使 MoE 能夠出色地處理具有不同要求的複雜任務。該架構的整個目的是提高 LLM 參數的數量,而不會相應增加計算費用。 那麼,Mistral 8x7B 算是 LLM 嗎?儘管其架構與 transformer 模型存在差異,但由於以下幾個原因,它仍然有資格成為 LLM: 模型大小:其龐大的規模和參數數量(1870 億個參數)使其在複雜性和容量方面可與其他 LLM 相媲美。 預訓練:與其他 LLM 一樣,Mistral 8x7B 透過無監督學習技術在綜合資料集上進行預訓練,從而能夠理解和模仿類似人類的語言模式。 多才多藝:它展現了完成各種任務的熟練程度,展現了法學碩士的廣泛能力。 適應性:與其他 LLM 一樣,Mistral 8x7B 也可以針對特定任務進行微調,從而提高效能。 4. 推理 現在我們已經介紹了 Transformer 的架構並詳細了解了其元件,現在是時候討論如何實際執行推理了。我們已經訓練了我們的變換器模型,現在,在預測階段,架構的行為與訓練期間略有不同。 訓練和推理之間的主要區別: 訓練:訓練 Transformer 模型以學習輸入資料中的模式和關係(例如語言建模、翻譯等)。 推理:使用訓練好的 Transformer 模型進行預測,例如生成文本、翻譯語言或對文本進行分類。 在推理過程中,主要的差異發生在解碼器中。與訓練不同,在訓練中我們已經知道整個輸出句子,並且可以一次將所有標記傳遞給解碼器,使其以非自回歸的方式運行,而在推理過程中,我們沒有完整的輸出句子。因此,解碼器必須以自回歸的方式一次一個單字地產生翻譯。它使用每個先前預測的單字來幫助預測序列中的下一個單字。這個過程持續直到模型產生整個翻譯的句子。 圖片來源:Umar Jamil 推理過程中的資料流是: 輸入序列被轉換為嵌入(帶有位置編碼)並輸入到編碼器。 編碼器堆疊對此進行處理並產生輸入序列的編碼表示。 我們不使用目標序列,而是使用僅帶有句首標記的空序列。這被轉換成嵌入(帶有位置編碼)並輸入到解碼器。 解碼器堆疊將其與編碼器堆疊的編碼表示一起處理,以產生目標序列的編碼表示。 輸出層將其轉換為單字機率並產生輸出序列。 我們將輸出序列的最後一個字作為預測詞。該單字現在被填充到我們的解碼器輸入序列的第二個位置,該序列現在包含一個句子起始標記和第一個單字。 返回步驟#3。和以前一樣,將新的解碼器序列輸入模型。然後取出輸出的第二個字並將其附加到解碼器序列。重複此動作直到預測句子結束的標記。請注意,由於編碼器序列在每次迭代中都不會改變,因此我們不必每次都重複步驟 #1 和 #2 推理流程,在第一個時間步之後。圖片來源:Ketan Doshi 4.1 推理技術 Transformer 可用來推理,方法是每次輸入標記序列。編碼器用於處理輸入序列並產生嵌入序列。解碼器用於每次產生一個標記的輸出序列。解碼器使用編碼器輸出和先前產生的標記來產生下一個標記。 Transformer 可以使用不同的策略進行推理,例如貪婪搜尋和束搜尋。 4.1.1 貪婪搜索 貪婪搜尋是一種簡單的推理策略。在每個時間步驟中,解碼器根據其模型產生具有最高機率的標記。重複此過程直到解碼器產生序列結束標記。貪婪搜尋速度很快,但容易陷入局部最優。 貪婪搜索,來源:d2l.ai 4.1.2 集束搜索 集束搜尋是一種更複雜的推理策略。在每個時間步驟中,解碼器都會產生一束標記,其中束大小是一個超參數。然後,解碼器從光束中選擇前 k 個標記,並繼續從每個標記中產生標記。重複此過程直到解碼器產生序列結束標記。集束搜尋比貪婪搜尋慢,但可以產生更多樣化和準確的輸出。 束搜尋的過程(束大小=2;輸出序列的最大長度=3)。候選輸出序列為A、C、AB、CE、ABD、CED。來源:d2l.ai 還有其他可與 Transformer 一起使用的推理策略,例如採樣和核採樣。這些策略可用於產生更具創造性和多樣化的產出。 5. Transformer 推理優化 Transformer 模型以其自註意力機製而聞名,對於 NLP 和電腦視覺等任務至關重要。推理,即這些模型根據未知資料產生預測的階段,需要大量的計算資源。 影響 transformer 推理的一個關鍵因素是浮點運算 (FLOP) 的數量。每一層都涉及矩陣乘法,對於像 GPT-3 這樣的大型模型,每個 token 的 FLOP 可能高達數萬億。為了減少計算開銷,使用了鍵值(KV)緩存,允許模型重用先前計算的注意向量,從而加快自回歸解碼。 記憶體使用是另一個限制因素,GPT-3 等模型需要超過 200 GB 的記憶體。量化和並行等技術有助於更有效地管理這些資源,但變壓器推理通常仍然受到記憶體的限制,其中記憶體頻寬限制了計算速度。 5.1 Transformer 架構與推理流程 Transformer 的核心架構是基於自註意力機制和一系列堆疊層,每個層包含注意力和前饋網路。在推理過程中,Transformer 應用預先訓練的參數進行預測,通常在 GPT 等自迴歸模型中逐一標記地進行。 推理涉及幾個矩陣運算,特別是每個注意層中的矩陣向量乘法。對於每個新標記,模型透過將輸入嵌入與學習到的權重矩陣相乘來計算查詢(Q)、鍵(K)和值(V)向量。 注意力機制透過將查詢與轉置的鍵矩陣相乘、將結果縮放至維度大小的平方根並應用 softmax 函數來計算相關性分數。這個過程使得模型能夠衡量序列中每個標記的重要性。雖然這些矩陣乘法非常有效,但它們的計算成本很高,特別是在像 GPT-3 或 LLaMA 這樣的大型模型中,其中每個注意力頭每個 token 執行數十億次 FLOP。 5.2 Transformer 推理的階段:預填和解碼 Transformer 推理分為兩個關鍵階段:預先填入和解碼。這些階段決定了模型如何處理輸入標記並產生輸出標記,每個階段對效能有不同的影響。 1. 預填階段:在預填階段,模型並行處理整個輸入序列,將標記轉換為鍵值對。此階段計算密集但高度可並行,從而實現高效的 GPU 利用率。運算主要涉及矩陣-矩陣乘法,從而允許 GPU 同時處理多個標記。 Prefill 在批次方面表現出色,可以同時處理大量數據,從而最大限度地減少延遲。 2. 解碼階段:解碼階段較受記憶體限制且具有順序性,會逐一產生標記。每個新標記都依賴先前產生的標記,需要矩陣向量乘法,與預填充階段的平行特性相比,這會未充分利用 GPU。順序過程引入了延遲瓶頸,使得該階段的速度明顯變慢,尤其是在 GPT-3 這樣的大型模型中。 鍵值快取機制的說明,展示如何儲存先前計算的鍵和值以避免在推理過程中進行重複計算 |圖片來源:PremAI 鍵值(KV)快取是解碼階段的關鍵最佳化。透過儲存先前計算的鍵值矩陣,該模型避免了重新計算,從而將複雜性從二次降低到線性。 鍵值快取機制的圖示,展示了快取值如何減少解碼階段的運算負載 6. Transformer 推理中的挑戰 大型 Transformer 模型,尤其是像 GPT-3 這樣的大型語言模型 (LLM),由於其大小和計算要求,在推理過程中帶來了許多挑戰。這些挑戰圍繞著記憶體限制、延遲以及記憶體限制和計算限制操作之間的平衡。 1. 記憶體和運算需求:推理期間儲存模型權重和鍵值 (KV) 快取需要大量記憶體。像 GPT-3 這樣的大型模型具有 1750 億個參數,通常需要超過 200 GB 的記憶體。此外,KV 快取大小隨著序列長度和批次大小線性增長,進一步增加了記憶體負擔。例如,具有 70 億個參數和 4096 序列長度的 LLaMA 模型僅為 KV 快取就會消耗約 2 GB 的記憶體。 2. 順序令牌產生中的延遲:延遲是一個關鍵問題,特別是在解碼階段,其中令牌一次產生一個。每個新標記都依賴前一個標記,這會導致順序操作無法充分利用 GPU 的運算能力。即使高度最佳化的模型也會受到記憶體頻寬瓶頸的影響,並且隨著序列長度的增加,這種瓶頸問題會變得更加明顯。 3. 平衡批次大小和效能:更大的批次大小可以提高 GPU 利用率,尤其是在預填階段,但它們受到記憶體容量的限制。增加批次大小有助於最大化吞吐量,但僅限於系統受到記憶體限制的程度。除此之外,系統可能會遇到收益遞減的情況,因為記憶體頻寬開始限制進一步的效能提升。 4. 記憶體受限與計算受限操作的權衡: Transformer 推理在記憶體受限操作和計算受限操作之間交替進行。在解碼階段,矩陣向量乘法通常受記憶體限制,而預填矩陣-矩陣運算往往受計算限制。有效優化批次大小、KV 快取管理和精確度(例如 FP16、INT8)對於減少延遲和確保高效的 GPU 使用至關重要。 7. 更快推理的最佳化技術 隨著 GPT-3、LLaMA 和其他大型語言模型 (LLM) 等轉換器模型不斷擴展,最佳化技術對於管理與推理相關的增加的記憶體、計算負載和延遲變得至關重要。透過應用量化、鍵值 (KV) 快取、推測解碼、批次和平行等技術,開發人員可以顯著提高推理效能。 7.1 量化 量化前後的值的分佈,說明了從浮點數到 INT8 的轉換過程中的捨入和異常值剪切過程。 量化降低了模型權重和激活的精度,從而實現了更快的計算和更低的記憶體使用量。模型可以使用 8 位元(INT8)甚至更低的精度,而不是依賴 32 位元或 16 位元浮點精度,從而減少記憶體頻寬並允許模型更有效地處理更大的批次或更長的序列。 記憶體頻寬利用率 (MBU) 公式顯示記憶體頻寬如何限制效能,其中參數數量、每個參數的位元組數和每秒令牌數都會影響推理速度 例如,將 INT8 量化應用於 GPT-3 可以將記憶體需求減少高達 50%,直接導致推理過程中的延遲更低、吞吐量更高。量化對於面臨頻寬限制的記憶體受限模型特別有用。 將模型權重從 FP16 量化為 INT8 可以減少記憶體使用量,並透過降低記憶體頻寬需求來提高推理效能。 7.2 鍵值(KV)緩存 在自迴歸模型中,每個新的標記產生都需要存取所有先前的標記。隨著序列長度的增加,這會導致計算量呈現二次方增加。 KV 快取透過儲存先前標記的鍵和值張量來緩解這種情況,從而允許模型重複使用它們而無需重新計算。 KV 快取的大小隨著 token、layers 和 Attention Heads 的數量線性增長。例如,在 LLaMA 7B 模型中,4096 個標記的序列長度將需要大約 2 GB 的記憶體用於 KV 快取。這種優化顯著減少了解碼階段的計算負荷,提高了速度和記憶體效率。 7.3 推測解碼 推測解碼是一種高級優化技術,透過並行化令牌生成來減少延遲。推測解碼不是等待每個標記按順序處理,而是使用較小的草稿模型來預測前面的幾個標記,並使用主模型驗證預測。如果預測準確,則接受;如果不是,則將其丟棄。 這種方法允許並行執行,從而減少了產生令牌所需的整體時間,同時保持了準確性。它對於即時應用程式(例如聊天機器人)特別有用,因為快速回應時間至關重要。 7.4 批次 批次處理是一種優化變壓器推理的簡單但強大的技術。透過同時處理多個輸入,批次處理可以提高 GPU 的使用率,因為模型權重的記憶體成本在多個請求之間共享。然而,批次受到可用記憶體的限制,特別是在具有長序列的模型中。 傳統批次處理的一個挑戰是,批次內的不同請求可能會產生不同數量的輸出令牌。這可能會導致效率低下,因為所有請求都必須等待運行時間最長的請求完成。為了解決這個問題,正在進行的批次允許系統立即從批次中逐出已完成的請求,從而釋放資源以用於新請求。 7.5 硬體優化:並行性 硬體優化,特別是張量並行和管道並行,對於擴展大型模型至關重要。這些方法將計算負載分配到多個 GPU 上,使得系統能夠處理超出單一 GPU 記憶體容量的模型。 · 張量並行:此技術將模型的參數分散到多個 GPU 上,使它們能夠並行處理相同輸入的不同部分。張量並行對於注意層特別有效,其中不同的注意頭可以獨立計算。 · 管道並行:這種方法將模型分成連續的區塊,每個區塊由不同的 GPU 處理。管道並行減少了每個 GPU 的記憶體佔用,使更大的模型能夠有效運作。但是,在等待來自前幾個階段的資料時,它會在 GPU 之間引入一些空閒時間。 這兩種平行形式對於管理 GPT-3 和 LLaMA 等大型模型都至關重要,因為這些模型的記憶體和運算需求通常超出單一 GPU 的能力。 7.6 FlashAttention 和記憶體效率 另一個關鍵的進步是 FlashAttention,它透過減少資料載入和儲存在記憶體中的次數來優化記憶體存取模式。 FlashAttention 利用 GPU 記憶體層次結構更有效率地執行運算、融合操作並最大限度地減少資料移動。該技術可以減少記憶體浪費並實現更大的批量大小,從而顯著提高速度,尤其是在序列長度較大的模型中。 8. 推理效能基準測試 GPT-3 和 LLaMA 的基準測試說明了這些最佳化的影響。對於 GPT-3,與未優化的模型相比,KV 快取和量化的組合已被證明可以將推理時間減少多達 60%,吞吐量達到每秒數百個代幣。在 LLaMA 中,平行技術的使用確保即使是最大的模型(如 LLaMA 65B)也能保持高吞吐量,同時控制延遲。 這些優化使兩種模型能夠有效擴展,確保它們能夠處理現實世界的應用,從長上下文生成到即時回應,同時顯著減少計算和記憶體需求。 8.1 Transformer 推理的趨勢 隨著 Transformer 模型的規模和複雜性不斷增長,最佳化推理對於滿足實際應用的需求至關重要。下一波創新的重點是有效擴展變壓器模型、改善記憶體管理和利用先進的硬體功能。以下是影響變壓器推理未來的一些最具影響力的趨勢。 8.1.1 使用分頁和 FlashAttention 進行記憶體優化 一個關鍵趨勢是透過 PagedAttention 和 FlashAttention 等技術優化記憶體使用。在目前的推理過程中,模型通常會過度配置記憶體來處理最大可能的序列長度,從而導致效率低下。PagedAttention透過僅在需要時分配記憶體來解決這個問題,將鍵值 (KV) 快取分成更小的區塊並根據需要取得。 FlashAttention透過優化計算順序並減少記憶體和計算單元之間的資料移動進一步提高了記憶體效率。透過融合操作和利用 GPU 記憶體層次結構,FlashAttention 可以顯著減少記憶體浪費並實現更大的批次大小和更快的處理速度。這些進步對於擴展大型模型同時保持高效能至關重要。 8.1.2 多查詢和分組查詢注意 優化注意力機製本身是另一個重要趨勢。多重查詢注意力(MQA)和分組查詢注意力(GQA)是兩種在保持模型效能的同時減少記憶體佔用的變體。在 MQA 中,所有頭共享相同的鍵值對,這樣在保持準確性的同時減少了 KV 快取的大小。 分組查詢注意力 (GQA) 在 MQA 和傳統多頭注意力之間取得平衡,它對分組頭使用共享鍵值對。這種方法在保持高效能的同時進一步減少了記憶體使用量,使其對於像 LLaMA 2 70B 這樣的長上下文模型特別有用。 8.1.3 並行性:張量與序列 並行性仍然是擴展大型模型的核心策略。張量並行將模型層劃分為獨立的區塊,可跨多個 GPU 進行處理,從而減輕單一裝置的記憶體負擔。此方法對於注意力頭和前饋層非常有效,其中並行處理可以顯著提高效率。 vSequence 並行透過在序列維度上拆分 LayerNorm 和 Dropout 等操作進一步提高了記憶體效率。這減少了記憶體開銷,特別是對於長序列任務,並允許模型更有效地擴展。 8.1.4.即時應用的推測推理 對於即時應用,推測推理提供了一種減少延遲的創新方法。透過使用較小的草稿模型來預測未來的多個標記,推測推理可以實現並行執行。然後,主模型會驗證草稿令牌,然後決定接受或丟棄它們。 9.處理大型資料集 在大型資料集上訓練 Transformer 面臨獨特的挑戰,需要採取謹慎的策略: 9.1 高效率的資料載入與預處理 並行資料載入:利用 TensorFlowtf.data或 PyTorch等DataLoader多執行緒框架可以加快資料預處理速度。 混洗和批次:適當的混洗可以防止過度擬合任何特定的資料順序,而批次可以確保高效的 GPU 利用率。 9.2 分散式訓練 資料並行:模型在多個 GPU 上複製,每個 GPU 處理不同的小批量數據,並聚合梯度。 模型並行:模型本身分佈在多個 GPU 上,對於無法放入單一裝置記憶體的大型模型很有用。 9.3 混合精度訓練 利用 16 位元(半精度)浮點運算而不是 32 位元浮點運算可以顯著減少記憶體使用量並加快計算速度,而不會對準確度產生重大影響。 9.4 梯度累積 適用於批次大小受 GPU 記憶體限制的場景。在執行優化器步驟之前,梯度會在多個較小的批次中累積。 9.5 檢查點和恢復 在訓練期間定期保存模型狀態有助於在發生故障時從最後一個檢查點恢復,也可用於提前停止和微調的目的。 9.6 數據增強和採樣 資料增強技術增加了資料的可變性,有助於泛化。 智慧採樣策略確保模型不會過度擬合常見模式,而忽略罕見但重要的模式。 10. 結論 本學習文章深入探討大型語言模型 (LLM) 的開發和最佳化,首先概述其建構和訓練方法。它追溯了從 Transformer 之前模型到 Transformer 的變革性引入的演變,強調了關鍵的「注意力就是你所需要的一切」概念。 這篇的核心剖析了 Transformer 架構,詳細介紹了其嵌入層、編碼器-解碼器互動和自註意力機制等元件。它探索了各種 LLM 架構,包括 Seq-2-Seq、AutoEncoding 和 AutoRegressive 模型,闡明了它們獨特的功能。 對於實際部署,該學習文章研究了推理策略、最佳化技術(如量化、KV 快取、推測解碼和硬體並行性),並提供了 GPT-3 和 LLaMA 等真實範例。效能基準、記憶體最佳化和平行技術凸顯了高效 Transformer 推理的趨勢。 最後,文章討論如何處理大型資料集,討論了高效的資料處理、分散式訓練、混合精度技術和資料增強策略。本綜合指南將深入介紹如何有效地建置、最佳化和部署 LLM。