Current: Week 2

0%

Week 2

Week 2 — Linear Regression:从Prediction 到Gradient Descent

Key question模型怎样根据错误学习 parameters?

Learning objectives

  • 理解并应用 Week 2 — Linear Regression:从 Prediction 到 Gradient Descent

75 min estimated reading time

Week progress: 0 of 35 sections (0%)Course progress: 0 of 321 sections (0%)

Week 1 的参数由人指定。本周让程序根据答案调整参数。我们先学习 x=[1,2,3,4]、y=[3,5,7,9] 这四个点;它们恰好满足 y=2x+1,但训练程序只读取数据,不直接抄这条答案。

本周沿四个问题学习:预测错多少 → 轻轻改一个参数会怎样 → 怎样选方向和步长 → 怎样合并四个样本的建议。中间为方便手算,暂时只看 x=2、y=5 这一项,并把初值设为 w=1、b=0;回到四样本时会明确重置 w=b=0。

Scroll horizontally to view all columns.

Course data table
分次安排离开教材能完成什么
一:预测与损失计算误差,解释为何平方、为何平均。
二:微调与导数算 L(1) 和 L(1.001),解释 −12 的含义。
三:偏导与更新区分只改 w 和同时改 w/b;全部梯度用旧参数。
四:重复学习与诊断运行 course_examples/week02_loss_gradient.py,对照三个学习率。

前置只需会加减乘除和平方。二阶导数、正规方程是选读,不是写训练循环的前提。本周输出是一条真正改参数的训练循环;Week 3 保留这个学习原则,只让预测函数变得更灵活。

1. Linear Regression 解决什么问题?

Scroll horizontally to view all columns.

Course data table
阅读范围固定数据与起点为什么这样安排
第 1–10 节单点示意:只看模型、误差与坡度先分清三个对象
第 11 节x=2,y=5,w=1;暂时固定 b=0只更新一个旋钮
第 13–14 节同一单点,加入可学习 b多参数偏导;本例重新开始
第 17 节代码x=[1,2,3,4],y=[3,5,7,9];w=b=0四个样本的平均损失;不是接着第 14 节跑

本周 y=2x+1 是我们人为生成的教学规律。训练程序只能看到配对数据,不能直接读取“答案参数”。你将观察它如何靠误差逐步靠近这条规律。

Linear Regression(线性回归)用来预测连续数值,例如房价、销量、温度、距离等。

假设历史数据:

Scroll horizontally to view all columns.

线性回归示例数据
x(面积)y(房价)
13
25
37
49

规律是:

y=2x+1y = 2x + 1

如果x = 5,则预测y = 11。

线性回归的核心就是:根据已有数据,找到最合适的一条直线,再用它预测新的数据。

2. Model、Feature、Parameter

模型:

y^=wx+b\hat{y} = wx + b

其中:

  • x:Feature,输入特征
  • y:真实值/ Target
  • ŷ:Prediction,预测值
  • w:Weight,权重
  • b:Bias,偏置
  • w、b:Parameters,模型需要通过训练找到的参数

程序员视角:

python
def predict(x, w, b):
    return w * x + b

训练的本质,就是找到最合适的w 和b。

3. Prediction 是怎么产生的?

假设:

w = 1

b = 0

x = 2

那么:

y^=wx+b=1×2+0=2\hat{y} = wx + b = 1 \times 2 + 0 = 2

但真实答案可能是:

y=5y = 5

于是:

Prediction = 2

Actual

= 5

模型预测错了。

4. Error 与Loss 的区别

最简单的Error:

Error=y^y\mathrm{Error} = \hat{y} - y

例如:

2 - 5 = -3

说明预测低了3。

但直接把多个Error 相加会有正负抵消的问题,所以训练时通常用Loss Function。

最常见的一种:

SquaredError=(y^y)2\mathrm{SquaredError} = (\hat{y} - y)^2

例如:

(2 - 5)² = 9

平方有两个作用:

  1. 消除正负号;
  2. 更严重地惩罚大误差。

Scroll horizontally to view all columns.

Course data table
预测 / 真值error=预测−真值平方误差
3 / 5−2:预测偏低4
7 / 5+2:预测偏高4

误差的正负告诉你偏高还是偏低;平方损失表示本次偏差有多大。相反方向的误差不会在平方后抵消。若原目标单位是元,平方误差单位就是元²;要回到原单位可以取均方根 RMSE,但训练本周仍用 MSE。

5. MSE:先逐项平方,再明确平均哪些项

如果一项误差是 +2,另一项是 −2,直接相加等于 0,却不表示预测全对。平方误差把它们变成 4 和 4。我们再取平均,得到每项通常错到什么程度。这个选择适合本周的数值回归示例,不是所有任务的唯一计分方式。

y^i=wxi+b,li=(y^iyi)2,L=1ni=1nli\hat y_i=wx_i+b,\quad l_i=(\hat y_i-y_i)^2,\quad L=\frac{1}{n}\sum_{i=1}^{n}l_i

i 是样本编号,n 是参与平均的样本数。Σ 表示把每项相加;1/n 表示除以项数。n=1 时 MSE 就是这一项平方误差,不需要换一种公式。选择平方误差取决于你要优化什么;mean/sum 则决定怎样汇总。

Scroll horizontally to view all columns.

Course data table
x目标 yw=b=0 时预测平方误差
1309
25025
37049
49081

总和是 164,平均 L=164/4=41。若报告 sum loss 应写 164;若报告 mean loss 应写 41。梯度也必须对应同一种汇总,不能报告平均损失却不小心按总和梯度更新。

MSE 的单位是目标单位的平方;异常的大误差会受到更强惩罚。下一节的问题是:41 只告诉我们当前结果不好,还没告诉我们 w 应该增加还是减少。

Knowledge check

EX02-A:只有一个样本,预测为 2、目标为 5,MSE 是多少?若同一个样本复制四次,mean loss 与 sum loss 各是多少?

6. 为什么还需要Gradient?

现在模型知道Loss 很大,但它还不知道:

w 和b 应该往哪个方向改?改多少?

Gradient 就是用来回答这个问题的。

7. 导数:把 w 微调一点,Loss 会怎样改变?

先固定 x=2、y=5、b=0,只允许改 w。预测是 2w,因此损失函数是 L(w)=(2w−5)²。这里横轴是参数 w,不是输入 x;我们研究的是改规则,而不是换题目。

python
def loss(w):
    return (w * 2 + 0 - 5) ** 2

print(loss(1.0))      # 9
print(loss(1.001))    # 8.988004
print((loss(1.001) - loss(1.0)) / 0.001)  # 约 -11.996

这是可独立运行的微调实验。w 增加 0.001,Loss 改变 8.988004−9=−0.011996。除以参数改变量,得到每单位参数变化对应的局部损失变化率,约 −11.996。负号说明在这里向右挪一点会下降。

ΔLΔw=0.0119960.00111.996,dLdww=1=12\frac{\Delta L}{\Delta w}=\frac{-0.011996}{0.001}\approx-11.996,\qquad \frac{dL}{dw}\bigg|_{w=1}=-12

Δ 读作“变化量”;dL/dw 是把试探步长不断缩小时得到的局部变化率,也叫导数。它不是 Loss 的值:此时 Loss 是 9,导数是 −12。它也不是保证移动一整步就减少 12;局部近似只适用于足够小的变化。

为什么解析结果是 −12?把计算拆成两段。w 增加 δ,预测 wx+b 增加 xδ=2δ;当前误差 e=2−5=−3,平方 e² 对误差的局部变化率是 2e=−6。两段倍率相乘:−6×2=−12。Week 4 会把这种“沿依赖路径相乘”推广到整个网络。

dLdw=2(y^y)误差改变对损失的影响x权重改变对预测的影响\frac{dL}{dw}=\underbrace{2(\hat y-y)}_{\text{误差改变对损失的影响}}\underbrace{x}_{\text{权重改变对预测的影响}}

若 x=0,改 w 不改变预测,这一项对 w 的梯度便是 0;此时偏置 b 仍可能影响预测。这不是模型一定学好了,只是这条路径没有提供 w 的学习信号。下一节把多个参数各自的导数装成一组梯度。

Knowledge check

EX02-B:本例只把 w 改为 1.002。先用 −12×0.002 预测 Loss 的变化,再算真实变化。两者为什么不完全相等?

8. Gradient 是什么?

对一个参数w 来说:

Gradient=dLossdw\mathrm{Gradient} = \frac{d\,\mathrm{Loss}}{dw}

它告诉我们:如果稍微改变w,Loss 会怎么变化。

最重要的是符号:

Concept sequence
  1. gradient > 0
  2. w 增加会让Loss 增加
  3. 应该减少w
Concept sequence
  1. gradient < 0
  2. w 增加会让Loss 减少
  3. 应该增加w

因此参数更新公式是:

wnew=woldlearningrate×gradientw_{\mathrm{new}} = w_{\mathrm{old}} - \mathrm{learning}_{\mathrm{rate}} \times \mathrm{gradient}

为什么是减号?因为Gradient 指向Loss 增长最快的方向,我们要向它的反方向走。

Scroll horizontally to view all columns.

Course data table
记号读法本课意义
dL/dwL 对 w 的导数单变量情况下的局部斜率
∂L/∂wL 对 w 的偏导还有别的参数时,暂时固定它们
∇θLL 对参数组 θ 的梯度把各参数偏导排在一起
ηeta,学习率本次更新的步长,由我们选

9. Gradient Descent

Gradient Descent(梯度下降)可以想象成:

你站在山上,看不到整座山,只能感觉脚下坡度。

目标是走到最低点。

calculate gradient

move downhill

calculate gradient again

move downhill again

repeat

在机器学习里,最低点代表Loss 尽可能小。

Scroll horizontally to view all columns.

Course data table
旧参数 w=1,步长 η=0.1更新方向
gradient=31−0.1×3=0.7减小 w
gradient=−31−0.1×(-3)=1.3增大 w
gradient=01−0=1该步没有一阶方向信号

减去梯度,是沿当前局部下降方向尝试一步。步子太大可能跨过谷底;多参数复杂损失也不保证每次都下降,更不保证找到全局最低点。梯度为零只表示一阶变化为零,可能是最低点、最高点或其他驻点。

Knowledge check

w=2,gradient=-4,η=0.05,下一步 w 是多少?

10. Learning Rate

参数更新:

parameternew=parameteroldlearningrate×gradient\mathrm{parameter}_{\mathrm{new}} = \mathrm{parameter}_{\mathrm{old}} - \mathrm{learning}_{\mathrm{rate}} \times \mathrm{gradient}

Learning Rate 控制每一步走多大。

  • 太大:可能跨过最低点,震荡甚至发散
  • 太小:训练很慢

Learning Rate 是Hyperparameter。

注意区别:

  • Parameter:模型自己学出来,如w、b
  • Hyperparameter:人设置,如learning_rate、batch_size、epochs

11. 完整手算一次w 更新

只用一个训练样本:

x = 2

y = 5

模型先简化为:

y^=wx\hat{y} = wx

初始:

w = 1

learning_rate = 0.01

Step 1 — Prediction

y^=1×2=2\hat{y} = 1 \times 2 = 2

Step 2 — Loss

Loss=(y^y)2=(25)2=9\mathrm{Loss} = (\hat{y} - y)^2 = (2 - 5)^2 = 9

Step 3 — Gradient

Loss:

Loss=(y^y)2\mathrm{Loss} = (\hat{y} - y)^2

Prediction:

y^=wx\hat{y} = wx

使用Chain Rule:

dLossdw=(dLossdy^)×(dy^dw)\frac{d\,\mathrm{Loss}}{dw} = \left(\frac{d\,\mathrm{Loss}}{d\hat{y}}\right) \times \left(\frac{d\hat{y}}{dw}\right)

第一部分:

dLossdy^=2(y^y)\frac{d\,\mathrm{Loss}}{d\hat{y}} = 2(\hat{y} - y)

代入:

2(2 - 5) = -6

第二部分:

dŷ/dw = x = 2

所以:

dLossdw=6×2=12\frac{d\,\mathrm{Loss}}{dw} = -6 \times 2 = -12

Gradient = -12。

负数说明增加w 可以让Loss 下降。

Step 4 — Update

wnew=10.01×(12)w_{\mathrm{new}} = 1 - 0.01 \times (-12)

所以:

wnew=1.12w_{\mathrm{new}} = 1.12

新的Prediction:

y^=1.12×2=2.24\hat{y} = 1.12 \times 2 = 2.24

新的Loss:

(2.24 - 5)² = 7.6176

之前Loss = 9,现在约等于7.62。

模型真的变好了。

12. Chain Rule 为什么重要?

依赖关系是:

w

prediction ŷ

Loss

所以要知道w 如何影响Loss,需要沿dependency chain 往回算。

这就是未来Backpropagation 的核心思想。

13. Bias b 与Partial Derivative

偏导的“偏”表示暂时只动一个参数:求 ∂L/∂w 时,把 b 和数据固定;求 ∂L/∂b 时,把 w 和数据固定。梯度把这些局部斜率排成与参数对应的一组数。求导阶段还不更新任何参数。

完整模型:

y^=wx+b\hat{y} = wx + b

现在Loss 同时依赖w 和b:

Loss=f(w,b)\mathrm{Loss} = f(w,b)

我们分别计算:

Lossw\frac{\partial\,\mathrm{Loss}}{\partial w}

和:

Lossb\frac{\partial\,\mathrm{Loss}}{\partial b}

Partial Derivative(偏导数)可以理解为:多个变量时,一次只研究其中一个变量变化对结果的影响。对于单个样本:

Lossw=2(y^y)x\frac{\partial\,\mathrm{Loss}}{\partial w} = 2(\hat{y} - y)x
Lossb=2(y^y)\frac{\partial\,\mathrm{Loss}}{\partial b} = 2(\hat{y} - y)

多个参数的这些偏导数组合起来,就是Gradient。

14. 同时更新w 和b

假设:

w = 1

b = 0

gradient_w = -12

gradient_b = -6

learning_rate = 0.01

更新:

w = 1 - 0.01 × (-12) = 1.12

b = 0 - 0.01 × (-6) = 0.06

新模型:

y^=1.12x+0.06\hat{y} = 1.12x + 0.06

这就是模型“学习了一小步”。

先用同一组旧 w、旧 b 算出 dw 和 db,再同时写回新值。不能先改 w,再拿新的 w 和旧的 b 重算 db,却还称作这次标准梯度下降;那是另一种更新顺序。保存中间值,是 Week 4 反向传播能够一致计算的原因。

15. Second Derivative 二阶导数

一阶导数描述:

变化率/ slope

二阶导数描述:

变化率本身变化得有多快。

一个直观类比:

Position

↓derivative

Velocity

↓derivative

Acceleration

在优化里,二阶导数还能帮助描述Loss 曲面的弯曲程度。

Week 2 只需建立这个直觉,不需要深入Hessian。

16. Least Squares 与Gradient Descent

这两个概念不要混淆。

Least Squares 回答:

我们想优化什么?

也就是让squared errors 总和尽可能小。

Gradient Descent 回答:

我们怎么一步步找到较小的Loss?

因此:

Least Squares = Objective

Gradient Descent = Optimization method

简单线性回归也可以直接通过数学公式得到最优参数,但Neural Network 有几百万、几十亿参数时,通常必须靠迭代优化。

17. Python 从零实现

Scroll horizontally to view all columns.

Course data table
x / y,起点 w=b=0预测误差误差平方2×误差×x2×误差
1 / 30−39−6−6
2 / 50−525−20−10
3 / 70−749−42−14
4 / 90−981−72−18
四项平均41dw=−35db=−12

用 η=0.01 同时更新,得到 w=0.35、b=0.12。重新预测四项得到 [0.47,0.82,1.17,1.52],新 MSE=28.45315,比 41 小。这是第一次更新的结果,不是已经学完;后面的循环继续从这里前进。

不使用sklearn / PyTorch / TensorFlow:

python
x_data = [1, 2, 3, 4]
y_data = [3, 5, 7, 9]
w = 0.0
b = 0.0
learning_rate = 0.01

for epoch in range(1000):
    dw = 0.0
    db = 0.0
    loss = 0.0
    n = len(x_data)

    for x, y in zip(x_data, y_data):
        # Forward pass
        prediction = w * x + b
        # Error
        error = prediction - y
        # Squared error
        loss += error**2
        # Gradients
        dw += 2 * error * x
        db += 2 * error

    # MSE / mean gradients
    loss /= n
    dw /= n
    db /= n

    # Gradient descent
    w -= learning_rate * dw
    b -= learning_rate * db

print('w:', w)
print('b:', b)

最终会接近:

w ≈2

b ≈1

也就是说模型自己从数据中学习出了:

y2x+1y \approx 2x + 1

Knowledge check

第一步为什么要用 -140/4=-35,而不是直接用 -140 更新 w?

18. 代码与数学一一对应

Model:

python
prediction = w * x + b

对应:

y^=wx+b\hat{y} = wx + b

Error:

python
error = prediction - y

对应:

y^y\hat{y} - y

Loss:

python
loss += error**2

对应:

(ŷ - y)²

Gradient for w:

python
dw += 2 * error * x

对应:

Lossw=2(y^y)x\frac{\partial\,\mathrm{Loss}}{\partial w} = 2(\hat{y} - y)x

Gradient for b:

python
db += 2 * error

对应:

Lossb=2(y^y)\frac{\partial\,\mathrm{Loss}}{\partial b} = 2(\hat{y} - y)

Parameter update:

python
w -= learning_rate * dw
b -= learning_rate * db

对应:

parameter = parameter - learning_rate × gradient

19. Forward Pass 与Backward Pass

Forward Pass:

Input

Model

Prediction

Loss

Backward Pass / Backpropagation:

Loss

Gradients

Optimizer / Gradient Descent:

Gradients → Updated Parameters

20. Epoch 与Batch

Epoch:模型完整看完训练数据一次。

例如:

python
for epoch in range(1000):
    # Use the training data once per epoch.
    ...

表示训练数据被重复学习1000 次。

Concept sequence
  1. Batch 是一次forward/loss/backward/update 所处理的一组样本。它可以是整个训练集(full batch),也可以是其中一部分(mini-batch;实际训练更常见)。

例如一百万条数据,可以按batch_size = 32 或64 分批训练。

21. Linear Regression 与Neural Network 的关系

Linear Regression:

y^=wx+b\hat{y} = wx + b

一个Neural Network neuron 的核心计算也是:

z=w1x1+w2x2++wnxn+bz = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b

之后通常再接Activation Function。

所以Linear Regression 可以看作理解neuron 的最简单入口。

22. 从Linear Regression 到GPT

Linear Regression:

Input

Parameters

Prediction

Loss

Gradient

Update Parameters

Neural Network:

Input

Many layers / weights

Prediction

Loss

Backpropagation

Update weights

GPT:

Tokens

Transformer

Next-token Prediction

Loss

Backpropagation

Update huge numbers of parameters

结构和规模变复杂了,但最底层的训练逻辑仍然是同一条主线。

23. Week 2 必须掌握的词

English

中文

核心理解

Feature

特征

输入x

Target / Label

目标/ 标签

正确答案y

Model

模型

wx+b

Parameter

参数

w、b

Prediction

预测

ŷ

Error

误差

ŷ-y

Loss

损失

模型有多差

MSE

均方误差

多样本squared error 平均

Derivative

导数

slope / 变化率

Partial Derivative

偏导

单个参数对Loss 的影响

Gradient

梯度

各参数偏导组成的方向信息

Gradient Descent

梯度下降

向Loss 更小的方向走

Learning Rate

学习率

每步走多远

Epoch

训练轮次

完整看一次数据集

Batch

批次

一次处理部分样本

Scroll horizontally to view all columns.

Week 2 核心词汇
English中文核心理解
Forward Pass前向传播Input → Prediction → Loss
Backward Pass反向传播Loss → Gradients
Chain Rule链式法则沿依赖关系求导

24. Week 2 最重要的5 个公式

1. Prediction

y^=wx+b\hat{y} = wx + b

2. MSE

MSE=1n×i(y^iyi)2\mathrm{MSE} = \frac{1}{n} \times \sum_i (\hat{y}_i-y_i)^2

3. Gradient for w

MSEw=2ni(y^iyi)xi\frac{\partial\,\mathrm{MSE}}{\partial w} = \frac{2}{n}\sum_i(\hat{y}_i-y_i)x_i

4. Gradient for b

MSEb=2ni(y^iyi)\frac{\partial\,\mathrm{MSE}}{\partial b} = \frac{2}{n}\sum_i(\hat{y}_i-y_i)

5. Gradient Descent

Parameternew=ParameteroldLearningRate×Gradient\mathrm{Parameter}_{\mathrm{new}} = \mathrm{Parameter}_{\mathrm{old}} - \mathrm{LearningRate} \times \mathrm{Gradient}

其中第5 个最重要。

25. 最终Mental Model

请把下面这条链记牢:

DATA

PARAMETERS

MODEL

PREDICTION

COMPARE WITH TARGET

LOSS

GRADIENT

UPDATE PARAMETERS

BETTER MODEL

一句话概括Machine Learning:

Learning = finding parameters that minimize loss.

程序员版本:

python
while training:
    prediction = model(input, parameters)
    loss = calculate_loss(prediction, actual)
    gradients = calculate_gradients(loss, parameters)
    parameters -= learning_rate * gradients

这就是Week 3 Neural Network、Backpropagation,以及后面Transformer / GPT 的地基。

Week 2 补充深入理解:把“公式结论”变成可运行的直觉

本节不改写Week 2 原文,而是在原文之后补充几个最容易卡住的连接。原文介绍了Prediction、Loss、Derivative、Gradient 和Gradient Descent;下面把它们放回同一条因果链。

1. Loss 不是Gradient

Loss 是一个数,表示当前参数下模型有多差。例如:

Loss(w)=(2w5)2\mathrm{Loss}(w) = (2w - 5)^2

当w=1 时,prediction 是2,Loss 是9。

Gradient 则是Loss 对参数的变化率:

dLossdw=12\frac{d\,\mathrm{Loss}}{dw} = -12

它回答的是另一个问题:如果只把w 增加一点,Loss 会增加还是减少、变化有多快?

Loss → 当前位置有多差

Gradient → 参数往哪边改会变好

没有指定“对谁求导”时,不能只说“Loss 的导数”。训练中通常是Loss 对weights、biases 等trainable parameters 的导数。

2. 一个parameter 与多个parameters

如果只有一个参数w:

gradient=dLossdw\mathrm{gradient} = \frac{d\,\mathrm{Loss}}{dw}

这是一个数字,可以想成一维曲线在当前位置的坡度。

如果有w 和b:

Loss=[LosswLossb]\nabla \mathrm{Loss} = \begin{bmatrix} \frac{\partial\,\mathrm{Loss}}{\partial w} \\ \frac{\partial\,\mathrm{Loss}}{\partial b} \end{bmatrix}

Gradient 变成向量。它描述Loss 曲面上每个参数方向的局部坡度,整个向量指向Loss 增长最快的方向。Gradient Descent 使用负方向:

θnew=θoldαLoss\theta_{\mathrm{new}} = \theta_{\mathrm{old}} - \alpha \nabla \mathrm{Loss}

3. 为什么Gradient 为负时参数会增加

假设:

w = 1

gradient = -12

learning_rate = 0.01

更新:

wnew=10.01(12)=1.12w_{\mathrm{new}} = 1 - 0.01(-12) = 1.12

负号来自Gradient Descent 的“反坡度”原则。Gradient 为负表示向右增加w 会让Loss 下降;公式中的减号把这个负数变成正的update。

4. Chain Rule 为什么是Backprop 的桥

dLossdw=dLossdy^dy^dzdzdw\frac{d\,\mathrm{Loss}}{dw} = \frac{d\,\mathrm{Loss}}{d\hat{y}}\frac{d\hat{y}}{dz}\frac{dz}{dw}

每一项都可以由对应operation 单独提供,因此一个node 不需要理解整个network。

5. 为什么本周不需要二阶导数

一阶导数告诉我们当前位置的坡度;训练的第一步问题是“向左还是向右”。这已经足够执行:

parameterparameterlearningRate×gradient\mathit{parameter} \leftarrow \mathit{parameter} - \mathit{learningRate} \times \mathit{gradient}

二阶导数:

d2Lossdw2\frac{d^2\,\mathrm{Loss}}{dw^2}

告诉我们坡度变化得多快,也就是曲面弯曲程度。它可以帮助某些方法估计更合适的步长,但对有数百万参数的网络,完整Hessian matrix 非常昂贵。因此GPT 训练主要使用一阶gradient 的SGD、Momentum、AdamW 等方法。

6. 用有限变化检查导数方向

导数也可以用一个很小的试探步近似检查:

dLossdwLoss(w+ε)Loss(w)ε\frac{d\,\mathrm{Loss}}{dw} \approx \frac{\mathrm{Loss}(w+\varepsilon)-\mathrm{Loss}(w)}{\varepsilon}

以w=1、ε=0.001 为例:

Loss(1)

= 9.000000

Loss(1.001) ≈8.988004

变化

≈-0.011996

除以0.001

≈-11.996

接近解析结果-12。这种finite-difference check 是工程中验证手写gradient 的好工具,但不适合代替Backprop 训练,因为每个parameter 都需要额外forward,成本很高。

7. 一句话闭环

Parameters 决定prediction

Prediction 与target 决定Loss

Loss 对parameters 的gradient 提供方向

Gradient Descent 沿反方向更新parameters

重复后,prediction 通常逐渐改善