深度学习
在前一章中,我们了解了机器学习的基本框架。而今天,当你听到"AI"这个词时,它背后最核心的技术引擎几乎都是深度学习。从GPT到Claude,从Midjourney到Sora——深度学习的威力正在重塑整个世界。
深度学习的定义
深度学习是机器学习的一个分支,也是当今人工智能领域最具革命性的技术。它的核心思想是:通过构建多层的神经网络,让机器能够自动学习数据的层次化特征表示。如果说传统机器学习需要人工设计特征,那么深度学习则让机器自己发现特征——这就是它被称为"特征学习"或"表示学习"的原因。
深度学习的力量在于它的层次化表示能力。每一层都从前一层学习更抽象的特征,这种层层递进的学习方式,让深度网络能够理解复杂的世界。
—— 杨立昆(Yann LeCun),图灵奖得主,Meta首席AI科学家🔧 传统机器学习
需要人工设计特征(Feature Engineering)。例如识别猫:人工定义"尖耳朵"、"长胡须"等特征,再交给SVM、随机森林等算法分类。深度依赖领域专家的经验和知识。
🧠 深度学习
从原始数据中自动学习特征。输入图片像素,网络自己学会第一层检测边缘、第二层检测纹理、第三层检测形状、更高层检测语义部件。这就是"深度"的含义——层层抽象。
人工神经元与激活函数
人工神经元是神经网络的基本单元,它模拟了生物神经元的基本功能:接收信号、加权求和、通过激活函数产生输出。
其中 \(x_1 \sim x_n\) 是输入,\(w_1 \sim w_n\) 是权重,\(b\) 是偏置,\(f\) 是激活函数。
🧠 激活函数的作用
如果没有激活函数,无论网络有多少层,都等价于一个线性变换。激活函数引入非线性,让网络可以拟合任意复杂的函数。常见激活函数包括:
激活函数是神经网络中不可或缺的组成部分。它们为网络引入非线性变换,使得多层神经网络能够学习复杂的模式。本节将详细介绍最常用的激活函数,包括它们的数学表达式、图像特征、优缺点以及适用场景。
规律:早期的 Sigmoid/Tanh 追求平滑非线性 → ReLU 追求高效训练 → GELU 追求概率建模 → SwiGLU 追求门控表达能力。每一步都牺牲了一些计算效率,换来了更强的表达力或更好的训练特性。
📈 Sigmoid 函数 — "温柔的挤压器"
Sigmoid 函数将任意实数映射到 (0, 1) 区间,形状像一条平滑的 S 曲线。它的输出可以解释为"概率",因此在二分类任务中非常有用。
📈 Tanh 函数 — "零均值的 Sigmoid"
Tanh 函数将输入映射到 (-1, 1) 区间,是 Sigmoid 的"升级版"。它的输出是零均值的,这使得梯度更新更加高效,收敛速度更快。
📈 ReLU 函数 — "深度学习的主流选择"
ReLU (Rectified Linear Unit) 是目前最常用的激活函数。它的计算非常简单:当输入为正时输出输入值,当输入为负时输出0。这个简单的形式却非常有效!
📈 Leaky ReLU 函数 — "解决 Dead ReLU"
Leaky ReLU 是 ReLU 的改进版,在负区间引入一个很小的斜率(通常 α=0.01),避免神经元"死亡"。
📈 GELU 函数 — "Transformer 的选择"
GELU (Gaussian Error Linear Unit) 是 Transformer 架构中常用的激活函数。它通过概率分布来"平滑"地激活神经元,比 ReLU 更平滑,性能更好。
其中 \(\Phi(x)\) 是标准正态分布的累积分布函数 (CDF)
📈 SwiGLU 函数 — "LLM 的主流选择"
SwiGLU 是 Swish 激活函数的变体,结合了门控机制,是现代大语言模型(如 LLaMA、PaLM)的首选激活函数。
SwiGLU 属于门控线性单元(GLU)家族:用一半输入经 Swish/SiLU 激活当“门”,控制另一半“值”的通过——与下方代码 gate, value = x.chunk(2); F.silu(gate) * value 一致。LLaMA、PaLM 等主流 LLM 普遍采用。
📊 激活函数对比总览
下表总结了各种激活函数的关键特性,帮助你快速选择合适的激活函数。
| 激活函数 | 输出范围 | 计算速度 | 梯度消失 | 适用场景 |
|---|---|---|---|---|
| Sigmoid | (0, 1) | 慢 | 严重 | 二分类输出层 |
| Tanh | (-1, 1) | 慢 | 严重 | RNN 隐藏层 |
| ReLU | [0, +∞) | 极快 | 正区间无 | 通用隐藏层首选 |
| Leaky ReLU | (-∞, +∞) | 快 | 无 | 避免 Dead ReLU |
| GELU | (-0.17, +∞) | 中等 | 无 | Transformer |
| SwiGLU | (-∞, +∞) | 中等 | 无 | LLM 首选 |
🧠 激活函数速查表
实战中不需要记住每种激活函数的数学公式,只需要根据任务场景快速锁定目标。下表按推荐优先级排列:
隐藏层:不确定?闭眼选 ReLU。训练不动?换 Leaky ReLU。做 LLM?上 GELU / SwiGLU。
输出层:二分类用 Sigmoid,多分类用 Softmax,回归不加激活函数。
在深入更复杂的内容之前,我们需要掌握一种"读图"的能力。神经网络看起来像一团乱麻——密密麻麻的点和线。但实际上,它像一张地图,每一层都对应着一种抽象层次。掌握了读图方法,你就能在任何神经网络图中看懂信息是如何流动的。
如果你不会读化学分子式,你就永远不懂化学。同样,如果你看不懂神经网络的图,你就永远无法真正理解深度学习。这张图,就是你进入深度学习世界的门票。
—— 每一个深度学习者的感悟单个神经元长什么样?
想象一个小型的"投票站"。有多个选民(输入)投票决定一个议题,每个选民的票数权重不同。最后通过一个计票规则(激活函数)产生一个结果(0 或 1)。这就是神经元的本质。
🧠 神经元节点解剖图
从左到右,信号依次经过:输入 → 加权求和 → 激活函数 → 输出。每个输入有一个对应的权重,权重越大,那个输入对结果的"话语权"就越大。
▲ 单个神经元的完整解剖图:它接收多个输入,对每个输入乘以权重后求和,加上偏置,再通过一个非线性激活函数,最后输出一个值。
💡 关键理解
多层网络长什么样?
把上百个神经元连在一起,就是神经网络。每层负责不同层次的抽象——输入层读取原始数据,中间层(隐藏层)学习各种特征,输出层做出最终判断。
🕸️ 三层神经网络 — 识别手写数字"7"
这是一个极其简化的网络示意图(实际网络每层有数百到数千个神经元)。信号从左到右流动,每一层提取更抽象的特征。
▲ 信号从左向右流动:输入层的 5 个像素值经过两层隐藏层的层层变换,最终输出层给出了答案"7"。每条线的粗细代表权重大小。
🗺️ 读网络图的三要素
层(Layer)
节点(Node)
边(Edge)
🔑 总结:一张图读懂神经网络
输入层是"眼睛",读取原始数据;隐藏层是"大脑",一层层学习越来越抽象的特征;输出层是"嘴巴",说出最终判断。节点之间的连线是"神经连接",线的粗细就是权重——代表这个连接有多重要。训练模型就是调整所有连接粗细的过程。理解了这张图,你就理解了深度学习最核心的架构。
深度学习之所以能够爆炸式发展,离不开几种核心架构的突破。它们各自擅长处理不同类型的数据,共同构成了现代AI的基石。
🔗 全连接神经网络(MLP)
多层感知机(Multi-Layer Perceptron)是最基础的深度学习架构。每一层的神经元与上一层的所有神经元相连。虽然结构简单,但通用定理(Universal Approximation Theorem)证明:只要隐层神经元足够多,MLP可以逼近任何连续函数。
🖼️ 卷积神经网络(CNN)
CNN是处理图像数据的首选架构。核心思想是利用卷积核在图像上滑动,提取局部特征(边缘、纹理、形状)。再通过池化操作降低维度。经典架构包括:
- LeNet-5 (1998) — 最早的CNN之一,用于手写数字识别
- AlexNet (2012) — 用ReLU+Dropout一举夺得ImageNet冠军,开启深度学习时代
- VGGNet (2014) — 证明小卷积核(3×3)堆叠更有效
- ResNet (2015) — 引入残差连接(Skip Connection),让网络可以训练上千层,斩获ImageNet冠军
- EfficientNet (2019) — 通过复合缩放同时优化深度、宽度和分辨率
🔁 循环神经网络(RNN)及其变体
RNN是处理序列数据的经典架构。它的核心思想是保留"记忆"——当前输出不仅取决于当前输入,还取决于之前的输入序列。
- RNN — 基本循环结构,但存在梯度消失问题,难以学习长距离依赖
- LSTM (1997) — 引入门控机制(遗忘门、输入门、输出门),有效捕捉长距离依赖
- GRU (2014) — LSTM的简化版,更新门和重置门,训练更快
⚡ Transformer —— 现代AI的基石
Transformer是2017年Google论文《Attention Is All You Need>中提出的革命性架构。它完全抛弃了循环和卷积结构,转而使用自注意力机制(Self-Attention)来处理序列数据。这一设计让模型可以同时关注序列中的所有位置,完美解决长距离依赖问题。
核心组件:
自注意力机制
每个词元(Token)都可以与序列中所有其他词元交互,计算"注意力分数",从而捕获全局依赖关系。
多头注意力(Multi-Head)
并行使用多组Q/K/V,让模型在不同的"注意力头"中学习不同类型的关联模式,最后拼接融合。
前馈网络(FFN)
每个词元独立通过一个两层的全连接网络,引入非线性变换。现代LLM常用SwiGLU替代ReLU。
位置编码(PE)
Transformer本身没有顺序概念,需要加入位置编码让模型知道词元的位置。GPT使用旋转位置编码(RoPE)。
Transformer有两个核心变体:Encoder-only(如BERT,适合理解类任务)和 Decoder-only(如GPT系列,适合生成类任务)。现代LLM几乎全部采用Decoder-only架构。
神经网络不是天生聪明的——它需要"学习"。而学习的核心过程只有两步:前向传播(做一遍题)和反向传播(对答案、改方法)。配合损失函数(评分标准),这三样构成了深度学习最核心的学习机制。
前向传播(Forward Propagation)—— "做一遍题"
前向传播就是数据从输入端到输出端的单向流动。就像做菜:先把菜切好(输入层),然后下锅翻炒(隐藏层1),再加盐加糖调味(隐藏层2),最后装盘出锅(输出层)。每一步都依赖上一步的结果,一气呵成。
🍳 前向传播:从输入到输出的完整旅程
以判断"一个水果是否是苹果"为例。输入是四个特征(颜色红度、圆形度、大小、光滑度),网络通过两层隐藏层的计算,最终给出判断。
▲ 数据从左边输入,经过加权求和 → ReLU 非线性变换 → 层层传递,最终在右边得到判断结果。每一步计算都是:先加权求和再加激活函数。
每一步都是先算 \(z = W \cdot \text{输入} + b\)(加权求和加偏置),再通过 激活函数得到输出。层层叠加,就完成了从输入到输出的完整计算。
损失函数(Loss Function)—— "对答案"
前向传播给出了一个预测结果,但这个结果对不对呢?多不少?损失函数就是用来量化的:它把"预测值"和"真实值"之间的差距算成一个数字——这个数字就是"损失"(Loss)。损失越大,说明模型错得越离谱。
📊 交叉熵损失(Cross-Entropy Loss)
适用场景:分类任务(比如判断是猫还是狗,或者从 10000 个类别中选一个)。
直觉理解:假设你要赌一把,你说"这只猫有 90% 的概率是橘猫",结果它是一只黑猫——那你的"损失"会非常大。如果你说"只有 10% 是橘猫"(其实它不是),那损失就小很多。模型越自信还越错,损失越大。
📏 均方误差(MSE)
适用场景:回归任务(比如预测房价、气温——输出是一个连续的数字)。
直觉理解:你预测房价 300 万,实际是 500 万,误差 200 万。均方误差就是把所有样本的误差平方后求平均。平方使得大误差被惩罚得更重。
🏔️ 损失曲面:模型学习的"下山之旅"
想象一个山谷,山谷的最低点就是模型表现最好的状态(损失最小)。训练的过程,就是小球(模型参数)从山上滚到山谷最低点的过程。
▲ 模型训练的过程 = 从随机参数(山顶)通过梯度下降(沿着最陡方向)不断滚动到最优参数(谷底)。每一轮迭代,小球都往低处滚一步。
反向传播(Backpropagation)—— "对答案,改方法"
做完题后对答案——发现错了 30 分。接下来要思考:"这 30 分里,有多少是切菜切的不好?有多少是火候不够?有多少是盐放少了?"反向传播就是用数学方法精确地回答这个问题。
反向传播的本质是链式法则(Chain Rule)——微积分中的"复合函数求导"。如果 y = f(g(x)),那么 dy/dx = dy/dg × dg/dx。就像一条多米诺骨牌,从最后一个开始推倒。
—— 理解反向传播的关键🔄 反向传播:梯度如何从输出层回流
损失函数的梯度从输出层开始,沿着前向传播的"反向路径"逐层回传。每一步都会根据梯度更新权重。注意箭头的方向——与 forwards 传播相反!
▲ 反向传播中,梯度沿着与前向传播相反的方向逐层回传。每一层的每个权重都得到自己的"梯度"——告诉它"你需要增加还是减少,增加/减少多少"。
⚙️ 梯度下降:用梯度来更新权重
有了梯度,接下来就是更新权重。更新规则很简单:
梯度告诉我们损失函数"上升最快的方向"。权重沿着梯度的反方向更新,就能让损失变小。学习率(learning_rate)控制步长:太大了会" overshoot"(跨过了谷底),太小了训练太慢。
优化器(Optimizer)—— "怎么走下坡最快?"
最朴素的梯度下降(SGD)就像蒙着眼下山——只感受当前脚踩的地面倾斜方向。但更好的优化器有"智慧":
🚶 SGD
🏀 Mini-batch SGD
🛷 Momentum
🧠 Adam
前面我们了解了神经网络的基本原理,现在让我们进入视觉领域的具体架构。CNN、ResNet、RNN、LSTM、GAN——这些名字你可能都听说过,但它们的内在逻辑到底是什么?这一节我们用直观的可视化方式逐一拆解。
卷积神经网络(CNN)—— "带着放大镜看图片"
CNN 的核心是"卷积"操作。想象你拿着一个放大镜(卷积核/Filter)在图片上从左到右、从上到下地扫描。每扫到一个位置,就计算放大镜覆盖区域和滤镜内部数据的相似度。这个相似度就是"特征图"(Feature Map)——它告诉你在图片的哪个位置有什么特征。
🔍 卷积操作:3×3 卷积核在 5×5 图像上滑动
卷积核就像一个小窗口,每次覆盖图像的一个小区域,做逐元素相乘再求和。不同的卷积核检测不同的特征——有的检测水平边缘,有的检测垂直边缘,有的检测角点。
▲ 卷积核(右上角)在输入图像上滑动,对覆盖区域逐元素相乘后求和,得到特征图中的一个值。这个卷积核就像一个"上白下黑边缘检测器"——它检测到的是一个"工"字形图案。
🧱 CNN 的特征层次化
CNN 的精妙之处在于:浅层卷积核检测简单特征(边缘、颜色、纹理),中层卷积核组合成中等复杂模式(圆形、条纹、角点),深层卷积核检测语义部件(眼睛、车轮、花瓣)。最终输出层将部件组合成完整的语义识别("这是一只猫")。这就是"深度"的意义——从局部到全局,从简单到复杂。
残差连接(Residual Connection)—— "学霸的笔记抄写技巧"
想象你要从一页笔记抄到另一页。传统做法是:把上一页看完,记住内容,然后在空白页上重新写一遍——很容易抄错或抄漏。而"学霸的笔记抄写技巧"是:直接在上一页上复印一份作为基底,然后在上面修改需要改的部分。这就是残差连接的核心思想。
❌ 普通层(没有残差连接)
y = f(Wx + b)
信息必须逐层"硬传"。网络越深时,梯度在经过多个 Sigmoid/ReLU 连乘后趋近于零——这就是著名的梯度消失问题。ResNet 之前,训练超过 20 层的网络几乎是不可能的。
✅ 残差块(Residual Block)
y = x + f(Wx + b)
输入 x 不仅经过卷积层 f(),还有一条"捷径"(Skip Connection)直接加到输出上。梯度可以沿着这条捷径畅通无阻地回传,让深层网络变得可训练。
🔄 残差连接:捷径(Skip Connection)让梯度"抄近道"
残差块有两路:主路经过卷积/激活,捷径路直接"跳过"。最终输出 = 捷径输入 + 主路输出。这允许梯度在网络深处也能畅通回传。
▲ 残差块 = 主路(卷积+激活)+ 捷径(恒等映射)。输出是两路之和。ResNet 让网络轻松训练到 152 层,彻底改变了计算机视觉。
RNN & LSTM —— "带着记忆的读书人"
前面的网络都是"一次进一批数据,一次出结果"。但现实中有大量序列数据——一句话一个字一个字出现,一天一天有先后顺序,一首歌一段一段演奏。RNN(循环神经网络)的核心思想是:给网络装一个"记忆"——当前输出不仅取决于当前输入,还取决于之前看到的一切。
🔄 展开的 RNN:每个时刻共享同一组参数
RNN 就像一个复读机——每个时刻都用同样的方式处理输入和记忆。展开后可以看到:同一个神经元单元(矩形)在不同时刻被"复制"使用。
▲ RNN 像一个复读机:每个时刻都用同一个"细胞"处理当前输入 x 和历史记忆 h,产生新的记忆 h。所有时刻共享同一组参数,所以可以处理任意长度的句子。
🚨 RNN 的问题:RNN 为什么不够用?
RNN 理论上可以"记住"之前的所有内容,但实际训练中,梯度在长序列上经过多次连乘后会趋近于零(梯度消失),导致模型"忘了"开头的内容。比如读一句话读到结尾,已经忘了开头的主语是什么。LSTM(长短期记忆网络)通过引入"门控机制"解决了这个问题。
🚪 LSTM 的三大门:遗忘门、输入门、输出门
LSTM 像一个有智能记忆的书桌——遗忘门决定扔掉什么信息,输入门决定添加什么新信息,输出门决定展示什么内容。三个门协同工作,让模型能记住数月前的上下文。
▲ LSTM 的三大门:遗忘门决定"忘掉什么"(用 × 运算),输入门决定"记住什么新东西",输出门决定"暴露什么给下一时刻"。细胞状态 Cₜ 像一条"信息高速公路"贯穿整个序列。
生成对抗网络(GAN)—— "造假币 vs 验钞机"
GAN 有两个网络在"对打":生成器(Generator)负责造假,判别器(Discriminator)负责鉴真。两者互相竞争、互相进化——生成器造得越来越像真的,判别器也越来越会识别。最终生成器可以造出以假乱真的图像。
⚔️ GAN 的对抗循环
左边的"造假者"和右边的"验钞机"组成一个博弈系统。判别器的梯度指导生成器改进造假手法,生成器的输出又挑战判别器的鉴定能力。这个过程持续迭代,直到生成器达到"完美造假"——判别器完全无法分辨真假。
▲ GAN 的核心是一个"猫鼠游戏":生成器试图造出以假乱真的假图欺骗判别器,判别器必须识别真假。两者的对抗推动彼此进化,最终生成器可以创造出全新的真实感图像。
DCGAN
StyleGAN
Vision Transformer(ViT)—— " Transformer 进军视觉"
在 Transformer 横 NLP 界之后,研究人员问了一个问题:"如果不用 CNN,把图像直接丢给 Transformer 会怎样?"答案出乎意料——ViT 在大规模数据上甚至超过了同等规模的 CNN。它的基本思路很简单:把图像切成多个小 patch(像拼图),每个 patch 当做一个"词",然后交给 Transformer 处理。
🖼️ ViT 的核心思路
把一张 224×224 的图片切成 16×16 的小块 → 得到 196 个 patch → 每个 patch 拉平成一个向量 → 加上位置编码 → 交给 Transformer Encoder → 用 [CLS] token 的输出来分类。
关键点:Transformer 的自注意力机制天然适合捕捉图像中的全局依赖——CNN 的卷积核只能看到局部,而 Self-Attention 可以看到整张图。随着预训练数据量的增大,ViT 的优势越来越明显。
深度学习的版图远不止于此。当我们理解了神经网络如何学习之后,
下一章让我们进入大语言模型的世界——从 Token 到 Scaling Law,
一探 LLM 背后的核心原理与工程实践:大语言模型(LLM)。