中三數學補充|學深度學習前要多懂的 7 件事

🏠 新手從這裡開始 | 📖 白話小辭典

這一頁怎麼用

  • 每節都從中三已經學過的東西出發,只往前走一小步。
  • 不用背公式,會手算小例子就夠。電腦會幫你算大的。
  • 每節最後有手算題,答案摺起來,先自己算再點開。
  • 什麼時候讀:看到右邊「課程哪裡用」那一課之前讀那一節就可以,不用一次讀完。
#主題中三學過的起點課程哪裡用
1函數y = 2x + 1每一課(模型就是函數)
2斜率 → 導數(梯度)直線的斜率L03、L05、L13
3平方、平均 → 損失函數平方、平均數L03、L05
4指數與對數次方 2³ = 8L05、L07(sigmoid、交叉熵)
5機率與 softmax百分比、擲骰子L01、L07
6平均與標準差 → 標準化平均數L05、L17
7點積與矩陣乘法乘法、加法L03、L05、L11

1|函數:模型就是一個函數

中三學過新的一步
y = 2x + 1:給 x,算出 y模型也是一樣:給一張圖片(很多個數字),算出**「是鳥的機率」**
2 和 1 是固定的模型裡的數字(權重)一開始是亂的,訓練=自動調這些數字,讓答案越來越準
y = 2x + 1          ← 中三的函數:2 和 1 是我們給的
預測 = w × 輸入 + b   ← 最簡單的模型:w 和 b 由電腦自己找
手算練習

模型是 預測 = w × 小時 + b。w = 5、b = 40,溫習 6 小時,預測幾分?

答案

5 × 6 + 40 = 70 分。訓練就是用很多同學的「小時 → 真實分數」,自動找出最好的 w 和 b。

2|斜率 → 導數(梯度)

math_slope
中三學過新的一步
直線每一處的斜率都一樣:向右 1 格,向上幾格曲線每一點的斜率都不同,「某一點的斜率」叫導數,深度學習叫梯度
y = x² 在 x 這一點的斜率 = 2x(記這一條就夠用)

為什麼重要:梯度告訴我們「往哪邊走,損失會變小」。

斜率意思要怎麼走
正數往右會上坡往左走(x 變小)
負數往右會下坡往右走(x 變大)
0平地,到谷底了停

這就是梯度下降:新的 x = x − 學習率 × 斜率。

手算練習

損失 = x²。現在 x = 3,學習率 = 0.1。

  1. 這一點的斜率是多少?

  2. 走一步之後 x 變成多少?

答案

  1. 斜率 = 2 × 3 = 6(正數,往右上坡,所以要往左走)
  2. 新的 x = 3 − 0.1 × 6 = 2.4,更靠近谷底 0 了
課程連結

L03 Jeremy 用 Excel 和 PyTorch 示範的就是這件事。PyTorch 的 loss.backward() 會自動幫你算斜率。

3|平方、平均 → 損失函數

中三學過新的一步
平方:(−2)² = 4誤差=預測 − 答案。平方後負數也變正數,而且大錯罰得更重
平均數把所有誤差平方再平均,就是 MSE(均方誤差),最常用的損失
同學預測真實誤差誤差²|誤差|
甲32111
乙55000
丙810−242
平均MSE = 5 ÷ 3 ≈ 1.67MAE = 3 ÷ 3 = 1
手算練習

預測 [4, 6],真實 [2, 6]。MSE 和 MAE 各是多少?

答案

誤差 [2, 0];MSE = (4 + 0) ÷ 2 = 2;MAE = (2 + 0) ÷ 2 = 1

4|指數與對數

math_exp_log
中三學過新的一步
2³ = 8(次方)指數 eˣ:e ≈ 2.718 的 x 次方,永遠是正數
「2 的幾次方是 8?」→ 3這個問題就是對數:log₂8 = 3。課程的 log 用 e 當底

深度學習最常用的三個:

名字公式做什麼例子
sigmoid1 ÷ (1 + e⁻ˣ)把任何數字壓到 0 到 1 → 當機率sigmoid(0) = 0.5;sigmoid(2) ≈ 0.88
交叉熵−log(正確答案的機率)分類的損失有把握答對 p = 0.9 → 0.11(罰很少);答錯 p = 0.1 → 2.30(罰很多)
log 轉換log(1 + x)把很大的數字縮小票價 7、71、512 → 2.1、4.3、6.2(L05 鐵達尼號)
手算練習

  1. log₁₀1000 = ?

  2. 模型給正確答案的機率是 1(百分百確定而且對),交叉熵是多少?

答案

  1. 10 的 3 次方是 1000,所以是 3
  2. −log(1) = 0:完全答對,不用罰

5|機率與 softmax

math_softmax
中三學過新的一步
機率在 0 到 1 之間,所有可能加起來 = 1模型最後輸出的是分數(可以是負數、可以很大),要變成機率
softmax:每個分數取 eˣ,再除以總和
類別分數eˣ機率
貓2.07.397.39 ÷ 11.21 = 0.66
狗1.02.720.24
鳥0.11.110.10
總和11.211.00
手算練習

兩個類別的分數都是 3,softmax 之後各是多少?

答案

兩個 eˣ 一樣大,所以各 0.5。分數一樣=模型完全猜不出來

6|平均與標準差 → 標準化

math_mean_std
中三學過新的一步
平均數標準差:每個數字離平均「平均有多遠」。越大越分散
標準化:(x − 平均) ÷ 標準差。變成「比平均高幾個標準差」

為什麼要標準化:身高 160(公分)和體重 50(公斤)單位不同,數字大小差很多,模型會以為身高比較重要。標準化後兩欄都在 −3 到 3 附近,公平比較。L05、K-NN、SVM 都要先做。

步驟數字 [2, 4, 4, 4, 5, 5, 7, 9]
平均40 ÷ 8 = 5
每個減平均再平方9, 1, 1, 1, 0, 0, 4, 16
平方的平均32 ÷ 8 = 4
標準差√4 = 2
9 標準化(9 − 5) ÷ 2 = 2(比平均高 2 個標準差)
手算練習

全班平均 60 分、標準差 10。小明 75 分,標準化後是多少?

答案

(75 − 60) ÷ 10 = 1.5

7|點積與矩陣乘法

中三學過新的一步
乘法、加法點積:兩排數字,對應位置相乘,再全部加起來
矩陣乘法:很多個點積一次做完

點積:[1, 2, 3] · [4, 5, 6] = 1×4 + 2×5 + 3×6 = 32

生活例子:買 2 個蘋果(每個 5 元)、3 個橙(每個 4 元)→ [2, 3] · [5, 4] = 10 + 12 = 22 元。模型做的就是「輸入 · 權重」。

math_matmul
規則說明
怎麼算結果第 i 橫排、第 j 直排 = A 的第 i 橫排 · B 的第 j 直排
能不能乘A 的直排數要等於 B 的橫排數(上圖 3 = 3)
結果大小(A 的橫排數)×(B 的直排數)
PythonA @ B
手算練習

[[1, 2], [3, 4]] @ [[5, 6], [7, 8]] = ?(每個 [ ] 是一個橫排)

答案

  • 左上:1×5 + 2×7 = 19;右上:1×6 + 2×8 = 22
  • 左下:3×5 + 4×7 = 43;右下:3×6 + 4×8 = 50
  • 答案 [[19, 22], [43, 50]]
課程連結

L03 用 Excel 做矩陣乘法;L11 整課都在教怎麼讓電腦算得快。

用程式檢查你的手算

💻 跟著做(貼進 Kaggle 一格執行)

import numpy as np

print(3 - 0.1 * (2 * 3))                          # 梯度下降一步 → 2.4
p, y = np.array([3, 5, 8]), np.array([2, 5, 10])
print(((p - y) ** 2).mean().round(2), abs(p - y).mean())   # MSE、MAE → 1.67 1.0
print(round(1 / (1 + np.exp(-2)), 2))             # sigmoid(2) → 0.88
print(round(-np.log(0.9), 2), round(-np.log(0.1), 2))      # 交叉熵 → 0.11 2.3
z = np.array([2.0, 1.0, 0.1])
print((np.exp(z) / np.exp(z).sum()).round(2))     # softmax → [0.66 0.24 0.1 ]
x = np.array([2, 4, 4, 4, 5, 5, 7, 9])
print(x.mean(), x.std(), (9 - x.mean()) / x.std())  # 平均、標準差、標準化 → 5.0 2.0 2.0
print(np.dot([1, 2, 3], [4, 5, 6]))               # 點積 → 32
print(np.array([[1, 2], [3, 4]]) @ np.array([[5, 6], [7, 8]]))   # → [[19 22] [43 50]]

自我檢核

  • 能說出「模型就是一個有權重的函數」
  • 能算 y = x² 在某一點的斜率,並走一步梯度下降
  • 能手算一小組資料的 MSE
  • 知道 sigmoid 輸出在 0 到 1,交叉熵答錯罰很重
  • 能把三個分數用 softmax 變成機率
  • 能把一個分數標準化
  • 能手算 2×2 矩陣乘法

🏠 新手從這裡開始 | 📖 白話小辭典 | Python 必備知識 →

Built with LogoFlowershow