深度学习
神经网络与反向传播:通俗讲解
进阶 20 分钟 适合: 初学者 / 开发者 / 研究者
本课要点
- ▸一个神经元做的事:把输入加权求和、加上偏置,再经过一个非线性激活函数。
- ▸把神经元一层层叠起来,网络就能用简单特征组合出复杂特征;没有非线性,再多层也等价于一个线性函数。
- ▸反向传播从输出往输入方向套用链式法则,一次反向计算就得到每个权重的梯度。
- ▸现代大模型就是这种深度神经网络,只是加了注意力层,以及让超深网络能训练的残差连接和归一化。
一个神经元
人工神经元只做两件事:
- 把每个输入乘以一个权重,加起来,再加上一个偏置:
z = w₁x₁ + w₂x₂ + … + b。 - 把
z送进激活函数,例如 ReLU:max(0, z)。
权重和偏置就是训练要调整的参数(见 机器是怎么“学习”的)。单个神经元只是一条非常简单的判断规则,威力来自把很多神经元连起来。
层与深度
神经元按层排列,每一层的神经元读取上一层的输出。由输入层、一个或多个隐藏层、输出层组成的网络叫多层感知机;“深度”学习,就是隐藏层很多。
flowchart LR
subgraph IN["输入层"]
x1((x1)); x2((x2)); x3((x3))
end
subgraph H1["隐藏层 1"]
h1((h)); h2((h)); h3((h)); h4((h))
end
subgraph H2["隐藏层 2"]
g1((h)); g2((h)); g3((h))
end
subgraph OUT["输出层"]
y(("ŷ"))
end
x1 --> h1 & h2 & h3 & h4
x2 --> h1 & h2 & h3 & h4
x3 --> h1 & h2 & h3 & h4
h1 & h2 & h3 & h4 --> g1 & g2 & g3
g1 & g2 & g3 --> y深度为什么有用:每一层都能用上一层的特征组合出新特征。在图像网络里,浅层识别边缘,中间层识别纹理和部件,深层识别整个物体。在语言模型里,浅层处理词片段和语法,深层处理更抽象的含义(见 大模型内部学到了什么)。
激活函数为什么重要:纯线性层叠多少层,结果仍然只是一个线性函数,深度毫无意义。非线性让网络能逼近弯曲、复杂的关系。经典理论表明,隐藏单元足够多的网络可以逼近任何合理的函数;实践中,深网络比又宽又浅的网络效率高得多。
反向传播:分配“责任”
训练需要损失对每一个权重的梯度。对几百万个权重逐个计算,慢到不可能。反向传播(由 Rumelhart、Hinton、Williams 在 1986 年推广)一次反向扫描就能全部算出:
- 前向传播:算出输出和损失,并记住中间结果。
- 反向传播:从损失出发,逐层套用微积分的链式法则。每一层从上一层收到“我的输出变一点,损失会变多少”,再把它变成两样东西:自己权重的梯度,以及传给下一层的同样信号。
- 更新:用梯度下降更新所有权重。
flowchart LR I["输入"] -->|"前向"| L1["第 1 层"] -->|"前向"| L2["第 2 层"] -->|"前向"| O["输出 → 损失"] O -.->|"∂损失/∂输出"| L2 -.->|"反向"| L1
直观地说,反向传播就是分配责任:告诉每个权重它对误差贡献了多少。反向计算的开销大约相当于几次前向计算,这正是训练几十亿权重的网络成为可能的原因。PyTorch、JAX 等框架会自动完成这一步(自动求导);Karpathy 的 micrograd 用一百来行代码实现了它,是理解“这里没有魔法”的最好材料。
深度网络为什么后来才成功
神经网络并不新,深度学习在 2012 年前后爆发,标志是 AlexNet 在 ImageNet 比赛中大幅领先。三件事同时到位:
- 数据:大型标注数据集(ImageNet),后来是整个互联网。
- 算力:GPU 能并行完成所需的矩阵乘法(见 GPU、显存与算力)。
- 训练超深网络的技巧:ReLU 激活、更好的初始化、让信号可以跳过若干层的残差连接(He 等,2015),以及归一化层。大模型的每个 Transformer 层都用到了残差连接和归一化,原因正在于此。
通往大模型
大语言模型就是一个深度神经网络,它的层交替使用注意力(在 token 之间交换信息)和前馈网络(就是上面讲的神经元层,对每个 token 分别计算),并用反向传播在“预测下一个 token”的损失上训练。接下来读 Token 与 Embedding 和 Transformer 与注意力机制。
常见问题
神经网络和人脑一样吗?
只是粗略相似。人工神经元受生物神经元启发,但本质是简单的数学函数,用反向传播训练;目前没有证据表明大脑以同样方式学习。
激活函数是什么?
在每次加权求和之后套用的一个简单非线性函数,比如 ReLU(max(0, x))或 GELU。正是它让网络能表示弯曲、复杂的关系。
深度学习和机器学习有什么区别?
深度学习是机器学习里使用多层神经网络的那一部分。它直接从原始数据中自己学特征,而不是依赖人工设计的特征。