• 首页
  • 博客
  • 留言墙

动态更新

喜欢我的内容的话不妨订阅支持一下 🫶
加入其他 2 位订阅者,随缘更新,欢迎订阅🥰。

首页博客留言墙

© 2026 async. fork自:GitHub

总浏览量 5.3万
最近访客来自 CN🇨🇳
  • 神经网路架构
  • 从线性到非线性
  • 激活函数
  • Sigmoid 函数
  • ReLU函数
  • Tanh函数
  • 神经科学启发
  • 反向传播
  • 链式法则
  • 常见门单元梯度行为
  • 向量化反向传播
【斯坦福CS231n 学习笔记2】神经网络与反向传播

神经网路架构

从线性到非线性

之前提到的线性分类器 f=Wxf=Wxf=Wx 虽然简单,但是其无法解决非线性可分问题,而通过一个非线性特征变换,例如将 (x,y)(x,y)(x,y) 映射到 (r,θ)(r,\theta)(r,θ)这样的空间,原本线性不可分的点可能变得线性可分。

相关文章

【斯坦福CS231n 学习笔记13】Robot Learning
2025/04/23
算法, cs231n

【斯坦福CS231n 学习笔记2】神经网络与反向传播

CS231n Lecture 4的笔记

302次点击7分钟阅读
通过映射让原本不可分变为可分

神经网络要做的事情就是“学习这类可用的中间表示”,而不是手工设计特征变换。以两层网络为例:
双层神经网络的数学表达为:

f=W2max(0,W1x)f=W_{2}max(0,W_{1}x) f=W2​max(0,W1​x)
  • x∈RDx \in \mathbb{R}^Dx∈RD:输入向量。
  • W1∈RH×DW_{1} \in \mathbb{R}^{H\times D}W1​∈RH×D:第一层权重,将输入变换到隐藏层空间。
  • max⁡(0,⋅)\max(0,\cdot)max(0,⋅):非线性激活函数(此处为 ReLU)。
  • W2∈RC×HW_{2} \in \mathbb{R}^{C\times H}W2​∈RC×H:第二层权重,负责将隐藏层映射到输出类别分数。

如果去掉了中间的非线性函数,网络就将退化到线性分类器:

f=W2W1x=(W2W1)x=Wnewxf = W_{2}W_{1}x=(W_{2}W_{1})x=W_{new}x f=W2​W1​x=(W2​W1​)x=Wnew​x

这意味着无论叠加多少层线性变化,其表达能力上都等同于单层的线性变换,即无法学习复杂的曲线边界,永远都只能画出一条“直线”。所以非线性激活函数是深度神经网络有效性的关键,在每一层线性变换后,通过强行插入一个非线性函数来引入非线性因素,使得深层网络能够逼近任意复杂的函数。
此处的神经网络更准确地只是全连接网络/MLP,而所谓的"2-layer net"通常是 1个隐藏层,"3-layer net"是 2 个隐藏层。

神经网络架构

激活函数

理解激活函数的关键在于理解其导数(梯度)性质。

Sigmoid 函数

早期神经网络最常用的函数,模拟生物神经元的“全有或全无”特性。

σ(x)=11+e−x\sigma(x) = \frac{1}{1+e^{-x}}σ(x)=1+e−x1​

其图像为:

Sigmoid函数

作用是将输入压缩到 (0,1)(0,1)(0,1) 区间。
但是也有其缺陷:当输入的 xxx 非常大或非常小时,曲线变得极其平缓,近乎水平,在数学上这意味这局部梯度 ∂σ∂x≈0\frac{\partial \sigma}{\partial x} ≈0∂x∂σ​≈0,在反向传播中,梯度是相乘的,如果每一层都乘以一个接近 0 的数,传递到浅层的梯度就会变成 0,网络前端的权重得不到更新从而导致训练停止,即梯度消失问题。并且由于 Sigmoid 的输出恒为正数,这意味着下一层神经元的输入恒为正数,会导致关于权重 WWW 的梯度要么全为正,要么全为负,这限制了参数更新的方向,使得收敛的路线呈现“之”字形,效率低下。此外,exe^xex 是指数运算,比简单的加/乘运算消耗更多的 CPU/GPU 周期。

ReLU函数

最常用的深度学习激活函数。其公式为

f(x)=max⁡(0,x)f(x)=\max(0,x)f(x)=max(0,x)

图像为:

ReLU函数

其优点是不饱和(在 x>0x > 0x>0 的区域,梯度恒为 1。这意味着无论输入有多大,梯度都不会消失,极大地加速了随机梯度下降的收敛速度),计算极简(只需要计算 x>0x > 0x>0,无任何指数运算)。

但是也存在 Dead ReLU 问题:在 x<0x<0x<0 的区域,梯度恒为 0, 如果某个神经元在一次权重更新后,使得对于所有训练数据其输入都小于 0,那么这个神经元就彻底“死”了。梯度永远是 0,权重永远不会再更新。为此也出现了很多 ReLU 的变种来解决这个问题:

激活函数

Tanh函数

解决了零中心问题,但是依然存在梯度消失。

神经科学启发

神经网络神经元

虽然神经网络受到生物神经元启发,但是也不要过分依赖这种类比。人工神经元是非常粗糙的数学抽象,真正的生物神经元具有更加复杂的时序脉冲特性和不同的非线性机制。

反向传播

反向传播是计算梯度的递归算法,为了计算任意复杂函数的梯度,将函数分解为一系列基本操作,形成有向无环图:

反向传播
  • 前向传播:计算并存储每个节点的输出值。
  • 反向传播:从最后的目标函数开始,递归计算每个节点关于输入的梯度。

链式法则

对于图中的任意节点 f(x,y)f(x,y)f(x,y),主要关注三个量:

  • 上游梯度 ∂L∂f\frac{\partial L}{\partial f}∂f∂L​:从网络后端传回的,表示最终 Loss 对该节点输出的敏感度。
  • 局部梯度 ∂f∂x\frac{\partial f}{\partial x}∂x∂f​,∂f∂y\frac{\partial f}{\partial y}∂y∂f​:表示该节点当前的运算对输入的敏感度。
  • 下游梯度 ∂L∂x\frac{\partial L}{\partial x}∂x∂L​:需要的计算结果。

反向传播本质上就是链式法则的递归调用,假设 LLL 是最终的 Loss,要计算其对某个中间变量 xxx 的梯度:

L=f(q),q=g(x)  ⟹  ∂L∂x=∂L∂q⋅∂q∂xL = f(q), \quad q = g(x) \implies \frac{\partial L}{\partial x} = \frac{\partial L}{\partial q} \cdot \frac{\partial q}{\partial x}L=f(q),q=g(x)⟹∂x∂L​=∂q∂L​⋅∂x∂q​

常见门单元梯度行为

  • 加法门:梯度分发器,将上游梯度原封不动地赋值给所有输入分支。
f=x+y  ⟹  ∂f∂x=1,∂f∂y=1f=x+y\implies \frac{\partial f}{\partial x}=1, \frac{\partial f}{\partial y}=1 f=x+y⟹∂x∂f​=1,∂y∂f​=1
  • 乘法门:梯度交换器,xxx 的梯度会被放大 yyy倍,这揭示了需要进行数据预处理的原因,输入数据量级过大会导致梯度爆炸。
f=xy  ⟹  ∂f∂x=y,∂f∂y=xf=xy \implies \frac{\partial f}{\partial x}=y, \frac{\partial f}{\partial y}=xf=xy⟹∂x∂f​=y,∂y∂f​=x
  • 最大值门:梯度路由器,梯度只流向值较大的那个输入,另一个输入的梯度为 0。
f=max(x,y)f=max(x,y)f=max(x,y)
常见门单元梯度行为

向量化反向传播

当输入的 xxx 是向量或矩阵时,梯度计算涉及到雅可比矩阵,如果 x∈Rn,y∈Rmx \in \mathbb{R}^n,y \in\mathbb{R}^mx∈Rn,y∈Rm, 则 ∂y∂x\frac{\partial y}{\partial x}∂x∂y​ 是一个 m×nm\times nm×n 的雅可比矩阵。现实是从不会显式计算并存储雅可比矩阵,而是直接推导矩阵形式的梯度公式。
设 Y=WXY=WXY=WX,其中 LLL 为标量损失函数,已知上游梯度 ∂L∂Y\frac{\partial L}{\partial Y}∂Y∂L​,则有

∂L∂W=∂L∂Y⋅XT∂L∂X=WT⋅∂L∂Y\begin{aligned} \frac{\partial L}{\partial W} &= \frac{\partial L}{\partial Y} \cdot X^{T} \\ \frac{\partial L}{\partial X} &= W^{T} \cdot \frac{\partial L}{\partial Y} \end{aligned}∂W∂L​∂X∂L​​=∂Y∂L​⋅XT=WT⋅∂Y∂L​​

这是实现神经网络层的核心数学依据:权重的梯度等于“上游梯度”与“层输入转置”的矩阵乘积。

参考如下:

https://cs231n.stanford.edu/index.html

【斯坦福CS231n 学习笔记13】Robot Learning

2025/06/07算法, cs231n37341分钟阅读
【斯坦福CS231n 学习笔记12】Vision and Language

【斯坦福CS231n 学习笔记12】Vision and Language

2025/06/02cs231n, 算法39731分钟阅读
【斯坦福CS231n 学习笔记11】3D Vision

【斯坦福CS231n 学习笔记11】3D Vision

2025/06/01算法, cs231n39848分钟阅读