博主头像
小雨淅沥

Some things were meant to be.

李宏毅课程:笔记

李宏毅课程:笔记

本文不详细阐述,仅做结论性总结

1 基本概念

1.1 机器学习基本概念

主要两大任务:Regression, Classification

常用术语概念:Feature, Bias, Weight, Model

Loss 的概念:与实际值 (Label) 进行计算,是优化目标,简单的 Loss 可以是 Mean Absolute Error (MAE) 或是 Mean Square Error (MSE)

Optimization:使用 Gradient Decent 结合 Learning Rate 对极小值进行逼近。

Learning Rate 是 Hyper Parameter 的一种,是由训练前指定的参数,相对的其他 Parameter 是由学习过程中得到的(例如 Bias, Weight)

Model 是一组可能的函数,Model 本身的不足称为 Model Bias

常用多个 Sigmoid 函数来构成一个 Model,通过改变参数即可近似模拟任何曲折的函数,可以通过矩阵形式归纳为:

$$ y = b + c^{T} \, \sigma(b + W x) $$

Sigmoid 实际应用式子为:

$$ y = c \cdot \frac{1}{1 + e^{-(b + w x_1)}} $$

了解关于 Epoch 和 Batch 的划分,通过 Batch 依次进行梯度下降法计算

相对于 Sigmoid 更加常用 Rectified Linear Unit (ReLU) 作为 Model

了解将结果作为输入形成递归,则形成一个 Layer,某个 Sigmoid 函数可以成为一个 Neural,最后形成了 Neural Network 。如果网络有很多 Layer,则又可以称为 Deep Learning

1.2 机器学习任务攻略

机器学习任务处理路线可以参考下图

机器学习任务攻略
机器学习任务攻略

了解 Model Bias 和 Optimization Issue 的表现区别

1.2.1 Overfitting 问题

Overfitting 指的是在 train 上表现很好但是 test 上很差
Overfitting 有这几种方法:

  1. 增加数据集
  2. Data Augmentation,例如将图像进行左右翻转
  3. 减少 Model 的弹性, Less Parameter / Sharing Parameter
  4. Less Feature
  5. Early Stopping
  6. Regularization
  7. Dropout

为了评估 Overfitting 一般会分出 Train 和 Validation 两个 Set,当训练和测试数据本质并非同类时会出现 Mismatch 问题

1.2.2 Critical Point 问题

当梯度等于 0 时候会出现无法进一步训练的问题。
有两种情况:局部最小值 (Local Minimum) 和 鞍点((Saddle Point) 通过泰勒展开原理可以计算 Hessian 矩阵的值,通过分辨 Eigen 的正负情况可以区分是否是 Local Minimum 还是 Saddle Point
如果是 Saddle Point 可以沿着 Eigen Vector 方向让 Loss 进一步变小。但是在实际应用中不太会使用这种方法,因为计算量太大。

1.2.3 Batch Size & Momentum

术语 Shuffle 指的是每一次 Epoch 会对数据集重新分配 Batch

Batch size 大代表数据量很大,但是实际上 GPU 并行运算并不会慢多少,问题出在 Batch size 大则 update 更新噪声会更少,容易导致卡在某一个 Critical Point

另外 Batch size 较小会在 test 上更有优势,这是由于 Overfitting

Momentum 技术指的是让参数更新时额外考虑之前的变动(类似于惯性),也可以解释为考虑过去所有 Gradient 之和。

1.2.4 Adaptive Learning Rate

有时候 Gradient 太小会导致训练停滞或者在两个值之间反复震荡 (Convex)

使用 Adaptive learning rate 一般会选择梯度的 RMSProp,这是带有权重的梯度的 Root Mean Square,这可以让梯度较大时 Learning Rate 更小,反之则增大,防止学习卡在某一个低梯度位置。

最常用的 Optimizer 是 Adam:RMSProp + Momentum

另外也可以使用 Learning Rate Scheduling,包括 Decay 方式(随着时间 LR 在衰减),或者 Warm up(快速逐渐上升,然后慢慢下降)

1.2.5 为什么用了 Validation set 还是会出现过拟合的问题?

验证数据集选择的太大了

1.2.6 有什么办法可以让 Error Surface 更加平滑?

这指的是,在训练到某个位置的时候,可能某个维度 feature 很大,导致同样的参数变化可以产生差异很大的 Loss 变化

解决方法成为 Batch Normalization 也就是对所有的,其中一种称为 Feature Normalization,也就是对所有的 feature 进行归一化

1.2.7 万一输入(例如测试集)数量不固定怎么 Normalization?

可以通过及计算 moving average 来实现,另外也有一些其他的方法用于优化 Error Surface(例如 Internal Covariate Shift)

1.3 机器学习原理

通过设定 threshold 来进行分类的结果分割

可以计算损失函数如下所示(如果正确为 1,错误为 0)

$$ L(h, \mathcal{D}) = \frac{1}{N} \sum_{n=1}^{N} l(h, x^n, \hat{y}^n) $$

在训练过程中常见问题就是:训练的阈值在实际的数据中表现不佳,先设定目标是如何将两个 Loss 接近?

$$ L(h^{train},D_{train}) \\ L(h^{train},D_{all}) $$

这里问题就出在数据集上,这里给出结论,为了让两者差距足够小:

$$ L(h^{train}, \mathcal{D}_{all}) - L(h^{all}, \mathcal{D}_{all}) \leq \delta $$

需要数据集满足条件:

$$ \forall h \in \mathcal{H}, \; \left| L(h, \mathcal{D}_{train}) - L(h, \mathcal{D}_{all}) \right| \leq \frac{\delta}{2} $$

经过一系列的推导后我们可以得到结论:

$$ P(\mathcal{D}_{train} \text{ is } bad) \leq |\mathcal{H}| \cdot 2 \exp(-2N\varepsilon^2) $$

这代表了在 N 不变的情况下,如果想让训练结果接近于实际数据集的结果,模型弹性 H 应该尽可能地小,数据集数量 N 应该尽可能大

但是,H 越大则模型在所有数据集上表现更好,这就涉及到了一个权衡

这个 Trade-off 可以通过 hidden-layer 实现,深度学习多个层可以通过类似于复用的方式,在少量的 H 的情况下获得很好的模型弹性。


2 常见网络模型

2.1 卷积神经网络 CNN

卷积神经网络有两种解释方式,这里均不阐述,只写结论性

在处理图像的时候,由于数据过于庞大,不能像传统的处理方式一样直接使用 Fully Connected Network

输入的数据格式一般为:

$$ H \times W \times C $$

其中 C 是 Channel

  • Kernel Size:卷积核大小,一般 3*3
  • Stride:卷积的步长,1 代表没有跳过
  • Padding:卷积到边缘会没有空间,Padding 代表在边界补充什么数值,可以是 0 或者平均值等等

对于处理同一个信息的块,称为 Receptive Field,他们使用同一组训练参数(这减少了参数量),共享的参数称为 Filter

在卷积完成后,一般也会使用 Pooling 操作将图像信息进一步提取,Channel 不变但是 H,W 会变小。

也有的网络不使用池化操作,因为池化会损失信息,本质是为了加快训练的速度。

在 Pooling 后通过 Flatten 展开成为 一个向量,输入全连接网络进入 SoftMax 完成最后的处理。

CNN 的缺陷是:不可以处理放大(Scaling)和旋转(Rotation)后的数据,这个可以用 Spatial Transformer Layer 解决

CNN 的框架是由图像处理的特性来实现:

  1. 不需要一次性完整地观看完所有的图片:使用卷积而不是直接全连接层
  2. 一个特征可能会出现在图片不同的位置:使用 Filter 共享参数
  3. 将图片缩小并不会影响图像特征:使用 Pooling 缩小图片

2.2 Self-attention

self-attention 主要应对的是输入 Vector 会改变的数据,例如 语音输入,句子输入,图(CS 数据结构)的操作

对于这种输入,一般有三种情况:

  1. 每一个向量对应一个 Label: POS tagging
  2. 每一组向量对应一个 Label: Sentiment analysis
  3. 需要让网络自行决定: Sequence to Sequence

在这种任务下,应当考虑使用串口 Window 输入,使用 self-attention 来判断不同元素之间的关联性

Self-attention 的内容以公式为主,此处并不详细展开,仅仅给出核心公式

$$ \text{Attention}(Q, K, V) = \text{softmax}\!\left(\frac{QK^{\mathrm{T}}}{\sqrt{d_k}}\right)V $$

Self-attention 有很多的变种,对于之前的 CNN,实际上是 self-attention 的一种变种,CNN 的弹性更小,因此只需要更少的数据可以训练,但是如果训练数据足够大,self-attention 的表现会优于 CNN 。这两者并不冲突,可以同时使用。

RNN 曾经作为一种网络结构,已经被 self-attention 取代,因为其计算关联性不可以并行运算

不同 self-attention 之间的对比可以参考这篇论文 Long Range ArenaEfficient Transformers

2.3 Transformer

Transformer 是一种 Sequence to Sequence (Seq2Seq)模型,表示输出长度不固定,有很多任务使用 Transformer 模型进行处理,包括:

  1. QA 任务:指的是通过给出 Question,让网络输出 Answer 的任务(绝大多数任务都可以使用 QA 形式)
  2. Multi-lable Classification:某一个物品可以有多个标签,类似于不定项选择
  3. Object Detection:目标检测功能

网络模型总览,可以发现 Encoder 和 Decoder 有功能重叠的模块

Transformer model
Transformer model

2.3.1 Encoder

Transformer 的 Encoder 实际上包含了一部分 Self-attention 架构,额外添加了一部分新的模块:Residual 模块将原输入和 Self-attention 的结果相加;Norm 模块将数值进行归一化。在进入全连接层之后,同样进行了一次 Residual 和 Norm

2.3.2 Decoder

这里以 Autoregressive Decoder 为例

Decoder 实际上的运作模式是,将上一个输出作为输入传递进去(类似于马尔可夫链),需要指定一个起始和结束 token ,在输入后模型计算最大概率的输出,如果模型认为这一次输出结束,则会结束 token 概率会达到最大。

其中的用到的是 Masked Self-attention (因为按照顺序输入,之前的数据是拿不到后续的数据的,mask 就是在之前部分将后续部分掩盖,不加入计算)

实际上还有一种 Non-Autoregressive 模式(简称 NAT),是一次性并行输入所有的 begin token

NAT 使用另一个长度的预测器来决定输出长度,或者忽略 End token 后文的所有内容

NAT 相对于 AT 的优点在于可以并行计算,同时其长度是可控的,但是其表现是低于 AT 的, 参见多模态内容(Multimodality)

2.3.3 Cross-attenstion

将 masked self-attention 的输出 q 结合到 Encoder 的输出中,形成交叉

2.3.4 训练方式

Transformer 的训练方式实际上和分类问题很相似,就是让输出和正确答案之间的 Cross Entropy 最小

给 Decoder 每一次的 token 输入正确答案,检查下一个是否正确

Validation 使用的是将完整的句子和输出结果进行比较,称为 BLEU Score(与 Train 的目标不相同),导致 Mismatch (exposure bias) ,一种解决方法是使用强化学习(Reinforcement Learning),通过给 Decoder 加入错误的输入,来进行训练,在 Transformer 中称为 Scheduled Sampling

2.4 各种各样的 Self-attention

Self-attention 处理的是输入为 Sequence 的情况,其问题在于 Attention Matrix 的计算量过于庞大,输入为 N 对应的矩阵的大小为 N*N

下面列出一些 Self-attention 的变体:

  1. Local Attention, Truncated Attention:只考虑相邻数据,约等于 CNN
  2. Stride Attention:跳格子计算
  3. Global Attention:只挑选指定的 token 做全局的 attention,其他普通的 token 只和特殊 token 计算
  4. Longformer, BigBird:将 123 方法全部应用
  5. Clustering, Reformer, Routing Transformer:只有在 query 和 key 在同一个 cluster 才会计算
  6. Sinkhorn Sorting Network:跳出人为指定框架,使用 Data-driven
  7. Linformer, Compressed Attention:缩小 attention matrix的计算量(通过交换矩阵点乘来降低运算复杂度)
  8. Efficient Attention:将 attention weight 作为参数计算
  9. ...

详细的内容可以参考论文 Long Range Arena: A Benchmark for Efficient Transformers论文链接

2.5 GAN

Generative adversarial network,生成式对抗网络,通过一个 Generator 和一个 Discriminator 相互对抗构成

GAN 常用于有创造性的一些内容,无法使用传统网络是因为在相同的训练资料中,会出现不同的输出

GAN 的一个特性是 Simple Distribution,也就是网路的输入和输入是两类的集合,从集合中选择一个成为输出,这也导致了我们在评估训练结果时候会有一些困难。

GAN 主要分为两大部分,Generator 和 Discriminator 两者相互对抗(Adversarial),于是称为 GAN

2.5.1 Generator

生成器 可以分类为两种: unconditional 和 conditional,举例而言,如果输入文字让网络生成一幅图片,则是 conditional

G 的作用是将输入集 Z(一系列简单的向量),经过输出后生成较为复杂的向量 Y(图片算一种高维向量)

2.5.2 Discriminator

判别器 主要用于判断由 G 生成的内容是真实的 Data 还是生成的,Y 进入网络后输出 Scalar(标量), 越真则越大

D 可以用任何的网络,例如 CNN 用于处理图像。

2.5.3 训练算法

GAN 网络是很难训练的,会遇到种种的困难

  1. 固定 G,更新 D,直到 D 可以分辨真假
  2. 固定 D,更新 G,直到 G 可以骗过 D
  3. 进行上述步骤

下式可以一定程度上表示两个集合之间的差异(Divergence),称为 Negative Cross Entropy

$$ V(G, D) = \mathbb{E}_{y \sim P_{\mathrm{data}}}[\log D(y)] + \mathbb{E}_{y \sim P_{G}}[\log(1 - D(y))] $$

对 G 的训练目标

$$ G^{*} = \arg \min_{G} \max_{D} V(G, D) $$

对 D 的训练目标

$$ D^{*} = \arg \max_{D} V(D, G) $$

2.5.4 优化 Divergence

上述中的使用负交叉熵来表示两个集合之间的差异,实际有问题:在两个集合完全不相交的时候,无论相聚距离,都是一个固定值,这导致梯度训练无法进行

因此出现了一些新的解决方式,包括 Wassertein Distance

对判别器使用该式子作为优化目标

$$ \max_{D \in 1\text{-}\mathrm{Lipschitz}} \left\{ \mathbb{E}_{x \sim P_{\mathrm{data}}}[D(x)] - \mathbb{E}_{x \sim P_{G}}[D(x)] \right\} $$

生成器使用该式子进行优化

$$ \min_{G} \; \mathbb{E}_{x \sim P_{G}}[D(x)] $$

为什么 GAN 训练如此困难?

  • G 和 D 有一个不产生进步就会让整个训练流程停滞
  • G 在有细微变化的时候,token 不一定发生改变,导致 D 不一定会发生改变

2.5.5 GAN Evaluation

GAN 可以用两种方式进行评估 Quality

  • 将生成结果放入一个识别网络中,检查输出识别结果的成功率
  • 将生成结果放入一个分类网络中,检查输出的类别集中程度

另外 GAN 还有可能出现 Diversity 问题

  • Mode Collapse:输出的永远是同类型内容,永远是几张特征相近的图片
  • Mode Dropping:输出的类型丰富,但是实际范围不大(例如人脸生成永远是黄种人)

对于 Diversity,用不同的输入生成,将输出结果放入分类网络中,检查分类结果是否平均分布(注意和 Quality 的区分)

这类指标称为 Inception Distance,另有 FID 指标,可自行搜索

2.5.6 Conditional GAN

前文中均以无条件 GAN 作为例子,如果有额外的条件输入,则 G 应当能够考虑条件输入。

一种常见的方式是使用标注好的条件输入和数据,进行训练,即 GAN+Supervised Learning

2.5.7 Cycle GAN

但是很多时候不会有标注好的数据(例如图像风格转化),这时候需要进行无监督学习。

如何做到在没有标注的情况下,让输入和输出仍然具有关联性?使用 Cycle GAN 进行训练

Cycle GAN 中有两个 G,将输入 X 通过 G 转化为 Y之后,进一步通过一个 G 转化为原来的域,检查该输出结果和最初的输入的差异性

也可以调换两个 G 的位置和输入,进一步进行循环

以下是 Cycle GAN 可用的一些场景:

  • 文字风格转化
  • 文章摘要生成
  • 图像风格转化(真人 -> 二次元)
李宏毅课程:笔记
https://rainerseventeen.cn/index.php/Deep-Learning/27.html
本文作者 Rainer
发布时间 2025-10-21
许可协议 CC BY-NC-SA 4.0

评论已关闭