深度学习基础:从感知机到神经网络
很多人学深度学习,一上来就被”张量""反向传播""梯度”劝退。其实这些概念都有一个朴素的生活原型。这篇我们把神经网络拆成”积木”,从最简单的感知机一路搭到 CNN、RNN,为后面理解 Transformer 和大模型铺路。
从感知机说起:一个会”投票”的神经元
1958 年 Rosenblatt 提出感知机(Perceptron)。它的直觉非常简单:把若干输入做加权求和,结果超过阈值就输出 1(“通过”),否则输出 0(“否决”)。
类比招聘:几位面试官各自给候选人打分(权重不同),总分过线就发 offer。写成式子就是:
output = 1 如果 (w1·x1 + w2·x2 + ... + b) > 0
output = 0 否则
单个感知机只能解决”线性可分”的问题(比如”与""或”逻辑),却学不了”异或”这类需要曲线分割的任务。突破的办法有两个:把很多感知机叠成多层网络,并引入非线性的激活函数——这便是现代神经网络的起点。
神经元与激活函数:给网络”非线性”能力
现代神经元 = 线性加权 + 激活函数。激活函数决定”信号要不要往下传、传多少”。如果网络全是线性层,无论叠多厚都等价于一层,永远表达不了曲线。常用四种激活函数:
| 激活函数 | 公式 | 输出范围 | 典型适用场景 |
|---|---|---|---|
| Sigmoid | 1 / (1 + e^-x) | (0, 1) | 二分类输出层、门控机制 |
| Tanh | (e^x - e^-x) / (e^x + e^-x) | (-1, 1) | 隐藏层(输出零中心) |
| ReLU | max(0, x) | [0, +∞) | 隐藏层默认选择,缓解梯度消失 |
| Softmax | e^xi / Σ e^xj | (0,1) 且和为 1 | 多分类输出层,给出概率分布 |
为什么需要它们?ReLU 因为计算简单、稀疏激活、缓解梯度消失,成为深层网络隐藏层的事实标准;Softmax 则在输出层把一组分数归一化成”各类概率之和正好为 1”,方便做分类决策。
前向传播:数据如何”流过”网络
前向传播(Forward Propagation)就是:输入数据从第一层进入,逐层做”加权求和 + 激活”,直到输出层得到预测。每个神经元的输出都是下一层的输入。
import numpy as np
def forward(x, W1, b1, W2, b2):
z1 = x @ W1 + b1 # 第一层线性变换
a1 = np.maximum(0, z1) # ReLU 激活
z2 = a1 @ W2 + b2 # 第二层线性变换
# softmax 归一化为概率
exp_z2 = np.exp(z2)
p = exp_z2 / np.sum(exp_z2, axis=1, keepdims=True)
return p # 各类别概率
前向传播本身并不”学习”,它只是把当前参数下的预测算出来。真正的学习发生在下一步。
损失函数:模型怎么知道”学得好不好”
模型需要一把”尺子”来衡量预测与真实标签的差距,这就是损失函数(Loss)。常见两类:
- 回归任务用均方误差 MSE:Loss = (1/n) · Σ(ŷ - y)²
- 分类任务用交叉熵(Cross-Entropy):预测越偏离真实标签,损失越大
训练的”为什么学习”就落在损失上:模型的全部目标,就是找到一组参数,让训练集上的平均损失尽可能小。据 Goodfellow 等人在《Deep Learning》(MIT Press, 2016)中的定义,深度学习本质是把”可微的损失函数 + 参数化网络”用梯度法优化(见 deeplearningbook.org 第 5、8 章)。
反向传播:从后往前算梯度
前向算出了损失,下一步要知道”每个参数该往哪个方向调、调多少”。反向传播(Backpropagation)就是把链式法则(Chain Rule)从输出层倒着算回每一层,高效地求出损失对每一个参数的梯度。
直觉上分三步:
- 输出层先算”预测相对真实的误差”;
- 用链式法则把这个误差往每一层、每一个权重拆解,得到”这个权重对总误差负了多少责任”;
- 拿梯度去更新参数。
不必手推完整公式,关键是理解”误差从后往前传、梯度逐层分配”这个方向。
# 梯度下降核心循环(伪代码)
for epoch in range(epochs):
p = forward(X, W1, b1, W2, b2) # 前向
loss = cross_entropy(p, y) # 算损失
grads = backward(loss) # 反向:链式法则求梯度
W1 -= lr * grads['W1'] # 沿负梯度更新(lr = 学习率)
b1 -= lr * grads['b1']
为什么”深”比”宽”更有用
一个经典问题:同样多的参数,是把网络做宽(单层很多神经元)还是做深(多层堆叠)更好?实践表明”深”更优:
- 深层网络能逐级抽取特征:早期层学边缘/纹理,中层学部件,高层学语义(Goodfellow 等, 第 5 章);
- 深层能以更少参数表达同样复杂的函数(深度带来指数级的表达增益);
- 这种层级组合,正是它擅长图像、语言等非结构化数据的原因。
CNN:让网络”看懂”图像
卷积神经网络(CNN)专为网格数据(图像)设计,核心是两个操作:
- 卷积(Convolution):用小滤波器在图上滑动,提取局部特征,且权重共享——参数量远小于全连接;
- 池化(Pooling):把相邻区域压缩成一个数,降低分辨率、增强平移不变性。
CNN 的”局部感受野 + 权值共享”让它天然适合视觉任务。Stanford CS231n(cs231n.stanford.edu)系统讲授了 CNN 与现代视觉识别,是公认的高质量公开课。
RNN:处理序列的”带记忆”网络
循环神经网络(RNN)引入隐藏状态 h,把上一步的信息带入下一步,从而处理文本、语音等序列:
h_t = f(W·x_t + U·h_{t-1} + b)
但 RNN 有两个老问题:长序列下梯度消失/爆炸,导致远距离信息记不住;且只能串行计算,难以并行。LSTM/GRU 用门控缓解遗忘,却没解决并行瓶颈——这正是 Transformer 登场的历史背景。
小结
- 感知机是最简单的神经元,叠加 + 非线性激活才构成真正的神经网络。
- 激活函数给网络非线性:ReLU 用于隐藏层,Softmax 用于多分类输出层。
- 前向传播算预测,损失函数衡量好坏,反向传播(链式法则)算梯度,梯度下降更新参数。
- “深”带来层级特征与更高表达效率,是深度学习强大的关键。
- CNN 靠卷积 + 池化擅长视觉;RNN 靠隐藏状态处理序列,但有并行与长程依赖短板。
- 下一篇我们将看到 Transformer 如何绕过 RNN 的瓶颈,成为现代大模型的基石。
参考来源
- Goodfellow, I., Bengio, Y., Courville, A. Deep Learning. MIT Press, 2016. https://www.deeplearningbook.org
- Stanford CS231n: Deep Learning for Computer Vision. https://cs231n.stanford.edu
- Rosenblatt, F. The Perceptron: A Probabilistic Model for Information Storage and Retrieval in the Brain. Psychological Review, 1958.
- Vaswani, A., Shazeer, N., Parmar, N., et al. Attention Is All You Need. arXiv:1706.03762, 2017. https://arxiv.org/abs/1706.03762