L13|中文 F3 學生的學習紀錄
L13|中文 F3 學生的學習紀錄
角色設定:我是中三學生,只看得懂中文。Python 學過變數、for 迴圈和 list,數學讀到一元二次方程。我靠中文課程筆記、YouTube 自動翻譯字幕和查字典來學。Kaggle 筆記本的操作步驟,是依官方 notebook 流程寫下的練習紀錄。
我讀懂了什麼(用自己的話)
- 神經網路是很多層函數疊起來。
- 連鎖律:外層的變化率乘以內層的變化率。
- 反向傳播是從最後的損失開始,一層層往回算每個參數該怎麼改。
- 電腦算太大的數字會爆掉,所以要用小技巧。
我卡住的地方,和我怎麼解決
| 卡住的地方 | 我怎麼解決 |
|---|---|
| 連鎖律是高中內容 | 請數學老師用「齒輪」解釋:大齒輪轉一圈帶小齒輪轉三圈,小齒輪再帶更小的,總倍數就是相乘。 |
| log-sum-exp 公式 | 只記住目的:先減掉最大值,數字就不會大到爆掉,答案不變。 |
練習作答
Q1. y = (3x + 1)²。用連鎖律算 x = 1 時的 dy/dx。
外層 u² 的導數是 2u,內層 3x + 1 的導數是 3。dy/dx = 2(3x + 1) × 3。x = 1 時:2 × 4 × 3 = 24。
Q2. 用自己的話說明「反向傳播」為什麼要從損失往回算。
因為損失在最後,每個參數對損失的影響要經過後面所有層才傳到。從後面往回算,可以重複使用已經算好的部分,一次就算出所有參數的梯度,比每個參數各自重算快很多。
Q3. 在 Python 計算 math.exp(1000) 會怎樣?log-sum-exp 技巧怎麼避免這個問題?
會出現 OverflowError,因為數字太大超出浮點數能表示的範圍。log-sum-exp 先把每個數減掉最大值(最大的變成 0),再算 e 的次方,就不會溢位,最後再把減掉的加回來,結果一樣。
我的卡片盒筆記
卡片|連鎖律就像齒輪,一層帶動一層
反向傳播聽起來很可怕,其實就是連鎖律:最後的損失受每一層影響,每一層的影響可以拆成「這一層的變化率」乘以「後面所有層的變化率」。從後面往回乘,就能知道每個參數該往哪邊調。
我們物理課做過齒輪組實驗。轉動第一個齒輪一圈,最後一個齒輪轉幾圈?答案是每對齒輪的比例全部相乘。當時我只覺得是計算題,現在發現神經網路的梯度也是這樣一層層傳遞。不過這課的程式真的很長,我只看懂了單層的 backward,多層的部分還要再花時間。後來我把程式每一層的中間值都印出來,一層層對照連鎖律,才慢慢看懂梯度是怎麼從損失傳回第一層的。
這週我要做的小行動:用三個齒輪比例(2、3、4)算總倍數,再對照 y = (3x + 1)² 的連鎖律寫一次。
🔗 推薦產生關聯的筆記: → 物理類:「齒輪比是連鎖律的實體版」 → 除錯類:「看不懂就逐行印出中間值」 → 數學類:「電腦的數字有上限」
回到課程筆記:L13_反向傳播與MLP_202611041526