Outlines about Deep Learning.

深度学习(Deep Learning)是一种以深度神经网络为工具的机器学习方法。 本文首先介绍深度神经网络的类型,其次介绍深度学习的基本组件方法技巧,最后介绍深度学习在计算机视觉和自然语言处理等领域的应用

本文目录:

1. 深度神经网络的类型

(1) 卷积神经网络

卷积神经网络(Convolutional Neural Network)的基本概念

卷积神经网络是由卷积层、激活函数和池化层堆叠构成的深度神经网络,可以从图像数据中自适应的提取特征。

卷积层是一种局部的互相关操作,使用卷积核在输入图像或特征上按照光栅扫描顺序滑动,并通过局部仿射变换构造输出特征;具有局部连接、参数共享和平移等变性等特点。

卷积神经网络中的卷积层包括标准卷积, 转置卷积, 扩张卷积(Dilated Conv, IC-Conv), 可分离卷积(空间可分离卷积, 深度可分离卷积, 平展卷积), 组卷积, 可变形卷积, 差分卷积(中心差分卷积, 交叉中心差分卷积, 像素差分卷积), 动态卷积(CondConv, DynamicConv, DyNet, ODConv, DRConv), Involution, 圆形卷积, 八度卷积, 稀疏卷积(空间稀疏卷积, 子流形稀疏卷积), CoordConv

卷积神经网络中的池化(Pooling)层

池化层可以对特征图进行降采样,从而减小网络的计算成本,降低过拟合的风险。卷积神经网络中的池化方法包括:

卷积神经网络中的注意力机制(Attention Mechanism)

卷积神经网络中的注意力机制表现为在特征的某个维度上计算相应统计量,并根据所计算的统计量对该维度上的每一个元素赋予不同的权重,用以增强网络的特征表达能力。

卷积层的特征维度包括通道维度和空间维度,因此注意力机制可以应用在不同维度上:

卷积神经网络的可视化

轻量级(LightWeight)卷积神经网络

轻量级网络设计旨在设计计算复杂度更低的卷积网络结构。

(2) 循环神经网络

循环神经网络(Recurrent Neural Network)的基本概念

循环神经网络(RNN)可以处理输入长度不固定的文本等时间序列数据。RNN每一时刻的隐状态$h_t$不仅和当前时刻的输入$x_t$相关,也和上一时刻的隐状态$h_{t-1}$相关。RNN具有通用近似性、图灵完备性等特点。

RNN存在长程依赖问题:理论上可以建立长时间间隔的状态之间的依赖关系,但是由于梯度消失现象,实际上只能学习到短期的依赖关系。解决措施是引入门控机制,如LSTM, GRU, QRNN, SRU, ON-LSTM

也可以通过增加循环层的深度增强RNN的特征提取能力,包括Stacked RNN, Bidirectional RNN

序列到序列模型 (Sequence to Sequence)

序列到序列(Seq2Seq)模型是一种序列生成模型,能够根据一个随机长度的输入序列生成另一个随机长度的序列。Seq2Seq模型通常采用编码器-解码器结构:

Seq2Seq模型在生成序列时可以通过贪婪搜索或束搜索实现。序列生成时存在曝光偏差问题,可以通过计划采样缓解。

典型的Seq2Seq模型包括条件Seq2Seq模型、指针网络。

序列到序列模型中的注意力机制 (Attention Mechanism)

Seq2Seq模型中,将输入序列通过编码器转换为一个上下文向量$c$,再喂入解码器。注意力机制是指在解码器的每一步中,通过输入序列的所有隐状态$h_{1:T}$构造注意力分布$(α_1,…,α_t,…,α_T)$,然后构造当前步的上下文向量$c= \sum_{t=1}^{T} {α_th_t}$。

(3) 自注意力网络

自注意力机制 (Self-Attention Mechanism)

自注意力机制用于捕捉单个序列$X$的内部关系。把输入序列$X$映射为查询矩阵$Q$, 键矩阵$K$和值矩阵$V$;根据查询矩阵$Q$和键矩阵$K$生成注意力图,并作用于值矩阵$V$获得自注意力的输出$H$。

Transformer

Transformer是一个基于多头自注意力机制的深度网络模型,网络结构包括编码器和解码器。编码器生成基于注意力的特征表示,该表示具有从全局上下文中定位特定信息的能力;解码器从特征表示中进行检索。

Transformer中的位置编码 (Position Encoding)

Transformer中的自注意力机制具有置换不变性(permutation invariant),导致打乱输入序列的顺序对输出结果不会产生任何影响。通过位置编码把位置信息引入输入序列中,以打破模型的全对称性。

降低Transformer的计算复杂度

自注意力运算中计算注意力矩阵以及加权求和计算输出这两个步骤引入了$O(N^2)$的计算复杂度。因此可以改进这两个步骤,从而降低计算复杂度。

预训练语言模型 (Pretrained Language Model)

预训练语言模型是一种从大量无标签的语料库中学习通用的自然语言特征表示的方法。使用预训练语言模型的步骤如下:1. 在大量无标签的语料库上进行特定任务的预训练;2. 在下游任务的语料库上进行微调

根据预训练的任务不同,预训练语言模型可以划分为以下几类:

(4) 深度生成模型

生成模型(generative model)是指使用带参数$\theta$的概率分布$p_{\theta}(x)$拟合已有数据样本集\(\{x\}\)。由于概率分布$p_{\theta}(x)$的形式通常是未知的,可以将其假设为离散型或连续型分布;若进一步引入隐变量(latent variable) $z$,则可以间接地构造概率分布$p_{\theta}(x)$:

\[p_{\theta}(x) = \int p_{\theta}(x,z) dz = \int p_{\theta}(x|z)p(z) dz\]

参数$\theta$的求解可以通过极大似然估计。若记真实数据分布为$\tilde{p}(x)$,则优化目标为最大化对数似然\(\Bbb{E}_{x\text{~}\tilde{p}(x)}[\log p_{\theta}(x)]\)。由于该算式包含积分运算,直接求解比较困难;不同的生成模型通过不同的求解技巧避开这个困难。

⚪ 自回归模型 (Auto-Regressive)

从最严格的角度来看,图像应该是一个离散的分布,因为它是由有限个像素组成的,而每个像素的取值也是离散的、有限的,因此可以通过离散分布来描述。这个思路的成果就是PixelRNN一类的模型了,我们称之为“自回归流”,其特点就是无法并行,所以计算量特别大。所以,我们更希望用连续分布来描述图像。当然,图像只是一个场景,其他场景下我们也有很多连续型的数据,所以连续型的分布的研究是很有必要的。

的本质,就是希望用一个我们知道的概率模型来拟合所给的数据样本,也就是说,我们得写出一个带参数θ的分布qθ(x)。然而,我们的神经网络只是“万能函数拟合器”,却不是“万能分布拟合器”,也就是它原则上能拟合任意函数,但不能随意拟合一个概率分布,因为概率分布有“非负”和“归一化”的要求。这样一来,我们能直接写出来的只有离散型的分布,或者是连续型的高斯分布。

生成对抗网络 (Generative Adversarial Network)

生成对抗网络通过交替优化的对抗训练绕开了似然的直接求解,使用生成器$G$构造真实分布的近似分布\(P_G(x)\),并使用判别器衡量生成分布和真实分布之间的差异。

\[\begin{aligned} \mathop{ \min}_{G} \mathop{\max}_{D} \Bbb{E}_{x \text{~} P_{data}(x)}[\log D(x)] + \Bbb{E}_{z \text{~} P(z)}[\log(1-D(G(z)))] \end{aligned}\]

生成对抗网络的设计是集目标函数、网络结构、优化过程于一体的,GAN的各种变体也是基于对这些方面的改进:

变分自编码器 (Variational Autoencoder)

变分自编码器的优化目标不是对数似然,而是对数似然的变分下界:

\[\log p_{\theta}(x) \geq \mathbb{E}_{z \text{~} q_{\phi}(z|x)} [\log p_{\theta}(x | z)] - KL[q_{\phi}(z|x)||p(z)]\]

VAE的优化目标共涉及三个不同的概率分布:由概率编码器表示的后验分布$q_{\phi}(z|x)$、隐变量的先验分布$p(z)$以及由概率解码器表示的生成分布$p_{\theta}(x|z)$。对VAE的各种改进可以落脚于对这些概率分布的改进:

流模型 (Flow-based Model)

流模型通过一系列可逆变换(双射函数$f$)建立较为简单的先验分布$p(z)$与较为复杂的实际数据分布$p(x)$之间的映射关系:

\[\begin{aligned} x&=f_K \circ \cdots \circ f_1(z) \\ p(x) &= p(z)\cdot |\prod_{k=1}^{K} \det J_{f_k}(z_{k-1})|^{-1} \end{aligned}\]

由于流模型给出了概率分布$p(x)$的显式表达式,可直接最大化对数似然:

\[\begin{aligned} \log p(x) = \log p(z) - \sum_{k=1}^{K}\log | \det J_{f_k}(z_{k-1})| \end{aligned}\]

从优化目标中可以看出,流模型是由先验分布$p(z)$和双射函数$x=f(z)$唯一确定的。根据双射函数的不同设计思路,流模型分为以下两类:

扩散模型

⚪ 其他生成网络

Generative Moment Matching Network

(4) 其他类型的神经网络

递归神经网络 (Recursive Neural Network)

递归神经网络是循环神经网络在有向无环图上的扩展,主要用来建模自然语言句子的语义。给定一个句子的语法结构(一般为树状结构),可以使用递归神经网络来按照句法的组合关系来合成一个句子的语义。句子中每个短语成分又可以分成一些子成分,即每个短语的语义都可以由它的子成分语义组合而来,并进而合成整句的语义。

典型的递归神经网络包括递归神经张量网络、矩阵-向量递归网络、Tree LSTM

记忆增强神经网络 (Memory Augmented Neural Network)

记忆增强神经网络在神经网络中引入外部记忆单元来提高网络容量。记忆网络的模块包括:主网络$C$负责信息处理以及与外界的交互;外部记忆单元$M$用来存储信息;读取模块$R$根据主网络生成的查询向量从外部记忆单元读取信息;写入模块$W$根据主网络生成的查询向量和要写入的信息更新外部记忆单元。读取或写入操作通常使用注意力机制实现。

典型的记忆增强神经网络包括端到端记忆网络、神经图灵机。

图神经网络 (Graph Neural Network)

图神经网络是用于处理图结构的神经网络,其核心思想是学习一个函数映射$f(\cdot)$,图中的节点$v_i$通过该映射可以聚合它自己的特征$x_i$与它的邻居特征$x_{j \in N(v_i)}$来生成节点$v_i$的新表示。

GNN可以分为两大类,基于空间(spatial-based)和基于谱(spectral-based)。

胶囊网络

2. 深度学习的基本组件和方法技巧

(1) 深度学习的基本组件

激活函数 (Activation Function)

激活函数能为神经网络引入非线性,在设计激活函数时可以考虑的性质包括:连续可导、计算量小、没有饱和区、没有偏置偏移、具有生物可解释性、提取上下文信息、通用近似性。

常见的激活函数根据设计思路分类如下:

优化方法 (Optimization)

深度学习中的优化问题是指在已有的数据集上实现最小的训练误差$l(\theta)$,通常用基于梯度的数值方法求解。在实际应用梯度方法时,可以根据截止到当前步$t$的历史梯度信息\(\{g_{1},...,g_{t}\}\)计算修正的参数更新量$h_t$(比如累积动量、累积二阶矩校正学习率等)。指定每次计算梯度所使用数据批量 $\mathcal{B}$ 和学习率 $\gamma$,则第$t$次参数更新为:

\[\begin{aligned} g_t&=\frac{1}{\|\mathcal{B}\|}\sum_{x \in \mathcal{B}}^{}\nabla_{\theta} l(θ_{t-1}) \\ h_t &= f(g_{1},...,g_{t}) \\ θ_t&=θ_{t-1}-\gamma h_t \end{aligned}\]

基于梯度的方法存在一些缺陷,不同的改进思路如下:

正则化方法 (Regularization)

正则化指的是通过引入噪声或限制模型的复杂度,降低模型对输入或者参数的敏感性,避免过拟合,提高模型的泛化能力。常用的正则化方法包括:

归一化方法 (Normalization)

输入数据的特征通常具有不同的量纲和取值范围,使得不同特征的尺度差异很大。归一化泛指把数据特征的不同维度转换到相同尺度的方法。深度学习中常用的归一化方法包括:

  1. 基础归一化方法:最小-最大值归一化、标准化、白化、逐层归一化
  2. 深度学习中的特征归一化:局部响应归一化LRN、批归一化BN、层归一化LN、实例归一化IN、组归一化GN、切换归一化SN
  3. 改进特征归一化:(改进BNBatch Renormalization, AdaBN, L1-Norm BN, GBN, SPADE;(改进LNRMS Norm;(改进INFRN, AdaIN
  4. 深度学习中的参数归一化:权重归一化WN、余弦归一化CN、谱归一化SN

参数初始化方法 (Parameter Initialization)

对神经网络进行训练时,需要对神经网络的参数进行初始化。糟糕的初始化不仅会使模型效果变差,还有可能使得模型根本训练不动或者不收敛。

常见的初始化方法包括零初始化、随机初始化、稀疏初始化、Xavier初始化、Kaiming初始化、正交初始化、恒等初始化、ZerO初始化、模仿初始化。

(2) 深度学习的方法

半监督学习 (Semi-Supervised Learning)

半监督学习是指同时从有标签数据和无标签数据中进行学习。半监督学习的假设包括平滑性假设、聚类假设、低密度分离假设和流形假设。

常用的半监督学习方法包括:

度量学习 (Metric Learning)

深度度量学习通过共享权重的Siamese网络把原始样本映射到低维特征空间,并设计合理的度量损失使得同类样本在特征空间上的距离比较近,不同类样本之间的距离比较远。

度量学习的目标在于最小化相似样本(正样本对)之间的距离,最大化不相似样本(负样本对)之间的距离。深度度量损失包括:

多任务学习 (Multi-Task Learning)

多任务学习是指同时学习多个属于不同领域的任务,并通过特定任务的领域信息提高泛化能力。多任务学习的方法设计可以分别从网络结构损失函数两个角度出发。

一个高效的多任务网络,应同时兼顾特征共享部分和任务特定部分。根据模型在处理不同任务时网络参数的共享程度,多任务学习方法的网络结构可分为:

多任务学习将多个相关的任务共同训练,其总损失函数是每个任务的损失函数的加权求和式:\(\mathcal{L}_{total} = \sum_{k}^{} w_k\mathcal{L}_k\)。多任务学习的目的是寻找模型参数的帕累托最优解,因此需要设置合适的任务权重。一些权重自动设置方法包括Uncertainty, Gradient Normalization, Dynamic Weight Average, Multi-Objective Optimization, Dynamic Task Prioritization, Loss-Balanced Task Weighting

主动学习 (Active Learning)

主动学习是指从未标注数据中只选择一小部分样本进行标注和训练来降低标注成本。深度主动学习最常见的场景是基于(pool-based)的主动学习,即从大量未标注的数据样本中迭代地选择最“有价值”的数据,直到性能达到指定要求或标注预算耗尽;选择最“有价值”的数据的过程被称为采样策略

深度主动学习方法可以根据不同的采样策略进行分类:

迁移学习 (Transfer Learning)

迁移学习是指将解决某个问题时获取的知识应用在另一个不同但相关的问题中。根据源域数据和目标域数据的标签存在情况,迁移学习可以细分为:

模型微调是指用带有标签的源域数据预训练模型后,再用带有标签的目标域数据微调模型。

领域自适应是指通过构造合适的特征提取模型,使得源域数据和目标域数据的特征落入相同或相似的特征空间中,再用这些特征解决下游任务。常用的领域自适应方法包括:

(3) 深度学习的技巧

长尾分布 (Long-Tailed)

实际应用中的数据集大多服从长尾分布,即少数类别(head class)占据绝大多数样本,多数类别(tail class)仅有少量样本。解决长尾分布问题的方法包括:

对抗训练 (Adversarial Training)

对抗训练是指通过构造对抗样本,对模型进行对抗攻击和防御来增强模型的稳健性。对抗训练的一般形式如下:

\[\mathcal{\min}_{\theta} \mathbb{E}_{(x,y)\sim \mathcal{D}} \left[ \mathcal{\max}_{\Delta x \in \Omega} \mathcal{L}(x+\Delta x,y;\theta) \right]\]

大模型的参数高效微调 (Parameter-Efficient Fine-Tuning)

将预训练好的大型模型在下游任务上进行微调已成为处理不同任务的通用范式;但是随着模型越来越大,对模型进行全部参数的微调(full fine-tuning)变得非常昂贵。参数高效微调是指冻结预训练模型的大部分参数,仅微调少量或额外的模型参数。

参数高效微调方法有以下几种形式:

() 网络压缩

网络压缩旨在平衡网络的准确性和运算效率。 压缩预训练的网络 设计新的网络结构

3. 深度学习的应用

(1) 计算机视觉

图像识别 (Image Recognition)

图像识别是计算机视觉的基本任务,旨在对每张图像内出现的物体进行类别区分。基于深度学习的图像识别方法不需要手工提取特征,而是使用卷积神经网络自动提取特征并进行分类。应用于图像识别任务的卷积神经网络的结构发展包括:

  1. 早期探索:奠定“卷积层-下采样层-全连接层”的拓扑结构。如LeNet5, AlexNet, ZFNet, NIN, SPP-net, VGGNet
  2. 深度化:增加堆叠卷积层的数量。如Highway Network, ResNet, Stochastic Depth, DenseNet, Pyramidal ResNet
  3. 模块化:设计用于堆叠的网络模块。如Inception v1-4, WideResNet, Xception, ResNeXt, NASNet, ResNeSt, ConvNeXt v1-2
  4. 轻量化:设计轻量级卷积层,可参考轻量级卷积神经网络
  5. 其他结构:Noisy Student, SCAN, NFNet, ResNet-RS

图像分割 (Image Segmentation)

图像分割是对图像中的每个像素进行分类,可以细分为:

图像分割模型通常采用编码器-解码器结构。编码器从预处理的图像数据中提取特征,解码器把特征解码为分割掩码。图像分割模型的发展趋势可以大致总结为:

图像分割中常用的评估指标包括:PA, CPA, MPA, IoU, MIoU, FWIoU, Dice Coefficient

图像分割的损失函数用于衡量预测分割结果和真实标签之间的差异。根据损失函数的推导方式不同,图像分割任务中常用的损失函数可以划分为:

目标检测

人体姿态估计

图像超分辨率 (Super Resolution)

图像超分辨率旨在将低分辨率图像LR放大为对应的高分辨率图像HR,从而使图像更清晰。图像超分辨率的传统方法主要是基于插值的方法,如最邻近插值、双线性插值、双三次插值;而基于深度学习的图像超分辨率方法,可以根据上采样的位置不同进行分类:

图像超分辨率的评估指标主要包括峰值信噪比PSNR和结构相似度SSIM

时空动作检测 (Spatio-Temporal Action Detection)

时空动作检测旨在识别视频中目标动作出现的区间和对应的类别,并在空间范围内用一个包围框标记出人物的空间位置。按照处理方式不同,时空动作检测可方法以分为:

人脸检测, 识别与验证 (Face Detection, Recognition, and Verification)

人脸检测是指检测任意一幅给定的图像中是否含有人脸,如果是则返回人脸的位置、大小和姿态,是人脸验证与识别的关键步骤。常用的人脸检测方法包括Eigenface, SSH

人脸识别是指判断给定的人脸图像属于用户数据库中的哪个人(或没有匹配),是一种多分类问题。常用的人脸识别方法包括DeepFace

人脸验证是指判断给定的人脸图像和用户ID是否匹配,是一种二分类问题。常用的人脸识别方法包括DeepID, DeepID2

行人检测与属性识别 (Pedestrian Detection and Attribute Recognition)

行人检测是指找出图像或视频帧中所有的行人,包括位置和大小;常用的行人检测方法包括DeepParts

行人属性识别是指从行人图像中挖掘具有高级语义的属性信息;常用的行人属性识别方法包括DeepSAR, DeepMAR, HydraPlus-Net

文本检测与识别 (Text Detection and Recognition)

文本检测是指找出图像中的文字区域;文本识别是指对定位好的文字区域进行识别,将图像中的文字区域进转化为字符信息。常用的文本检测与识别方法包括EAST, CRNN, Mask TextSpotter

点云分类 (Point Cloud Classification)

点云分类即点云形状分类,是一种重要的点云理解任务。该任务的方法通常首先学习每个点的嵌入,然后使用聚合方法从整个点云中提取全局形状嵌入,并通过分类器进行分类。根据神经网络输入的数据格式,三维点云分类方法可分为:

(2) 自然语言处理

1

(3) AI for Science

4. 参考文献与扩展阅读

⚪ 深度学习的相关课程

⚪ 深度学习的相关书籍

⚪ 深度学习的相关博客