Zhanbo's Blog
Back to home

CS546 Learning Notes:从 Softmax 到 MLP,终于把反向传播算通了

Algorithm/Learning Notes
2026-09-12
15 min read
0 reads
AIMachine Learning

In brief

上次我学到的是 Linear Regression、Gradient Descent 和 SGD。这次继续往下:如果预测的不是房价,而是正面、负面、中性三个类别,模型怎么输出?加上 hidden layer 以后,loss 又怎么影响前面的参数? 今天最有收获的是把公式拆成自己能算的步骤,尤其是交叉熵的梯度、反向传播里的转置,以及“算到隐藏层的梯度”和“更新参数”之间的区别。这篇笔记按我们实际提问和计算的顺序整理,后面再把完整公式放在一起。

1. 三分类为什么要输出三个数?

之前预测一个数,公式是 y^=wx+b\hat y=\mathbf w^\top\mathbf x+b 。现在判断评论的正面、负面、中性,让每个类别有自己的一组权重和偏置,各算一个分数:

zi=wix+biz_i=\mathbf w_i^\top\mathbf x+b_i

一起写就是:

z=Wx+b\mathbf z=W\mathbf x+\mathbf b

z\mathbf z 是 logits,也就是还没有转换成概率的原始分数。

z 是等于 W * x + b 吗?

对。这里的 zz 是分数,后面的 pp 才是概率。两者要分开。

如果一个样本有 dd 个特征,任务有 CC 个类别,我们统一把单样本输入写成列向量:

zC×1=WC×dxd×1+bC×1\underbrace{\mathbf z}_{C\times1} =\underbrace{W}_{C\times d} \underbrace{\mathbf x}_{d\times1} +\underbrace{\mathbf b}_{C\times1}

在这个写法里,WW 每行负责一个类别,每列对应一个输入特征,即有多少个分类WW就有多少行。

假如有(正面,负面,中性)三个分类,WW就会有三行。

那输入特征个数又是怎么决定的?

由我们怎样用数字表示样本决定。比如评论用“正面词数量、负面词数量”表示,输入就是两个数;再加“感叹号数量”,输入就是三个数。这只是方便理解的人为特征,后面还会学习词向量。

三个类别、三个输入特征,WW 就是 3×33\times3。这里两个 3 恰好一样,但行数和列数的意义不同。

2. 原始分数为什么不能直接当概率?

假设三个 logits 是:

z=(2,1,0)\mathbf z=(2,-1,0)^\top

我认为不能当概率,因为相加不是百分之百。

这里我算漏了:21+02-1+0 恰好等于 11。真正的问题是它有负数,还有大于 11 的数。

类别概率既要每个值都在 [0,1][0,1] 之间,也要总和等于 11。Softmax 做的就是这个转换:

pi=ezij=1Cezjp_i=\frac{e^{z_i}}{\sum_{j=1}^{C}e^{z_j}}

先取指数,让每项变成正数;再除以总和,让最终总和等于 11

ipi=iezijezj=1\sum_i p_i=\frac{\sum_i e^{z_i}}{\sum_j e^{z_j}}=1

代入刚才的分数:

类别Logit指数值(约)概率(约)
正面27.3890.8438
负面−10.36790.0420
中性010.1142

分数最高的类别,概率仍然最高。不过 softmax 反映的是分数之间的相对关系。如果所有 logits 同时加同一个常数 cc

ezi+cjezj+c=eceziecjezj=pi\frac{e^{z_i+c}}{\sum_j e^{z_j+c}} =\frac{e^c e^{z_i}}{e^c\sum_j e^{z_j}}=p_i

概率完全不变。所以不能脱离其他类别的变化,只看某一个 logit 有没有变大。

3. 分类的 loss 怎么算?

对于每个样本只有一个正确类别的情况,交叉熵可以写成:

L=lnp正确类别L=-\ln p_{\text{正确类别}}

正确类别的概率越高,loss 越小:

正确类别的概率Loss(约)
0.90.105
0.50.693
0.12.303

当概率为 11ln1=0-\ln1=0;这是理想边界值,有限实数 logits 的普通 softmax 概率严格小于 11,可以不断接近它。

假设正确标签是“负面”,模型却给负面约 0.0420.042 的概率:

L=ln(0.042)3.17L=-\ln(0.042)\approx3.17

取的是正确标签对应的概率,不是模型预测最高的概率。模型即使选错了类别,也照样能计算 loss。

4. 所以有三个类别,就算三遍 loss?

我看到完整公式时,又有点混淆:

L=i=1CyilnpiL=-\sum_{i=1}^{C}y_i\ln p_i

按正面、负面、中性的顺序,如果正确答案是负面,one-hot 标签就是:

y=(0,1,0)\mathbf y=(0,1,0)^\top

展开后:

L=[0lnp1+1lnp2+0lnp3]=lnp2L=-[0\ln p_1+1\ln p_2+0\ln p_3]=-\ln p_2

原来是三个交叉熵之和。

这里还要改一下:是一个交叉熵里的三个类别项相加,不是三个独立的交叉熵 loss。One-hot 标签让不正确类别的项为零,保留正确类别的一项。

一个样本、三个类别:输出三个概率,得到一个 loss。两个样本、每个三个类别:各得到一个 loss,再求 batch 平均。

用不同下标分清类别和样本:

Lˉ=1Bn=1Bi=1Cyi(n)lnpi(n)\bar L=-\frac1B\sum_{n=1}^{B}\sum_{i=1}^{C}y_i^{(n)}\ln p_i^{(n)}

BB 是 batch 大小,CC 是类别数。本文后面的推导先针对单个样本,标签是固定的 one-hot 向量,不加入正则化项。

5. 为什么 Softmax + Cross-entropy 的梯度就是 p − y?

这部分值得详细记。直接记结论很容易忘,代进去推一遍反而不复杂。

仍然假设第二个类别是正确答案:

p2=ez2ez1+ez2+ez3,L=lnp2p_2=\frac{e^{z_2}}{e^{z_1}+e^{z_2}+e^{z_3}},\qquad L=-\ln p_2

代入,并使用 ln(a/b)=lnalnb\ln(a/b)=\ln a-\ln b

L=lnez2ez1+ez2+ez3=z2+ln(ez1+ez2+ez3)L=-\ln\frac{e^{z_2}}{e^{z_1}+e^{z_2}+e^{z_3}} =-z_2+\ln(e^{z_1}+e^{z_2}+e^{z_3})

对正确类别的分数 z2z_2 求偏导:

Lz2=1+1ez1+ez2+ez3ez2=p21\frac{\partial L}{\partial z_2} =-1+\frac{1}{e^{z_1}+e^{z_2}+e^{z_3}}\cdot e^{z_2} =p_2-1

后半部分是链式法则:lnu\ln u 求导是 1/u1/u,再乘里面对 z2z_2 的导数 ez2e^{z_2}

对错误类别 z1z_1z2-z_2 的导数是零:

Lz1=0+ez1ez1+ez2+ez3=p1\frac{\partial L}{\partial z_1} =0+\frac{e^{z_1}}{e^{z_1}+e^{z_2}+e^{z_3}}=p_1

z3z_3 同理,得到 p3p_3。三个结果放一起是:

Lz=[p1p21p3]=py\frac{\partial L}{\partial\mathbf z} =\begin{bmatrix}p_1\\p_2-1\\p_3\end{bmatrix} =\mathbf p-\mathbf y

所以:

Lzi=piyi\boxed{\frac{\partial L}{\partial z_i}=p_i-y_i}

虽然 loss 最后只剩 lnp2-\ln p_2,但 p2p_2 的分母包含所有 logits,因此其他类别也有梯度。

6. 从 logit 的梯度到参数的梯度

这个区别很重要:piyip_i-y_i 是对 ziz_i 的梯度,还不是对权重的梯度。

因为:

zi=jWijxj+biz_i=\sum_j W_{ij}x_j+b_i

再用链式法则:

LWij=(piyi)xj,Lbi=piyi\frac{\partial L}{\partial W_{ij}}=(p_i-y_i)x_j, \qquad \frac{\partial L}{\partial b_i}=p_i-y_i

拿今天的练习算:只有一个输入特征 x=2x=2,正确类别是负面,负面概率约为 0.0420.042

Lz负面=0.0421=0.958\frac{\partial L}{\partial z_{\text{负面}}}=0.042-1=-0.958 Lw负面=0.958×2=1.916,Lb负面=0.958\frac{\partial L}{\partial w_{\text{负面}}}=-0.958\times2=-1.916, \qquad \frac{\partial L}{\partial b_{\text{负面}}}=-0.958

学习率 0.10.1 时:

w=w+0.1916,b=b+0.0958w_{\text{新}}=w_{\text{旧}}+0.1916, \qquad b_{\text{新}}=b_{\text{旧}}+0.0958

所以 w、b 都变大,负面的 logit 就变大,softmax 概率就变大了?

在这个单样本、单层分类器的更新里,是的。这里 x>0x>0,两个参数增大让负面 logit 提高。另外两个类别的梯度为正,它们的 logits 降低,所以正确类别的概率提高。

补充:更新参数后,logit 到底改变多少?

这里的公式是啥意思?

先定义变化量:Δzi=zizi\Delta z_i=z_i'-z_i,其中带撇号表示更新后的值。这不是新的更新规则,而是把参数更新代回 logit 公式,算出分数的变化。

先只看一个输入特征,原来的分数是:

zi=wix+biz_i=w_ix+b_i

我们已经知道单样本梯度下降的更新:

wi=wiη(piyi)x,bi=biη(piyi)w_i'=w_i-\eta(p_i-y_i)x, \qquad b_i'=b_i-\eta(p_i-y_i)

这里的概率和梯度都在更新前计算。对同一个输入 xx,代回更新后的分数:

zi=wix+bi=[wiη(piyi)x]x+[biη(piyi)]=wix+biziη(piyi)x2η(piyi)\begin{aligned} z_i'&=w_i'x+b_i'\\ &=\big[w_i-\eta(p_i-y_i)x\big]x +\big[b_i-\eta(p_i-y_i)\big]\\ &=\underbrace{w_ix+b_i}_{z_i} -\eta(p_i-y_i)x^2-\eta(p_i-y_i) \end{aligned}

减去旧分数,合并两项:

Δzi=η(piyi)(x2+1)\boxed{\Delta z_i=-\eta(p_i-y_i)(x^2+1)}

x2x^2 来自权重变化的贡献,11 来自偏置变化的贡献。 权重更新里乘了一次输入,代回 wixw_ix 时又乘了一次,所以出现平方。

拿前面的负面类别核对:x=2x=2η=0.1\eta=0.1piyi=0.958p_i-y_i=-0.958,因此:

Δz负面=0.1×(0.958)×(22+1)=0.479\Delta z_{\text{负面}} =-0.1\times(-0.958)\times(2^2+1)=0.479

也就是负面 logit 增加了 0.4790.479。直接使用之前算出的参数变化,也会得到同样的结果:

Δz负面=0.1916Δw×2+0.0958Δb=0.479\Delta z_{\text{负面}} =\underbrace{0.1916}_{\Delta w}\times2 +\underbrace{0.0958}_{\Delta b}=0.479

多个输入特征时,每个权重变化的贡献相加:

Δzi=j=1dΔWijxj+Δbi=η(piyi)(j=1dxj2+1)\Delta z_i=\sum_{j=1}^{d}\Delta W_{ij}x_j+\Delta b_i =-\eta(p_i-y_i)\left(\sum_{j=1}^{d}x_j^2+1\right)

x2=j=1dxj2\|\mathbf x\|^2=\sum_{j=1}^{d}x_j^2 就是向量各分量的平方和,所以简写为:

Δzi=η(piyi)(x2+1)\Delta z_i=-\eta(p_i-y_i)(\|\mathbf x\|^2+1)

因为 x2+1\|\mathbf x\|^2+1 一定为正,学习率也为正,变化方向就由 (piyi)-(p_i-y_i) 决定:正确类别的 logit 提高,错误类别的 logit 降低。

这里的前提是:输入向量保持不变,只用这个样本的梯度,同时以相同学习率更新这一层的权重和偏置,且使用不带动量或正则化的普通梯度下降。 Batch 更新会混入其他样本的梯度;整个 MLP 同时更新时,这一层接收到的隐藏表示也可能改变。因此不能直接推广为“任何 batch 或整个 MLP 的每一步都保证每个样本的 loss 降低”。

7. 加 hidden layer 之前,为什么先讲 ReLU?

假设只是多加一次线性计算:

h=2x+1,z=3h+4h=2x+1,\qquad z=3h+4

合起来:

z=3(2x+1)+4=6x+7z=3(2x+1)+4=6x+7

算了两层,但还是同一种加权求和加偏置的形式。严格说带偏置叫仿射变换,课程里常把这种层称为线性层。

矩阵形式也能合并:

W2(W1x+b1)+b2=(W2W1)x+(W2b1+b2)W_2(W_1\mathbf x+\mathbf b_1)+\mathbf b_2 =(W_2W_1)\mathbf x+(W_2\mathbf b_1+\mathbf b_2)

因此中间需要非线性。ReLU 是:

ReLU(a)=max(0,a)\operatorname{ReLU}(a)=\max(0,a)

负数变零,正数保持不变。加进去以后:

h=ReLU(2x+1),z=3h+4h=\operatorname{ReLU}(2x+1),\qquad z=3h+4

我算出 x=1x=-1h=0h=0x=1x=1h=3h=3。整个函数变成:

z={4,x0.56x+7,x>0.5z=\begin{cases}4,&x\le-0.5\\6x+7,&x>-0.5\end{cases}

出现了一个折点,不再是全局的一条直线。这就是这个例子里非线性带来的变化。

8. 从一个隐藏单元扩展到四个

今天用的完整结构是:三个输入特征,四个 ReLU 隐藏单元,三个类别。

a=W1x+b1\mathbf a=W_1\mathbf x+\mathbf b_1 h=ReLU(a)\mathbf h=\operatorname{ReLU}(\mathbf a) z=W2h+b2,p=softmax(z)\mathbf z=W_2\mathbf h+\mathbf b_2, \qquad \mathbf p=\operatorname{softmax}(\mathbf z)
形状含义
x\mathbf x3×13\times1输入特征
W1W_14×34\times3每行给一个隐藏单元算加权和
b1,a,h\mathbf b_1,\mathbf a,\mathbf h4×14\times1第一层偏置、激活前结果、激活后结果
W2W_23×43\times4每行给一个类别算分数
b2,z,p,y\mathbf b_2,\mathbf z,\mathbf p,\mathbf y3×13\times1输出偏置、分数、概率、标签

如果转置 h 的话,W2 就是 3×4?

W2W_2 的形状对,但这里不需要转置 h\mathbf h

(3×4)(4×1)(3×1)(3\times4)(4\times1)\longrightarrow(3\times1)

如果转置 h\mathbf h,反而乘不起来。先固定自己用列向量的约定,再检查中间维度。

没有隐藏层,直接 softmax 分类,通常叫 Softmax Regression;现在加了 ReLU 隐藏层,是用于多分类的 MLP。隐藏层单元数是我们选的结构设置,不等于类别数。

9. Backpropagation:一条路径相乘,多条路径相加

先看单个隐藏单元:

a=w1x+b1,h=ReLU(a),z=w2h+b2a=w_1x+b_1,\qquad h=\operatorname{ReLU}(a),\qquad z=w_2h+b_2

如果已经知道后面传来的 L/z\partial L/\partial z,那么:

Lw1=Lzzhhaaw1\frac{\partial L}{\partial w_1} =\frac{\partial L}{\partial z} \frac{\partial z}{\partial h} \frac{\partial h}{\partial a} \frac{\partial a}{\partial w_1}

也就是:

Lw1=Lzw2ReLU(a)x\frac{\partial L}{\partial w_1} =\frac{\partial L}{\partial z}\,w_2\,\operatorname{ReLU}'(a)\,x

a>0a>0,ReLU 导数为 11a<0a<0 时为 00a=0a=0 处不可导,实现时通常选 00

今天的局部练习给定 L/z=2,w2=3,x=1,a=3\partial L/\partial z=2,w_2=3,x=1,a=3,所以结果为 66。这是单独练习链式法则的上游梯度示例,不是前面那个三分类样本的 softmax 梯度。

如果同一个 hh 影响两个输出:

z1=v1h+b1,z2=v2h+b2z_1=v_1h+b_1,\qquad z_2=v_2h+b_2

那么:

Lh=Lz1v1+Lz2v2\frac{\partial L}{\partial h} =\frac{\partial L}{\partial z_1}v_1 +\frac{\partial L}{\partial z_2}v_2

练习里两条路径分别贡献 2×3=62\times3=6(1)×4=4(-1)\times4=-4,总梯度为 22。不同路径可以部分抵消。

因此反向传播的两个规则是:沿路径相乘,多条路径汇总时相加。

10. 今天最有收获的地方:反向传播为什么用转置?

前向是:

z=W2h+b2\mathbf z=W_2\mathbf h+\mathbf b_2

gz=L/z=py\mathbf g_z=\partial L/\partial\mathbf z=\mathbf p-\mathbf y。传回隐藏层的梯度是:

gh=W2gz\boxed{\mathbf g_h=W_2^\top\mathbf g_z}

形状检查:

W24×3gz3×1=gh4×1\underbrace{W_2^\top}_{4\times3} \underbrace{\mathbf g_z}_{3\times1} =\underbrace{\mathbf g_h}_{4\times1}

但只说“为了维度能乘”还不够。真正的原因要看一个隐藏单元 hjh_j

Lhj=i=13W2,ijLzi\frac{\partial L}{\partial h_j} =\sum_{i=1}^{3}W_{2,ij}\frac{\partial L}{\partial z_i}

hjh_j 连到三个输出,三条连接的权重在 W2W_2 的第 jj 列。我们需要用这一列与输出梯度逐项相乘再求和。

转置把这列变成一行,就可以用矩阵乘法一次性完成所有隐藏单元的汇总。

前向时,每行权重收集输入,算一个输出;反向时,每列权重收集各输出对同一个输入的梯度贡献。

这不是求逆,也不是把前向计算倒着解回原始输入。矩阵甚至不是方阵。我们计算的是 loss 对中间量有多敏感。

11. 梯度经过 ReLU:对应位置相乘

还需要从 h\mathbf h 传到激活前的 a\mathbf a

ga=ghReLU(a)\boxed{\mathbf g_a=\mathbf g_h\odot\operatorname{ReLU}'(\mathbf a)}

\odot 是对应位置相乘,不是矩阵乘法。

今天的另一个局部练习给定:

a=[2132],gh=[0.50.20.80.4]\mathbf a=\begin{bmatrix}2\\-1\\3\\-2\end{bmatrix}, \qquad \mathbf g_h=\begin{bmatrix}0.5\\-0.2\\-0.8\\0.4\end{bmatrix}

于是:

ga=[0.50.20.80.4][1010]=[0.500.80]\mathbf g_a= \begin{bmatrix}0.5\\-0.2\\-0.8\\0.4\end{bmatrix} \odot\begin{bmatrix}1\\0\\1\\0\end{bmatrix} =\begin{bmatrix}0.5\\0\\-0.8\\0\end{bmatrix}

第二、四个单元激活前为负,这个样本在这里的梯度被截成零。不是说这些参数永远不会改变:其他样本可能激活它们;带动量、正则化等更新也不能只凭当前这一项判断。

12. 最后怎么得到第一层的权重梯度?

因为:

ai=jW1,ijxj+b1,ia_i=\sum_j W_{1,ij}x_j+b_{1,i}

所以:

LW1,ij=ga,ixj,Lb1,i=ga,i\frac{\partial L}{\partial W_{1,ij}}=g_{a,i}x_j, \qquad \frac{\partial L}{\partial b_{1,i}}=g_{a,i}

给定输入:

x=[211]\mathbf x=\begin{bmatrix}2\\1\\-1\end{bmatrix}

第一个隐藏单元的权重梯度是 0.5[2,1,1]=[1,0.5,0.5]0.5[2,1,-1]=[1,0.5,-0.5]

第三个是 −1.6、−0.8、0.8 吗?

对,0.8[2,1,1]=[1.6,0.8,0.8]-0.8[2,1,-1]=[-1.6,-0.8,0.8]。四行放在一起:

LW1=gax=[10.50.50001.60.80.8000]\boxed{\frac{\partial L}{\partial W_1}=\mathbf g_a\mathbf x^\top} =\begin{bmatrix} 1&0.5&-0.5\\ 0&0&0\\ -1.6&-0.8&0.8\\ 0&0&0 \end{bmatrix}

形状是 (4×1)(1×3)=4×3(4\times1)(1\times3)=4\times3,和 W1W_1 一样。这种列向量乘行向量叫外积。

这里的转置和前面用途不同:

  • W2gzW_2^\top\mathbf g_z:汇总不同输出路径,得到对隐藏输出的梯度。
  • gax\mathbf g_a\mathbf x^\top:把每个隐藏单元的梯度分别乘每个输入,得到每条连接的权重梯度。

13. 算出了梯度,不等于更新了参数

还要用之前那个 1 − 学习率 × 梯度更新参数。

操作理解对了,但 11 只是之前例子的初始权重。通用公式是:

θ=θηLθ\theta_{\text{新}}=\theta_{\text{旧}}-\eta\frac{\partial L}{\partial\theta}

还有一个关键区别:h\mathbf ha\mathbf a 是计算出来的中间结果,不是直接学习的参数。算出 gh\mathbf g_h 后,要继续求 W1,b1W_1,\mathbf b_1 的梯度,再更新参数。下一次前向计算会重新算出隐藏层结果。

对于这里的网络,学习的是 W1,b1,W2,b2W_1,\mathbf b_1,W_2,\mathbf b_2

反向传播负责求梯度,梯度下降负责使用梯度更新参数。 一次普通训练 step 应先用同一组前向参数算完所有梯度,再统一更新,不要先改掉 W2W_2,再用新的 W2W_2 计算这次的 gh\mathbf g_h

14. 完整公式放在一起,复习时可以逐行解释

这里补齐输出层参数梯度,它和第一层的“梯度乘输入”是同样的规则;输出层的输入是 h\mathbf h

前向:算预测和 loss

a=W1x+b1h=ReLU(a)z=W2h+b2p=softmax(z)L=iyilnpi\begin{aligned} \mathbf a&=W_1\mathbf x+\mathbf b_1\\ \mathbf h&=\operatorname{ReLU}(\mathbf a)\\ \mathbf z&=W_2\mathbf h+\mathbf b_2\\ \mathbf p&=\operatorname{softmax}(\mathbf z)\\ L&=-\sum_i y_i\ln p_i \end{aligned}

反向:算中间量和参数的梯度

gz=pyW2L=gzhb2L=gzgh=W2gzga=ghReLU(a)W1L=gaxb1L=ga\begin{aligned} \mathbf g_z&=\mathbf p-\mathbf y\\ \nabla_{W_2}L&=\mathbf g_z\mathbf h^\top\\ \nabla_{\mathbf b_2}L&=\mathbf g_z\\ \mathbf g_h&=W_2^\top\mathbf g_z\\ \mathbf g_a&=\mathbf g_h\odot\operatorname{ReLU}'(\mathbf a)\\ \nabla_{W_1}L&=\mathbf g_a\mathbf x^\top\\ \nabla_{\mathbf b_1}L&=\mathbf g_a \end{aligned}

更新:每个参数减去学习率乘自己的梯度

WWηWL,bbηbL,{1,2}W_\ell\leftarrow W_\ell-\eta\nabla_{W_\ell}L, \qquad \mathbf b_\ell\leftarrow\mathbf b_\ell-\eta\nabla_{\mathbf b_\ell}L, \quad\ell\in\{1,2\}

对于 batch 平均 loss,把各样本对同一参数的梯度求平均,再更新。所有样本都要基于这次更新前的参数计算。

15. 我现在学到哪儿了,以及怎么复习

今天初步走通的是“一个 ReLU 隐藏层 + softmax 多分类输出”的 MLP。能手算局部例子、理解梯度路径和形状,但还没有独立完成一个全网络的数值计算或代码训练。

复习时可以先遮住答案,问自己:

  1. 三个类别为什么是一个单样本 loss,而不是三个独立 loss?
  2. 能不能从 lnp正确类别-\ln p_{\text{正确类别}} 推出 py\mathbf p-\mathbf y
  3. W2W_2 的一列代表什么,为什么反向要用它来汇总?
  4. ReLU 截掉的是哪个中间量的梯度?
  5. 为什么权重梯度是“传来的梯度乘这一层的输入”?
  6. gh\mathbf g_h 算出来以后,为什么还不能直接说参数已经更新?

把这些解释清楚,再自己算一个完整例子,比只认得公式更能检验理解。后面再接词向量时,就能继续问:输入向量从哪里来,它本身能不能也通过梯度学习?

对应课件

来源为课程 Lecture3_DeepLearning_Background.pdf,页码按 PDF 阅读器计数,封面是第 1 页。

页码对应内容
17–20多分类、one-hot、类别分数和 softmax
22–24非线性与为什么需要激活函数
27–38多层网络、层的记号和前向计算
39–42Loss、前向与反向传播、链式法则
44–60分层计算和传播梯度

本文的 ReLU 数值例子、softmax 交叉熵推导和 W1,W2W_1,W_2 记号来自今天的补充讲解,并非课件逐字转录。今天上传的 Lecture 5 是 Sequence Modeling;本次先补齐理解它所需的 MLP 基础,还没有开始 CNN、RNN、LSTM 和 GRU。

ZB

Zhanbo Chen

Java Backend & AI Agent Developer

Back to home
Comments