从深度学习基础、卷积网络和循环网络三个方面介绍

从 | 麦为AI研究院

最近,我在做笔记和复习内容。我觉得这个总结太漂亮了。真的很棒!

Andrew Ng 在推特上展示了 TessFerrandez 完成的深度学习专题课程的信息图,精美地记录了深度学习课程的知识和亮点。因此,它不仅适合初学者了解深度学习,也适合机器学习从业者和研究人员复习基本概念。这不仅仅是一个课程笔记,而是一组信息图表和备忘录。

本篇笔记从深度学习基础、卷积网络和循环网络三个方面进行介绍。

二、卷积网络

三、循环网络

01

深度学习基础

1. 深度学习的基本概念

监督学习:所有输入数据都有确定的对应输出数据。在各种网络架构中,输入数据和输出数据的节点层位于网络的两端,训练过程就是不断调整它们之间的网络连接权重。

左上:列出了各种网络架构的监督学习,例如可用于训练房屋特征和房价之间的函数的标准神经网络 (NN),以及可用于训练图像的卷积神经网络 (CNN)和类别。函数,循环神经网络(RNN)可用于训练语音和文本之间的函数。

左下:分别显示了 NN、CNN 和 RNN 的简化架构。这三种架构的前向过程不同,NN使用权重矩阵(连接)和节点值相乘,依次传播到下一层节点;CNN使用矩形卷积核对图像输入依次进行翻转乘积运算和滑动的方式得到下一层的输入;RNN 记住或忘记上一个时间步的信息,为当前的计算过程提供长期记忆。

右上角:NN 可以处理结构化数据(表格、数据库等)和非结构化数据(图像、音频等)。

右下:深度学习的发展主要得益于大数据的出现,神经网络的训练需要大量的数据;而大数据本身又反过来推动了更大网络的出现。深度学习研究的一个重大突破是一种新型激活函数的出现。用 ReLU 函数代替 sigmoid 函数可以在反向传播中保持快速的梯度下降过程。sigmoid 函数的导数在正无穷和负无穷处趋于零。,这就是梯度消失导致训练缓慢甚至失败的主要原因。学习深度学习,需要学习“idea-code-experiment-idea”的良性循环。

2. 逻辑回归

左上:逻辑回归主要用于二分类问题。如图,逻辑回归可以解决图片是否为猫的问题,其中图片为输入(x),猫(1)或非猫(0)为输出) . 我们可以把逻辑回归看成是分离两组数据点的问题,如果只有线性回归(激活函数是线性的),那么对于具有非线性边界的数据点(例如被包围的一组数据点)另一组)无法有效分离,所以这里我们需要将线性激活函数替换为非线性激活函数,这种情况下,我们使用的是sigmoid激活函数,其范围为(0, 1)的平滑函数@> 可以使神经网络的输出得到一个连续的、归一化的(概率值)结果。例如,当输出节点为(0.2,0.8)时,判断该图像为非猫(0).

左下:神经网络的训练目标是确定最合适的权重 w 和偏置项 b。过程是什么样的?

这种分类实际上是一个优化问题。优化过程的目的是使预测值 y hat 与实际值 y 之间的差距最小化,这可以通过找到目标函数的最小值来正式实现。所以我们首先确定目标函数的形式(损失函数,代价函数),然后使用梯度下降逐渐更新w和b。当损失函数达到最小值或足够小时,我们可以获得良好的预测结果。

右上:损失函数值在参数表面上变化的简化图。梯度可以用来寻找最快的下降路径,学习率的大小可以决定收敛速度和最终结果。学习率大时,初始收敛速度很快,不容易停留在局部最小值,但后期很难收敛到稳定值;当学习率较小时,情况正好相反。一般来说,我们希望在训练开始时有较大的学习率,在后期有较小的学习率。后面我们会介绍改变学习率的训练方法。

右下:总结整个训练过程,从输入节点x开始,通过前向传播得到预测输出yhat,用yhat和y得到损失函数值,开始进行反向传播,更新w和b,和重复这个过程,直到收敛。

3. 浅层网络的特征

左上:浅层网络的隐藏层较少。如图所示,只有一个隐藏层。

左下:下面是不同激活函数的特点:

右上角:为什么要使用激活函数?更准确地说,为什么要使用非线性激活函数?

从上图中的例子可以看出,没有激活函数的神经网络经过两层传播,最终的结果和单层的线性运算是一样的,也就是说,如果没有非线性激活函数使用的,无论多少层的神经网络都等价于单层神经网络(没有输入层)。

右下:如何初始化参数w、b的值?

当所有参数初始化为零时,所有节点将变得相同,在训练过程中只能学习到相同的特征,而不能学习到多层次和多样化的特征。解决方法是随机初始化所有参数,但只有很小的方差,所以使用 Rand(0.01) 进行初始化,其中 0.01 也是超参数之一。

4. 深度神经网络的特点

左上:神经网络的参数容量随着层数的增加呈指数增长,也就是一些深度神经网络可以解决的问题,浅层神经网络需要相对指数计算才能解决。

左下:CNN的深度网络可以将底层的简单特征逐层组合成越来越复杂的特征。深度越大,它可以分类的图像的复杂性和多样性就越大。RNN 的深度网络也是如此,它可以将语音分解为音素,然后逐渐将它们组合成字母、单词和句子,以执行复杂的语音到文本的任务。

右:深度网络的特点是需要大量的训练数据和计算资源,涉及大量的矩阵运算,可以在GPU上并行执行,还包含大量的超参数,比如学习率、迭代次数、隐藏层数、激活函数选择、学习率调整方案、batch size、正则化方法等。

5. 偏差和方差

那么在部署机器学习模型时需要注意什么?下图说明了构建 ML 应用程序所需的数据集分区、偏差和方差问题。

如上图所示,经典机器学习和深度学习模型所需的样本数量差别很大,而深度学习中的样本数量是经典ML的数千倍。因此,训练集、开发集和测试集的分布也有很大的不同,当然我们假设这些不同的数据集服从相同的分布。

偏差和方差问题也是机器学习模型中的常见挑战。上图依次展示了高偏差导致的欠拟合和高方差导致的过拟合。一般来说,解决高偏差的问题是选择更复杂的网络或不同的神经网络架构,而解决高方差的问题可以增加正则化,减少模型冗余,或者使用更多的数据进行训练。

当然,机器学习模型需要注意的问题要多得多,但它们是配置我们的 ML 应用程序的最基本和最重要的部分。其他如数据预处理、数据归一化、超参数选择等都体现在下面的图表中。

6. 正则化

正则化是解决高方差或模型过拟合的主要方法。在过去的几年里,研究人员提出并开发了多种适用于机器学习算法的正则化方法,如数据增强、L2正则化(权重衰减)、L1正则化Dropout、Drop Connect、随机池化、提前终止等。

如上图左栏所示,L1和L2正则化也是机器学习中应用最广泛的正则化方法。L1正则化在目标函数中加入一个正则化项,以减少参数绝对值之和;而在 L2 正则化中,添加正则化项的目的是减少参数的平方和。根据前人的研究,L1正则化中的很多参数向量都是稀疏向量,因为很多模型导致参数趋近于0,所以常用于特征选择设置。此外,参数 norm 惩罚 L2 正则化允许深度学习算法“感知”具有更高方差的输入 x,

在中间一列,上图显示了 Dropout 技术,一种临时丢弃神经元子集及其连接的方法。随机丢弃神经元可防止过度拟合,同时以指数方式有效地连接不同的网络架构。一般采用Dropout技术的神经网络会设置一个保留率p,然后每个神经元会在一批训练中以1-p的概率随机选择是否丢弃它。在推理结束时需要保留所有神经元,因此具有更高的准确性。

Bagging 是一种通过组合多个模型来减少泛化误差的技术。主要方法是分别训练几个不同的模型,然后让所有模型对测试样本的输出进行投票。Dropout 可以被认为是一种集成了大量深度神经网络的 bagging 方法,因此它提供了一种廉价的 bagging 集成逼近,能够用大量数据训练和评估神经网络。

最后,上图还描述了数据增强和提前终止等正则化方法。数据增强通过向训练数据添加转换或扰动来人为地增强训练数据集。数据增强技术,例如水平或垂直翻转图像、裁剪、颜色转换、缩放和旋转,通常用于视觉表示和图像分类。并且提前终止通常用于防止在训练期间过度表达模型的泛化性能不佳。如果迭代次数太少,算法容易欠拟合(方差小,偏差大),如果迭代次数太多,算法容易过拟合(方差大,偏差小)。所以,

7. 优化

优化是机器学习模型中非常非常重要的模块。它不仅支配着整个训练过程,而且决定了最终的模型性能和收敛时间。下面两张信息图展示了优化方法需要注意的知识点,包括优化准备和具体优化方法。

以上展示了优化所需要的常见问题和操作。首先,在进行优化之前,我们需要对输入数据进行归一化,开发集和测试集归一化的常数(均值和方差)与训练集相同。上图也说明了归一化的原因,因为如果特征之间的幅度差异过大,那么损失函数的表面就是一个狭长的椭圆,而梯度下降或最速下降法会由于“锯齿”现象。收敛很困难,因此归一化为圆形有助于减少下降方向的振荡。

下面的梯度消失和梯度爆炸问题也是很常见的现象。“梯度消失”是指参数的梯度范数随着网络深度的增加呈指数下降的现象。梯度小,意味着参数变化缓慢,使得学习过程停滞不前。梯度爆炸是指在神经网络训练过程中不断积累较大的误差梯度,导致模型权重的较大更新。在极端情况下,权重的值变得如此之大,以至于出现了 NaN 值。

梯度测试现在可能用得少了,因为我们只需要调用优化器在 TensorFlow 或其他框架上执行优化算法。梯度测试一般使用数值方法计算近似导数并传播,因此它可以检查我们解析计算的梯度是否正确。

下面是具体的优化算法,包括最基本的mini-batch随机梯度下降、带动量的随机梯度下降、自适应学习率算法如RMSProp。

小批量随机梯度下降(通常是 SGD 指的)使用一批数据来更新参数,从而大大减少了一次迭代所需的计算量。这种方法减少了更新参数的方差,使收敛过程更加稳定;它还利用流行的深度学习框架中高度优化的矩阵算子来有效地找到每个小批量的梯度。通常,一个小批量包含 50 到 256 个样本,但这会因不同用途而异。

动量策略旨在加速 SGD 的学习过程,尤其是在高曲率的情况下。通常,动量算法使用先前梯度的指数衰减滑动平均值来校正该方向,从而更好地利用来自历史梯度的信息。该算法引入变量v作为参数在参数空间中不断移动速度向量,速度一般可以设置为负梯度的指数衰减滑动平均。

上图后面描述的RMSProp和Adam等自适应学习率算法是目前我们最常用的优化方法。RMSProp算法(Hinton,2012)修改AdaGrad使其在非凸情况下表现更好,它将梯度累积改变为指数加权移动平均,从而丢弃更远的历史梯度信息。RMSProp是Hinton公开的可用类中提出的优化算法其实可以看成是AdaDelta的一个特例,但是实践证明RMSProp的性能非常好,目前在深度学习中得到了广泛的应用。

Adam 算法获得了 AdaGrad 和 RMSProp 算法的优点。Adam 不仅像 RMSProp 算法一样基于一阶矩均值计算自适应参数学习率,而且还充分利用了梯度的二阶矩均值(即有偏方差/非中心方差)。

8. 超参数

下面是一张介绍超参数的信息图,超参数在神经网络中发挥着重要作用,因为它们可以直接提高模型的性能。

众所周知,学习率、神经网络的隐藏单元数、batch size、层数和正则化系数等超参数会直接影响模型的性能,如何调整非常重要。目前最常用的方式是手动调整参数。开发者会根据自己的建模经验选择“合理”的超参数,然后根据模型性能做一些小调整。但是,随机过程或贝叶斯优化等自动参数调整仍然需要非常大的计算量,效率相对较低。然而,最近,在使用强化学习、遗传算法和神经网络等方法搜索超参数方面取得了很大进展,

当前的超参数搜索方法有:

由于篇幅有限,下面的演示将只简单介绍信息图表,相信对各位读者很有帮助。

9. 结构化机器学习过程

我们需要从流程或结构方面来设置我们的机器学习系统,首先我们需要设置模型要达到的目标,比如它的预期性能是什么,测量方法是什么等。然后拆分训练神经网络 参数初始化,开发,并测试集并预测可能达到的优化水平。然后构建和训练模型,并在开发和测试集上验证后用于推理。

10. 错误分析

训练后,我们可以分析错误的来源以提高性能,包括发现错误的标签、错误的损失函数等。

11. 训练集、开发集和测试集

上图展示了三个分割数据集,以及它们的性能需要注意什么,即如果它们的准确率不同,我们如何纠正这些“差异”。例如,训练集的正确率明显高于验证集和测试集,说明模型过拟合。

12. 其他学习方法

机器学习和深度学习当然不仅仅是监督学习方法,还有迁移学习、多任务学习和端到端学习。

02

卷积网络

13. 卷积神经网络基础

计算机视觉任务涉及的数据量特别大。图像中有数千个数据点,更不用说分辨率更高的图像和视频了。这时候如果使用全连接网络,参数个数太大,所以改用卷积神经网络(CNN),可以大大减少参数个数。CNN 的工作方式类似于使用过滤器扫描整个图像,这些过滤器检测特定特征、执行特征提取并将它们逐层组合成越来越复杂的特征。这种“扫描”的工作方式可以很好地共享参数,从而可以检测到不同位置的相同目标(平移对称)。

卷积核对应的检测特征可以简单的从其参数分布来判断。比如权重从左到右递减的卷积核,可以检测出黑白竖条的边界,将其显示为一个中间亮边和暗边的特征图,具体的相对明暗结果取决于相对关系在图像像素分布和卷积核之间。卷积核权重可以直接硬编码,但是为了使相同的架构适应不同的任务,最好通过训练得到卷积核权重。

卷积运算的主要参数:

Padding:直接卷积操作会使得到的特征图越来越小。padding操作会在图像周围添加一个0像素值的边缘,使得卷积后得到的特征图大小与原图相同(长度和宽度,不包括通道)。号)相同。

常用的两个选项是:“VALID”,不进行填充;“SAME”,这使得输出特征图的长度和宽度与原始图像相同。

步幅:两个卷积操作之间的步幅大小。

一个卷积层上可以有多个卷积核。每个卷积核操作得到的结果就是一个通道。每个通道的特征图长宽相同,可以堆叠形成多通道特征图作为下一卷。层的输入。

深度卷积神经网络的架构:

深度卷积神经网络的架构主要包括卷积层、池化层的多层堆叠,最后是一个全连接层来执行分类。池化层的主要作用是减小特征图的大小,从而减少参数数量,加快运算速度,使目标检测性能更加鲁棒。

14. 经典卷积神经网络

15. 特殊卷积神经网络

16. 实用建议

17. 目标检测算法

目标检测是利用边界框来检测物体在图像中的位置。Faster R-CNN、R-FCN和SSD是三种最优化、使用最广泛的目标检测模型。上图也展示了YOLO的基本流程。

18.人脸识别

人脸识别的应用主要有两大类:人脸验证(二分类)和人脸识别(多人分类)。

当样本量不足,或者不断增加新样本时,需要使用one-shot learning。解决的办法是学习一个相似度函数,即判断两幅图像的相似度。例如,在Siamese Network中学习人脸识别时,使用两个网络的输出来减小同一个人的两个输出之间的差异,并增加不同人的两个输出之间的差异。

19. 风格转移

风格转换是一个热门话题,它可以在视觉上令人耳目一新。比如你有一张图片,然后将另一张图片的风格特征应用到这张图片上,比如把你的形象修改成名画家或者某幅名画的风格神经网络 参数初始化,这样就可以得到独特的作品风格。

03

循环网络

20. 循环神经网络基础

如上图所示,命名实体识别等序列问题在现实生活中占比很大,而隐马尔可夫链等传统机器学习算法只能做强假设,处理部分序列问题。但是最近递归神经网络在这些问题上取得了很大的突破。RNN 的隐藏状态的结构以循环的形式被记忆。隐藏层在每一时刻的状态取决于它过去的状态。这种结构使 RNN 能够在很长一段时间内保存、记忆和处理过去的复杂信号。

循环神经网络 (RNN) 能够从序列和时间序列数据中学习特征和长期依赖关系。RNN 有一堆非线性单元,其中单元之间至少有一个连接形成一个有向循环。经过训练的 RNN 可以对任何动态系统进行建模;然而,经过训练的 RNN 主要受学习长期依赖问题的影响。

下面展示了 RNN 的应用、问题和变体:

循环神经网络在语言建模等序列问题上具有非常强大的威力,但同时它也存在非常严重的梯度消失问题。因此,LSTM 和 GRU 等基于门的 RNN 具有很大的潜力,它们利用门控机制来保留或忘记前一个时间步的信息,并形成记忆以提供当前的计算过程。

21. NLP 中的词表示

词嵌入在自然语言处理中非常重要,因为无论执行什么任务,表示词都是必须的。上图展示了词嵌入的方法,我们可以将词汇映射到一个 200 或 300 维的向量,从而大大减少了表示词的空间。此外,这种词表示方法也可以表示词的语义,因为具有相似含义的词在嵌入空间中的距离相似。

除了上面描述的 Skip Grams,下面还展示了学习词嵌入的常用方法:

GloVe词向量是一种很常见的词向量学习方法,它学习到的词表示可以进一步用于句子分类等任务。

22. 序列到序列

1)1@>

最常用的sequence-to-sequence方法是encoder-decoder框架,引入了beam search等其他模块。

编码器-解码器架构加上注意力机制可以解决许多自然语言处理问题。下面介绍BLEU分数和注意力机制。它们是机器翻译架构和评估中不可或缺的一部分。

1)2@>

以上就是吴恩达深度学习专题课程的全部信息图。由于它们包含的信息很多,我们只介绍其中的一部分,还有很多内容只是简单提及。所以,最好让读者自己收藏,在后面的学习过程中慢慢理解和优化。

(点击标题跳转阅读)

老铁,支持三联好不好?↓↓↓

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论