Lecture by X.Dan
深度神经网络在机器学习应用、学习复杂概率分布方面表现出色。但是,训练深度神经网络存在诸多挑战。我们将从以下几个方面探讨深度学习架构:
- 更好的优化方法
- 克服非凸损失函数
- 自适应学习率
- 基于动量的方法
- 梯度消失与梯度爆炸问题
- 归一化技术
- 残差连接
- 谨慎的初始化策略
- 过拟合与正则化
- 正则化技术
- 早停和模型选择
- 现代神经网络架构
- 卷积神经网络
- 循环神经网络
- 转换器架构
- 图像神经网络
# 优化方法
# 现代神经网络架构
# 卷积神经网络 (CNNs)
在对图像的全连接神经网络中,参数数量随着输入图像大小的增加而急剧增加。对于 4×4 的图像,平坦化后有 16 个输入神经元。而对于 100×100 的 RGB 图像,平坦化后有 30,000 个输入神经元。如果使用一个隐藏层,隐藏层有 1,000 个神经元,那么全连接后的参数数量将达到 30,000,000 个。这种庞大的参数量不仅增加了计算复杂度,还容易导致过拟合,忽视了图像的空间结构信息。
卷积神经网络的核心思想是利用权重共享和局部连接来减少参数数量。通过在输入图像上滑动一个小的滤波器,卷积操作能够像探针一样在保持空间局部结构的前提下提取特征。这种方法不仅显著减少了参数数量,还提高了模型的泛化能力。
例如,对 3×3 的图像编码
Img=⎣⎢⎡147258369⎦⎥⎤
使用 2×2 的滤波器
ker=[1324]
进行卷积操作,得到的特征图为
Img∗ker:=⎣⎢⎢⎢⎢⎢⎡[1425]∗[1324][4758]∗[1324][2536]∗[1324][5869]∗[1324]⎦⎥⎥⎥⎥⎥⎤=[37674777]
离散卷积作为 CNNs 的核心运算,将输入数据体与一组可学习滤波器之间进行如下运算得到特征图 I∗K:=Z,其每一个元素的计算公式为
(I∗K)i,j=m=0∑M−1n=0∑N−1Ii+m,j+nKm,n
其中 I 是输入图像,K 是滤波器或卷积核,M×N 是滤波器的尺寸。多通道卷积扩展了这一概念,以 RGB 图像为例,其特征图的计算公式为
Zi,j,k=c=0∑C−1m=0∑M−1n=0∑N−1Xi+m,j+n,cWm,n,c,k+bk
其中 X 是尺寸为 H×W 的、具有 C 个通道的输入数据体;W 是尺寸为 (M,N,C,K) 的滤波器张量,即 K 个尺寸为 M×N 的滤波器,每个滤波器有 C 个通道,和输入数据体的通道对应。bk 是偏置项;Z 是输出特征图,尺寸为 (H′,W′,K),表示在 K 个滤波器作用下得到的 K 个特征图。
卷积操作自然地减少了特征图的高、宽尺寸。例如,输入图像尺寸为 H×W,使用 M×N 的滤波器进行卷积后,输出特征图的尺寸变为 (H−M+1)×(W−N+1)。为了控制输出特征图的尺寸,有以下几种常用技术。
填充:在输入图像四周添加额外的像素行和列包裹,通常填充为零,允许滤波器在边缘位置进行卷积操作,从而保持输出特征图的尺寸不变。
对之前例子中的图像进行填充:
Imgpad=⎣⎢⎢⎢⎢⎢⎡0000001470025800369000000⎦⎥⎥⎥⎥⎥⎤
使用相同的 2×2 滤波器进行卷积操作,得到的特征图为
Imgpad∗ker:=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡[0001]∗[1324][0014]∗[1324][0047]∗[1324][0102]∗[1324][1425]∗[1324][4758]∗[1324][0203]∗[1324][2536]∗[1324][5869]∗[1324]⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎡42240103767164777⎦⎥⎤
尺寸变回了 3×3。
步幅:通过在卷积操作中跳过某些位置来控制输出特征图的尺寸。步幅 S 表示每次移动滤波器时跳过的像素数(横向和纵向均跳过 S−1 个像素),直接通过减少采样点来降低输出特征图的尺寸。
例如,使用步幅 S=2 对 4×4 图像进行卷积操作:
Img=⎣⎢⎢⎢⎡15913261014371115481216⎦⎥⎥⎥⎤
使用 2×2 的滤波器
ker=[1001]
进行卷积操作,得到的特征图为
Img∗ker:=⎣⎢⎢⎢⎢⎢⎡[1526]∗[1001][9131014]∗[1001][3748]∗[1001][11151216]∗[1001]⎦⎥⎥⎥⎥⎥⎤=[7231127]
尺寸变为 2×2。
对输入图 H×W 使用 M×N 的滤波器,填充为 P,步幅为 S,则输出特征图的尺寸为
O=SW−K+2P+1
其中 O 是输出特征图的宽度或高度,K 是滤波器的宽度或高度。
线性采样结束后,通常还会进行非线性变换,以增强模型的表达能力。对特征图 Z 应用非线性激活函数后,得到激活特征图 A
Ai,j,k=f(Zi,j,k)
其中,常用的激活函数包括
- ReLU(线性整流单元):f(x)=max(0,x)
- Sigmoid(S 型函数):f(x)=1+e−x1
- Tanh(双曲正切函数):f(x)=ex+e−xex−e−x
最后通过池化操作进一步降低特征图的尺寸和复杂度。
对先前例子中的特征图线性整流 f(x)=∣50−x∣,得到激活特征图
⎣⎢⎡42240103767164777⎦⎥⎤f⎣⎢⎡46281040131734327⎦⎥⎤
池化通过对局部区域进行汇总操作来减少特征图的尺寸。
Pi,j,k=pool(Asi:si+p;sj:sj+p;k)
其中,P 是池化特征图,p 是池化窗口的尺寸,s 是池化步幅,pool(⋅) 是池化函数。常见的池化方法包括最大池化和平均池化。
例如,对激活特征图进行 2×2 最大池化,步幅为 2,得到池化特征图
⎣⎢⎡46281040131734327⎦⎥⎤max pool[46173427]
这里根据步幅 2,从左上角开始,会超出边界,它将自动填充为负无穷。
CNNs 的核心架构是局部连接、权重共享和池化操作的组合,分别用于提取局部特征、减少参数数量和降低特征图尺寸,使得极大优化了全连接神经网络的参数尺寸、鲁棒于平移变换,并提升了模型的泛化能力。
CNNs 应用常见于图像分类、目标检测、语义分割、图像生成、医学图像分析、视频处理等领域。里程碑式的 CNN 架构包括 LeNet、AlexNet、VGG、GoogLeNet、ResNet 等。
对于 RGB 图像,卷积神经网络的输入通常是一个三维张量,尺寸为 H×W×3,其中 H 是图像的高度,W 是图像的宽度,3 代表 RGB 三个颜色通道。通过多层卷积和池化操作,CNNs 能够逐步提取图像的低级到高级特征,具体体现为如下例子
- 128×128×3:输入一张彩色图片;
- 128×128×32:第一层卷积层使用 32 个 3×3 的滤波器组 I,每个滤波器先提取不同通道的局部特征,然后相加,得到一张特征图,经过 32 个滤波器组后,得到 32 张特征图;
- 64×64×32:第一层池化层,使用 2×2 的最大池化,步幅为 2,将每张特征图的尺寸减半;
- 64×64×64:第二层卷积层,使用 64 个 3×3 的滤波器组,提取更复杂的特征;
- 32×32×64:第二层池化层,再次使用 2×2 的最大池化,步幅为 2,将特征图尺寸减半;
- 32×32×128:第三层卷积层,使用 128 个 3×3 的滤波器组,提取更高级的特征;
- 16×16×128:第三层池化层,使用 2×2 的最大池化,步幅为 2,将特征图尺寸减半;
- 32768:将 16×16×128 的特征图展平为一维向量,作为输入,全连接第一隐藏层为 1024 个神经元,全连接第二隐藏层为 512 个神经元,输出层用 Softmax 激活为 1000 个类别的概率分布。
可以看见,由于池化 - 卷积,其实越后面的卷积,在空间尺寸上越小,但通道数越来越多,提取的特征也越来越复杂。一开始,卷积提取的是边缘、颜色等低级特征,随着网络加深,卷积提取的特征逐渐变得抽象和复杂,如纹理、形状(由颜色通道的组合形成),最后可能是物体的部分或整体表示(由纹理和形状的组合形成)。这个过程是从低级到高级特征的逐步抽象和组合的过程。
CNNs 中,一个卷积层的总参数数量计算公式为:
Total Parameters=(Kw×Kh×Cin+1)×Cout
其中,Kw 和 Kh 分别是滤波器的宽度和高度,Cin 是输入通道数,Cout 是输出通道数,+1 代表每个滤波器的偏置项。
一个简单的例子为
- 输入 RGB 图像,尺寸为 32×32×3;
- 卷积层使用 64 个 3×3 的滤波器组;
- 步幅为 1,填充为 1。
则该卷积层的总参数数量为
(3×3×3+1)×64=(27+1)×64=28×64=1792
# 循环神经网络 (RNNs)
标准的 FNNs 是静态的,它们将输入映射到输出,而不考虑时间或序列信息,假设它们是 i.i.d. 的数据点。但对于含有序列数据的任务,如自然语言处理、时间序列预测、音视频分析等,时序和上下文信息至关重要。现在的问题是,如何让神经网络具备记忆和处理序列数据的能力?即如何记住过去的信息,并将其应用于当前的输入?
循环神经网络(Recurrent NNs) 是为处理序列数据而设计的神经网络架构。RNNs 通过在网络中引入循环连接(Recurrent Connections),使得当前时刻的输出不仅依赖于当前输入,还依赖于前一时刻的隐藏状态,从而实现对序列信息的记忆和处理。此外,RNNs 还可以通过共享权重,在不同时间步上使用相同的参数,从而有效地处理变长序列数据。
RNNs 的基本单元包括输入层、隐藏层和输出层。对于每个时间步 t,RNNs 接收当前输入 xt 和前一时刻的隐藏状态 ht−1,通过以下公式计算当前隐藏状态 ht 和输出 yt:
上述图像描述了 RNNs 的基本结构,其中 xt 是在时间步 t 的输入,ht 是在时间步 t 的隐藏状态,箭头表示信息流动的方向。隐藏状态 ht 通过循环连接将前一时刻的隐藏状态 ht−1 传递到当前时刻,输出依赖于当前输入 xt 和前一隐藏状态 ht−1。更具体地,RNNs 的基本单元为
其中 t 代表时间步,即序列中的位置,ht 是隐藏状态,xt 是输入,yt 是输出,具体关系为
⎩⎪⎨⎪⎧ht=σ(Whhht−1+Wxhxt+bh)yt=Whyht+by
W 是权重矩阵,b 是偏置项,σ 是激活函数。
RNN 有多种变体,可以根据输入层和输出层的关系进行分类:
- 单对单(One-to-One):标准的前馈神经网络,输入和输出都是单一的。
- 单对多(One-to-Many):输入是单一的,输出是一个序列。例如,图像描述生成。
- 多对单(Many-to-One):输入是一个序列,输出是单一的。例如,情感分析。
- 多对多(Many-to-Many):输入和输出都是序列。例如,机器翻译。
深度 RNNs(Deep RNNs) 通过堆叠多个 RNN 层来增强模型的表达能力。每一层的输出作为下一层的输入,从而捕捉更复杂的时序特征。深度 RNNs 的计算过程如下:
其中 Xt 是输入序列,Ht(l) 是第 l 层在时间步 t 的隐藏状态,Ot 是输出序列。每一层的隐藏状态通过循环连接传递信息,同时每一层之间也有前馈连接,将上一层的输出作为下一层的输入。
双向 RNNs(Bidirectional RNNs) 提供两个反向的隐藏状态,一个从前向后处理序列,另一个从后向前处理序列,最终的输出取决于前文和后文的信息。这种结构特别适用于需要全局上下文信息的任务,如命名实体识别和语音识别。
RNNs 也存在挑战和限制,比如在长序列中,梯度可能会随着时间步的增加而指数衰减或爆炸,导致模型难以学习长期依赖关系和记忆跨度有限。具体可以从反向传播的表达式中看出,对于单层的 RNNs,其反向传播的梯度链式法则为
hkht=i=k+1∏t∂hi−1∂hi=i=k+1∏tWhhTdiag(σ′(Whhhi−1+Wxhxi+bh))
其中 σ 对内部线性组合的作用是逐一应用于每个元素上,因此其导数 σ′ 也是一个对角矩阵。
σ⎣⎢⎢⎢⎢⎡z1z2⋮zn⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡σ(z1)σ(z2)⋮σ(zn)⎦⎥⎥⎥⎥⎤⟹∂z∂σ(z)=diag(σ′(z))=⎣⎢⎢⎢⎢⎡σ′(z1)0⋮00σ′(z2)⋮0⋯⋯⋱⋯00⋮σ′(zn)⎦⎥⎥⎥⎥⎤
解决方案有以下几种:长短期记忆网络、门控循环单元、梯度裁剪和初始化策略等。
长短期记忆网络和门控循环单元通过引入门控机制(Gating Mechanisms) 和门控腔体(Gated Cells),有效地控制信息的流动和记忆,从而缓解了梯度消失和梯度爆炸问题,提升了模型对长期依赖关系的捕捉能力。
长短期记忆网络(Long Short-Term Memory, LSTM) 的架构为输入、遗忘和输出三个门控机制,分别控制信息的流入、保留和输出,保有一个称为细胞状态(Cell State) 的独立记忆单元。LSTM 强力,但是计算复杂度较高,训练时间较长。核心图表为
LSTM 引入了细胞状态层,通过三个门控机制来输入序列的信息流动。当 Xt 和 Ht−1 进入 LSTM 单元时,首先通过遗忘门 Ft 决定保留多少先前的细胞状态 Ct−1(通过逐点相乘,遗忘,即减少不重要的分量的权重)。接着,输入门 It 控制当前输入信息 C~t 的流入,流入的新信息和遗忘操作后的细胞状态相加,得到更新后的细胞状态 Ct,作用 tanh 后,通过逐点相乘调整最基本的输出门 Ot,最终得到当前隐藏状态 Ht。
需要指出,σ 是 Sigmoid 激活函数,其值域在 0 到 1 之间,tanh 是 Tanh 激活函数,其值域在 −1 到 1 之间,⊙ 是逐点相乘操作,a,b,c 是权重矩阵。调用 Sigmoid 激活函数的门控机制可以将信息压缩到 0 到 1 之间,是对信息的 “过滤” 过程,即是否保留信息,而调用 Tanh 激活函数则是对信息进行非线性变换,重新编码信息,两者逐点相乘后,起到调整信息强度的作用。具体细节可以表述为
Forget Gate:Input Gate:Cell State Update:Output Gate:What to discard from the cell stateFt=σ(Wf⋅[Ht−1,Xt]+bf)What new information to storeIt=σ(Wi⋅[Ht−1,Xt]+bi)C~t=tanh(WC⋅[Ht−1,Xt]+bC)Combine forget and input decisionsCt=Ft⊙Ct−1+It⊙C~tWhat to output from the cell stateOt=σ(Wo⋅[Ht−1,Xt]+bo)Ht=Ot⊙tanh(Ct)
其中 [⋅,⋅] 表示向量连接操作。其中,Wf,Wi,WC,Wo 是权重矩阵,bf,bi,bC,bo 是偏置项。
门控机制通过学习这些权重和偏置,动态地调整信息的流动,从而有效地捕捉长期依赖关系。LSTM 有效避免了传统 RNN 中的梯度消失问题,因为细胞状态通过线性路径传递信息。
Ct=Ft⊙Ct−1+It⊙C~t
允许梯度在时间步之间更稳定地传播。
门控循环单元(Gated Recurrent Unit, GRU) 是 LSTM 的简化版本,结合了遗忘门和输入门为一个更新门(Update Gate) Zt,并引入重置门(Reset Gate) Rt 来控制过去信息的遗忘。不包含独立的细胞状态,而是直接在隐藏状态中进行信息的存储和更新。GRU 的架构为
具体而言,更新门控制当前隐藏状态中有多少信息需要从过去传递过来,并平衡新信息的引入,类似于 LSTM 的遗忘门和输入门的组合。重置门决定了多少过去的信息需要被遗忘,决定了当前和过去隐藏状态的关联性,有助于捕捉短期依赖关系。GRU 的计算过程如下:
