AI Engineer Europe 2026 · 工作坊 · 2026-05-04 · 81 分
從零訓練一個小型 LLM
Training an LLM from Scratch, Locally · Angelos Perivolaropoulos,ElevenLabs
Angelos 帶大家在筆電或 Colab 上,用 Torch 從零訓練一個莎士比亞風格的小模型。內容包含分詞、架構、訓練迴圈、取樣,以及現場問答。
概要
- 不靠預訓練權重Angelos 要大家只用 Torch 與少數函式庫,從零訓練 LLM,並說這已經涵蓋大實驗室設計模型的大部分基礎,再往後多半是最佳化與擴大規模。
- 小資料配字元分詞這次的資料只有 65 個不同字元,所以直接用字元當 token。Angelos 說代價是模型很難抓到詞與詞的關係,正式的 LLM 會改用 BPE。
- 架構其實不長Angelos 用 GPT-2 風格的 decoder-only 架構,拆成注意力、殘差、layer norm、MLP 四種零件,並說整套 model、train、generate 三個檔案合起來大約幾百行。
- loss 數字有跡可循從約 4.17 開始,降到 3.3 時學會字元頻率,1.5 到 2 之間開始出現單字,1.0 到 1.2 算堪用,再往下就是過擬合。
- 取樣方式要看用途寫作類的 LLM Angelos 不建議 greedy decoding,轉錄這類只有一種正解的任務反而最適合;這場用 0.7 的 temperature。
- 問答延伸到後訓練與多模態Angelos 說推理能力主要靠後訓練,多模態則是 encoder 輸出的向量取代 token 的嵌入。
原話
▶ 15:48“you don't necessarily need to know in a very deep level how transformers work to be able to train something like this”
你不必深入理解 transformer 的運作,也能訓練出這樣的東西
▶ 53:54“So you pretty much never want to use grid decoding for LLMs.”
所以對 LLM 來說,幾乎不該用 greedy decoding
▶ 53:54“Grid decoding is the best, because there's usually only one way you can transcribe something.”
做轉錄時 greedy decoding 最好,因為一段話通常只有一種寫法
▶ 1:04:35“in the end reasoning is essentially just adding to the context of the model”
說到底,推理就是往模型的上下文裡多加內容
▶ 1:08:50“So these data sets are kind of the most expensive.”
所以這些資料集算是最貴的東西
延伸
- Angelos 提到可以改用自己訓練的 BPE 分詞器、加大 context、調整 dropout 與學習率,作為比賽時的進階玩法,但沒有示範。
- 回答多模態問題時,Angelos 說自己也不確定影像與文字的向量是否落在相近的空間,認為會是不錯的研究題目。
章節
點時碼直接跳到原片的那一段。
- 開場與自我介紹Angelos 說明自己帶 ElevenLabs 的語音轉文字團隊,這場是動手做的工作坊。
- 目標與準備今天要不靠預訓練權重、只用 Torch 與少數函式庫從零訓練 LLM;Angelos 說這大約走完八成的路。
- 靈感來自 nanoGPT工作坊的藍本是 Andrej Karpathy 的 Nano GPT 影片,架構採用 GPT-2。
- 訓練模型的四塊分詞器、模型架構、訓練迴圈、推論;Angelos 說新舊模型預訓練相近,差別多半在後訓練。
- 字元層級分詞這次只用 65 個字元當 token,Angelos 用二元組合的數量說明為什麼小資料要配小詞表。
- 字元分詞的代價字元分詞難捕捉詞與詞的關係,真要訓練像樣的 LLM 得改用 BPE,嵌入層大小也會跟著變。
- Transformer 的零件多頭自注意力、殘差連接、layer norm 各自的作用,Angelos 強調不必完全懂也能動手訓練。
- 聽眾問:程式碼怎麼分詞BPE 從訓練資料找常見片段,沒見過的字串會退回字元或位元組層級。
- 設定模型參數詞表 65、序列長度 256、六層,並逐項說明注意力頭與嵌入維度的意思。
- 模型的程式結構頂層 GPT 類別串起嵌入、多個 block 與 LM head,輸出下一個 token 的分佈。
- 自注意力與 MLP block注意力負責找出 token 之間的關係,MLP 把結果整理成表示,block 則是一層 transformer。
- 逐項算參數量Angelos 逐項口算各部分的參數數量,說明大部分參數都在 transformer block 裡。
- 訓練目標與資料目標是寫出莎士比亞風格的詩句,資料約一百萬個字元,用錯開一位的序列做下一個 token 預測。
- 學習率排程暖身 100 步後用餘弦衰減降到 5,000 步,優化器用 AdamW。
- 訓練迴圈與驗證損失batch size 64、每 1,000 步存檢查點,並用沒看過的資料算 val loss 來抓過擬合。
- 怎麼讀 loss 數字loss 從約 4.17 往下,每個區間模型學到的東西不同,低於 1.0 開始過擬合。
- 文字生成的取樣比較 greedy decoding、temperature 與 top-k,並說明 seed 如何讓結果可重現。
- 整合與 Colab 實跑整套是 model、train、generate 三個檔案;Angelos 在 Colab 約 15 分鐘就訓出像樣的結果。
- 從曲線判斷問題train loss 不降、val loss 回升、異常尖峰、停滯,各自對應不同問題。
- 比賽規則大家各自訓練模型,用固定 seed 與提示詞產生詩句,再投票選出最好的一首。
- 聽眾問:推理模型推理能力主要來自後訓練,核心難處是找到高品質的思考資料。
- 後訓練資料從哪來大實驗室找標註公司或自己養標註團隊,品質把關靠資深 QA 檢查新手標註員。
- 聽眾問:seed 的用途非決定性來自隨機數與硬體,seed 能讓結果固定,即使用 greedy decoding 也建議設。
- 聽眾問:音訊與多模態音訊與影像先經過各自的 encoder,輸出的向量取代 token 的嵌入,餵給同一個 transformer。
- 音樂生成與音訊分詞自迴歸與擴散兩種做法都可行,擴散通常比較容易做起來;音訊多半先轉成 mel spectrogram 再分詞。
名詞
- nanoGPT
- Angelos 說自己最早是從 Andrej Karpathy 的 Nano GPT 影片認識 transformer,這場以它為藍本
- GPT-2
- 這場訓練的小模型所採用的架構,Angelos 說基本零件至今沒有太大改變
- Google Colab
- 沒有足夠記憶體的筆電可改用它的免費 GPU,Angelos 提醒要把執行環境改成 T4 GPU
- uv
- Angelos 用來建立專案環境的工具,跑 uv sync 就會建好虛擬環境
- character-level tokenizer
- 以單一字元當 token 的分詞器,這場的資料集只有 65 個
- BPE
- 從訓練資料找常見字元組合並合成 token 的分詞方式,大實驗室目前最常用
- AdamW
- 這場用的優化器,搭配暖身與餘弦衰減調整學習率
- val loss
- 用模型沒看過的資料算出的損失,用來判斷是否過擬合
- greedy decoding
- 每次都選機率最高的 token,Angelos 說寫作類 LLM 不適合,轉錄類任務適合
- temperature
- 控制取樣隨機程度的參數,Angelos 建議 0.7 左右
- Scale AI
- Angelos 提到的標註公司,替實驗室找各領域人員產生後訓練資料
- mel spectrogram
- Angelos 說把音訊轉成這種數值陣列後再做分詞,是常見做法








