<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>BERT on YennJ12 Engineering Blog</title><link>https://yennj12.js.org/yennj12_blog_V4/tags/bert/</link><description>Recent content in BERT on YennJ12 Engineering Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 21 Jun 2026 16:00:00 +0800</lastBuildDate><atom:link href="https://yennj12.js.org/yennj12_blog_V4/tags/bert/feed.xml" rel="self" type="application/rss+xml"/><item><title>AI 工程從零開始｜Phase 5 Part 3：進階 NLP — BERT、問答系統與語言理解</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase5-part3-advanced-nlp-zh/</link><pubDate>Sun, 21 Jun 2026 14:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase5-part3-advanced-nlp-zh/</guid><description>大多數人以為 NLP 就是把文字丟進模型等答案； 真正的工程師知道語言理解需要雙向上下文、任務特化微調、以及在延遲與準確率間反覆取捨。 問題不是「用哪個模型」，而是「這個系統在 P99 500ms 內能可靠回答什麼問題」。 從 BERT 到問答系統，進階 NLP 的核心是：為正確的任務選擇正確的架構。
面試情境： 你的團隊正在為一個法律文件平台建構問答系統。文件平均 50 頁，用戶問題如「這份合約的違約金條款是什麼？」。系統需在 2 秒內回答，準確率要求 &amp;gt; 90%，每月處理 50 萬筆查詢。請設計整體架構，並說明為何選擇 Extractive QA 而非 Generative QA，以及如何在規模下維持品質。
一、核心問題：語言理解 vs 語言生成的本質差異 NLP 工程中最常見的誤解是把「理解」和「生成」混為一談。這兩個任務在模型架構、訓練目標、推論策略上有根本差異。
語言理解（Understanding）的本質：
任務：分類、命名實體識別、關係抽取、問答中的答案定位 需要：雙向上下文（左邊和右邊的詞都重要） 代表架構：BERT（Encoder-only Transformer） 輸出：分類標籤、span 位置、相似度分數 語言生成（Generation）的本質：
任務：文字摘要、機器翻譯、對話回覆、程式碼生成 需要：自回歸解碼（autoregressive decoding） 代表架構：GPT 系列（Decoder-only）、T5（Encoder-Decoder） 輸出：Token 序列 為什麼這個差異在工程上很重要？
面向 理解任務 生成任務 推論延遲 10–50ms（一次 forward pass） 200ms–5s（逐 token 生成） 輸出確定性 高（span 位置或分類） 低（temperature 影響大） 可審計性 高（可追蹤到原文哪句話） 低（hallucination 風險） GPU 記憶體 BERT-base: 440MB GPT-3.</description></item><item><title>AI 工程從零開始｜Phase 7 Part 2：Transformer 訓練策略與架構變體</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase7-part2-training-variants-zh/</link><pubDate>Sun, 21 Jun 2026 16:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase7-part2-training-variants-zh/</guid><description>大多數人認為：Transformer 就是 attention + FFN，照抄論文程式碼就能訓練起來。 真實情況是：沒有 LR warmup 模型在第 100 步就 loss 爆炸；沒有梯度裁剪 NaN 讓你懷疑人生。 進階工程師知道：訓練策略與架構選型決定了 90% 的成敗，程式碼只佔 10%。 本文要解決的是：為什麼這些技巧存在、何時用哪個、以及三個演進階段的工程落地路徑。
面試情境 面試官問：「你要為一個電商平台設計一套 NLP 系統，需要同時支援商品描述生成（生成任務）、評論情感分析（分類任務）、以及跨語言商品搜尋（語義匹配）。你會選擇哪種 Transformer 架構？訓練時的學習率策略和精度選擇是什麼？如果預算只有 $50K，怎麼做？」
一、核心問題：Transformer 訓練為什麼這麼難 Transformer 訓練困難的根源不在於架構複雜，而在於多個不穩定因素的耦合：
問題 1：參數初始化 vs 梯度流
Transformer 在初始化時，attention 層的 softmax 容易輸出接近均勻分佈（對梯度無貢獻）或接近 one-hot（梯度消失）。用過大的學習率，前幾步梯度就會爆炸；用過小的學習率，前幾千步幾乎不學習。
問題 2：不同層的梯度尺度差異
淺層（embedding 附近）和深層（最後幾個 block）的梯度尺度可以相差 100 倍以上。固定學習率對一部分層太大、對另一部分太小。
問題 3：浮點精度的精度懸崖
FP16 的最大值約 65504，一旦梯度超過就 overflow 變 NaN，整批訓練廢掉。BF16 範圍更大但精度更低，小 loss 差異可能被截斷。
問題 4：任務與架構的阻抗失配
用 Decoder-only 做分類：浪費計算，需要特殊 pooling；用 Encoder-only 做生成：無法自回歸，強行做需要 mask 技巧。錯誤的架構選型讓精度天花板提前到來。</description></item></channel></rss>