# 課程簡介 * 教學如何從零開始建立大型語言模型 * 無需微積分或線性代數背景,僅需基本 Python 經驗 * 課程靈感來自 Andrej Karpathy 的 GPT 從零開始教學 * 目標是以小步驟理解數學與機器學習概念 # 課程設置與需求 ![messageImage_1759246872489](https://hackmd.io/_uploads/rJrEcdt3gg.jpg) * 使用 Jupyter Notebook 進行開發 * 建立虛擬環境,避免影響全域 Python 套件 * GPU 加速需使用 CUDA * 所需套件:matplotlib、numpy、pylzma、ipykernel、jupyter ![image](https://hackmd.io/_uploads/BkG5c_F2xe.png) ![messageImage_1759247008475](https://hackmd.io/_uploads/BkehcuYngg.jpg) * Windows 可能需安裝 Visual Studio Build Tools 以支援 pylzma # Torch 與 CUDA 安裝 ![image](https://hackmd.io/_uploads/SyfyodKnle.png) * 不使用單純 pip install torch * 需依 PyTorch 官方文件選擇正確版本與 CUDA 配套 * 建議版本:Python 3.9–3.11 搭配 CUDA 11.7 或 11.8 # Jupyter Notebook 與虛擬環境整合 ![messageImage_1759247113032](https://hackmd.io/_uploads/rJ_Mjdthge.jpg) ![image](https://hackmd.io/_uploads/B1st2dK2gx.png) ![image](https://hackmd.io/_uploads/rJDT3OY2gg.png) * 透過 `ipykernel` 將虛擬環境加入 Jupyter Kernel * 設定 kernel display name,例如 Cuda GPT ![image](https://hackmd.io/_uploads/H10y6uF2ge.png) * 在 Notebook 中選擇對應的 kernel 以使用虛擬環境 # 建立資料集 * 使用 Project Gutenberg 提供的免費文本 * 範例選用《The Wizard of Oz》純文字檔 * 去除開頭與結尾的授權與額外內容,保留純文本內容 * 檔案大小約 233KB,適合作為小型語料進行模型實驗 --- # 開啟與讀取文本 ![image](https://hackmd.io/_uploads/Sy2D6uF2xx.png) * 使用 `open("wizard_of_oz.txt", "r", encoding="utf8")` * 透過 `f.read()` 將內容存成字串 * 可印出文字長度與前幾百個字元檢查內容 # 建立字元表與 Tokenizer ![image](https://hackmd.io/_uploads/rJWjp_K2gg.png) ![image](https://hackmd.io/_uploads/HJS1CdY2ee.png) * 建立 `chars = sorted(set(text))` 得到所有字元集合 * 使用字典將字元映射到整數,再建立反向映射 * `encode` 將字串轉為整數序列 * `decode` 將整數序列轉回字串 # Tokenizer 種類概念 * 字元級 (character-level):小詞彙表,但序列長 * 單詞級 (word-level):詞彙表巨大,但序列短 * 子詞級 (subword-level):介於兩者之間,常用於效率與泛化 # 使用 PyTorch 與 Tensor ![image](https://hackmd.io/_uploads/SJxB0OKhgg.png) * 匯入 torch,核心資料結構為 tensor * 將全文轉為整數序列後存入 `torch.tensor` * 使用 `dtype=torch.long` 處理長整數型別 * Tensor 可進行矩陣運算、維度變換、點積等操作 # 訓練與驗證集切分 * 資料分為訓練集 80% 與驗證集 20% * 防止模型只背誦全文,確保能泛化生成新文本 * 訓練集學習,驗證集檢查模型生成品質 # Bigrams 語言模型概念 * 「bi」表示只考慮前一個字元來預測下一個字元 * 例:H → e → l → l → o * 每個轉換附帶機率,用來建模序列的條件分布 # Block Size 與目標生成 * Block size = 一段隨機取出的子序列長度 * 預測序列為 X,目標序列為 Y,Y 是 X 向右偏移一位 * 用於訓練模型學習「給定前文,預測下一字」 # Python 實作 ![image](https://hackmd.io/_uploads/SkH-JYK3xx.png) * 定義 `block_size=8` * X = `data[i:i+block_size]` * Y = `data[i+1:i+block_size+1]` * 輸出對應的預測序列與目標序列 * 驗證能正確形成「輸入與偏移目標」對照 --- # CPU 與 GPU 的差異 * CPU 適合進行複雜計算,但運算是逐步(sequential)進行 * GPU 適合進行簡單計算,但能透過大量核心並行處理 * 語言模型訓練需要大量簡單運算,因此 GPU 能顯著提升效率 # Batch 與 Block * Block size:每個序列的長度 * Batch size:同時處理的序列數量 * 批次處理是加速訓練的關鍵方式 # GPU 檢測與設定 * 使用 `torch.cuda.is_available()` 檢查 GPU 是否可用 * 根據結果將裝置設為 CUDA 或 CPU * 超參數設定:block size、batch size # Tensor 建立與操作 ![image](https://hackmd.io/_uploads/SyrrkKF2eg.png) ![image](https://hackmd.io/_uploads/BJ8nlYKnee.png) * `torch.randint`:建立隨機整數 tensor * `torch.tensor`:自訂數據建立 tensor * `torch.zeros` / `torch.ones`:建立全 0 或全 1 tensor * `torch.empty`:建立未初始化 tensor * `torch.arange`:建立等差數列 tensor * `torch.linspace`:建立線性間隔 tensor * `torch.logspace`:建立對數間隔 tensor * `torch.eye`:建立單位矩陣 # GPU 與 CPU 運算效能比較 ![image](https://hackmd.io/_uploads/BySybYKnll.png) * 小型矩陣運算:CPU 較快,因計算量不大 * 大型矩陣運算:GPU 較快,因能並行處理大量簡單運算 * 在語言模型訓練中,GPU 對於 forward pass 與 backpropagation 特別重要 # 效能測試方法 ![image](https://hackmd.io/_uploads/ryE-ZFK3el.png) * 使用 `time` 模組量測運算耗時 * 比較 NumPy(CPU)與 PyTorch(GPU)矩陣運算的時間差 * GPU 在高維矩陣運算時展現出明顯優勢 --- # CPU 時間與 Wall 時間 ![image](https://hackmd.io/_uploads/Hy83XYF3ex.png) * CPU 時間:程式實際在 CPU 上執行的時間 * Wall 時間:包含等待在內的總耗時(真實等待時間) * CPU 時間不含等待,Wall 時間包含等待 # torch.multinomial ![image](https://hackmd.io/_uploads/rynA7YFnge.png) * 從機率分布中抽樣 * 機率需加總為 1 * 範例:0.1 與 0.9 代表抽樣 0 與 1 的機率 * 多次執行可能出現不同結果,但整體符合分布 # torch.cat (concatenate) ![image](https://hackmd.io/_uploads/HkTZ4KKhlx.png) * 將多個張量合併成一個 * 範例:`[1,2,3,4]` 與 `[5]` 合併為 `[1,2,3,4,5]` * 在生成文字時,用來將已生成序列與新預測結果拼接 # torch.tril 與 torch.triu ![image](https://hackmd.io/_uploads/Hk6RNKKhle.png) * `tril`:生成下三角矩陣(左上到右下對角線以下保留) * `triu`:生成上三角矩陣 * 用於遮蔽未來的資訊,避免模型「偷看答案」 # Mask 與 exp 函數 * 採用遮罩將無效區域設為負無限大 * exponentiate(指數運算)後,0 → 1,負無限大 → 0 * 保證模型只依靠歷史資料進行預測 # Transpose (轉置) * 調換張量的維度順序 * 範例:形狀 `(2,3,4)` 經 `transpose(0,2)` → `(4,3,2)` * 常用於調整資料形狀以符合運算需求 # torch.stack * 將多個張量沿新維度疊加 * 1D 疊加成 2D,2D 疊加成 3D,以此類推 * 用於建立 batch,將多個樣本堆疊成訓練輸入 # nn.Linear * 線性變換層,屬於 `nn.Module` * 具有可學習的權重與偏置 * 輸入輸出維度需對齊,否則運算無法成立 * 用於將輸入張量轉換為新空間,為神經網路的基本組件 # Softmax 函數 * 將實數向量轉換為機率分布 * 每個元素先取 exp,再除以總和 * 例:輸入 `[1,2,3]` → 輸出為總和為 1 的 `[x,y,z]` * 常用於分類任務,表示各類的機率分布 ---- # Softmax 函數 * 使用 `torch.nn.functional.softmax` 實作 * 將輸入數值轉換為機率分布,所有輸出加總為 1 * 常用於分類問題最後一層 # Embeddings(嵌入向量) ![image](https://hackmd.io/_uploads/HyBLaYt3el.png) * `nn.Embedding` 將離散輸入(字元或詞彙)映射到稠密向量 * 需要設定 vocabulary size(詞彙表大小)與 embedding dimension(向量維度) * 向量中的元素沒有固定語義,由模型學習決定 * 在字元層級時,每個字元會被映射到一個向量,儲存其語境相關資訊 * 向量為可學習參數,會隨訓練更新 # Dot Product(點積) ![image](https://hackmd.io/_uploads/HJCdTtK2ee.png) ![image](https://hackmd.io/_uploads/S1w5atF2gl.png) * 公式:將兩個向量對應元素相乘後加總 * 範例: * A = [1, 2, 3] * B = [4, 5, 6] * 結果 = 1×4 + 2×5 + 3×6 = 32 * 點積是矩陣乘法的基礎 # 矩陣相乘原理 * 條件:前一矩陣的列數 × 行數 與後一矩陣的行數 × 列數,內部數字需相等 * 範例:3×2 矩陣 × 2×3 矩陣 → 結果為 3×3 矩陣 * 計算方式:逐行逐列進行點積 # 矩陣相乘範例 ![image](https://hackmd.io/_uploads/SkPRaYt3gx.png) * A = [[1, 2], [3, 4], [5, 6]] * B = [[7, 8, 9], [10, 11, 12]] * 結果 C = [[27, 30, 33], [47, 68, 75], [95, 106, 117]] # PyTorch 實作矩陣乘法 ![image](https://hackmd.io/_uploads/H1Ng0tFnlg.png) * 使用 `@` 符號進行矩陣乘法:`C = A @ B` * 使用 `torch.matmul(A, B)` 也能得到相同結果 * 兩種方式輸出相同,`@` 是簡寫 ---- # 資料型別問題與矩陣相乘 * PyTorch 中整數與浮點數不能直接相乘 * 常見 dtype:`int64` (long) 與 `float32` * 嘗試相乘會出現錯誤:Expected scalar type long but found float * 解法:將整數轉為浮點數(`.float()`),避免類型衝突 * 訓練時建議使用浮點數,因為權重需要高精度 # Bigrams 語言模型回顧 * 使用 CUDA 加速訓練 * 超參數:block size(序列長度)、batch size(並行數量) * 輸入編碼文本,建立詞彙表、encoder/decoder * 分割訓練集與驗證集,確保泛化能力 * `get_batch` 函數:隨機取片段作為輸入 X,目標 Y = X 向右偏移一位 # 訓練與驗證類比 * 訓練集 = 學習課程內容 * 驗證集 = 最終考試,包含未看過的題目 * 目的是避免模型僅靠記憶生成,確保能捕捉模式並泛化 # nn.Module 與可學習參數 * 子類化 `nn.Module` 用於建立模型 * `nn.Linear`、`nn.Embedding` 等皆屬於可學習參數層 * 模型中的權重透過反向傳播與梯度下降更新 # 損失函數與梯度下降 * 初始隨機權重下,預測成功率低(例:1/80) * 使用負對數似然(NLL)衡量損失 * 目標:最小化損失,提高預測準確率 * 梯度下降:根據損失的導數調整參數,使模型逐步逼近最佳值 # 優化器與學習率 * Adam:結合動量與自適應學習率的優化器 * 學習率過大 → 震盪,過小 → 收斂太慢 * AdamW:在 Adam 基礎上加入權重衰減(weight decay) * 權重衰減可避免某些參數值過大,幫助模型泛化 # Embedding Table * 使用 `nn.Embedding` 建立查詢表 * 將離散字元轉換為連續向量表示 * 大小為 `vocab_size × vocab_size` * 每行表示「給定當前字元,下一字元的分布」 * 經過正規化後,可看作條件機率分布 # Forward Pass 與自訂邏輯 * 自行撰寫 `forward` 方法能清楚掌握模型內部轉換 * 方便除錯、追蹤每層輸出 * 可針對特殊任務進行客製化 * 強化對模型架構與運算流程的理解 # Logits * 模型輸出的原始分數,尚未經過 softmax * 表示每個字元(或類別)的未歸一化可能性 * 之後透過 softmax 轉換為機率分布,用於抽樣或分類 ---- # Logits 與機率分布 * Logits 是未經 softmax 的浮點數 * 經 softmax 後會轉換為機率分布,所有輸出加總為 1 * 例子:輸入 [2, 4, 6] → 經正規化為 [0.167, 0.333, 0.5] * 概率分布可用於判斷最可能的下一個 token # Logits 的形狀處理 * Logits 初始形狀為 B × T × C * 交叉熵損失函數期望輸入為 (B×T) × C * 使用 view 將 B × T 攤平成一維,再搭配 C # View 與 Shape * `.shape` 回傳 tensor 維度 * `.view` 可重新塑形,將多維攤平或重新組合 * 常用於調整 logits 與 targets 的形狀以符合損失函數需求 # Generate 函數 * 輸入 context 與 max new tokens * forward pass 得到 logits * 取最後一個時間步的 logits * 使用 softmax 得到機率分布 * 從分布中採樣新 token * 使用 torch.cat 將新 token 拼接到 context * 輸出完整生成序列 # 負索引 * `-1` 代表最後一個元素 * `-2` 代表倒數第二個 * 用於選取 logits 的最後一個時間步 # 資料型別 torch.long * 等同於 int64 佔用 64 位元 * 整數類型不含小數點 * 與浮點數差異在於能否表示小數 # Optimizer 與學習率 * 使用 AdamW 優化器 * 學習率過高可能震盪 * 學習率過低會收斂過慢 * 學習率需實驗找最佳值 # 訓練迴圈流程 * 取得 batch 輸入與目標 * 前向傳播得到 logits 與 loss * optimizer.zero_grad(set_to_none=True) 清除梯度 * loss.backward() 反向傳播 * optimizer.step() 更新權重 # zero_grad(set_to_none=True) * 預設梯度會累加需清零 * 設為 None 比設為 0 更省記憶體 * 特殊情況如 RNN 會用梯度累積 # 訓練結果觀察 * 初期 loss 約 3.15 * loss 隨訓練逐步下降 * 生成文字逐漸有基本結構 * 即使是簡單 bigram 模型仍能觀察學習改善 --- # 常見優化器與損失函數 * **MSE (Mean Squared Error)**:迴歸常用,計算預測值與真實值平方差的平均 * **Gradient Descent**:透過梯度下降最小化損失,調整權重與偏置 * **Momentum**:在梯度下降中加入「慣性」,平滑訓練過程,避免震盪 * **RMSProp**:使用梯度平方的移動平均,自適應學習率,避免震盪 * **Adam**:結合 Momentum 與 RMSProp,自適應學習率,常用預設優化器 * **AdamW**:在 Adam 基礎上加入 Weight Decay,改善泛化能力 # 訓練過程中的損失回報 * 訓練中需觀察 loss 收斂狀態 * 不需每步都輸出,可設超參數 `eval_iters` 控制間隔 * 使用取餘數 `%` 判斷是否到達回報點 * 例:每 250 步輸出一次 loss # torch.no_grad * 禁止梯度計算,節省計算資源與記憶體 * 適用於驗證與報告 loss 的情境 * 僅 forward,不進行 backward 或參數更新 # model.train 與 model.eval * **train 模式**:開啟 Dropout、BatchNorm 等,進行訓練 * **eval 模式**:停用 Dropout,BatchNorm 使用固定統計,適合驗證/測試 * Dropout 概念:隨機丟棄部分神經元,避免過擬合 # 訓練與驗證損失顯示 * 訓練損失 (train loss):模型在訓練集上的表現 * 驗證損失 (val loss):模型在未見過資料上的表現 * 損失數值格式化,例如限制小數三位,方便觀察 # Normalization 更正 * **Softmax 是一種正規化**,但不是唯一形式 * 還有其他多種正規化方法(如 batch normalization, layer normalization 等) * Softmax:將 logits 指數化後除以總和,輸出機率分布 --- # 常見的正規化方法 * Min-Max Normalization:將資料縮放到固定範圍,通常是 [0,1] * Z-Score Normalization:依據平均值與標準差標準化,使資料符合常態分布 * Decimal Scaling:透過小數點移動調整數值範圍 * Mean Normalization:以平均值為基準進行縮放,使平均值為 0 * Unit Vector Normalization:將向量縮放為長度 1,常用於文本或向量化資料 * Robust Scaling:使用中位數與四分位差縮放,對異常值更具抗性 * Power Transformations:透過函數(如 Box-Cox、Yeo-Johnson)使資料更接近常態分布 * Softmax:將 logits 轉換為機率分布,常用於模型輸出層而非輸入正規化 # Activation Functions 的必要性 * 單純堆疊線性層無法增加模型表達力,等效於單一線性轉換 * 激活函數提供非線性,使深層網路能學習更複雜的模式 # ReLU(Rectified Linear Unit) ![image](https://hackmd.io/_uploads/r1-GUqt3le.png) ![image](https://hackmd.io/_uploads/ByvMI5Yheg.png) * 輸入小於等於 0 → 輸出 0 * 輸入大於 0 → 輸出與輸入相同 * 提供稀疏性與非線性,計算效率高 # Sigmoid ![image](https://hackmd.io/_uploads/ryN4L5Fhge.png) * 函數形式:1 / (1 + exp(-x)) * 輸出範圍在 0 到 1 之間 * 常用於需要機率解釋的場景,如二元分類 * 缺點:容易梯度消失 # Tanh(雙曲正切函數) ![image](https://hackmd.io/_uploads/r1dLLct3el.png) * 輸出範圍在 -1 到 1 * 與 Sigmoid 類似,但中心化於 0 * 適合需要正負輸出的場景 * 缺點:仍存在梯度消失問題 # Sigmoid 與 Tanh 差異 * Sigmoid 輸出 0 到 1,適合機率分布 * Tanh 輸出 -1 到 1,更適合需要正負對稱的資料 * Tanh 在實踐中常比 Sigmoid 更常見 # Softmax 與 Sigmoid 的關聯 * Sigmoid 可視為二分類版本的 Softmax * Softmax 用於多分類,將多個 logits 正規化為機率分布 * Sigmoid 輸出單一機率,Softmax 輸出整個類別分布 --- # Transformer 架構概觀 * 以自注意力為核心,透過多頭注意力、前饋網路與殘差連接堆疊而成 * 初期輸出隨機,透過訓練逐步學到能產生有意義文本的參數 * 目標是對序列中各 token 的重要性與相互關係進行建模 # 嵌入與位置編碼 * 將離散 token 轉為連續向量(embedding) * 位置編碼提供序列次序資訊,與嵌入向量相加 * 位置與內容同時影響注意力分配 # 編碼器與解碼器堆疊 ![image](https://hackmd.io/_uploads/HJmMw9Fneg.png) * 多層 encoder 後接多層 decoder,僅最後一層 encoder 輸出提供給所有 decoder 層 * 每層包含:多頭注意力 → Add & Norm → 前饋網路 → Add & Norm * 解碼器額外包含一個「遮罩」的自注意力以避免看見未來 # 殘差連接與正規化 * 殘差連接保留早期資訊,減少深層網路遺忘與梯度消失 * Post-LN(Add 再 Norm)與 Pre-LN(Norm 再 Add)皆可,文中採用 Post-LN 並指其在小模型訓練較穩 # 多頭注意力(Multi-Head Attention) ![image](https://hackmd.io/_uploads/rJ6_PcFneg.png) * 多個頭並行學習不同語意視角,再拼接與線性投影 * GPU 友善的並行計算,提升表達能力與效率 * 每個頭擁有獨立可學參數,捕捉互補關係 # 自注意力與 K/Q/V ![image](https://hackmd.io/_uploads/SkEYPct3ee.png) * Query:我在找什麼 * Key:我包含什麼 * Value:具體要傳遞的內容表徵 * 以線性層從輸入生成 K/Q/V,驅動自注意力匹配 # Scaled Dot-Product Attention 流程 ![image](https://hackmd.io/_uploads/B1uCPqF2ex.png) * 使用 Q·Kᵀ 計分,分母以 √dₖ 做縮放防止值爆炸 * 對得分做 softmax 取得權重,與 V 相乘得到加權輸出 * 得分高的關係被放大,低關係被抑制 # 掩蔽注意力(Masked / Causal) * 解碼器自注意力對未來位置加遮罩,禁止「偷看答案」 * 只允許使用當前與過去的上下文進行預測 # 線性變換的角色 * 在注意力頭輸出後以線性層進行彙整/降維或升維 * 在生成 K/Q/V 時以線性層做特徵投影,便於學習不同子空間 # 為何用 Softmax * 將未歸一化分數轉為機率分布 * 強化高關聯配對的影響力,提升對關鍵關係的「信心」 # GPT(Decoder-only)與經典 Transformer 差異 * 移除整個編碼器與解碼器中的跨注意力,僅保留「遮罩自注意力 → 前饋 → Add & Norm」的解碼堆疊 * 輸出經線性層與 softmax 取得機率後進行抽樣生成 * 本質上是只用解碼端的自迴歸生成模型 ---- # Self-Attention 概念示例 * 使用句子 *my dog has fleas* 說明注意力如何在詞與詞之間建立關聯 * 部分詞語關聯度高,例如「dog」與「fleas」→ 高注意力分數 * 部分關聯度低,例如「my」與「fleas」→ 低注意力分數 * 注意力矩陣對稱,模型會學習如何分配這些權重 # Transformer 架構總覽 * 輸入包含 Token Embeddings 與 Positional Encodings * 由多層 Decoder Blocks 組成(GPT 為 Decoder-only 架構) * 每個 Decoder Block 包含:多頭自注意力、殘差連接、前饋網路(Linear → ReLU → Linear)、再殘差連接 * Multi-head Attention:每個 Head 都有 Query、Key、Value 三個線性轉換 * Attention 計算:Query × Key → Scaled Dot Product → Masking → Softmax → 與 Value 相乘 * 最終輸出經線性層與 Softmax 生成機率分布 # SSH 與開發環境設定 * 使用 SSH 從 MacBook 連線至 Windows 桌機,進行遠端開發 * Windows 上安裝並啟動 CUDA 虛擬環境 * 使用 VS Code Remote Explorer 搭配 OpenSSH Server 進行遠端編輯 * 啟動 Jupyter Notebook,作為主要實驗與開發環境 # GPT 架構實作計畫 * 建立 `GPTLanguageModel` 類別,替代原本的 Bigram Model * 導入必要的模組:Tokenizer、DataLoader、Train/Val Split、Loss Function 等 * 從高層(模型架構)逐步實作到底層(Attention 計算) * 新增 Positional Embeddings:使用 `nn.Embedding` 來學習位置資訊,而非固定公式 * Token Embedding:將每個字元轉換為高維向量(例如長度 384),存儲語義特徵 # Decoder Layers 與 Block 結構 * 超參數 `n_layer` 控制 Decoder Block 的層數,例如設為 4 * 使用 `nn.Sequential` 建立多層 Block 串接 * 後續將實作 Block 類別,包含 Attention、Feedforward 與 Residual 結構 * Block 與 Layer 在此脈絡可視為同義詞,代表一個完整的 Transformer 組件 ---- # LayerNorm 與輸出層 * `self.layer_norm_final` 放在網路最後,用於加速收斂、提升穩定性 * 輸出層為線性投影,將 Decoder 的輸出轉換到詞彙表大小,以便 softmax 計算機率分布 * Learned embeddings 比固定正弦/餘弦編碼更符合 GPT 的實務做法 # Forward Pass 流程 * Token Embedding:將輸入索引轉換為向量 * Positional Embedding:生成位置索引並轉換為向量 * 使用 broadcasting 將兩者相加得到最終輸入表示 * 輸入通過多層 Decoder Block * 輸出經 LayerNorm 與線性層後轉為 softmax 可處理的機率分布 # Broadcasting 規則 * PyTorch 支援張量不同形狀的運算,自動延展維度 * Positional 與 Token Embedding 可相加,生成形狀為 `B × T × C` 的張量 * 熟悉 broadcasting 有助於避免 shape 錯誤 # 權重初始化與標準差 * 標準差衡量資料分散程度,過大代表不穩定,過小代表學不到東西 * 權重初始化需保持適中標準差,避免梯度爆炸或無法學習 * 專業實務中會使用初始化策略(如設定標準差 0.02)來穩定訓練 # Block 類別設計 * 每個 Block 對應 Transformer 的一個 Decoder Block * `__init__` 初始化所需模組,`forward` 定義前向傳播 * 新增參數 `head_size`,表示每個注意力頭捕捉的特徵數 * `head_size = n_embed ÷ n_head`,例如 384 維度 ÷ 4 頭 = 每頭 96 維 * Block 包含多頭自注意力(multi-head attention)、殘差連接與前饋層,後續將逐步實作 --- # Block 架構流程 * Block 由自注意力層、殘差連接與 LayerNorm、前饋網路組成 * 執行順序為:自注意力 → Add & Norm → 前饋層 → Add & Norm * LayerNorm 用於平滑特徵,幫助模型更穩定收斂 # Feed Forward 網路 * 採用 `nn.Sequential`:Linear → ReLU → Linear * 第一層將 `n_embed` 映射至 `4 × n_embed`,再映射回 `n_embed` * ReLU 將小於等於 0 的數值轉為 0,其餘保持不變 * Dropout 機制防止過擬合,常設為 0.2 # Multi-Head Attention * 多頭注意力由多個 Head 並行計算組成 * 每個 Head 提取部分特徵(head_size = n_embed ÷ n_head) * 最後將各 Head 輸出沿最後一維拼接,再投影回 `n_embed` * Dropout 應用於投影後,增加正則化效果 # Head 與 Scaled Dot-Product Attention * 每個 Head 定義三組線性轉換:Query、Key、Value * 將輸入從 `n_embed` 投影到 `head_size` * Attention 計算流程:Query × Keyᵀ → Scaling → Masking → Softmax → 加權 Value * Masking 確保模型不會「偷看」未來的 Token # Transpose 與矩陣乘法 * Transpose 將 Key 的最後兩個維度對調,確保能與 Query 進行矩陣乘法 * 計算後得到注意力權重矩陣,描述序列中各 Token 的關聯性 # Scaling 的作用 * Dot product 值可能過大,導致梯度消失或偏向單一 Token * 使用 `1 / sqrt(head_size)` 將值縮放,避免數值過大 * 確保各 Head 的輸出權重分布平衡,提高模型對不同 Token 的關注能力 --- # Masked Fill 與 Softmax * masked fill 將未來的 token 設為負無窮大,阻止模型「偷看」未來 * softmax 對最後一維做指數化與正規化,強化較大的注意力分數 * 結果是突顯關鍵 token,使模型更有信心分配注意力 # Dropout 與加權聚合 * softmax 輸出經過 Dropout,防止過擬合 * 最後與 value 向量相乘,形成加權輸出 # ModuleList 與 Sequential * ModuleList 儲存多個模組,彼此獨立,不會像 Sequential 一層接一層執行 * 多頭注意力的頭雖獨立,但可在 GPU 上並行運算 * 平行性來自運算結構與 GPU 能力,而非 ModuleList 本身 # GPT 模型流程 * 輸入經 token embedding 與 position embedding * 初始化權重,堆疊多個 decoder block * 每個 block 包含:自注意力、LayerNorm、前饋網路、LayerNorm,採用 post-norm 結構 * 前饋網路結構為 Linear → ReLU → Linear → Dropout * 多頭注意力將各頭輸出拼接再線性轉換 # 注意力運算步驟 * 每個頭生成 key、query、value * 透過線性層產生並註冊參數 * 使用縮放點積計算注意力分數,遮罩未來位置 * 經 softmax 突顯重要 token,再乘上 value 完成加權聚合 # 超參數 * n_layer:decoder block 的數量 * n_heads:注意力頭數量 * n_embed:總嵌入維度,等於所有頭輸出拼接後的維度 * block size:序列長度 * batch size:每批訓練樣本數 * max iters:訓練迭代次數 * learning rate:學習率 * eval interval:評估間隔 * dropout:隨機丟棄比例 # 資料準備與訓練 * 使用 OpenWebText corpus 作為訓練語料 * 建立詞彙表與字典,計算 vocab size * 設定批次與序列長度,依資源調整 block size 與 batch size * 搭建訓練 loop,定期列印訓練與驗證 loss * 模型訓練中,loss 會隨迭代逐步下降 --- # OpenWebText 與資料來源 * OpenWebText 是依照 Reddit 高分貼文的連結建立的開源語料庫 * 原始 WebText 不公開,OpenWebText 是研究者整理的替代版本 * 其他常見語料來源包括 Common Crawl(PB 級)、BooksCorpus 等 # 超參數與模型調整 * 批次大小與區塊大小影響有限,更關鍵的是學習率設定 * 常用學習率組合:3e-3、3e-4、1e-3、1e-4 * 增加 head 數與層數可提升模型捕捉複雜關係的能力 * 不同設定對 loss 下降有顯著影響,例:調整後 loss 從 ~3.1 降至 ~2.2 # 損失值與準確率關係 * 使用交叉熵損失(cross-entropy loss) * 損失值約 1.01 對應約 35% 預測正確率 * 損失值 0.89 對應約 40% 正確率 # 大規模語料處理挑戰 * 小語料(如《綠野仙蹤》)可一次讀入 RAM * OpenWebText 體積過大(數十 GB),無法一次讀入 * 必須逐步解壓 `.xz` 壓縮檔並處理 # 資料前處理流程 * 使用 Python 模組:`os`(檔案操作)、`lzma`(處理 .xz 壓縮)、`tqdm`(進度條) * 定義函數收集資料夾內的 `.xz` 檔案清單 * 建立 vocab 集合,存儲語料中遇到的所有字元(唯一性保障) * 每處理一個檔案:解壓 → 內容寫入輸出檔 → 新字元加入 vocab # 輸出檔案與切分策略 * 支援單一輸出檔或多個輸出檔(output0, output1, …) * 檔名需使用正確分隔符,建議用 `/` 或 `\\` * 最終會輸出一份 vocab 檔保存字元集合 # 訓練與驗證集切分 * 建議直接建立兩份檔案:train(90%)、val(10%) * 節省訓練過程中即時切分的計算成本 * 驗證檔大小接近理論值(訓練集大小 ÷ 9 ≈ 驗證集大小) * 例:訓練集 38.9 GB,驗證集 4.27 GB,比例正確 --- # 建立資料批次 * vocab.txt 準備完成,需要修改 get_batch 函數 * 採用記憶體映射(memory mapping)處理大型文字檔,避免一次載入全部內容 * split 決定讀取 train 或 val 檔案,以二進位模式開啟並用 mmap 建立映射 # 讀取與切分資料 * 隨機選擇起始位置,範圍為 0 到 (檔案大小 - block_size × batch_size) * 使用 seek 移動到起始位置,再讀取 block_size × batch_size 的資料長度 * 將讀取到的資料以 UTF-8 解碼,忽略錯誤並移除不必要的字元 * 最後將資料轉為整數化 token(torch.long)以便模型處理 # 訓練與驗證模式 * train 模式會啟用 Dropout,使部分神經元失效避免過擬合 * eval 模式關閉 Dropout,所有神經元都啟用,表現通常優於訓練時 # 實驗結果 * 訓練過程中 loss 從 10.5 快速下降到 2.38 * 驗證 loss 低於訓練 loss,顯示模型開始收斂並形成完整的特徵學習 # 模型儲存 * 使用 pickle 將模型序列化為 .pkl 檔案,包含架構與學習到的參數 * 透過 `pickle.dump(model, f)` 將模型存檔,副檔名通常為 .pkl * 存檔後可重新載入模型,避免每次重新訓練 # 調整超參數 * 為加速實驗,將 n_head 減少為 1、n_layer 減少為 1 * 將 batch_size 從 64 減半為 32 * 訓練完成後產生 model.pkl 檔案(約 106MB),包含完整模型狀態 --- # 模型保存與載入 * 使用 `pickle` 儲存與載入模型參數 * 載入後可繼續訓練或推理 * 方便長時間訓練(可分段進行,避免中斷損失) * 訓練後可部署於應用,例如聊天機器人 # GPU 記憶體管理 * Dedicated GPU memory:顯示卡上的 VRAM,速度最快 * Shared GPU memory:當 VRAM 不足時使用系統 RAM,效率較差 * 建議盡量保持運算在 dedicated GPU memory 中 * 影響 GPU 記憶體消耗的超參數:batch size、block size、embedding size、head 數量 * n layer 主要影響計算時間,不如 batch 與 block 對記憶體壓力大 # 超參數調校與 AutoTuning * 每張 GPU 可承受的最佳超參數組合不同 * 可手動測試 batch size、block size 等,找到最適合的組合 * AutoTuning:自動嘗試多組超參數,篩選出不報錯且效能最佳的組合 * 常用於實務中,加速找到適合硬體的配置 # 命令列參數(Arguments) * 使用 `argparse` 模組,允許從命令列動態輸入參數 * 範例:`python train.py --batch_size 32` * 可避免每次修改程式碼才能調整超參數 * 支援多個參數,例如 batch size、學習率、block size # 拆分訓練與推理程式 * `training.py`:包含模型架構、資料處理、訓練流程與保存功能 * `chat.py`:只負責載入已訓練模型,進行互動式推理 * chatbot 流程:輸入 prompt → 編碼成 tensor → 模型生成 → 解碼成文字 → 輸出結果 --- # 參數載入與架構一致性 * 重新載入模型時需確保超參數與網路架構與訓練時完全一致 * 未提供可載入的檔案時須處理為空狀態避免載入錯誤 * 以註解或條件分支控制「是否載入舊模型」的流程 # nn.Module 使用要點 * 含可學參數的所有類別與子類別皆需繼承 `nn.Module` * 讓 PyTorch 能追蹤參數、正確進行前向傳遞與反向傳遞 * 缺少 `nn.Module` 會導致訓練與序列化流程出錯 # 生成長度與 block size * `max_new_tokens + prompt_len` 不得超過 `block_size` * 超過時以裁切機制保留最後 `block_size` 個 token 當作條件序列 * 解決因序列過長導致的維度不相容錯誤 # 預訓練 vs 微調 * 預訓練:輸入與目標等長,目標為輸入右移一位的自回歸學習 * 微調:輸入與輸出可不同長度,以任務型的 Prompt/Completion 配對訓練 * 在序列末尾加入 `</eos>`(終止 token),生成時遇到即停止 # 效能量測 * 以 `time.time()` 記錄區塊起訖時間,評估載入、儲存、估算 loss 等步驟耗時 * 透過超參數實驗觀察效能—收斂速度與運算時間的取捨 # 模型儲存 * 以 `pickle` 將模型序列化為 `.pkl`,包含結構與權重(單 GPU 環境適用) * 訓練結束後存檔,日後可直接載入續訓或推論 * 檔案大小與網路深度、寬度及參數精度相關 # 量化(Quantization) * 以 FP16 或 4-bit 等精度壓縮降低 VRAM 佔用 * 4-bit 以查表近似連續權重值,提升可訓規模 * 參考 QLoRA:在量化權重量上進行高效微調 # 梯度累積(Gradient Accumulation) * 多步累積梯度後再更新參數,等效於更大 batch size * 在 VRAM 受限時取得更穩定的梯度估計與泛化效果 # 模型與資料生態(Hugging Face) * 提供多模態、CV、NLP、RL 等模型可直接下載使用 * 資料集如 OpenOrca(指令/對話)、OpenWebText、CommonCrawl、Wikipedia 等 * 可用於預訓練(大規模通用語料)與微調(高品質任務資料) # 訓練觀察 * `model.train()` 啟用 Dropout;`model.eval()` 關閉 Dropout * 驗證 loss 可能低於訓練 loss,表示模型在完整激活下表現更佳 * 透過定期列印步驟監控收斂趨勢與穩定性 --- # Terminology * 語言模型(Language Model, LM):一種用於預測文字序列中下個詞的統計或深度學習模型 * 大型語言模型(Large Language Model, LLM):基於 Transformer 的深度神經網路,能處理大規模文本資料並生成語意相關內容 * 貝格模型(Bigram Model):只根據當前詞與前一個詞的條件機率來建構的語言模型 * 三元模型(Trigram Model):利用當前詞與前兩個詞的條件機率進行預測的語言模型 * 巨集語料庫(Corpus):訓練語言模型所需的大量文本資料集 * 資料前處理(Data Preprocessing):清理、標準化及切分原始文本資料的過程 * 標記化(Tokenization):將文字序列轉換為單詞或子詞單元的過程 * 詞彙表(Vocabulary):模型能識別與處理的所有詞或子詞集合 * 字典大小(Vocabulary Size):語言模型中可使用的獨特標記數量 * 嵌入層(Embedding Layer):將離散的詞元映射為連續的數值向量空間 * 向量表示(Vector Representation):用數值向量描述詞語或句子的方式 * 梯度下降(Gradient Descent):神經網路常用的最佳化演算法 * 損失函數(Loss Function):衡量模型預測與實際結果差異的函數 * 交叉熵損失(Cross-Entropy Loss):常用於分類與語言建模的損失函數 * 訓練資料(Training Data):用於讓模型學習模式的資料集 * 驗證資料(Validation Data):用於調整模型超參數與避免過擬合的資料集 * 測試資料(Test Data):用於最終評估模型性能的資料集 * 過擬合(Overfitting):模型在訓練資料上表現很好但泛化能力差的現象 * 欠擬合(Underfitting):模型過於簡單,無法學到資料模式的情況 * 批次大小(Batch Size):一次前向與反向傳播所處理的樣本數 * 學習率(Learning Rate):控制每次更新權重時步伐大小的超參數 * 優化器(Optimizer):調整模型權重以最小化損失函數的演算法 * 隨機梯度下降(Stochastic Gradient Descent, SGD):每次使用小批次資料進行更新的最佳化方法 * Adam 優化器(Adam Optimizer):一種結合動量與自適應學習率的優化方法 * PyTorch 框架(PyTorch Framework):常用的深度學習開源框架 * CUDA 加速(CUDA Acceleration):利用 NVIDIA GPU 提升訓練速度的技術 * 虛擬環境(Virtual Environment):隔離專案依賴的 Python 執行環境 * Anaconda 發行版(Anaconda Distribution):整合科學運算與機器學習的 Python 發行版 * Jupyter 筆記本(Jupyter Notebook):互動式程式撰寫與數據分析工具 * 內核(Kernel):負責執行 Jupyter Notebook 中 Python 程式的核心環境 * ipykernel 套件(ipykernel Package):使 Jupyter Notebook 與虛擬環境整合的模組 * Numpy 套件(Numpy Library):用於高效數值運算的 Python 函式庫 * Matplotlib 套件(Matplotlib Library):Python 中的可視化繪圖工具 * LZMA 壓縮(LZMA Compression):基於 Lempel–Ziv–Markov 演算法的壓縮方式 * Visual Studio Build Tools:Windows 上建置某些 Python 擴展套件所需的工具 * PyTorch Index URL:指定安裝含 GPU 支援版本 Torch 的來源 * Project Gutenberg:免費提供公版書籍文本的資料來源網站 * 文本清理(Text Cleaning):去除書籍中的標頭、版權聲明與雜訊內容的過程 * 分布式訓練(Distributed Training):將訓練任務分散到多個 GPU 或伺服器的技術 * 隨機初始化(Random Initialization):隨機設定模型初始權重的方法 * 熵(Entropy):描述不確定性的數學概念,與機率分布有關 * 機率分布(Probability Distribution):表示事件發生機率的函數或數列 * 條件機率(Conditional Probability):在已知事件 A 發生的條件下,事件 B 的機率 * 自迴歸模型(Autoregressive Model):透過歷史詞元逐步預測下一個詞的模型 * Transformer 架構(Transformer Architecture):基於注意力機制的深度學習模型架構 * 注意力機制(Attention Mechanism):動態分配輸入序列中各詞的重要性權重的技術 * 位置編碼(Positional Encoding):在 Transformer 模型中為序列資料提供順序資訊的方法 * 模型微調(Fine-tuning):在預訓練模型基礎上針對特定任務進行再訓練的過程 * 推論(Inference):使用已訓練模型對新資料進行預測的過程 * 語料庫(Corpus):語言模型訓練所使用的大型文本集合 * 字元級分詞器(Character-level Tokenizer):將文本切分為單個字元並轉換為整數索引的工具 * 詞級分詞器(Word-level Tokenizer):將文本按單詞切分並映射為索引的工具 * 子詞級分詞器(Subword Tokenizer):介於字元與單詞之間的分詞方式,常見於 BPE 或 SentencePiece * 詞彙表(Vocabulary):語言模型中所有可用字元或詞的集合 * 編碼器(Encoder):將字元或詞轉換為整數索引的函數 * 解碼器(Decoder):將整數索引轉換回字元或詞的函數 * 雙字模型(Bigram Model):僅考慮當前字元與前一字元關係的語言模型 * 預測目標(Target):模型需要學習預測的正確標籤 * 輸入序列(Input Sequence):送入模型的文字編碼序列 * 偏移量(Offset):將輸入與目標對齊時的位移量 * 區塊大小(Block Size):訓練時選取的文字片段長度 * 訓練集(Training Set):用於模型參數學習的資料集 * 驗證集(Validation Set):用於評估模型泛化能力的資料集 * 過擬合(Overfitting):模型在訓練集表現良好但泛化能力不足的現象 * 泛化(Generalization):模型對未見資料的預測能力 * 獨熱編碼(One-hot Encoding):將索引轉換為稀疏向量表示的方法 * 張量(Tensor):多維數據陣列,是 PyTorch 等框架的核心資料結構 * 長整數型別(torch.long):PyTorch 中用於索引和離散標籤的數據型別 * 點積(Dot Product):線性代數運算,用於計算向量間相似度 * 矩陣乘法(Matrix Multiplication):多維陣列間的乘法運算 * 梯度下降(Gradient Descent):優化模型參數的常用方法 * 損失函數(Loss Function):衡量模型預測與目標差異的函數 * 機率分佈(Probability Distribution):對不同事件可能性的數學表示 * 條件機率(Conditional Probability):基於前一元素預測下一元素的機率 * 語言模型(Language Model):基於機率分佈建模文字序列的模型 * 神經網路(Neural Network):由多層線性與非線性運算組成的函數近似器 * 前饋網路(Feedforward Network):訊號僅沿單一方向傳播的神經網路 * 循環神經網路(Recurrent Neural Network):可處理序列資料的網路架構 * 注意力機制(Attention Mechanism):根據輸入序列中不同部分的重要性加權的機制 * Transformer:基於注意力機制的深度學習架構 * 嵌入向量(Embedding Vector):將離散字元或詞映射到連續空間的表示 * 批次(Batch):一次性送入模型的資料集合 * 迭代(Iteration):一次參數更新的過程 * 週期(Epoch):完整訓練資料被模型處理一次 * 機率語言建模(Probabilistic Language Modeling):基於機率分佈建構文字生成的技術 * 交叉熵損失(Cross-Entropy Loss):衡量機率分佈間差異的損失函數 * 樣本空間(Sample Space):所有可能輸出結果的集合 * 機率質量函數(Probability Mass Function):離散隨機變數的機率分佈函數 * 熱啟動(Warm Start):使用已有模型參數作為訓練起點 * 隨機初始化(Random Initialization):隨機設置模型初始參數的方法 * 向量化(Vectorization):將操作轉換為矩陣運算以加速計算 * 正則化(Regularization):避免過擬合的技術,如 L2 範數 * Dropout:隨機丟棄部分神經元以增強泛化能力的正則化方法 * 梯度爆炸(Gradient Explosion):梯度值過大導致訓練不穩定的問題 * 梯度消失(Gradient Vanishing):梯度值過小導致學習停滯的問題 * 優化器(Optimizer):更新模型參數的演算法,如 Adam 或 SGD * 學習率(Learning Rate):控制參數更新幅度的超參數 * 自回歸模型(Autoregressive Model):逐步根據先前輸出生成下一步的模型 * 機率圖模型(Probabilistic Graphical Model):用圖結構表示隨機變數間依賴關係的模型 * 牆鐘時間(Wall Time):實際經過的時間,包括執行與等待 * CPU 時間(CPU Time):程式在 CPU 上實際執行指令所花的時間 * 奈秒(Nanosecond):十億分之一秒的時間單位 * 機率分佈(Probability Distribution):描述各事件發生機率的數學函數 * 取樣(Sampling):依據機率分佈隨機挑選樣本的過程 * 張量(Tensor):多維數據陣列,是 PyTorch 的基本資料結構 * 拼接(Concatenate):將多個張量在指定維度上合併 * 下三角矩陣(Lower Triangular Matrix):僅保留對角線及以下元素的矩陣 * 上三角矩陣(Upper Triangular Matrix):僅保留對角線及以上元素的矩陣 * 遮罩填充(Masked Fill):根據條件將指定元素替換為特定值 * 指數函數(Exponential Function):數學函數 (e^x),常用於機率與激活函數 * 負無窮大(Negative Infinity):數學中代表無限小的數,用於遮罩計算 * 維度轉置(Transpose):交換張量的維度順序 * 堆疊(Stack):沿著新維度堆疊多個張量 * 批次(Batch):一次輸入模型的一組資料樣本 * 線性層(Linear Layer):含權重與偏差的仿射轉換層 * 權重(Weight):神經網路中可學習的參數,用來調整輸入影響 * 偏差(Bias):加在輸入上的可學習常數,提升模型表現 * 模組(Module):PyTorch 中可包含子層或運算的抽象單元 * 容器(Container):可儲存並組合多個層的結構 * 順序容器(Sequential Container):按順序執行多個層的結構 * 隱藏層(Hidden Layer):輸入與輸出之間的中間層 * 輸入神經元(Input Neuron):接受外部輸入資料的節點 * 輸出神經元(Output Neuron):輸出最終結果的節點 * 激活函數(Activation Function):引入非線性,使模型能表達複雜關係 * Softmax 函數(Softmax Function):將數值轉換為總和為 1 的機率分佈 * 正規化(Normalization):將數值縮放到統一範圍的過程 * 損失函數(Loss Function):衡量模型預測與真實值差距的函數 * 反向傳播(Backpropagation):根據梯度更新模型參數的演算法 * 梯度(Gradient):損失函數對參數的偏導數 * 優化器(Optimizer):用於更新權重與偏差的演算法 * 學習率(Learning Rate):控制參數更新幅度的超參數 * 遮罩(Masking):防止模型存取不應該使用的資訊 * 自回歸模型(Autoregressive Model):基於過去輸出預測未來輸出的模型 * 序列建模(Sequence Modeling):針對時間或順序數據進行建模的技術 * 查詢(Query):在注意力機制中用於比對鍵的向量 * 鍵(Key):在注意力機制中與查詢比對的向量 * 值(Value):在注意力機制中與鍵相關聯的輸出向量 * 注意力機制(Attention Mechanism):根據權重聚焦於重要資訊的運算 * 遮罩注意力(Masked Attention):限制模型僅能關注過去資訊的注意力 * 指數移動平均(Exponential Moving Average):加權平均的一種方式,常用於平滑化 * 正則化(Regularization):防止模型過擬合的技術 * 過擬合(Overfitting):模型過度貼合訓練資料而泛化能力不足 * 權重初始化(Weight Initialization):設定模型初始參數的方法 * 梯度消失(Vanishing Gradient):梯度過小導致學習困難的問題 * 梯度爆炸(Exploding Gradient):梯度過大導致不穩定的問題 * 批次正規化(Batch Normalization):在批次內正規化輸入以加速訓練 * 參數共享(Parameter Sharing):在多處使用同一組權重以減少參數 * 向量化(Vectorization):將運算轉換為矩陣運算以提升效率 * 張量廣播(Tensor Broadcasting):在運算時自動擴展張量形狀以匹配 * 百分比時間(Percentage Time):量測程式區塊執行耗時的工具 * CPU 時間(CPU Time):實際在 CPU 上執行運算所耗費的時間,不含等待 * 牆鐘時間(Wall Time):實際等待程式完成所耗費的時間,包含等待與執行 * 機率分佈(Probability Distribution):描述不同結果出現機率的數學函數 * 多項分佈抽樣(torch.multinomial):根據機率分佈抽樣索引的 PyTorch 函數 * 拼接(Concatenate):將多個張量沿指定維度合併為一個 * torch.cat:用於拼接張量的 PyTorch 函數 * 下三角矩陣(Lower Triangular Matrix):主對角線以下的元素非零,其他為零的矩陣 * torch.tril:生成或保留張量的下三角部分的 PyTorch 函數 * 上三角矩陣(Upper Triangular Matrix):主對角線以上的元素非零,其他為零的矩陣 * torch.triu:生成或保留張量的上三角部分的 PyTorch 函數 * 遮罩填充(Masked Fill):依條件將張量元素替換為指定值的操作 * 負無窮大(Negative Infinity):數值極限,用於遮罩計算時令結果趨近於零 * 指數函數(Exponential Function):以常數 (e \approx 2.71) 為底的冪次運算 * torch.exp:計算張量中每個元素的指數值的 PyTorch 函數 * 轉置(Transpose):交換張量指定維度以改變形狀的操作 * torch.transpose:進行張量維度轉置的 PyTorch 函數 * torch.stack:將多個張量堆疊成新的維度的 PyTorch 函數 * 批次堆疊(Batch Stacking):將多個序列樣本堆疊以形成批次輸入 * 批次(Batch):一次送入模型的資料集合 * nn.Linear:PyTorch 中的線性層,進行加權和偏置的線性變換 * 權重參數(Weight Parameter):線性層中可學習的乘法係數 * 偏置參數(Bias Parameter):線性層中可學習的加法常數 * 可學習參數(Learnable Parameters):模型透過訓練更新的數值 * nn.Module:PyTorch 神經網路層與模型的基底類別 * 順序容器(nn.Sequential):按順序堆疊多層網路的容器 * 線性變換(Linear Transformation):輸入向量與權重矩陣相乘並加上偏置的運算 * 隱藏層(Hidden Layer):介於輸入層與輸出層之間的神經網路層 * 神經元(Neuron):網路中的基本單元,執行加權輸入與非線性變換 * 輸入維度(Input Dimension):模型接收的特徵數量 * 輸出維度(Output Dimension):模型輸出的特徵數量 * 形狀一致性(Shape Consistency):矩陣或張量相乘時需滿足的維度規則 * 維度(Dimension):張量的軸數,例如二維矩陣或三維立方體 * Softmax 函數(Softmax Function):將實數向量轉換為機率分佈的函數 * 指數正規化(Exponential Normalization):Softmax 的核心過程,先取指數再除以總和 * 機率向量(Probability Vector):Softmax 輸出的各類別機率集合 * 分母正規化項(Normalization Term):Softmax 中所有指數值的總和 * 浮點數(Floating Point Number):可表示小數的數據型別 * 激活函數(Activation Function):引入非線性能力的數學函數 * 指數增長(Exponential Growth):數值隨指數函數迅速增大的現象 * 單位 Softmax(Standard Softmax):最常用的 Softmax 定義形式 * 遮罩機制(Masking Mechanism):避免模型使用未來資訊的技術 * 歷史依賴(Historical Dependency):模型僅依據已出現的序列進行預測 * 上下文窗口(Context Window):模型可見的序列範圍 * 機率抽樣(Probability Sampling):根據分佈隨機選取元素的方法 * 預測序列(Predicted Sequence):模型逐步生成的輸出字元或詞序列 * 參數學習(Parameter Learning):透過誤差反向傳播更新權重與偏置的過程 * 向量歸一化(Vector Normalization):將向量縮放至總和為 1 或範數為 1 的過程 * 線性層堆疊(Stacked Linear Layers):多層線性層按序組合以提升模型能力 * 功能介面(Functional API):PyTorch 中不帶狀態的函數操作集合 * Softmax 函數(Softmax Function):將向量轉換為總和為 1 的機率分佈 * 維度參數(Dimension Argument):指定在哪個軸上進行操作的參數 * 嵌入層(Embedding Layer):將離散索引映射為稠密向量表示的層 * 詞彙表大小(Vocabulary Size):資料集中獨特詞或字元的數量 * 嵌入維度(Embedding Dimension):嵌入向量的長度,表示儲存特徵的維度數 * 稠密向量(Dense Vector):每個維度皆有數值的向量表示 * 向量表示(Vector Representation):將文字或符號轉換為數值形式的表達 * 可學習參數(Learnable Parameters):透過訓練更新的權重與偏差 * 多層感知機(Multilayer Perceptron, MLP):由多層線性層與激活函數組成的神經網路 * 權重矩陣(Weight Matrix):神經網路中進行線性轉換的矩陣 * 偏差向量(Bias Vector):在線性轉換後加上的向量偏移量 * 矩陣乘法(Matrix Multiplication):兩個矩陣相乘得到新矩陣的運算 * 點積(Dot Product):兩個向量對應元素相乘後加總的結果 * 行(Row):矩陣的水平元素集合 * 列(Column):矩陣的垂直元素集合 * 矩陣形狀(Matrix Shape):矩陣的行數與列數 * 兼容性條件(Compatibility Condition):矩陣相乘需滿足的維度條件 * 矩陣維度(Matrix Dimension):矩陣的行數與列數標記 * 單精度浮點數(Float32):PyTorch 中常用的數值資料型態 * GPU 加速(GPU Acceleration):利用圖形處理器平行運算提升效能 * 張量初始化(Tensor Initialization):建立張量並指定初始值的過程 * at 運算子(@ Operator):Python 中矩陣乘法的簡寫符號 * 矩陣相乘函數(torch.matmul):PyTorch 提供的矩陣乘法函數 * 計算圖(Computation Graph):描述運算步驟與依賴關係的資料結構 * 線性代數(Linear Algebra):涉及矩陣與向量運算的數學領域 * 特徵空間(Feature Space):向量化資料所處的高維空間 * 稀疏表示(Sparse Representation):僅儲存非零值的資料結構 * 稠密表示(Dense Representation):完整儲存所有元素的資料結構 * 參數更新(Parameter Update):透過優化器調整權重與偏差的過程 * 高維向量(High-dimensional Vector):包含多個特徵的數值表示 * 索引查找(Index Lookup):利用索引快速存取嵌入向量 * 向量空間模型(Vector Space Model):用向量表示符號的數學模型 * 語意表示(Semantic Representation):用向量捕捉文字語意資訊 * 隱藏表示(Hidden Representation):中間層學到的特徵向量 * 超參數(Hyperparameter):需手動設定的模型控制參數 * 自然語言處理(Natural Language Processing, NLP):讓機器理解與生成語言的技術 * 字元級建模(Character-level Modeling):以字元作為基本單位的序列建模方法 * 單詞級建模(Word-level Modeling):以單詞作為基本單位的序列建模方法 * 子詞級建模(Subword-level Modeling):以詞片段作為基本單位的序列建模方法 * 參數矩陣(Parameter Matrix):模型內部存放可學習參數的矩陣 * 線性變換(Linear Transformation):輸入與權重相乘並加上偏差的過程 * 神經網路層(Neural Network Layer):神經網路的基本組成單元 * 矩陣相容性(Matrix Compatibility):矩陣相乘需滿足的維度一致條件 * 計算效率(Computational Efficiency):演算法執行所需時間與資源的衡量 * 並行運算(Parallel Computing):同時執行多個計算任務的方法 * 記憶體佔用(Memory Footprint):運算或模型使用的記憶體大小 * 自動微分(Automatic Differentiation):自動計算梯度的技術 * 矩陣運算(Matrix Operations):涉及矩陣加法、乘法等操作的集合 * 浮點數(Floating Point Number):帶有小數部分的數值型別,用於高精度運算 * 整數(Integer):不帶小數的數值型別 * 資料型別(Data Type):數據在程式中的表示形式,例如 int64 或 float32 * torch.randint:生成整數隨機張量的 PyTorch 函數 * torch.rand:生成浮點隨機張量的 PyTorch 函數 * dtype:張量的資料型別屬性,例如 torch.int64、torch.float32 * 型別轉換(Type Casting):將一種資料型別轉換為另一種,例如 int 轉 float * .float():將張量轉換為浮點數型別的方法 * .long():將張量轉換為整數(int64)型別的方法 * 權重矩陣(Weight Matrix):神經網路中可學習的權重參數矩陣 * CUDA:NVIDIA 的平行運算平台,用於 GPU 加速深度學習 * to(device):將張量移動到指定的裝置(CPU 或 GPU)的方法 * 超參數(Hyperparameter):需人工設定的參數,如 batch size 或 block size * get_batch 函數(Get Batch Function):生成一組輸入與目標樣本的函數 * 偏移索引(Offset Index):目標序列相對於輸入序列的位移量 * nn.Module:PyTorch 所有神經網路層的基底類別 * 子類化(Subclassing):繼承父類別並實現自定義功能的方式 * forward 函數(Forward Function):定義模型前向傳播邏輯的方法 * 學習參數(Learnable Parameters):能透過訓練更新的模型內部數值 * 損失函數(Loss Function):衡量模型預測與實際標籤差異的函數 * 負對數似然(Negative Log Likelihood):常見的分類任務損失函數 * 梯度下降(Gradient Descent):透過梯度更新參數以最小化損失的優化方法 * 導數(Derivative):描述函數變化率的數學運算 * 局部最小值(Local Minimum):損失函數在某區域內的最低點 * 全域最小值(Global Minimum):損失函數的絕對最低點 * torch.optim:PyTorch 優化器模組 * Adam 優化器(Adam Optimizer):結合動量與自適應學習率的優化方法 * AdamW 優化器(AdamW Optimizer):Adam 的改良版本,加入權重衰減 * 權重衰減(Weight Decay):限制權重值過大以提升泛化能力的正則化技術 * 學習率(Learning Rate):控制參數更新步幅大小的超參數 * 動量(Momentum):在梯度更新中加入歷史方向以加速收斂的技巧 * 內積更新(Parameter Update):根據梯度與學習率修改參數的過程 * 嵌入表(Embedding Table):將索引映射為連續向量表示的查找表 * nn.Embedding:PyTorch 的嵌入層,用於將索引轉換為向量 * 正規化(Normalization):將數值調整到相對比例一致的過程 * 機率矩陣(Probability Matrix):每個輸入對應的下一個可能輸出機率集合 * 開始符號(Start Token):表示序列起點的特殊符號 * 結束符號(End Token):表示序列終點的特殊符號 * 機率分布行(Row Probability Distribution):表示某輸入下各輸出的條件機率 * 向量查找(Vector Lookup):利用索引檢索嵌入向量的過程 * 類別數(Number of Classes):模型可輸出的不同標籤數量 * 批次生成(Batch Generation):將多個樣本組合成一次性輸入模型的過程 * GPU 平行運算(GPU Parallel Computing):利用 GPU 加速批次資料運算 * 正向傳播(Forward Propagation):輸入經過網路層計算輸出結果的過程 * 反向傳播(Backward Propagation):透過誤差計算梯度並更新參數的過程 * 最佳化器(Optimizer):控制參數更新方式的演算法 * logits(對數機率):模型在 softmax 前的原始輸出值,用於計算損失與機率 * 邏輯值(Logits):模型輸出的未經 Softmax 的浮點數向量 * 正規化(Normalization):將數值按比例縮放,使其總和為 1 或落在特定範圍 * 概率分佈(Probability Distribution):描述事件發生機率的函數 * 時間維度(Time Dimension):序列數據中代表步長或時間步的維度 * 批次維度(Batch Dimension):一次處理的樣本數量對應的維度 * 通道維度(Channel Dimension):通常代表詞彙表大小或特徵數量的維度 * 張量重塑(Tensor Reshape):改變張量的形狀但不改變其數值的操作 * View 函數(torch.view):PyTorch 中用於快速重塑張量形狀的函數 * 形狀屬性(Tensor Shape):張量各維度的大小 * 交叉熵損失(Cross-Entropy Loss):用於分類任務的損失函數 * 前向傳播(Forward Pass):將輸入數據經過模型得到輸出的過程 * 反向傳播(Backward Pass):計算損失對參數的梯度並更新的過程 * 目標張量(Target Tensor):代表真實標籤或期望輸出的張量 * 負索引(Negative Indexing):從序列末尾開始反向索引的方式 * 抽樣(Sampling):根據分佈隨機選擇元素的操作 * 拼接(Concatenate):將多個張量沿指定維度合併 * 生成函數(Generate Function):語言模型中逐步產生新 token 的函數 * GPU 遷移(Model.to(device)):將模型移至 GPU 或 CPU 執行的操作 * 最佳化器(Optimizer):根據梯度更新參數的演算法 * AdamW 優化器(AdamW Optimizer):帶有權重衰減的 Adam 優化演算法 * 權重衰減(Weight Decay):避免過擬合的一種正則化方法 * 學習率(Learning Rate):控制參數更新幅度的超參數 * 最大迭代次數(Max Iterations):訓練過程的迭代步數上限 * 訓練批次(Training Batch):在一次迭代中輸入模型的一組樣本 * 零梯度(Zero Grad):清除前一步的梯度,避免累積 * 梯度累積(Gradient Accumulation):跨多步累加梯度以模擬大批次 * 損失反向傳播(loss.backward):計算損失對模型參數的梯度 * 優化步驟(optimizer.step):更新模型參數的操作 * 長整數型(torch.long):PyTorch 中的 int64 整數型資料 * 浮點數型(Float Type):支持小數點的數值型態 * 梯度下降(Gradient Descent):利用梯度最小化損失函數的方法 * 分佈取樣(Distribution Sampling):依機率分佈生成樣本 * 梯度清空模式(set_to_none):將梯度設為 None 以節省記憶體 * 遞迴神經網路(Recurrent Neural Network, RNN):能處理序列上下文的神經網路 * 語言模型(Language Model):預測序列中下一個 token 的模型 * 上下文(Context):當前生成或預測時依據的歷史資訊 * 獨熱編碼(One-Hot Encoding):將類別轉換為稀疏向量的方式 * 損失值(Loss Value):量化模型預測與真實答案差異的數值 * 訓練迴圈(Training Loop):反覆進行前向傳播、反向傳播與更新的流程 * 隨機初始化(Random Initialization):隨機生成初始參數值的方法 * 機率取樣(Probabilistic Sampling):依 Softmax 輸出的機率隨機選擇輸出 * 機率最大化(Argmax Prediction):選擇機率最高的輸出作為預測 * 梯度爆炸(Exploding Gradients):梯度值過大導致不穩定的問題 * 梯度消失(Vanishing Gradients):梯度過小導致學習停滯的問題 * 訓練集(Training Set):用於訓練模型的數據子集 * 驗證集(Validation Set):用於調整超參數的數據子集 * 測試集(Test Set):用於評估模型泛化能力的數據子集 * 隨機梯度下降(Stochastic Gradient Descent, SGD):逐批更新的梯度下降方法 * 小批量(Mini-Batch):訓練時使用的數據分塊 * 模型收斂(Model Convergence):訓練過程中損失逐漸穩定下降的現象 * 過擬合(Overfitting):模型過度學習訓練數據而泛化不足 * 平均平方誤差(Mean Squared Error, MSE):迴歸問題常用的損失函數,計算預測值與實際值的平方差平均 * 迴歸(Regression):預測連續輸出的機器學習任務 * 最佳擬合線(Best Fit Line):迴歸中用於逼近數據趨勢的直線或曲線 * 損失函數(Loss Function):衡量模型預測與真實值之間差距的函數 * 梯度下降(Gradient Descent):透過沿梯度方向調整參數以最小化損失的優化方法 * 權重(Weight):神經網路中調整輸入訊號影響力的可學習參數 * 偏置(Bias):神經網路中調整輸出平移的可學習參數 * 動量(Momentum):在梯度下降中加入前幾次更新的影響以加速收斂 * 動量係數(Momentum Coefficient):控制歷史梯度與當前梯度的比例,常設為 0.9 * 振盪(Oscillation):參數在收斂過程中來回擺動的現象 * RMSProp:根據梯度平方的移動平均自適應調整學習率的優化器 * 移動平均(Moving Average):逐步更新平均值以平滑變動的技術 * Adam 優化器(Adam Optimizer):結合動量與 RMSProp 的自適應學習率優化方法 * AdamW 優化器(AdamW Optimizer):Adam 的改良版本,加入權重衰減以增強泛化 * 權重衰減(Weight Decay):正則化方法,限制權重過大以避免過擬合 * 泛化能力(Generalization):模型在未見資料上的表現能力 * 學習率(Learning Rate):控制參數更新幅度的超參數 * 超參數(Hyperparameter):由人工設定的模型控制參數,例如 batch size、learning rate * 迭代次數(Iteration):模型參數更新的一次循環 * 收斂(Convergence):模型訓練過程中逐步趨近最佳解的現象 * 模組運算子(Modulo Operator):計算整數除法的餘數,用於控制迴圈週期事件 * 評估間隔(Evaluation Interval):固定次數迭代後進行評估的策略 * @torch.no_grad:停用梯度計算以降低記憶體和運算開銷的裝飾器 * model.train():將模型設置為訓練模式,啟用 Dropout 和 BatchNorm * model.eval():將模型設置為驗證模式,停用 Dropout 並固定 BatchNorm * Dropout:隨機丟棄部分神經元的正則化技術,避免過擬合 * 批次正規化(Batch Normalization):對每個批次數據進行標準化以加速訓練 * 過擬合(Overfitting):模型過度擬合訓練數據而在測試數據上表現不佳 * 驗證集(Validation Set):用於評估模型泛化能力的資料集 * 訓練集(Training Set):用於更新模型參數的資料集 * 預測準確率(Prediction Accuracy):模型正確預測比例的指標 * item():將張量中的單一值轉換為 Python 數值的函數 * mean():計算張量中所有元素平均值的函數 * 日誌報告(Logging):在訓練過程中輸出模型狀態或損失的過程 * 格式化輸出(Formatted Output):控制數字顯示精度與格式的技術 * F 字串(F-String):Python 中用於內嵌變數的字串格式化方法 * 損失收斂曲線(Loss Convergence Curve):繪製損失隨訓練步驟下降的圖表 * 評估函數(Evaluation Function):計算並回報模型表現的函數 * 梯度計算圖(Computation Graph):PyTorch 用於追蹤張量運算以反向傳播的結構 * 反向傳播(Backpropagation):根據損失函數計算梯度並更新參數的過程 * 正則化(Regularization):避免模型過度擬合的技術集合 * 最佳化器(Optimizer):控制參數更新策略的演算法 * 繪圖工具(Visualization Tool):如 Desmos,用於數學函數視覺化 * 評估損失(Evaluation Loss):在驗證資料上計算的損失值 * 訓練損失(Training Loss):在訓練資料上計算的損失值 * 數值穩定性(Numerical Stability):避免計算中溢位或精度喪失的性質 * 小數精度(Decimal Precision):輸出數字的小數位數控制 * 正規化技術(Normalization Techniques):不同形式的數據縮放或標準化方法 * Softmax 正規化(Softmax Normalization):將向量轉換為機率分佈的一種方法 * 最小最大正規化(Min-Max Normalization):將數據縮放到 [0,1] 範圍內 * Z 分數標準化(Z-score Normalization):使用平均值與標準差將數據轉換為標準常態分佈 * 小數標度正規化(Decimal Scaling Normalization):透過移動小數點縮放數值 * 平均值正規化(Mean Normalization):數據減去平均值後再除以範圍 * 單位向量正規化(Unit Vector Normalization, L2 Normalization):將向量長度縮放為 1 * 強健縮放(Robust Scaling):使用中位數與四分位數範圍縮放數據 * 功率轉換(Power Transformation):透過 Box-Cox 或 Yeo-Johnson 方法使數據更接近常態分佈 * Softmax 正規化(Softmax Normalization):將 logits 轉換為機率分佈 * 標準化(Standardization):將數據轉換為零均值與單位標準差 * 白化處理(Whitening):將數據線性轉換為零均值、單位方差且變量間不相關 * 批次正規化(Batch Normalization):對每個小批量數據正規化以穩定訓練 * 層正規化(Layer Normalization):對每個樣本的特徵維度進行正規化 * 權重正規化(Weight Normalization):重新參數化權重向量以改善收斂 * 群體正規化(Group Normalization):將特徵分組後再進行正規化 * 實例正規化(Instance Normalization):對每個樣本單獨進行正規化,常用於影像風格轉換 * 卷積正規化(Convolutional Normalization):針對卷積層特徵圖的正規化技巧 * 線性層正規化(Linear Layer Normalization):針對全連接層的正規化方法 * 激活函數(Activation Function):引入非線性轉換的數學函數 * 修正線性單元(ReLU, Rectified Linear Unit):將小於零的值設為零,大於零的值保持不變 * 漏斗 ReLU(Leaky ReLU):在負數區域保留小斜率避免梯度消失 * 參數化 ReLU(PReLU):允許負數區域斜率可學習的激活函數 * 指數線性單元(ELU, Exponential Linear Unit):在負數區域平滑過渡的激活函數 * Sigmoid 函數(Sigmoid Function):輸出範圍為 [0,1] 的 S 形曲線 * 雙曲正切函數(Tanh Function):輸出範圍為 [-1,1] 的 S 形曲線 * Softplus 函數(Softplus Function):ReLU 的平滑近似形式 * Swish 函數(Swish Function):自門控的平滑激活函數,性能優於 ReLU * GELU 函數(Gaussian Error Linear Unit):結合高斯分佈特性的激活函數 * Maxout 函數(Maxout Function):選取多個線性函數的最大值作為輸出 * 恒等函數(Identity Function):輸出等於輸入的線性函數 * 非線性轉換(Nonlinear Transformation):將線性組合轉換為非線性表達 * S 形曲線(S-shaped Curve):Sigmoid 與 Tanh 的函數形狀特徵 * 梯度消失(Vanishing Gradient):梯度逐漸變小導致無法更新參數 * 梯度爆炸(Exploding Gradient):梯度過大導致訓練不穩定 * 正則化(Regularization):降低過擬合風險的技術集合 * L1 正則化(L1 Regularization):增加稀疏性,讓部分權重變為零 * L2 正則化(L2 Regularization):懲罰權重平方,防止權重過大 * Dropout 技術(Dropout):隨機丟棄部分神經元以避免過擬合 * 隨機失活(Random Deactivation):Dropout 的另一種說法 * 激活梯度(Activation Gradient):激活函數輸出對輸入的導數 * 非飽和區域(Non-Saturated Region):激活函數輸出梯度不趨近零的區域 * 飽和區域(Saturated Region):激活函數輸出梯度趨近零的區域 * 阻塞梯度(Dead Neuron):ReLU 輸入長期小於零導致神經元不再更新 * 機率歸一化(Probability Normalization):將分數轉換為機率分佈的過程 * 指數平滑(Exponential Smoothing):利用指數加權平均平滑數據 * 特徵縮放(Feature Scaling):調整特徵範圍以改善訓練效果 * 特徵中心化(Feature Centering):將特徵平移使其平均值為零 * 資料標準化(Data Standardization):將資料轉換為統一分佈 * 機率壓縮(Probability Calibration):調整模型輸出機率更貼近真實分佈 * 熱點編碼正規化(One-Hot Normalization):將離散類別轉換為等長稀疏向量 * 層間正規化(Inter-layer Normalization):在不同層間應用的正規化技巧 * 梯度裁剪(Gradient Clipping):限制梯度範圍以避免爆炸 * 變壓器架構(Transformer Architecture):以注意力機制為核心的序列建模架構 * 自注意力(Self-Attention):序列內元素彼此計分以聚焦關聯資訊的機制 * 多頭注意力(Multi-Head Attention):並行多組注意力頭以學習不同語義視角 * 查詢(Query):用來「詢問」其他位置資訊的向量表示 * 鍵(Key):被查詢匹配的向量表示,決定關聯性 * 值(Value):隨注意力權重加權後輸出的資訊向量 * 縮放點積注意力(Scaled Dot-Product Attention):以點積計分並除以 (\sqrt{d_k}) 後經 Softmax 的注意力 * 縮放因子(Scaling Factor):用 (1/\sqrt{d_k}) 抑制大維度點積帶來的數值爆炸 * 注意力分數(Attention Score):Query 與 Key 點積後的相似度度量 * 注意力機率(Attention Probabilities):對分數做 Softmax 後的權重分佈 * 位置編碼(Positional Encoding):為序列位置注入可學習/固定的位置信息 * 正弦位置編碼(Sinusoidal Positional Encoding):以正弦/餘弦函數生成的固定位置特徵 * 可學習位置嵌入(Learnable Positional Embedding):由參數學得的位置信息向量 * 編碼器層(Encoder Layer):自注意力與前饋網路堆疊的特徵抽取單元 * 解碼器層(Decoder Layer):含遮罩自注意力與交叉注意力的生成單元 * 交叉注意力(Cross-Attention):解碼器用編碼器輸出作 Key/Value 的注意力 * 因果遮罩(Causal Mask):禁止關注未來位點以維持自回歸性 * 下三角遮罩(Lower-Triangular Mask):以下三角矩陣實作的因果遮罩 * 注意力遮罩(Attention Mask):在計分或 Softmax 前屏蔽不合法位置 * 殘差連接(Residual Connection):將輸入加回輸出以緩解梯度消失 * 加和與正規化(Add & Norm):殘差相加後施以層正規化的模式 * 前正規化(Pre-Norm):先層正規化再進入子層運算的架構變體 * 後正規化(Post-Norm):子層運算後再做層正規化的原始設計 * 層正規化(Layer Normalization):對特徵維度做標準化以穩定訓練 * 位置前饋網路(Position-wise Feed-Forward Network):逐位置的兩層線性+非線性變換 * 非線性激活(Nonlinear Activation):為模型引入非線性表達能力的函數 * GELU(GELU):以高斯誤差函數近似的平滑激活函數 * ReLU(ReLU):將負值截斷為零的簡單激活函數 * 投影矩陣(Projection Matrix):將向量映射至新空間的線性權重 * 線性投影(Linear Projection):以線性層生成 Q/K/V 或合併輸出的操作 * 頭數(Number of Heads):多頭注意力中並行注意力頭的個數 * 模型維度(Model Dimension, d_model):Transformer 內部特徵表示的基準維度 * 查詢/鍵維度(Key/Query Dimension, d_k):Q/K 向量長度,影響縮放係數 * 值維度(Value Dimension, d_v):V 向量長度,決定輸出通道 * 參數共享(Weight Tying):輸入與輸出嵌入權重共用以減少參數 * 詞嵌入(Token Embedding):將離散標記映射為連續向量表示 * 輸出嵌入(Output Embedding):輸出側與詞彙表對應的向量表示 * 自回歸建模(Autoregressive Modeling):依序條件於過去輸出下一標記 * 生成溫度(Temperature):在 Softmax 前縮放 logits 以調節隨機性 * Top-k 取樣(Top-k Sampling):僅在最高機率的 k 個標記中隨機抽樣 * 核心取樣(Top-p/Nucleus Sampling):在累積機率達 p 的子集中抽樣 * 教師強制(Teacher Forcing):訓練時以真實標記作為下一步條件 * 序列長度(Sequence Length):輸入或生成序列的實際步數 * 上下文長度(Context Length):模型可同時關注的最大步數 * 位置偏置(Positional Bias):以偏置函數替代顯式位置編碼的做法 * 相對位置編碼(Relative Positional Encoding):用相對距離建模位置關係 * 可訓練參數量(Parameter Count):模型中所有可學習權重與偏置的總數 * 深度(Depth):編碼器/解碼器層堆疊的層數 * GPT 解碼器(GPT Decoder):只含解碼器堆疊的自回歸 Transformer * 最終線性層(Final Linear Layer):將隱狀態映射到詞彙表 logits 的輸出層 * 注意力機制(Attention Mechanism):透過加權方式建模序列中元素間的相關性 * 自注意力(Self-Attention):輸入序列中的每個元素與自身及其他元素計算關聯性 * 查詢向量(Query Vector, Q):用於發送查詢訊號尋找關聯的向量表示 * 鍵向量(Key Vector, K):用於比對查詢的向量表示 * 值向量(Value Vector, V):與鍵對應,存儲實際資訊的向量表示 * 點積注意力(Dot-Product Attention):透過 Q 與 K 的內積計算關聯分數 * 縮放點積注意力(Scaled Dot-Product Attention):對點積結果除以 √d 防止梯度爆炸 * 掩碼機制(Masking):遮蔽未來資訊避免模型「偷看」答案 * 注意力權重(Attention Weights):經 softmax 正規化後的相關性分數 * 注意力圖(Attention Map):顯示序列中元素間注意力強度的矩陣 * 多頭注意力(Multi-Head Attention):並行多組注意力機制以捕捉不同語義特徵 * 頭(Head):單一注意力計算單元 * 並行注意力(Parallel Attention):同時計算多個注意力頭的輸出 * 拼接操作(Concatenation):將多個頭的結果組合成一個大向量 * 投影層(Projection Layer):將拼接後的輸出映射回固定維度 * 編碼器(Encoder):將輸入序列轉換為高維表示的模組 * 解碼器(Decoder):利用編碼結果與自注意力生成輸出的模組 * 編碼器-解碼器注意力(Encoder-Decoder Attention):解碼器查詢編碼器輸出 * 解碼器塊(Decoder Block):解碼器中的基本結構單元,包含注意力與前饋層 * 殘差連接(Residual Connection):輸入與輸出相加以避免梯度消失 * 層正規化(Layer Normalization):對每層輸出正規化加速收斂 * 前饋網路(Feed-Forward Network):線性-非線性-線性結構處理特徵 * 線性層(Linear Layer):全連接層進行線性變換 * 非線性函數(Nonlinear Function):如 ReLU 引入非線性表達能力 * ReLU 激活函數(Rectified Linear Unit):輸入小於 0 設為 0,大於 0 保持不變 * 殘差學習(Residual Learning):透過捷徑連接減少深層網路訓練困難 * 遮罩注意力(Masked Attention):限制注意力僅關注已生成的部分 * 順序資訊(Positional Information):標記序列中每個元素的位置 * 位置編碼(Positional Encoding):用正弦/餘弦函數加入位置信息 * 可學習位置嵌入(Learnable Positional Embedding):以嵌入矩陣學習位置信息 * 嵌入表(Embedding Table):將離散符號映射為稠密向量 * 詞嵌入(Token Embedding):為輸入詞元建立向量表示 * 語義向量(Semantic Vector):嵌入中表示語義屬性的向量 * 區塊大小(Block Size):一次能處理的最大序列長度 * 超參數(Hyperparameter):需事先設定的模型控制參數 * 層數(Number of Layers, N):Transformer 堆疊的層數 * 隱藏維度(Hidden Dimension):前饋層與注意力的內部向量長度 * 注意力頭數(Number of Heads, h):並行計算的注意力子空間數量 * 向量維度(Vector Dimension, d):單個嵌入或注意力空間的長度 * 掩碼矩陣(Mask Matrix):用於遮蔽未來或無效位置的矩陣 * Softmax 函數(Softmax Function):將分數轉換為機率分佈 * 機率分佈(Probability Distribution):輸出為 0-1 且總和為 1 的向量 * 梯度消失問題(Vanishing Gradient Problem):深層網路梯度逐漸變小導致學習停滯 * 梯度爆炸問題(Exploding Gradient Problem):梯度過大導致數值不穩定 * GPU 加速(GPU Acceleration):利用圖形處理器並行加速矩陣運算 * 參數學習(Parameter Learning):透過梯度下降更新可訓練權重 * 反向傳播(Backpropagation):根據損失函數計算梯度並更新參數 * 損失函數(Loss Function):衡量預測與真實標籤差異的函數 * 交叉熵損失(Cross-Entropy Loss):用於分類任務的常見損失函數 * 預訓練語言模型(Pretrained Language Model):在大規模語料上訓練後再微調的模型 * 層正規化(Layer Normalization):對單一樣本的特徵維度進行正規化,幫助模型收斂 * 語言建模頭(Language Modeling Head):最後的線性層將隱藏表示投影到詞彙表大小空間 * 投影層(Projection Layer):將嵌入維度映射為詞彙表維度以便 softmax 計算機率 * 詞彙大小(Vocabulary Size):模型可預測的詞元總數 * 機率分佈(Probability Distribution):softmax 後得到的每個詞元的預測機率 * 固定位置編碼(Sinusoidal Positional Encoding):利用正弦與餘弦函數引入位置資訊 * 可學習位置嵌入(Learnable Positional Embedding):透過嵌入矩陣學習位置資訊 * GPT 變體(GPT Variant):使用可學習位置嵌入的 Transformer 解碼器模型 * 廣播規則(Broadcasting Rules):定義不同形狀張量之間運算的規則 * 張量(Tensor):PyTorch 的多維陣列結構 * 序列長度(Sequence Length, Block Size):一次能處理的最大詞元數 * 索引張量(Index Tensor):代表詞元位置的整數序列 * 嵌入向量(Embedding Vector):高維向量,存儲詞元或位置的語義特徵 * 順序資訊(Sequential Information):表示輸入序列中詞元的排列次序 * 初始權重(Weight Initialization):設置模型參數初始值的方法 * 標準差(Standard Deviation):描述數據分散程度的統計量 * 均值(Mean):數據的平均值 * 方差(Variance):數據與平均值差平方的平均值 * 西格瑪(Sigma):統計學中表示標準差的符號 * 常態分佈(Normal Distribution):統計上呈鐘形曲線的分佈 * 權重初始化策略(Weight Initialization Strategy):設計參數初始分佈以幫助訓練穩定 * Xavier 初始化(Xavier Initialization):考慮輸入輸出節點數量的初始化方法 * He 初始化(He Initialization):針對 ReLU 激活設計的初始化方法 * 權重分佈(Weight Distribution):模型初始權重的數值分佈情況 * 梯度穩定性(Gradient Stability):避免梯度消失或爆炸的能力 * 發散訓練(Divergent Training):因初始化或學習率不當導致模型不收斂 * 均勻初始化(Uniform Initialization):使用均勻分佈生成初始參數 * 高斯初始化(Gaussian Initialization):使用高斯分佈生成初始參數 * 神經元激活(Neuron Activation):神經元經過線性與非線性變換後的輸出 * 特徵多樣性(Feature Diversity):不同神經元捕捉到的不同模式或特徵 * 過度多樣性(Excessive Diversity):初始權重差異過大導致訓練不穩定 * 欠缺多樣性(Lack of Diversity):初始權重過於接近導致神經元學到相同特徵 * 平衡標準差(Balanced Standard Deviation):合理的初始化分散程度以促進有效學習 * 模組子類化(Module Subclassing):自定義 PyTorch 模型結構的方法 * 前向傳播(Forward Pass):資料從輸入到輸出的計算過程 * 反向傳播(Backward Pass):透過鏈式法則計算梯度並更新權重 * 損失收斂(Loss Convergence):訓練中損失逐漸下降的趨勢 * 穩定訓練(Stable Training):避免劇烈震盪或數值不穩的訓練過程 * 解碼器塊(Decoder Block):包含注意力、前饋層與正規化的結構單元 * 多頭注意力(Multi-Head Attention):多個注意力頭並行計算的模組 * 注意力頭數(Number of Heads):多頭注意力中並行子空間的數量 * 頭大小(Head Size):每個注意力頭處理的特徵數量 * 嵌入維度(Embedding Dimension):詞元或位置嵌入向量的長度 * 特徵捕捉(Feature Capture):每個注意力頭學習不同子特徵的能力 * 並行運算(Parallel Computation):多個注意力頭同時計算的特性 * 殘差結構(Residual Structure):透過捷徑連接保留原始輸入訊號 * 前饋子層(Feed-Forward Sub-layer):兩層線性變換與非線性激活組成的模組 * Transformer 解碼器(Transformer Decoder):僅由解碼器組成的 GPT 架構 * 語言模型(Language Model):預測序列中下一個詞元的模型 * 前饋網路(Feed Forward Network):由線性層與非線性激活組成的子模組 * 線性層(Linear Layer):對輸入張量做權重矩陣乘法與偏置加法 * 擴展維度(Expansion Dimension):中間層將嵌入維度擴展為 4 倍以增強表達能力 * ReLU 激活函數(Rectified Linear Unit):將小於零的輸入值轉為零,其餘保持不變 * 非線性轉換(Nonlinear Transformation):增加模型的表達能力超越線性映射 * Dropout 機制(Dropout Mechanism):隨機將部分神經元輸出設為零以防止過擬合 * 過擬合(Overfitting):模型記住訓練資料而泛化能力下降的現象 * 殘差連接(Residual Connection):將輸入與輸出相加以保持梯度流動 * 後正規化架構(Post-Norm Architecture):在子層運算後套用 LayerNorm * 加和正規化(Add & Norm):將輸入與子層輸出相加後做層正規化 * 多頭注意力(Multi-Head Attention):多個自注意力頭並行計算並拼接結果 * 模組列表(ModuleList):PyTorch 容器,用於儲存子模組清單並逐一執行 * 投影層(Projection Layer):將拼接後的多頭輸出映射回嵌入維度 * 特徵維度(Feature Dimension):張量最後一維,表示每個位置的特徵數量 * 拼接操作(Concatenation):將多個頭的輸出在特徵維度上拼接 * 平行運算(Parallel Computation):多個注意力頭同時執行計算 * 可學習參數(Learnable Parameters):神經網路中透過訓練調整的權重與偏置 * 線性投影(Linear Projection):將輸入轉換到不同的特徵子空間 * 頭大小(Head Size):每個注意力頭所處理的特徵數量 * 注意力頭(Attention Head):獨立計算注意力的子模組 * 點積注意力(Dot-Product Attention):透過查詢與鍵的內積計算相關性分數 * 縮放點積注意力(Scaled Dot-Product Attention):對內積結果除以 √d 防止梯度爆炸 * 查詢向量(Query Vector, Q):表徵當前詞元需求的向量 * 鍵向量(Key Vector, K):表徵序列中其他詞元資訊的向量 * 值向量(Value Vector, V):實際傳遞資訊的向量 * 線性轉換(Linear Transformation):將嵌入維度轉換為頭大小的映射 * 無前視遮罩(No-Lookahead Mask):避免解碼器在生成過程中偷看未來詞元 * 註冊緩衝區(Register Buffer):將常量(如遮罩矩陣)存入模型狀態以避免重複計算 * 遮罩矩陣(Mask Matrix):遮蔽未來位置的二維矩陣 * 注意力權重(Attention Weights):softmax 後的查詢與鍵的關聯性分數 * Softmax 函數(Softmax Function):將分數轉換為機率分佈 * 轉置操作(Transpose Operation):交換矩陣的最後兩個維度以對齊計算 * 矩陣乘法(Matrix Multiplication):將查詢與鍵進行點積得到注意力分數 * 特徵縮放(Feature Scaling):對注意力分數除以 √d 保持數值穩定 * 聲音類比(Voice Analogy):將縮放比喻為控制每個頭「音量」的大小 * 注意力分數(Attention Score):查詢與鍵匹配後的相關性數值 * 值加權(Value Weighting):將值向量乘以注意力權重得到輸出 * 注意力輸出(Attention Output):每個頭最終產生的加權資訊表示 * 訓練效率(Training Efficiency):透過緩衝區與遮罩優化計算加快訓練 * 梯度爆炸(Exploding Gradient):數值過大導致訓練不穩定的問題 * 維度匹配(Dimension Matching):確保矩陣乘法內部維度一致 * 序列批次(Batch of Sequences):同時輸入的多個序列組成的批次 * 通道維度(Channel Dimension):表示每個位置特徵的最後一維 * 並行子問題(Parallel Subproblems):多頭注意力將序列建模任務分解為多個子空間 * 特徵子空間(Feature Subspace):每個頭專注於不同語義模式的空間 * 參數共享(Parameter Sharing):不同序列步驟共用相同的模型參數 * 可學習偏置(Learnable Bias):線性投影中的可加性調整項 * 最終拼接(Final Concatenation):將所有頭輸出整合為完整表示 * 遮罩填充(Masked Fill):將指定位置替換為負無限大以阻止注意力 * 負無限大(Negative Infinity):在數值計算中用以屏蔽無效位置的值 * 自回歸遮罩(Autoregressive Mask):避免模型在生成時偷看未來標記的遮罩 * 階梯式遮罩(Staircase Mask):逐步暴露更多時間步長的遮罩模式 * Softmax 函數(Softmax Function):將分數轉換為機率分佈並強調大值 * 指數化(Exponentiation):對輸入數值取指數以放大差異 * 正規化(Normalization):將輸入值縮放為機率總和為一的分佈 * 注意力權重(Attention Weights):Softmax 後的注意力分佈係數 * 權重聚合(Weighted Aggregation):將值向量以注意力權重加權平均 * Dropout(Dropout):隨機丟棄部分神經元以防止過擬合 * 模組清單(ModuleList):儲存多個子模組的容器,不自動順序執行 * 序列容器(Sequential):按順序執行的模組容器 * 平行計算(Parallel Computation):同時計算多個注意力頭的操作 * GPU 加速(GPU Acceleration):利用圖形處理器實現大規模並行運算 * 頭大小(Head Size):每個注意力頭的特徵維度 * 嵌入維度(Embedding Dimension, n_embed):模型整體的隱藏特徵長度 * 注意力頭數(Number of Heads, n_heads):多頭注意力中的頭數 * 解碼層數(Number of Layers, n_layer):解碼器堆疊的深度 * 前饋網路(Feed Forward Network):由線性與非線性層組成的子模組 * 殘差連接(Residual Connection):將輸入直接加回輸出以避免信息遺失 * 層正規化(Layer Normalization):對隱藏狀態做標準化以穩定訓練 * ReLU 函數(ReLU Function):將負值截斷為零的激活函數 * 多頭注意力(Multi-Head Attention):並行多組注意力頭並拼接輸出 * 鍵向量(Key Vector):表示輸入內容的向量 * 查詢向量(Query Vector):表示當前需求的向量 * 值向量(Value Vector):攜帶實際信息的向量 * 縮放點積注意力(Scaled Dot-Product Attention):對 QK^T 做縮放後 softmax 的機制 * 遮罩自注意力(Masked Self-Attention):帶因果遮罩的自注意力 * 權重初始化(Weight Initialization):為模型參數賦初始值的方法 * 嵌入層(Embedding Layer):將離散 token 轉換為連續向量的層 * 位置嵌入(Positional Embedding):表示 token 序列位置的向量 * 批次大小(Batch Size):一次前向/反向傳遞處理的樣本數 * 區塊大小(Block Size):一次訓練可見的最大序列長度 * 最大迭代數(Max Iters):訓練過程中的最大迭代次數 * 學習率(Learning Rate):控制梯度更新幅度的超參數 * 驗證間隔(Eval Interval):每隔多少步驟評估模型效能 * 損失函數(Loss Function):衡量預測與目標差距的函數 * 訓練損失(Training Loss):訓練過程中的誤差指標 * 驗證損失(Validation Loss):在驗證集上的誤差指標 * 超參數(Hyperparameters):需人工設定的模型控制參數 * 權重衰減(Weight Decay):透過正則化抑制權重過大 * 正則化(Regularization):防止過擬合的方法總稱 * 模型狀態字典(Model State Dict):儲存模型參數與緩衝區的結構 * 線性層(Linear Layer):輸入與輸出線性映射的基本層 * 拼接操作(Concatenation):將多個張量沿指定維度拼接 * 維度展開(Unpacking Shape):從張量形狀提取批次與時間長度 * 張量形狀(Tensor Shape):張量的維度排列 * 指標變數(Index Variable):用於取樣或索引數據的變數 * 開放網路文本語料(OpenWebText Corpus):開源的大規模網路文本數據集 * 詞彙表(Vocabulary):模型可識別的全部符號集合 * 詞彙大小(Vocab Size):詞彙表的總符號數量 * 開放網路文本(OpenWebText):開源版本的 WebText,由 Reddit 高分連結內容組成的語料庫 * WebText 語料(WebText Corpus):原始 GPT 模型訓練的非公開文本數據集 * Common Crawl:大規模(PB 級)開放網路爬取文本語料庫 * 書籍語料(Books Corpus):由公開書籍整理出的文本數據集 * 語料庫(Corpus):用於訓練語言模型的大規模文本集合 * 批次大小(Batch Size):一次訓練迭代中處理的樣本數量 * 區塊大小(Block Size):模型能處理的最大序列長度 * 學習率(Learning Rate):控制權重更新步幅的超參數 * 頭數(Number of Heads):多頭注意力的頭數,用於捕捉不同語義特徵 * 層數(Number of Layers):Transformer 模型中堆疊的層數 * 超參數調整(Hyperparameter Tuning):透過修改參數優化模型表現的過程 * 損失值(Loss Value):衡量模型預測與真實標籤差異的數值 * 訓練損失(Training Loss):模型在訓練集上的誤差 * 驗證損失(Validation Loss):模型在驗證集上的誤差 * 交叉熵損失(Cross-Entropy Loss):語言建模常用的分類損失函數 * 預測準確率(Prediction Accuracy):模型正確預測下一個詞元的比例 * 指數學習率(Exponential Learning Rate):學習率以科學記號形式表示,如 3e-4 * 訓練收斂(Training Convergence):損失值隨著訓練逐步下降的趨勢 * 過擬合(Overfitting):模型對訓練資料學習過度,泛化能力下降 * 驗證集(Validation Set):從數據中分割出的 10% 用於檢驗模型表現 * 訓練集(Training Set):數據集中用於訓練模型的 90% 部分 * The Wizard of Oz 語料:小型測試文本,適合單機內存完整載入 * 大規模語料(Large-Scale Corpus):如 45GB 級別,需分批讀取處理 * 資料前處理(Data Preprocessing):清洗與格式化數據以利模型訓練 * 壓縮檔(Compressed File):如 .xz 格式需解壓後才能使用 * LZMA 壓縮(LZMA Compression):一種高壓縮比的檔案壓縮算法 * 解壓模組(lzma Module):Python 標準庫中處理 .xz 文件的模組 * 檔案路徑(File Path):定位資料所在位置的字串 * 正斜線(Forward Slash):Unix 與 Python 程式中檔案路徑的標準分隔符 * 反斜線(Backslash):Windows 系統中的路徑分隔符 * TQDM 進度條(TQDM Progress Bar):在終端中顯示任務進度的工具 * 檔案迭代器(File Iterator):逐一讀取檔案的迴圈結構 * 檔名清單(File Name List):儲存目錄下所有檔案名稱的集合 * 輸出檔案(Output File):儲存合併或分割後數據的目標文件 * 字彙表(Vocabulary File):儲存語料中所有唯一字符或詞元的集合 * 集合結構(Set Data Structure):Python 中用於存放唯一元素的資料型別 * 分割檔案數(Split Files):控制最終生成多少個輸出檔案的參數 * 字符去重(Character Deduplication):確保字彙表只包含唯一字符 * 訓練檔案(Train File):合併後存放 90% 語料的輸出檔案 * 驗證檔案(Validation File):合併後存放 10% 語料的輸出檔案 * 檔案大小驗證(File Size Validation):檢查訓練與驗證檔案大小比例是否正確 * 檔案處理效率(File Processing Efficiency):迴圈與分批策略影響的處理速度 * 記憶體限制(Memory Limitation):單機無法一次載入數十 GB 語料的情況 * 分批讀取(Batch Loading):逐檔案或逐塊載入語料的方法 * 資料清洗(Data Cleaning):移除雜訊與無用符號的過程 * 輸出格式(Output Format):最終儲存語料的格式設計(txt/json 等) * Vocab 建立(Vocabulary Construction):收集語料所有唯一詞元形成字彙表 * RAM 載入限制(RAM Loading Limit):內存不足時需分批處理語料 * 訓練迭代(Training Iteration):模型逐步更新權重的過程 * 損失與機率關係(Loss-Probability Relationship):交叉熵值與預測機率的數學關聯 * 記憶體映射(Memory Mapping, mmap):直接將檔案映射至記憶體以便高效隨機存取 * 二進位模式(Binary Mode):以二進位格式讀寫檔案以避免文字編碼干擾 * 隨機取樣(Random Sampling):隨機選擇檔案位置以獲取訓練資料片段 * 起始位置(Start Position):從檔案中選擇讀取區塊的起始點 * 偏移量(Offset):在檔案中移動讀取指標的距離 * 讀取區塊(Read Block):一次從檔案中讀出的資料片段 * 區塊大小(Block Size):每個讀取片段的長度限制 * 批次大小(Batch Size):每次處理的樣本數量 * UTF-8 編碼(UTF-8 Encoding):將二進位內容解碼為可讀文字 * 編碼錯誤忽略(Error Ignore):遇到損壞字元時直接略過 * 標記化(Tokenization):將文字轉換為整數序列 * 長整數張量(Torch.LongTensor):整數型別的 PyTorch 張量 * 訓練分割(Train Split):用於模型學習的資料子集 * 驗證分割(Validation Split):用於模型評估的資料子集 * 資料流水線(Data Pipeline):資料讀取與處理的完整流程 * 模型訓練循環(Training Loop):前向傳遞、反向傳遞與參數更新的迴圈 * 評估模式(Eval Mode):停用 Dropout 與 BatchNorm 的模型狀態 * 訓練模式(Train Mode):啟用 Dropout 與 BatchNorm 的模型狀態 * 損失函數(Loss Function):衡量預測與目標差距的數學函數 * 收斂(Convergence):訓練過程中損失逐漸下降並穩定的現象 * 序列化(Serialization):將物件轉換為可儲存或傳輸的格式 * Pickle 模組(Pickle Module):Python 內建物件序列化工具 * 模型儲存(Model Save):將訓練好的參數保存至檔案 * 模型載入(Model Load):從檔案讀取已保存的模型參數 * PKL 檔案(.pkl File):Pickle 序列化後的模型檔案格式 * 模型狀態字典(Model State Dict):儲存 PyTorch 模型的權重與緩衝值 * 檔案寫入(Write Binary):以二進位方式將序列化結果存至磁碟 * 序列化檔案大小(Serialized File Size):保存後檔案的磁碟佔用容量 * 反序列化(Deserialization):從序列化檔案還原物件的過程 * 單 GPU 訓練(Single GPU Training):僅使用一張 GPU 運行模型 * 多 GPU 訓練(Multi-GPU Training):使用多張 GPU 進行分散式訓練 * 訓練檢查點(Training Checkpoint):保存訓練中途的模型快照 * 持續訓練(Resume Training):從已保存模型繼續訓練 * 隨機模組(Random Module):Python 提供隨機數生成的標準模組 * 參數更新(Parameter Update):根據梯度調整模型權重 * GPU 裝置(CUDA Device):使用 CUDA 加速的圖形處理器裝置 * 裝置列印(Print Device):輸出模型當前使用的裝置資訊 * 批次索引(Batch Index):指定當前資料批次的索引範圍 * 權重初始化(Weight Initialization):設定模型初始參數值的方法 * 損失曲線(Loss Curve):隨訓練迭代變化的損失圖像 * 過擬合(Overfitting):模型過度擬合訓練數據而表現下降 * 參數序列化(Parameter Serialization):將模型權重轉換為可儲存格式 * 參數反序列化(Parameter Deserialization):將序列化檔案還原為權重 * 檔案操作(File Handling):開啟、讀取、寫入與關閉檔案的過程 * 隨機初始化(Random Initialization):以隨機方式初始化模型權重 * 訓練迭代(Training Iteration):單次參數更新的過程 * 驗證誤差(Validation Error):模型在驗證集上的損失值 * 儲存檔路徑(Save Path):模型儲存的檔案位置 * 模型大小(Model Size):指模型參數數量或儲存空間大小 * 訓練資源(Training Resources):進行訓練所需的硬體與軟體資源 * 開放網路文本語料(OpenWebText Corpus):模仿 OpenAI WebText 的開源語料庫 * 模型架構相容性(Architecture Compatibility):載入權重時模型層級與維度需與訓練時一致 * 超參數一致性(Hyperparameter Consistency):重訓或載入時需維持如層數、頭數、嵌入維度等設定一致 * 序列化格式(Serialization Format):將模型/參數轉為可儲存的位元串格式(如 pkl) * 反序列化(Deserialization):自序列化檔還原模型或參數至記憶體 * 檢查點保存(Checkpoint Saving):在訓練過程定期儲存模型狀態以便恢復 * 檢查點恢復(Checkpoint Resume):由檢查點載入狀態以繼續訓練或推論 * 模型版本控制(Model Versioning):對模型與權重維護版本標記與相依性 * nn.Module 子類化(nn.Module Subclassing):自訂網路需繼承 nn.Module 以註冊可學參數 * 參數登錄(Parameter Registration):將權重/緩衝區納入模組管理與保存機制 * 狀態字典映射(State Dict Mapping):以字典形式讀寫模型權重與緩衝值 * 最大新標記(Max New Tokens):單次生成允許新增的最大 token 數 * 上下文裁剪(Context Cropping):只保留最近的上下文長度以符合區塊/上下文限制 * 滑動窗口(Sliding Window):以移動窗口維持固定長度的可見序列 * 生成停止條件(Stopping Criterion):依規則(如 EOS 或長度)停止解碼 * 開始/結束標記(BOS/EOS Tokens):序列起訖的特殊符號以界定範圍 * 特殊標記表(Special Tokens Vocabulary):包含 BOS/EOS/UNK 等控制用符號集合 * 可變長度序列(Variable-Length Sequence):輸入/輸出序列長度不固定的設定 * 提示—完成配對(Prompt–Completion Pairs):微調時以指令與回覆成對的資料格式 * 指令微調(Instruction Tuning):以人類指令—回覆資料對 LLM 進行監督式微調 * 微基準測試(Microbenchmarking):以小型自含測試量測單一操作效能 * 執行時間剖析(Runtime Profiling):量測程式區塊的時間與資源使用 * time.time 計時(time.time Timing):以時間戳差計算區塊耗時的簡單方法 * 牆鐘量測(Wall-Clock Measurement):以實際經過時間評估效能 * 可重現性(Reproducibility):透過固定種子與設定使結果可重現 * 隨機種子固定(Seed Fixing):鎖定隨機來源以減少結果漂移 * 記憶體映射讀取(Memory-Mapped I/O):以 mmap 將檔案映射至記憶體做高效隨機讀取 * 檔案指標定位(File Seek):移動檔案讀取游標以定位起始位置 * 區塊化讀取(Blockwise Reading):一次讀取固定長度片段以供批次取樣 * 編碼容錯(Encoding Error Handling):解碼失敗時採忽略/替代策略以續讀 * UTF-8 解碼(UTF-8 Decoding):將二進位內容轉為 UTF-8 文字 * 資料串流化(Data Streaming):以連續流方式逐批供給訓練資料 * 資料切片(Data Chunking):將大型語料切為可管理的小片段 * 模型生成函式(Generate Function):自回歸步進產生新 token 的例程 * 因果遮罩矩陣(Causal Mask Matrix):以下三角遮罩阻止注意力偷看未來 * 維度對齊(Dimensionality Alignment):確保張量在矩陣運算時形狀相容 * 形狀裁切(Shape Truncation):對過長序列裁切以符合模型限制 * GPU 裝置映射(Device Mapping):將張量/模組放置至對應 CUDA 裝置 * VRAM 佔用(VRAM Footprint):模型與批次在顯存中的空間消耗 * 量化感知訓練(Quantization-Aware Training):在訓練中模擬低位元以減少精度落差 * QLoRA(QLoRA):以低秩適配在 4 位元權重上進行高效微調的方法 * 4 位元權重量化(4-bit Weight Quantization):以 4-bit 表示權重以節省記憶體 * 半精度浮點(FP16 Half Precision):以 16 位元浮點進行計算/儲存以降資源 * 梯度累積(Gradient Accumulation):跨多步累加梯度以等效放大批次 * 有效批次大小(Effective Batch Size):考慮累積後的等效總批次規模 * Hugging Face 模型倉庫(Hugging Face Model Hub):集中式模型分享與下載平台 * 模型卡(Model Card):描述模型用途、資料、限制與評測的文件 * 資料集卡(Dataset Card):記錄資料來源、清理流程與授權的說明 * 開源語料(Open-Source Corpora):公開可用的大規模預訓練資料集 * 自回歸解碼(Autoregressive Decoding):逐步以先前輸出條件化生成下一 token * 貪婪/取樣解碼(Greedy/Sampling Decoding):以最大機率或隨機策略選取下一 token