《人工智能学习笔记》系列第 4 篇,共 9 篇。

本章导读 这一章是一条进化链:感知机解决"能不能分",全连接解决"能不能拟合复杂函数",CNN 解决"图像怎么省着算",RNN/LSTM 解决"序列怎么记住前面",Transformer 解决"长距离依赖怎么并行算"。今天的大模型,就是这条链的终点站。

读完你应该能回答:① 单层感知机为什么连异或都做不了?② 卷积相比全连接省在哪、代价是什么?③ 注意力相比 RNN 的根本优势是什么?

本章骨架

小节一句话核心
3.1 感知机线性分类器;异或问题暴露了"没有隐藏层"的墙
3.2 全连接与训练前向 → 损失 → 反向 → 更新;激活函数引入非线性,正则化防过拟合
3.3 CNN卷积核 = 特征提取器,权值共享 + 池化大幅降参数量
3.4 RNN / LSTM隐状态携带历史;LSTM 用门控和"传送带"缓解长依赖
3.5 Transformer全靠注意力,可并行、能建模长距离;大模型的骨架
3.6 大模型架构编码器/解码器/编解码三种范式,与主流开源模型对号
3.7 实验不借框架手写三层全连接,把反向传播亲手推一遍

这一章的线索是一条演进链:感知机 → 全连接网络 → 卷积网络 → 循环网络 → Transformer → 大模型。每一步都是在解决上一步暴露的短板,下面按这个逻辑展开。

3.1 感知机

先看传统机器学习卡在哪

传统流程:定义问题 → 收集数据 → 数据清洗 → 特征提取与特征选择 → 送入算法做识别/预测。

卡点在第三、四步。比如分苹果和桃子,人要自己想到"看形状、看颜色"这些特征;数据一复杂,谁也说不清该提哪些特征、哪些有用。深度学习的出发点就是把这一步交给机器自动完成。

感知机的结构

输入 x1,x2x_1, x_2x1​,x2​ 各乘一个权重 w1,w2w_1, w_2w1​,w2​,加权求和后与阈值 θ\thetaθ 比较:

  • 小于阈值 → 输出 −1-1−1
  • 大于阈值 → 输出 +1+1+1

这就是一个二分类器。权重的直观理解:像电阻。电阻大,电流(这个特征的影响)通过的少;电阻小,通过的多。

感知机:接收多个输入、输出一个信号

用感知机模拟逻辑门

本节逻辑门改用 0/1 输出编码(将前述 −1 映射为 0)。取 w1=w2=0.5w_1 = w_2 = 0.5w1​=w2​=0.5、θ=0.7\theta = 0.7θ=0.7:

x₁x₂Σxᵢwᵢ输出
0000(不通)
010.50
100.50
111.01

这正是与门。把输出取反得到与非门;阈值调小则得到或门。

异或问题:单层感知机的墙

异或要求"两个输入相同输出 0、不同输出 1",四个点在平面上呈对角分布,一条直线分不开——单层感知机只能做线性划分,做不到。

解法是把感知机堆叠起来:第一层并排两个感知机——与非门(s1 = ¬(x1∧x2))与或门(s2 = x1∨x2),第二层再用与门把两个中间结果合成 y = s1∧s2。代一遍就知道它对:00→(1,0)→0,01→(1,1)→1,10→(1,1)→1,11→(0,1)→0。这就是两层感知机,划分边界从一条直线变成了折线。

用与门、与非门、或门搭出异或门

历史意义:当年感知机被证明连异或都做不了,深度学习进入停滞期;后来数学家把感知机组合起来,发现能产生非线性能力,才有了后面的发展。

非线性能力从哪来

两件事同时起作用:

  1. 层数增加(单层 → 中间加一层);

非线性能力来自层数与激活函数

  1. 非线性激活函数(把输出做阶跃变换:小于 0 取 −1-1−1,大于 0 取 +1+1+1)。

只加层不做非线性变换,多层依然等价于一层线性变换;只加激活不加深,也拟合不了复杂边界。

3.2 全连接神经网络及训练流程

从感知机到全连接

在两层感知机上继续扩展两个维度:输入/隐藏层神经元个数变多、层数变多。每条连接线上都有一个独立的权重。

前馈神经网络结构

权重记号 w143w^{43}_{1}w143​:下标是层号(这组权重挂在哪一层),上标是连接的两端——前一层第 3 个单元 → 后一层第 4 个单元。所以 w143w^{43}_{1}w143​ 读作「第 1 层、从 3 号连到 4 号」。

每个神经元做的事:前一层所有输出加权求和 → 过激活函数 → 作为下一层的输入。

(这种全连接的、信息单向从输入流向输出的结构就是深度神经网络 DNN,也叫多层感知机 MLP;「深度」指隐藏层多,「全连接」指相邻两层任意两个神经元之间都有权重。)

一次前向计算

层数越多,非线性越强,能拟合的数据越复杂。 理论上,只加宽不加深(单隐层 + 足够多节点)也能拟合任意复杂函数,但那样特征提取能力反而变弱,所以实践中是加深而不只是加宽。

隐藏层数对拟合能力的影响

四种常见激活函数

函数形式值域特点
阶跃函数x > 0 → 1,x < 0 → −1{−1, 1}最原始,不连续、不可导
Sigmoid1 / (1 + e^(−x))(0, 1)把任意值压到 0~1,两端导数趋 0
tanh—(−1, 1)同上,值域对称
ReLU(修正线性单元)x > 0 取 x,否则取 0[0, +∞)当前主流

ReLU 为什么主流:正区间就是 y=xy=xy=x,求导恒为 1,计算极简——模型越大对算力越敏感,这一步省下的就是实打实的训练时间。

ReLU:正区间保持线性,负区间归零
缺点是负区间梯度为 0(神经元"死掉"),所以有 Leaky ReLU 等改进版。

举个计算例子:输入 [0.5, -3] 过 ReLU 变成 [0.5, 0]——0.5 原样保留(线性区),-3 被压成 0(非线性发生在这里)。

训练:前向 → 损失 → 反向 → 更新

  1. 前向传播:数据逐层加权求和 + 激活,得到预测值。

  2. 算损失:预测与真实值的差距。两种常用:

    • 均方误差 MSE:12(y−y^)2\frac{1}{2}(y - \hat{y})^221​(y−y^​)2,回归问题;
    • 交叉熵:−∑ylog⁡y^-\sum y \log \hat{y}−∑ylogy^​,分类问题。
  3. 反向传播:用链式法则从最后一层往前求每个 www 的偏导。求 w1w_1w1​ 的梯度要把后面每一层的导数一路乘过来;层数多,就乘得多。

  4. 梯度下降更新:w新=w旧−η⋅∇Lw_{新} = w_{旧} - \eta \cdot \nabla Lw新​=w旧​−η⋅∇L。η\etaη 是学习率,通常取较小正值,需按优化器、损失尺度与曲率调整;没有普适的小于 1 上界。

三种梯度下降方式:全批量(所有数据算一个 loss 再更新一次)、随机 SGD(每来一条数据更新一次)、小批量 mini-batch(每次 5/10/20 条)。实践中小批量最常用。

网络训练流程:前向 → 损失 → 反向 → 更新

梯度消失与梯度爆炸

链式法则是连乘,因子既包括激活函数导数,也包括权重。若沿途持续缩小梯度,深层连乘后可能趋于 0 → 梯度消失,参数几乎不更新;若持续放大,则可能出现梯度爆炸,使更新不稳定。

这也解释了 ReLU 的价值:正区间导数恒为 1,激活函数本身不额外缩放梯度,可缓解饱和激活造成的梯度消失;网络仍可能因权重连乘等因素发生梯度消失或爆炸。

优化器

  • 动量(Momentum):结合历史动量修正方向,少走弯路;
  • Adam:最常用,同时维护 mtm_tmt​(一阶矩)和 vtv_tvt​(二阶矩)两部分,方向准、收敛快,代价是占用显存/算力更多。

正则化:防过拟合

过拟合的典型症状:训练集损失一路下降,验证集损失先降后升。看到拐点就该停——这叫早停。

其他手段:

  • L1 / L2 正则:在损失函数后加惩罚项,把参数约束在一个范围内;
  • Dropout:训练时随机让一部分神经元失活,等于削弱拟合能力、留出余量,让模型"稍微含糊一点",反而对新数据更稳。

3.3 卷积神经网络(CNN)

CNN 的典型结构

全连接的问题

全连接层里,后一层每个神经元都受前一层所有神经元影响。放到图像上:一张图几百万像素,参数量爆炸;而且不符合直觉——认出一个朋友,往往只需要看身高、走姿、穿着几个特征,不需要把看到的每个像素都送进大脑。

卷积核就是特征提取器

卷积核(滤波器)是一个小矩阵,在图像上滑动,每次覆盖一块区域,对应位置逐元素相乘再求和,得到一个值;滑完一圈得到一张特征图。

卷积核的参数就是权重 www,图像像素值就是输入 xxx——和全连接层的乘加本质一样,只是局部连接 + 权重共享。

单卷积核的一次滑动计算

多层堆叠:浅层提颜色、边缘,深层提形状、物体部件。

多通道:彩色图是 RGB 三个通道,输入是三层。每个通道配一个卷积核(核数必须与输入通道数一致),三个核的结果相加得到一张特征图。

池化层

两种:最大池化(取区域内最大值,最常用)、平均池化。

池化层:降维与平移不变

两个作用:

  1. 降维:4×44\times44×4 的图,按 2×22\times22×2 池化变成 2×22\times22×2——边长各减半,元素数与后续计算量降到约 1/4;
  2. 平移不变性:鸟嘴这个特征原本在左上角,鸟动了一下跑到旁边,只要还在同一个池化窗口内,最大值仍然是同一个数,依然识别得出。

完整流程

卷积 → 池化 → 卷积 → 池化 → …… → 把特征图拉平成一维 → 接全连接层 → softmax 输出类别概率 → 反向传播优化参数。

3.4 循环神经网络(RNN)与 LSTM

为什么需要 RNN

CNN 处理的图像没有时序。文本有:“今天下雨了,出门要带___”——前面几个字直接影响后面该输出什么。RNN 就是为了把前一时刻的信息带进当前时刻的判断。

RNN 结构

ttt 时刻:输入 xtx_txt​ 乘 UUU 得到隐状态的一部分,再加上上一时刻传来的隐状态(乘 WWW),得到当前隐状态 hth_tht​;hth_tht​ 一路乘 VVV 输出,一路继续往后传。

所以每个输出受两样东西影响:当前输入 + 历史记忆。

RNN 的循环结构与按时间展开

BPTT 与长依赖问题

RNN 的反向传播叫 BPTT(沿时间反向传播),梯度要沿两个方向回流:纵向(层间)和时间轴(前后时刻)。

序列一长(几百上千字),梯度沿时间连乘同样会消失——第 1000 个词的损失,传回第 1 个词时几乎为零。表现就是:前面的话对后面的影响越来越弱,模型记不住长距离依赖。

LSTM:加一条"传送带"

LSTM 在 RNN 的隐藏状态之外,额外维护一条细胞状态 CCC(图中绿线),像传送带一样携带重要信息;门控允许保留状态时,这条路径有助于缓解长距离梯度衰减,但不保证无损传递。

三个门(门 = sigmoid 输出 0~1 的概率,与数据相乘表示"保留多少"):

门作用计算
遗忘门决定上一时刻的 C(t−1) 里哪些信息丢掉[h(t−1), x(t)] 拼接 → sigmoid → 与 C(t−1) 相乘
输入门决定当前时刻哪些新信息写进 C拼接 → sigmoid 得选择权重;拼接 → tanh 得候选值;两者相乘后加到 CCC 上
输出门决定当前时刻输出什么sigmoid 选择权重 × tanh(C(t)) → 得 h(t) 和输出

一句话:遗忘门管旧账,输入门管新账,输出门管报账。

LSTM 的细胞状态与三个门

RNN 能做哪些任务

类型例子
一对一单个词的极性判定(进一个、出一个)
一对多看图说话(图像生成文本)
多对一一句话判断情感
多对多机器翻译、整句词性标注(逐词输出、与输入等长)

seq2seq:编码器-解码器

seq2seq 是输入一个序列、输出另一个序列(如中译英)的范式。这里的经典 RNN 编解码实现把源序列压成一个固定长度的中间向量 CCC,再从起始符逐词生成,直到终止符。

编码器-解码器:变长输入压成上下文向量 C

这种经典 RNN 实现有两个局限:

  1. CCC 长度固定——长源句的信息容易受压缩瓶颈限制;
  2. 递归串行——训练时各位置也依赖前一隐状态;自回归推理还需逐词生成。

Transformer 用注意力绕开单一定长向量瓶颈,并让编码与 teacher-forcing 训练的位置计算并行;标准自回归生成仍有逐 token 依赖。

3.5 Transformer

注意力机制

人看一张图,其实全都看到了,但注意力集中在少数关键区域。换成权重语言:每个像素都进视觉神经,但重点区域的权重高、周边的低。

计算三步:

  1. Query(查询) 与每个 Key(键) 做相似度打分(点积);
  2. 分数过 softmax 归一化成 0~1 的权重;
  3. 用权重对 Value(值) 加权求和。

注意力的三步计算

一个好记的类比是去图书馆找书:Query = 我想看漫威;Key = 每本书的编码/分类;Value = 书的内容。查出来动漫、电影类的书权重高,二战史料的权重低,最后拿到的信息主要来自前两者。

优点:参数量小、矩阵运算可整体并行、能自动弱化无关信息。

注意力可以脱离 Encoder-Decoder 单独使用

Transformer 的骨架

2017 年谷歌《Attention Is All You Need》提出。依然是编码器-解码器结构,核心替换是多头自注意力。

Transformer 整体架构

普通(交叉)注意力自注意力
Q 来自解码器同一句话自身
K/V 来自编码器同一句话自身
作用目标与源之间的对齐句内词与词的关联

自注意力的经典例子:句子里的 “it” 到底指谁?把 “it” 当成 Q,与句中每个词算注意力分数,发现与 “animal” 分数最高——模型就

自注意力示例:it 到底指向谁
"理解"了指代关系。

多头:并行做多组 Q/K/V,每组关注不同的关系(语法、指代、语义……),最后拼接。

原始 Transformer 先在输入嵌入上加入位置编码(补充顺序信息);编码器每层依次是多头自注意力 → 残差连接 + LayerNorm → 前馈全连接网络 → 残差连接 + LayerNorm。解码器多一层交叉注意力(Q 来自解码器、K/V 来自编码器)。

为什么 Transformer 统治了大模型

  1. 并行性好:编码与 teacher-forcing 训练可并行计算序列位置,不像 RNN 依赖递归隐状态;标准自回归生成仍逐 token 进行;
  2. 能处理长序列:任意两个位置直接算注意力,距离不再是障碍;
  3. 可堆叠:今天的 GPT、BERT,都是 Transformer 的变体或若干层的堆叠。

3.6 大模型基础架构

Transformer 之后,主流大模型分成三条路线:

模型取 Transformer 的哪一半训练方式擅长
GPT 系列只用解码器(带掩码的自注意力)单向:预测下一个词文本生成、对话
BERT(2018.10)只用编码器双向:遮住中间词,用前后文预测问答、分类、翻译理解
LLaMA 等解码器路线单向生成,细节上做了改造

GPT 的"大力出奇迹":把一个解码器块当作基本单元,堆 12 层(GPT-1)→ 后来几十上百层、参数量翻十几倍到近百倍。参数一多,能力就涌现出来——这条路线被验证走通了。

**MoE(混合专家,Mixture of Experts)**是另一条工程思路:

  • 常见大语言模型的稀疏 MoE 在各 MoE 层放若干个前馈(FFN)专家,分工由训练形成,不保证对应写作、代码、数学等预设领域;
  • 各层的门控网络按每个 token 的隐状态给专家打分,而非先给整条请求分类;
  • 选少数 top-k 专家计算,再将输出加权合并;其余专家不处理该 token。

结果是:参数总量极大,但推理时只激活一小部分——能力强,推理成本还可控。

MoE 混合专家:门控只调用少数专家

章末的判断题(附答案):

  • 不属于深度学习神经网络的是……(前三项属于,最后一项不属于)
  • CNN 中激活函数是必备的(对,它提供非线性)
  • CNN 比 RNN 更适合图像识别(对)
  • “Transformer 与 seq2seq 特性类似”(不能据此笼统判错)——原始 Transformer 本就是 seq2seq 编解码器;相较 RNN 实现,其编码与训练位置计算可并行,但标准自回归生成仍依赖已生成输出。

3.7 实验:不借框架,手写三层全连接网络

  • 任务:MNIST 手写数字识别(6 万训练 + 1 万测试,28×28 灰度图);
  • 约束:除 numpy、matplotlib 外不用任何深度学习框架,纯粹看清神经网络在代码层面到底做了什么;
  • 环境:本地笔记本即可(Win10 + 近几代 i5),不需要服务器。

代码流程与理论一一对应:

  1. 读数据:像素归一化到 0~1、标签转 one-hot、每张图像 flatten 成一维特征向量,批量输入保留样本轴(本实验按整图向量建模,并非全连接层只接受一维张量);
  2. 建模型:网络结构写在单独文件里;
  3. 超参数初始化;
  4. 前向传播 → 算损失 → 求梯度 → 更新参数;
  5. 反复迭代,直到训练/验证指标达标。

观察重点:训练损失持续下降,但验证准确率开始回落,是过拟合的信号(见 3.2 的“正则化:防过拟合”);测试集留作最终独立评价。

本章学习要点

  1. 感知机的本质:加权求和 + 与阈值比较 → 二分类;可模拟与门、或门、与非门。
  2. 异或问题:线性不可分,单层感知机解决不了,堆叠成多层才行。
  3. 非线性能力来自两件事同时成立:增加层数 + 使用非线性激活函数。
  4. ReLU 为何主流:正区间 y=xy=xy=x、导数恒为 1,计算简单,可缓解饱和激活造成的梯度消失,但不保证整个网络梯度稳定。
  5. 损失函数选型:回归用 MSE,分类用交叉熵。
  6. 反向传播 = 链式法则,梯度沿层连乘 → 层数过深会梯度消失/爆炸。
  7. 过拟合判据:训练集损失降、验证集损失升;对策:早停、L1/L2、Dropout。
  8. 卷积核 = 特征提取器;池化两大作用:降维 + 平移不变性;最常用最大池化。
  9. RNN 的 BPTT 沿时间连乘 → 易出现长序列梯度消失,难记远距离依赖;LSTM 靠细胞状态 + 遗忘门/输入门/输出门缓解。
  10. 经典 RNN seq2seq 的局限:单一定长中间向量有压缩瓶颈,递归隐状态限制训练并行;自回归逐词推理并非它独有。
  11. Transformer 三件套:自注意力、多头、位置编码;优势是并行 + 长距离。
  12. GPT 用解码器、BERT 用编码器;MoE 用门控网络路由到少数专家,参数大而推理省。

Logo

更多推荐