<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Backpropagation on YennJ12 Engineering Blog</title><link>https://yennj12.js.org/yennj12_blog_V4/tags/backpropagation/</link><description>Recent content in Backpropagation on YennJ12 Engineering Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sun, 21 Jun 2026 11:00:00 +0800</lastBuildDate><atom:link href="https://yennj12.js.org/yennj12_blog_V4/tags/backpropagation/feed.xml" rel="self" type="application/rss+xml"/><item><title>AI 工程從零開始｜Phase 3：深度學習核心 — 從第一原理構建神經網路</title><link>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase3-part1-neural-networks-zh/</link><pubDate>Sun, 21 Jun 2026 11:00:00 +0800</pubDate><guid>https://yennj12.js.org/yennj12_blog_V4/posts/ai-eng-from-scratch-phase3-part1-neural-networks-zh/</guid><description>大多數人學深度學習：model.fit() 呼叫一行，調調 learning rate，祈禱 loss 下降。 正確的方式是：從矩陣乘法開始，手算梯度，理解每個超參數的幾何意義—— 因為當模型在生產環境爆炸時，你唯一能依靠的，是對第一原理的理解。 框架可以抽象實作，但它無法替你理解為什麼。
面試情境 你正在設計一個即時推薦系統，模型需要在 &amp;lt; 20ms 內回應，訓練資料有 5 億筆互動記錄，特徵空間包含 1 萬維稀疏向量。面試官問：「你會如何設計神經網路架構？選擇什麼激活函數、正則化策略、和最佳化器？當模型在驗證集準確率停滯在 78% 時，你的診斷流程是什麼？」
一、核心問題：為什麼要從第一原理理解神經網路 絕大多數工程師進入深度學習的路徑是：安裝 PyTorch，複製一段 ResNet 範例程式，調整幾個參數，模型能跑了就交差。這種「黑盒操作」在 Kaggle 比賽或 Demo 原型中勉強夠用，但在生產環境中，它會讓你付出慘痛代價。
真實問題是這樣出現的：
模型訓練時 loss 突然爆炸（NaN），你不知道是梯度消失還是梯度爆炸，因為你從未手算過梯度 推論延遲從 8ms 升到 150ms，但你不理解 BatchNorm 在推論階段的行為與訓練階段不同 模型在訓練集 95% 準確率，測試集 61%，你不知道該加 Dropout 還是 L2，還是兩者都要 換了 AdamW 替代 SGD 後，收斂快了但泛化變差，你不知道 weight decay 的幾何意義是什麼 從第一原理理解神經網路，解決的不是「能不能跑起來」，而是「出問題時能不能診斷並修復」。
本文的工程目標：
理解神經網路的數學本質，能手算任意小型網路的前向與反向傳播 能在沒有框架的情況下，用純 NumPy 實作一個可訓練的兩層網路 掌握每個設計決策（激活函數、正則化、最佳化器）的量化 tradeoff 能在面試中給出有數字支撐的架構決策，而非「視情況而定」 二、三個演進階段（POC / MVP / Scale） 神經網路的部署不是一蹴而就，從研究原型到生產規模，架構在每個階段都有根本性的不同。</description></item></channel></rss>