# 大型語言模型(Large Language Model, LLM)原理概述 > 本文使用 Claude AI 生成 大型語言模型(Large Language Model, LLM)指的是使用大量文字數據進行訓練,從而獲得強大自然語言處理能力的人工智能模型。這些模型通過機器學習算法**分析大量文本資料,學習語言的統計規律和語義關係**,從而獲得理解和生成自然語言(NLP)的能力。 ![corenlp](https://hackmd.io/_uploads/H1D0oR_y0.png) > 圖檔來源:[中研院中文詞知識庫](https://ckip.iis.sinica.edu.tw/) 大型語言模型擁有**海量參數**,能夠捕捉語言的複雜模式和細微差異,從而提供更準確、更流暢、更富有創意的語言生成和理解能力。這些模型可以應用於自然語言處理的各個領域,如**機器翻譯、問答系統、文本摘要、內容創作**等。 大型語言模型的出現標誌著自然語言處理技術邁向一個新的里程碑,它們展現出驚人的語言理解和生成能力,為構建更智能、更人性化的人工智能系統奠定了基礎。但同時,這些模型也存在一些挑戰,如對抗性攻擊、隱私和安全風險、內容有偏差等,仍需要持續的研究和改進。 ![_ee672fad-f56a-4883-974c-7840fe412e09](https://hackmd.io/_uploads/HynnNCO1A.jpg) > Meta 發表 [LLaMA](https://llama.meta.com/);史丹佛大學發表輕量化 LLaMA 指令之 [Alpaca](https://crfm.stanford.edu/2023/03/13/alpaca.html) 模型;美國頂尖大學聯手訓練出類GPT-4 的 [Vicuna](https://lmsys.org/blog/2023-03-30-vicuna/) ,降低訓練成本,企圖讓 LLM 不會成為財閥的霸權工具,LLaMA, Alpaca, Vicuna, [Chimera](https://arxiv.org/abs/2402.15758) ...等駱馬家族成員陸續問世,無意間形成[動物園](https://github.com/FreedomIntelligence/LLMZoo)系列 ![alpaca_main](https://hackmd.io/_uploads/rJgx5Ad1C.jpg) > 說明了 Alpaca 是如何得到羊駝模型的。對於數據,我們透過基於自指令方法產生了遵循指令的演示。Alpaca從自指令種子集中的175 個人工編寫的指令輸出對開始。然後,Alpaca提示 text-davinci-003 使用種子集作為上下文範例產生更多指令。Alpaca透過簡化生成管道(請參閱GitHub中的詳細資訊)改進了自指令方法,並顯著降低了成本。Alpaca的資料產生流程產生 52K 個獨特的指令和相應的輸出,使用 OpenAI API 的成本不到 500 美元。 大型語言模型由海量參數組成,這些參數決定了模型對語言的理解和生成能力。參數一般分為以下幾種類型: ### 1.詞嵌入 (Word Embeddings)參數: ![詞向量 word Vector](https://hackmd.io/_uploads/rJLrpCdyC.png) > 將每個詞映射到一個密集向量,捕捉詞與詞之間的語義關係。 它將詞彙映射到一個連續的向量空間中,使得具有相似語義的詞彙在該向量空間中也相對較近。Word Embeddings賦予了詞彙語義表示的能力,是LLM理解和操作自然語言的基礎。 傳統的詞袋模型將每個詞視為一個獨熱向量,無法體現詞與詞之間的語義關聯。而Word Embeddings通過在大量文本數據上訓練,自動學習詞彙之間的語義和統計上下文關係,將它們映射到一個低維密集向量空間。在這個空間中,語義相似的詞會被賦予相近的向量表示。 Word Embeddings常見的訓練方法有Word2Vec、GloVe等。它們利用詞語的共現信息,使得在句子或窗口中同時出現的詞向量趨向相近。這種分佈式表示能有效捕獲詞彙豐富的語義關係,如同義、反義、類比等。 在LLM中,Word Embeddings是輸入數據的原始形式,它們將被送入深層神經網絡中進行上下文編碼和建模。高質量的詞嵌入向量能大幅提升模型的理解能力,是語義表示學習的第一步。 除了單詞級別,LLM也可以學習字符級、子詞級等不同粒度的嵌入表示,捕獲更精細的語義信號。embeddings作為模型的參數,會在訓練過程中不斷得到微調和優化。 ### 2.[注意力機制 (Attention Mechanism)](https://txt.cohere.com/what-is-attention-in-language-models/)參數: ![Vis-1](https://hackmd.io/_uploads/By43TROkA.jpg) > 計算不同詞或位置之間的關係權重,幫助模型專注於最相關的內容。 注意力機制(Attention Mechanism)是大型語言模型(LLM)中一個關鍵的創新,它賦予了模型權衡不同位置輸入的相關性並動態關注最重要信息的能力,大幅提升了LLM處理長序列的效果。 在自然語言處理任務中,不同位置的單詞對於生成下一個詞或理解當前詞的重要性是不同的。注意力機制通過計算一個加權函數,自適應地捕獲輸入序列中不同位置元素之間的關聯強度,並對它們的語義表示做加權求和,獲得最終的上下文向量表示。 注意力的計算過程包括以下幾個步驟: * 計算查詢(Query)與鍵(Keys)的相似度得分矩陣 * 對得分矩陣做softmax運算得到注意力權重矩陣 * 將注意力權重與值(Values)做加權求和,獲得上下文向量 其中,查詢是當前需關注的元素,鍵是輸入序列上的各元素,值則是對應的語義表示向量。通過這種機制,注意力模型可自動分配不同輸入元素的權重,關注對當前任務最重要的部分。 注意力機制突破了RNN等循環架構對長序列建模能力的限制,使LLM能更好地學習長距離依賴關係。與局部卷積不同,注意力是全局作用的,能直接關注序列中任何一個位置。 多頭注意力則進一步擴展了這一思路,分別從不同表示子空間計算注意力,融合多種注意力關注,提高了模型的建模能力。 除了輸入側,注意力也可應用於解碼器端,生成更符合上下文語義的輸出序列。 ### 3.變換器 (Transformer)參數: ![transformer](https://hackmd.io/_uploads/rJnSyktJ0.png) >編碼輸入序列,捕捉長期依賴關係。 上圖顯示了Transformer模型的架構,它主要由編碼器(Encoder)和解碼器(Decoder)兩部分組成。 編碼器的作用是處理輸入序列,例如一個句子。它利用一種稱為"**Self-Attention**"的注意力機制,捕捸序列中各個單詞之間的關係,並編碼成一個向量序列表示。 解碼器負責生成輸出序列,例如翻譯後的目標語言句子。它同樣使用Self-Attention計算出輸入向量序列到目前生成位置的注意力,並將注意力權重作用於編碼器最後一層的輸出向量。另外,它還引入了"**Masked Self-Attention**",防止關注未來的單詞。 變換器架構的一個重要創新是完全捨棄了循環神經網絡(RNN)和卷積神經網絡(CNN)的結構,而是全程使用注意力機制來建模序列。這種設計使得模型可以更好地並行計算,加速訓練和推理。 此外,變換器還引入了 **位置編碼(Positional Encoding)** 的概念,因為Self-Attention沒有記憶位置信息的能力。通過將位置信息直接編碼到序列的表示向量中,使得Self-Attention可以學會關注序列順序。 總的來說,變換器架構擁有並行計算、長距離依賴建模和位置感知等優勢,幫助構建出更強大的語言模型,被廣泛應用於機器翻譯、文本生成、閱讀理解等自然語言處理任務中。 編碼器部分主要包括以下幾個部件: * **輸入嵌入(Input Embedding)層** - 將輸入序列中的每個單詞轉換成向量表示。 * **位置編碼(Positional Encoding)** - 捕捉序列中每個單詞在序列中的位置信息。 * **多頭注意力(Multi-Head Attention)層** - 計算輸入序列中單詞之間的Self-Attention。 * **前饋全連接(Feed Forward)層** - 對序列進行進一步的特徵轉換。 * **加法規範化(Add & Norm)層** - 對上述層的輸出進行規範化處理。 解碼器部分的結構與編碼器相似,但有以下區別: 除了普通的Multi-Head Attention層外,還引入了帶掩碼的Multi-Head Attention層,避免關注未來的單詞。 * **輸出嵌入(Output Embedding)層**將解碼器的輸出映射到最終的單詞概率分布。 * **線性(Linear)和Softmax層**將單詞概率分布轉化為模型的最終輸出概率。 * 整個模型通過**Encoder**捕捉輸入序列的特徵表示,再由**Decoder**結合輸入和輸出的注意力來生成預測序列。 這種編碼器-解碼器架構可以很好地應用於序列到序列的任務,如機器翻譯、文本摘要等。 ### 4.前饋神經網絡 (Feed-Forward Neural Network)參數: ![Simplified_neural_network_example.svg](https://hackmd.io/_uploads/rkWszkKyR.png) > 將注意力輸出映射到更高維度,增強表達能力。 前饋神經網絡(Feed-Forward Neural Network, FFN)是大型語言模型中的一個重要組成部分。在注意力機制之後,模型會將注意力的輸出送入FFN進行進一步的特征提取和變換。 FFN一般包含以下幾個步驟: * **線性投影(Linear Projection)** 將注意力輸出投影到一個更高維的特徵空間,用一個包含可學習參數的權重矩陣進行矩陣乘法運算。這一步可以看作是一種線性變換。 * **非線性激活函數(Non-linear Activation Function)** 在線性投影之後,通常會對輸出施加一個非線性激活函數,如ReLU(整流線性單元)。這使FFN具有更強的表達和建模能力,能夠捕捉更複雜的特徵模式。 * **第二次線性投影(Second Linear Projection)** 對經過非線性激活的向量再次進行線性投影,將其映射回輸入的特徵維數空間。 * **殘差連接(Residual Connection)** 最後,FFN的輸出向量會與初始的注意力輸出向量相加,形成一個殘差連接。這樣做可以更好地保留原始信號,避免信息流失。 FFN的作用主要是允許模型在注意力層的基礎上對特徵進行更高層次的加工和變換,提取出更複雜、更抽象的特徵表示。這些高級特徵有助於模型更好地理解和生成語言。 FFN層通常會重複堆疊多次,使模型擁有更深的網絡結構和更強的表達能力。由於FFN包含大量可學習參數,所以它也是大型語言模型參數數量龐大的重要原因之一。 ### 5.正規化 (Normalization)參數: ![Normalization](https://hackmd.io/_uploads/S1eoBrJK1A.png) > 穩定訓練過程,提高收斂速度。 ![Activation functions](https://hackmd.io/_uploads/rkavUJKyR.png) > [在神經網路中使用激活函數](https://towardsdatascience.com/using-activation-functions-in-neural-nets-c119ad80826) 用於改善大型語言模型(Large Language Model,LLM)效能和穩定性的技術。它主要涉及以下幾個方面: * **梯度正規化(Gradient Normalization)** 這是指在模型訓練過程中,對梯度(gradients)進行正規化處理,以防止梯度爆炸或梯度消失的問題。常見的做法是梯度裁剪(gradient clipping)和梯度正規化(gradient normalization)。 * **激活函數正規化(Activation Normalization)** 這是指對模型中的激活函數輸出進行正規化,以穩定訓練過程。常見的方法有批量正規化(Batch Normalization)和層正規化(Layer Normalization)。 * **權重正規化(Weight Normalization)** 這是對模型參數(權重和偏置)進行正規化,以提高訓練穩定性和收斂速度。 * **序列長度正規化(Sequence Length Normalization)** 由於LLM處理的是可變長度的序列數據,需要對不同長度的序列輸出進行正規化,以獲得公平的損失估計。 * **注意力正規化(Attention Normalization)** 在Self-Attention機制中,對注意力分數進行正規化有助於緩解注意力失常問題。 LLM正規化旨在讓模型訓練更穩定,梯度更合適,從而提高模型的收斂速度和泛化性能。 其中,注意力機制是大型語言模型的關鍵創新。它允許模型自主學習關注哪些位置的輸入對生成下一個詞或理解當前詞最為重要。注意力權重可視為模型的"焦點",高權重部分是模型重點關注的內容。 **注意力機制**大大提升了模型處理長序列的能力,使其能夠建模遠距離的語義依賴關係。同時注意力可解釋性較強,有助分析模型的內部工作機理。注意力焦點往往集中在語義上最相關的詞或短語,反映了模型的理解程度。 然而,現實世界中,我們需要適用各門專業的LLM,因此檢索增強生成 (RAG) 和微調這兩種著名的 NLP 技術因解決複雜的挑戰和在各個行業中尋找應用而受到廣泛關注。在這篇,我們將詳細了解微調和 RAG。 ## [檢索增強生成(RAG)與微調(Fine-tuning):兩種增強 LLM 技術的比較](https://www.softwebsolutions.com/resources/rag-vs-fine-tuning.html) ### LLM 微調(Fine-tuning) 微調是一種需要使用針對特定任務量身定制的小型資料集重新訓練預訓練的LLMs的技術。此過程使LLMs能夠獲取特定於任務的模式和關係。雖然這是一種有效的方法,但微調可能會佔用大量資源且成本高昂,特別是對於相當複雜和規模的任務。 ![Finetune-LLM](https://hackmd.io/_uploads/B12atktyC.jpg) ### 微調LLMs的好處 增強的機器翻譯:微調過程使LLMs能夠在機器翻譯領域中脫穎而出。透過微調,LLMs可以精確有效地將文本從一種語言翻譯成另一種語言。例如,可以部署經過微調的LLMs來熟練地將新聞文章從英語翻譯成西班牙語,確保輸出準確、連貫。 **文字分類能力**:在涉及文字分類的任務中,微調變得非常有價值,例如從合法訊息中辨別垃圾郵件或確定文字的情緒(正面或負面)。經過微調的LLMs可以熟練地將內容分類為不同的類別。例如,它可以用來對客戶對產品的評論進行分類,幫助識別正面或負面的回饋。 **自然語言推理掌握**:微調使LLMs能夠根據給定前提確定假設的有效性。在實踐中,它使LLMs能夠確定陳述的真實性或虛假性。例如,當提出「Spot 是一隻狗」的前提時,經過微調的LLMs可以評估「所有狗都是哺乳動物」這一說法的準確性。 ### 什麼是檢索增強生成? **檢索增強生成(Retrieval Augmented Generation, RAG)** 是一種較新的技術,它利用了LLMs的優勢,同時受益於檢索系統的精確性。該過程涉及一個初始步驟,即 RAG 從知識庫中檢索相關文檔,例如維基百科文章或產品評論集合。隨後,這些檢索到的文件將作為LLMs產生回應的基礎。與微調相比,這種方法有幾個優點: * 它更有效率,因為它不需要在大型資料集上重新訓練LLMs。 * 它更加透明,因為它允許用戶查看用於生成回應的確切文字。 * 由於LLMs以現實世界的數據為基礎,因此它可以更有效地避免幻覺。 ![RAG](https://hackmd.io/_uploads/HJBl2kFyC.jpg) ### RAG 的優點 **增強的問答能力**: RAG 使LLMs能夠提供更準確、更有洞察力的回答,從而在問答任務中表現出色。例如,基於RAG的問答系統可以巧妙地解決與特定產品或服務相關的詢問。它透過從評論資料庫中提取和濃縮相關資訊來實現這一目標,確保提供更準確和資訊豐富的答案。 **提升創意文本生成能力**: RAG 可以成為創意文本生成領域的資產。它使LLMs能夠以詩歌、程式碼、腳本和音樂作品等多種格式創作富有想像和吸引力的文本片段。 **改進總結**:當涉及總結冗長的文件時,RAG 可以顯著提高LLMs的熟練程度。基於 RAG 的摘要係統擅長產生更精確、資訊更豐富的摘要。例如,如果其任務是總結一篇新聞文章,它可以快速識別並濃縮文章中最相關的句子,確保摘要簡潔而內容豐富。 ### RAG 或微調:選擇哪一個? RAG 和微調是提高 LLM 性能的兩種強大技術。特定任務的最佳方法取決於幾個因素,例如**標記資料的可用性、任務類型**和所需的效能。 RAG 是產生與現有文字類似的文字(例如客戶支援回應或產品描述)的不錯選擇。對於產生需要最新的文字(例如新聞文章或財務報告)來說,它也是一個不錯的選擇。 微調是產生針對特定受眾客製化的文字(例如行銷文案或技術文件)的好選擇。對於生成需要創意或原創的文本(例如詩歌或小說)來說,它也是一個不錯的選擇。