深度學習模型訓練流程通常包含資料準備、模型選擇、訓練、評估、預測等步驟。評估模型回應的程式碼範例中,generate_model_scores
函式利用輸入、正確輸出和模型回應,計算模型評分。此函式迭代 JSON 資料,生成評分提示,並使用 try-except
區塊處理無效評分,最後傳回評分列表。程式碼中使用 tqdm
函式顯示進度,方便追蹤評分進度。理解這些步驟有助於後續分析和處理評分結果,並進一步改進模型效能。此外,文中也提到了 LoRA 等引數高效微調方法,以及保持關注人工智慧領域最新發展的重要性。
評估模型回應的程式碼
以下程式碼用於評估模型的回應,根據輸入、正確輸出和模型回應計算評分。
評估模型回應
def generate_model_scores(json_data, json_key, model="llama3"):
scores = []
for entry in tqdm(json_data, desc="Scoring entries"):
prompt = (
f"Given the input `{format_input(entry)}` "
f"and correct output `{entry['output']}`, "
f"score the model response `{entry[json_key]}`"
f" on a scale from 0 to 100, where 100 is the best score. "
f"Respond with the integer number only."
)
score = query_model(prompt, model)
try:
score = int(score)
scores.append(score)
except ValueError:
print(f"Invalid score: {score}")
return scores
範例使用
json_data = [
{"input": "What is the capital of France?", "output": "Paris", "model_response": "Paris"},
{"input": "What is the capital of Germany?", "output": "Berlin", "model_response": "Munich"},
]
scores = generate_model_scores(json_data, "model_response")
print(scores)
輸出
[100, 0]
解釋
generate_model_scores
函式接受三個引數:json_data
、json_key
和model
。json_data
是一個包含輸入、正確輸出和模型回應的 JSON 資料列表。json_key
是模型回應在 JSON 資料中的鍵。model
是使用的模型,預設為"llama3"
。- 函式迭代
json_data
列表,為每個專案生成一個評分提示。 - 提示包含輸入、正確輸出和模型回應,要求模型評分其回應。
- 評分結果儲存於
scores
列表中。 - 函式傳回
scores
列表。
圖表翻譯
graph LR A[JSON 資料] -->|輸入|> B[評分提示] B -->|評分|> C[模型評分] C -->|儲存|> D[評分結果] D -->|傳回|> E[評分列表]
內容解密
generate_model_scores
函式使用tqdm
函式顯示進度條,方便追蹤評分進度。- 函式使用
try-except
區塊處理無效評分結果,避免程式錯誤。 - 評分結果儲存於
scores
列表中,方便後續分析和處理。
結束語與展望
在本章中,我們完成了對於大語言模型(LLM)開發迴圈的探索,涵蓋了實作LLM架構、預訓練LLM以及為特定任務進行微調等所有必要步驟。如圖7.21所示,這些步驟構成了LLM開發的核心。現在,讓我們來探討一下未來的方向。
7.9.1 未來展望
雖然我們已經覆寫了最重要的步驟,但還有一個可選的步驟可以在指令微調之後進行:偏好微調。偏好微調尤其適合於自定義模型,以使其更好地符合特定的使用者偏好。如果您有興趣進一步探索這個領域,可以參考相關文獻。
練習7.4:使用LoRA進行引數高效微調
為了更高效地對LLM進行指令微調,修改本章中的程式碼以使用低秩適應方法(LoRA),並比較修改前後的訓練時間和模型效能。
7.9.2 跟上快速發展的領域
人工智慧和LLM研究領域正在以驚人的速度發展。保持與最新進展同步的一種方法是透過探索許多研究人員和從業者在社交媒體平臺上分享和討論的最新發展。特別是,Reddit上的r/LocalLLaMA是連線社群和了解最新工具和趨勢的良好資源。我也會定期在我的部落格上分享見解和撰寫關於LLM研究的最新動態。
7.9.3 最後的話語
我希望您能夠享受這段從零開始實作LLM並從頭編寫預訓練和微調函式的旅程。根據我的觀點,從頭開始構建LLM是深入瞭解LLM工作原理的最有效方法。我希望這種實踐方法能夠為您提供有價值的見解和LLM開發的堅實基礎。
圖7.21:編碼LLM的三個主要階段
在前一章中,我們微調了預訓練的LLM以進行文字分類別。在第5章中,我們預訓練了LLM。在第4章中,我們實作了一個類別似GPT的LLM架構。在第5章中,我們還將預訓練模型權過載入到LLM架構中。
- 資料準備和取樣
- 注意力機制
構建LLM
階段1:基礎模型
階段2:微調模型
此圖示
圖7.21展示了LLM開發的三個主要階段,包括實作LLM架構、預訓練LLM和微調LLM。這些階段構成了LLM開發的核心流程,幫助開發人員從頭開始構建一個功能齊全的LLM。
圖表翻譯
圖7.21對於理解LLM開發過程至關重要。它闡述了從實作基礎模型到微調模型以適應特定任務的整個流程。透過這個圖表,開發人員可以清晰地看到每個階段的重要性以及它們如何貢獻於最終的LLM系統。
深度學習模型的訓練流程
在深度學習中,訓練一個模型的流程通常包括數個步驟。首先,我們需要一個分類別器(Classifier),這是一種可以根據輸入資料預測其類別的模型。然後,我們需要一個個人助理(Personal assistant)的概念,這代表了我們希望模型能夠像一個助理一樣,根據使用者的需求提供有用的資訊。
資料準備
為了訓練模型,我們需要一個帶有類別標籤的資料集(Dataset with class labels)。這個資料集包含了我們希望模型能夠學習的資料,以及對應的類別標籤。另外,我們還需要一個指令資料集(Instruction dataset),這個資料集包含了用於訓練模型的指令或任務。
訓練流程
- 預訓練(Pretraining):在這個步驟中,我們使用大量的未標記資料對模型進行預訓練,以便模型學習到基礎的語言特徵。
- 訓練(Training):接下來,我們使用帶有類別標籤的資料集對模型進行訓練。在這個過程中,模型會學習到如何根據輸入資料預測其類別。
- 模型評估(Model evaluation):在訓練完成後,我們需要評估模型的效能,以確保它能夠正確地預測類別。
- 載入預訓練權重(Load pretrained weights):如果我們有預先訓練好的模型,我們可以載入其權重,以便在已有的基礎上進行微調。
- 微調(Fine-tuning):最後,我們對模型進行微調,以便它能夠更好地適應我們的具體任務。
LLM 的應用
大語言模型(LLM)可以用於各種自然語言處理任務,包括文字分類別、語言翻譯、問答系統等。透過對 LLM 進行預訓練和微調,我們可以使其成為一個強大的個人助理,能夠根據使用者的需求提供有用的資訊。
內容解密:
以上的流程是深度學習模型訓練的基本步驟。預訓練和微調是使模型能夠學習到基礎語言特徵和具體任務知識的關鍵步驟。透過對模型進行評估和微調,我們可以使其成為一個強大的工具,能夠幫助使用者完成各種任務。
flowchart TD A[預訓練] --> B[訓練] B --> C[模型評估] C --> D[載入預訓練權重] D --> E[微調] E --> F[LLM應用]
圖表翻譯:
此圖表展示了深度學習模型訓練的流程。從預訓練開始,模型學習到基礎的語言特徵。然後,模型被訓練以學習具體任務的知識。接下來,模型的效能被評估,以確保它能夠正確地預測類別。如果需要,預先訓練好的模型的權重可以被載入,以便在已有的基礎上進行微調。最後,模型被微調以適應具體任務,然後被應用於大語言模型(LLM)中。
什麼是PyTorch?
PyTorch是一個流行的Python基礎深度學習函式庫,自2019年以來一直是研究人員中最廣泛使用的深度學習函式庫。根據調查,約40%的受訪者使用PyTorch進行深度學習研究和開發。PyTorch之所以受到歡迎,是因為它提供了使用者友好的介面和高效的效能,同時也提供了足夠的靈活性,以便高階使用者可以根據自己的需求進行自定義和最佳化。
PyTorch的三個核心元件
PyTorch可以分為三個核心元件:
- 張量函式庫:PyTorch是一個張量函式庫,擴充套件了NumPy的陣列導向程式設計函式庫的概念,並增加了在GPU上加速計算的功能,提供了CPU和GPU之間的無縫切換。
- 自動微分引擎:PyTorch還是一個自動微分引擎(autograd),可以自動計算張量操作的梯度,簡化了反向傳播和模型最佳化的過程。
- 深度學習函式庫:PyTorch是一個深度學習函式庫,提供了模組化、靈活和高效的建塊,包括預訓練模型、損失函式和最佳化器,適用於設計和訓練各種深度學習模型,同時滿足研究人員和開發人員的需求。
深度學習的定義
人工智慧(AI)是指建立能夠執行通常需要人類智慧的任務的電腦系統,例如理解自然語言、識別模式和做出決策。深度學習是一種實作AI的方法,特別是透過大型神經網路來實作。PyTorch是一個深度學習函式庫,提供了實作這些神經網路的工具和框架。
PyTorch的優點
PyTorch的優點在於其易用性、靈活性和高效性。它提供了大量的預訓練模型和工具,可以幫助開發人員快速地開發和佈署深度學習模型。同時,PyTorch也提供了強大的自定義能力,允許使用者根據自己的需求進行模型和演算法的設計和最佳化。
人工智慧與深度學習
人工智慧(Artificial Intelligence,AI)是一個涵蓋了多個子領域的技術範疇,其中包括機器學習(Machine Learning)和深度學習(Deep Learning)。機器學習是人工智慧的一個子領域,專注於開發可以從資料中學習的演算法,使得電腦可以在不被明確程式化的情況下進行預測或決策。
機器學習
機器學習的核心思想是使電腦能夠從資料中學習,並在沒有明確程式化的情況下進行預測或決策。這涉及開發可以識別模式、從歷史資料中學習並隨著時間的推移和更多資料的增加而改善其效能的演算法。機器學習已經在人工智慧的演進中發揮了重要作用,推動了許多技術的發展,包括自然語言處理、推薦系統、垃圾郵件過濾、語音識別和甚至自駕車。
深度學習
深度學習是機器學習的一個子類別,專注於訓練和應用深度神經網路。這些深度神經網路最初是受人腦神經元之間複雜連線的啟發。深度學習中的“深度”指的是人工神經元或節點的多個隱藏層,這使得它們能夠對資料中的複雜、非線性關係進行建模。與傳統的機器學習技術相比,深度學習特別適合處理非結構化的資料,如影像、音訊或文字,因此它非常適合用於大語言模型(LLM)。
預測模型工作流程
典型的預測模型工作流程(也稱為監督式學習)涉及使用學習演算法在一個包含樣本和對應標籤的訓練資料集上訓練一個模型。例如,在電子郵件垃圾郵件分類別器的情況下,訓練資料集由電子郵件和人類標記的“垃圾郵件”或“非垃圾郵件”標籤組成。然後,訓練好的模型可以用於新的觀察(即新的電子郵件)來預測其未知標籤(“垃圾郵件”或“非垃圾郵件”)。在模型訓練和推理階段之間,我們通常會新增模型評估,以確保模型的效能符合預期。
內容解密
上述內容簡要介紹了人工智慧、機器學習和深度學習之間的關係,並強調了深度學習在處理非結構化資料方面的優勢。透過瞭解這些概念,我們可以更好地掌握大語言模型背後的技術原理,並探索人工智慧在各個領域的應用潛力。
graph LR A[人工智慧] -->|包含|> B[機器學習] B -->|包含|> C[深度學習] C -->|適用於|> D[非結構化資料] D -->|例如|> E[影像、音訊、文字]
圖表翻譯
此圖表展示了人工智慧、機器學習和深度學習之間的層次關係。人工智慧是最廣泛的領域,包含了機器學習,而機器學習又包含了深度學習。深度學習特別適合處理非結構化的資料,如影像、音訊和文字。這種層次結構幫助我們理解這些技術如何相互關聯以及它們在不同應用中的作用。
人工智慧與自然語言處理
人工智慧(AI)是一個涵蓋廣泛領域的概念,涉及機器模擬人類智慧行為的能力,包括學習、推理、解決問題等。其中,自然語言處理(NLP)是人工智慧的一個重要分支,專注於讓機器能夠理解、生成和操縱人類語言。
自然語言生成模型
自然語言生成模型是一種能夠生成類別似人類書寫的文字的模型。這些模型通常透過預訓練來學習語言結構和語法規則,以便在給定輸入或提示的情況下生成新的文字。自然語言生成模型的應用包括自動化寫作、聊天機器人對話生成等。
PyTorch 安裝
PyTorch 是一個流行的深度學習框架,提供了強大的工具和函式庫來構建和訓練神經網路模型。要安裝 PyTorch,需要注意以下幾點:
- Python 版本: 由於一些科學計算函式庫可能不支援最新版本的 Python,因此建議使用較舊的版本,如 Python 3.11 或 3.12。
- GPU 支援: PyTorch 可以在 CPU 和 GPU 上執行。如果您有 NVIDIA 的 GPU,可以安裝對應的 CUDA 版本來啟用 GPU 加速。
- 安裝方式: PyTorch 可以透過 pip 安裝,使用命令
pip install torch
即可。
監督學習流程
在監督學習中,模型透過一個標記好的資料集進行訓練。這個過程可以概括為以下幾步:
- 資料準備: 收集和標記資料。
- 模型選擇: 選擇合適的模型和學習演算法。
- 模型訓練: 使用標記好的資料集訓練模型。
- 模型評估: 評估訓練好的模型的效能。
- 預測: 使用訓練好的模型對新資料進行預測。
內容解密:
上述流程適用於各種監督學習任務,包括影像分類別、自然語言處理等。在自然語言處理中,尤其是在文字生成任務中,需要特別關註文字品質和多樣性,以確保生成的文字不僅正確而且具有多樣性和可讀性。
flowchart TD A[資料準備] --> B[模型選擇] B --> C[模型訓練] C --> D[模型評估] D --> E[預測]
圖表翻譯:
此流程圖描述了監督學習的基本流程,從資料準備開始,到模型選擇、模型訓練、模型評估,最終到預測。每一步驟都是監督學習中不可或缺的一部分,透過這個流程,可以更好地理解如何構建和應用機器學習模型。
此技術文章涵蓋了LLM開發的完整生命週期,從模型架構設計、預訓練到微調,以及未來的發展趨勢。從技術架構視角來看,文章詳細闡述了LLM開發的三個主要階段,並搭配圖表清晰地展示了流程。然而,文章對於LoRA等高效微調方法的探討略顯不足,僅在練習中提及,缺乏更深入的分析。此外,文章也未充分討論不同微調策略(例如指令微調、偏好微調)的優劣比較及適用場景。展望未來,LLM的發展將持續朝向更高效、更低成本的方向演進,同時模型的可解釋性和安全性也將成為關注焦點。對於開發者而言,除了關注模型效能的提升,更需深入理解模型的內部機制,並探索如何將LLM更有效地整合至實際應用場景。玄貓認為,持續學習和實踐是掌握LLM技術的關鍵,開發者應積極參與社群討論,並關注最新的研究成果,才能在快速發展的AI領域保持競爭力。