吴恩达在推特上展现了一份由 TessFerrandez 完成的深度学习专项课程信息图,这套信息图优美地记录了深度学习课程的知识与亮点。所以它不只仅适合初学者了解深度学习,还适合机器学习从业者和研究者复习基本概念。机器之心认为这不只仅是一份课程笔记,同时仍是一套信息图与备忘录。下面,咱们将从深度学习基础、卷积网络和循环网络三个方面介绍该笔记,并提供信息图下载地址。
深度学习基础
1 深度学习基本概念
监督学习:全部输入数据都有肯定的对应输出数据,在各类网络架构中,输入数据和输出数据的节点层都位于网络的两端,训练过程就是不断地调整它们之间的网络链接权重。
左上:列出了各类不一样网络架构的监督学习,好比标准的神经网络(NN)可用于训练房子特征和房价之间的函数,卷积神经网络(CNN)可用于训练图像和类别之间的函数,循环神经网络(RNN)可用于训练语音和文本之间的函数。
左下:分别展现了 NN、CNN 和 RNN 的简化架构。这三种架构的前向过程各不相同,NN 使用的是权重矩阵(链接)和节点值相乘并陆续传播至下一层节点的方式;CNN 使用矩形卷积核在图像输入上依次进行卷积操做、滑动,获得下一层输入的方式;RNN 记忆或遗忘先前时间步的信息觉得当前计算过程提供长期记忆。
右上:NN 能够处理结构化数据(表格、数据库等)和非结构化数据(图像、音频等)。
右下:深度学习能发展起来主要是因为大数据的出现,神经网络的训练须要大量的数据;而大数据自己也反过来促进了更大型网络的出现。深度学习研究的一大突破是新型激活函数的出现,用 ReLU 函数替换sigmoid 函数能够在反向传播中保持快速的梯度降低过程,sigmoid 函数在正无穷处和负无穷处会出现趋于零的导数,这正是梯度消失致使训练缓慢甚至失败的主要缘由。要研究深度学习,须要学会「idea—代码—实验—idea」的良性循环。
2 logistic 回归
左上:logistic 回归主要用于二分类问题,如图中所示,logistic 回归能够求解一张图像是否是猫的问题,其中图像是输入(x),猫(1)或非猫(0)是输出。咱们能够将 logistic 回归当作将两组数据点分离的问题,若是仅有线性回归(激活函数为线性),则对于非线性边界的数据点(例如,一组数据点被另外一组包围)是没法有效分离的,所以在这里须要用非线性激活函数替换线性激活函数。在这个案例中,咱们使用的是 sigmoid 激活函数,它是值域为(0, 1)的平滑函数,可使神经网络的输出获得连续、归一(几率值)的结果,例如当输出节点为(0.2, 0.8)时,断定该图像是非猫(0)。
左下:神经网络的训练目标是肯定最合适的权重 w 和偏置项 b,那这个过程是怎么样的呢?
这个分类其实就是一个优化问题,优化过程的目的是使预测值 y hat 和真实值 y 之间的差距最小,形式上能够经过寻找目标函数的最小值来实现。因此咱们首先肯定目标函数(损失函数、代价函数)的形式,而后用梯度降低逐步更新 w、b,当损失函数达到最小值或者足够小时,咱们就能得到很好的预测结果。
右上:损失函数值在参数曲面上变化的简图,使用梯度能够找到最快的降低路径,学习率的大小能够决定收敛的速度和最终结果。学习率较大时,初期收敛很快,不易停留在局部极小值,但后期难以收敛到稳定的值;学习率较小时,状况恰好相反。通常而言,咱们但愿训练初期学习率较大,后期学习率较小,以后会介绍变化学习率的训练方法。
右下:总结整个训练过程,从输入节点 x 开始,经过前向传播获得预测输出 y hat,用 y hat 和 y 获得损失函数值,开始执行反向传播,更新 w 和 b,重复迭代该过程,直到收敛。
3 浅层网络的特色
左上:浅层网络即隐藏层数较少,如图所示,这里仅有一个隐藏层。
-
sigmoid:sigmoid 函数经常使用于二分分类问题,或者多分类问题的最后一层,主要是因为其归一化特性。sigmoid 函数在两侧会出现梯度趋于零的状况,会致使训练缓慢。
-
tanh:相对于 sigmoid,tanh 函数的优势是梯度值更大,可使训练速度变快。
-
ReLU:能够理解为阈值激活(spiking model 的特例,相似生物神经的工做方式),该函数很经常使用,基本是默认选择的激活函数,优势是不会致使训练缓慢的问题,而且因为激活值为零的节点不会参与反向传播,该函数还有稀疏化网络的效果。
-
Leaky ReLU:避免了零激活值的结果,使得反向传播过程始终执行,但在实践中不多用。
右上:为何要使用激活函数呢?更准确地说是,为何要使用非线性激活函数呢?
上图中的实例能够看出,没有激活函数的神经网络通过两层的传播,最终获得的结果和单层的线性运算是同样的,也就是说,没有使用非线性激活函数的话,不管多少层的神经网络都等价于单层神经网络(不包含输入层)。
当将全部参数初始化为零的时候,会使全部的节点变得相同,在训练过程当中只能学到相同的特征,而没法学到多层级、多样化的特征。解决办法是随机初始化全部参数,但仅需少许的方差就行,所以使用 Rand(0.01)进行初始化,其中 0.01 也是超参数之一。
4 深度神经网络的特色
左上:神经网络的参数化容量随层数增长而指数式地增加,即某些深度神经网络能解决的问题,浅层神经网络须要相对的指数量级的计算才能解决。
左下:CNN 的深度网络能够将底层的简单特征逐层组合成愈来愈复杂的特征,深度越大,其能分类的图像的复杂度和多样性就越大。RNN 的深度网络也是一样的道理,能够将语音分解为音素,再逐渐组合成字母、单词、句子,执行复杂的语音到文本任务。
右边:深度网络的特色是须要大量的训练数据和计算资源,其中涉及大量的矩阵运算,能够在 GPU 上并行执行,还包含了大量的超参数,例如学习率、迭代次数、隐藏层数、激活函数选择、学习率调整方案、批尺寸大小、正则化方法等。
5 误差与方差
那么部署你的机器学习模型须要注意些什么?下图展现了构建 ML 应用所须要的数据集分割、误差与方差等问题。
如上所示,经典机器学习和深度学习模型所须要的样本数有很是大的差异,深度学习的样本数是经典 ML 的成千上万倍。所以训练集、开发集和测试集的分配也有很大的区别,固然咱们假设这些不一样的数据集都服从同分布。
误差与方差问题一样是机器学习模型中常见的挑战,上图依次展现了由高误差带来的欠拟合和由高方差带来的过拟合。通常而言,解决高误差的问题是选择更复杂的网络或不一样的神经网络架构,而解决高方差的问题能够添加正则化、减小模型冗余或使用更多的数据进行训练。
固然,机器学习模型须要注意的问题远不止这些,但在配置咱们的 ML 应用中,它们是最基础和最重要的部分。其它如数据预处理、数据归一化、超参数的选择等都在后面的信息图中有所体现。
6 正则化
正则化是解决高方差或模型过拟合的主要手段,过去数年,研究者提出和开发了多种适合机器学习算法的正则化方法,如数据加强、L2 正则化(权重衰减)、L1 正则化、Dropout、Drop Connect、随机池化和提早终止等。
如上图左列所示,L1 和 L2 正则化也是是机器学习中使用最普遍的正则化方法。L1 正则化向目标函数添加正则化项,以减小参数的绝对值总和;而 L2 正则化中,添加正则化项的目的在于减小参数平方的总和。根据以前的研究,L1 正则化中的不少参数向量是稀疏向量,由于不少模型致使参数趋近于 0,所以它经常使用于特征选择设置中。此外,参数范数惩罚 L2 正则化能让深度学习算法「感知」到具备较高方差的输入 x,所以与输出目标的协方差较小(相对增长方差)的特征权重将会收缩。
在中间列中,上图展现了 Dropout 技术,即暂时丢弃一部分神经元及其链接的方法。随机丢弃神经元能够防止过拟合,同时指数级、高效地链接不一样网络架构。通常使用了 Dropout 技术的神经网络会设定一个保留率 p,而后每个神经元在一个批量的训练中以几率 1-p 随机选择是否去掉。在最后进行推断时全部神经元都须要保留,于是有更高的准确度。
Bagging 是经过结合多个模型下降泛化偏差的技术,主要的作法是分别训练几个不一样的模型,而后让全部模型表决测试样例的输出。而 Dropout 能够被认为是集成了大量深层神经网络的 Bagging 方法,所以它提供了一种廉价的 Bagging 集成近似方法,可以训练和评估值数据数量的神经网络。
最后,上图还描述了数据加强与提早终止等正则化方法。数据加强经过向训练数据添加转换或扰动来人工增长训练数据集。数据加强技术如水平或垂直翻转图像、裁剪、色彩变换、扩展和旋转一般应用在视觉表象和图像分类中。而提早终止一般用于防止训练中过分表达的模型泛化性能差。若是迭代次数太少,算法容易欠拟合(方差较小,误差较大),而迭代次数太多,算法容易过拟合(方差较大,误差较小)。所以,提早终止经过肯定迭代次数解决这个问题。
7 最优化
最优化是机器学习模型中很是很是重要的模块,它不只主导了整个训练过程,同时还决定了最后模型性能的好坏和收敛须要的时长。如下两张信息图都展现了最优化方法须要关注的知识点,包括最优化的预备和具体的最优化方法。
以上展现了最优化经常出现的问题和所须要的操做。首先在执行最优化前,咱们须要归一化输入数据,并且开发集与测试集归一化的常数(均值与方差)与训练集是相同的。上图也展现了归一化的缘由,由于若是特征之间的量级相差太大,那么损失函数的表面就是一张狭长的椭圆形,而梯度降低或最速降低法会由于「锯齿」现象而很难收敛,所以归一化为圆形有助于减小降低方向的震荡。
后面的梯度消失与梯度爆炸问题也是十分常见的现象。「梯度消失」指的是随着网络深度增长,参数的梯度范数指数式减少的现象。梯度很小,意味着参数的变化很缓慢,从而使得学习过程停滞。梯度爆炸指神经网络训练过程当中大的偏差梯度不断累积,致使模型权重出现很大的更新,在极端状况下,权重的值变得很是大以致于出现 NaN 值。
梯度检验如今可能用的比较少,由于咱们在 TensorFlow 或其它框架上执行最优化算法只须要调用优化器就行。梯度检验通常是使用数值的方法计算近似的导数并传播,所以它能检验咱们基于解析式算出来的梯度是否正确。
下面就是具体的最优化算法了,包括最基本的小批量随机梯度降低、带动量的随机梯度降低和 RMSProp 等适应性学习率算法。
小批量随机梯度降低(一般 SGD 指的就是这种)使用一个批量的数据更新参数,所以大大下降了一次迭代所需的计算量。这种方法下降了更新参数的方差,使得收敛过程更为稳定;它也能利用流行深度学习框架中高度优化的矩阵运算器,从而高效地求出每一个小批数据的梯度。一般一个小批数据含有的样本数量在 50 至 256 之间,但对于不一样的用途也会有所变化。
动量策略旨在加速 SGD 的学习过程,特别是在具备较高曲率的状况下。通常而言,动量算法利用先前梯度的指数衰减滑动平均值在该方向上进行修正,从而更好地利用历史梯度的信息。该算法引入了变量 v 做为参数在参数空间中持续移动的速度向量,速度通常能够设置为负梯度的指数衰减滑动平均值。
上图后面所述的 RMSProp 和 Adam 等适应性学习率算法是目前咱们最经常使用的最优化方法。RMSProp 算法(Hinton,2012)修改 AdaGrad 以在非凸状况下表现更好,它改变梯度累积为指数加权的移动平均值,从而丢弃距离较远的历史梯度信息。RMSProp 是 Hinton 在公开课上提出的最优化算法,其实它能够视为 AdaDelta 的特例。但实践证实 RMSProp 有很是好的性能,它目前在深度学习中有很是普遍的应用。
Adam 算法同时得到了 AdaGrad 和 RMSProp 算法的优势。Adam 不只如 RMSProp 算法那样基于一阶矩均值计算适应性参数学习率,它同时还充分利用了梯度的二阶矩均值(即有偏方差/uncentered variance)。
8 超参数
如下是介绍超参数的信息图,它在神经网络中占据了重要的做用,由于它们能够直接提高模型的性能。
众所周知学习率、神经网络隐藏单元数、批量大小、层级数和正则化系数等超参数能够直接影响模型的性能,而怎么调就显得很是重要。目前最多见的仍是手动调参,开发者会根据自身建模经验选择「合理」的超参数,而后再根据模型性能作一些小的调整。而自动化调参如随机过程或贝叶斯优化等仍须要很是大的计算量,且效率比较低。不过近来关于使用强化学习、遗传算法和神经网络等方法搜索超参数有很大的进步,研究者都在寻找一种高效而准确的方法。
-
依靠经验:聆听本身的直觉,设置感受上应该对的参数而后看看它是否工做,不断尝试直到累趴。
-
网格搜索:让计算机尝试一些在必定范围内均匀分布的数值。
-
随机搜索:让计算机尝试一些随机值,看看它们是否好用。
-
贝叶斯优化:使用相似 MATLAB bayesopt 的工具自动选取最佳参数——结果发现贝叶斯优化的超参数比你本身的机器学习算法还要多,累觉不爱,回到依靠经验和网格搜索方法上去。
由于篇幅有限,后面的展现将只简要介绍信息图,相信它们对各位读者都十分有帮助。
9 结构化机器学习过程
咱们须要按过程或结构来设定咱们的机器学习系统,首先须要设定模型要达到的目标,例如它的预期性能是多少、度量方法是什么等。而后分割训练、开发和测试集,并预期可能到达的优化水平。随后再构建模型并训练,在开发集和测试集完成验证后就能够用于推断了。
10 偏差分析
在完成训练后,咱们能够分析偏差的来源而改进性能,包括发现错误的标注、不正确的损失函数等。
11 训练集、开发集与测试集
上图展现了三个分割数据集及其表现所须要注意的地方,也就是说若是它们间有不一样的正确率,那么咱们该如何修正这些「差异」。例如训练集的正确率明显高于验证集与测试集代表模型过拟合,三个数据集的正确率都明显低于可接受水平多是由于欠拟合。
12 其它学习方法
机器学习和深度学习固然不止监督学习方法,还有如迁移学习、多任务学习和端到端的学习等。
卷积网络
13 卷积神经网络基础
计算机视觉任务涉及的数据体量是特别大的,一张图像就有上千个数据点,更别提升分辨率图像和视频了。这时用全链接网络的话,参数数量太大,于是改用卷积神经网络(CNN),参数数量能够极大地减少。CNN 的工做原理就像用检测特定特征的过滤器扫描整张图像,进行特征提取,并逐层组合成愈来愈复杂的特征。这种「扫描」的工做方式使其有很好的参数共享特性,从而能检测不一样位置的相同目标(平移对称)。
卷积核对应的检测特征能够从其参数分布简单地判断,例如,权重从左到右变小的卷积核能够检测到黑白竖条纹的边界,并显示为中间亮,两边暗的特征图,具体的相对亮暗结果取决于图像像素分布和卷积核的相对关系。卷积核权重能够直接硬编码,但为了让相同的架构适应不一样的任务,经过训练获得卷积核权重是更好的办法。
padding:直接的卷积运算会使获得的特征图愈来愈小,padding 操做会在图像周围添加 0 像素值的边缘,使卷积后获得的特征图大小和原图像(长宽,不包括通道数)相同。
经常使用的两个选项是:『VALID』,不执行 padding;『SAME』,使输出特征图的长宽和原图像相同。
一个卷积层上能够有多个卷积核,每一个卷积核运算获得的结果是一个通道,每一个通道的特征图的长宽相同,能够堆叠起来构成多通道特征图,做为下一个卷积层的输入。
深度卷积神经网络的架构主要以卷积层、池化层的多级堆叠,最后是全链接层执行分类。池化层的主要做用是减小特征图尺寸,进而减小参数数量,加速运算,使其目标检测表现更加鲁棒。
14 经典卷积神经网络
15 特殊卷积神经网络
-
ResNet:引入残差链接,缓解梯度消失和梯度爆炸问题,能够训练很是深的网络。
-
Network in Network:使用 1x1 卷积核,能够将卷积运算变成相似于全链接网络的形式,还能够减小特征图的通道数,从而减小参数数量。
-
Inception Network:使用了多种尺寸卷积核的并行操做,再堆叠成多个通道,能够捕捉多种规模的特征,但缺点是计算量太大,能够经过 1x1 卷积减小通道数。
16 实践建议
-
使用开源实现:从零开始实现时很是困难的,利用别人的实现能够快速探索更复杂有趣的任务。
-
数据加强:经过对原图像进行镜像、随机裁剪、旋转、颜色变化等操做,增长训练数据量和多样性。
-
迁移学习:针对当前任务的训练数据太少时,能够将充分训练过的模型用少许数据微调得到足够好的性能。
-
基准测试和竞赛中表现良好的诀窍:使用模型集成,使用多模型输出的平均结果;在测试阶段,将图像裁剪成多个副本分别测试,并将测试结果取平均。
17 目标检测算法
目标检测即便用边界框检测图像中物体的位置,Faster R-CNN、R-FCN 和 SSD 是三种目前最优且应用最普遍的目标检测模型,上图也展现了 YOLO 的基本过程。
18 人脸识别
人脸识别有两大类应用:人脸验证(二分分类)和人脸识别(多人分类)。
当样本量不足时,或者不断有新样本加入时,须要使用 one-shot learning,解决办法是学习类似性函数,即肯定两张图像的类似性。好比在 Siamese Network 中学习人脸识别时,就是利用两个网络的输出,减小同一我的的两个输出的差异,增大不一样人的两个输出之间的差异。
19 风格迁移
风格迁移是一个热门话题,它会在视觉上给人耳目一新的感受。例如你有一副图,而后将另外一幅图的风格特征应用到这幅图上,好比用一位著名画家或某一副名画的风格来修改你的图像,所以咱们能够得到独特风格的做品。
循环网络
20 循环神经网络基础
如上所示,命名实体识别等序列问题在现实生活中占了很大的比例,而隐马尔可夫链等传统机器学习算法只能做出很强的假设而处理部分序列问题。但近来循环神经网络在这些问题上有很是大的突破,RNN 隐藏状态的结构以循环形的形式成记忆,每一时刻的隐藏层的状态取决于它的过去状态,这种结构使得 RNN 能够保存、记住和处理长时期的过去复杂信号。
循环神经网络(RNN)可以从序列和时序数据中学习特征和长期依赖关系。RNN 具有非线性单元的堆叠,其中单元之间至少有一个链接造成有向循环。训练好的 RNN 能够建模任何动态系统;可是,训练 RNN 主要受到学习长期依赖性问题的影响。
循环神经网络在语言建模等序列问题上有很是强大的力量,但同时它也存在很严重的梯度消失问题。所以像 LSTM 和 GRU 等基于门控的 RNN 有很是大的潜力,它们使用门控机制保留或遗忘前面时间步的信息,并造成记忆以提供给当前的计算过程。
21 NLP 中的词表征
词嵌入在天然语言处理中很是重要,由于不论执行怎样的任务,将词表征出来都是必须的。上图展现了词嵌入的方法,咱们能够将词汇库映射到一个 200 或 300 维的向量,从而大大减小表征词的空间。此外,这种词表征的方法还能表示词的语义,由于词义相近的词在嵌入空间中距离相近。
除了以上所述的 Skip Grams,如下还展现了学习词嵌入的常见方法:
GloVe 词向量是很常见的词向量学习方法,它学到的词表征可进一步用于语句分类等任务。
22 序列到序列
序列到序列的方法使用最多的就是编码器解码器框架,其它还有束搜索等模块的介绍。
编码器解码器架构加上注意力机制能够解决很是多的天然语言处理问题,如下介绍了 BLEU 分值和注意力机制。它们在机器翻译的架构和评估中都是不能缺乏的部分。
以上是全部关于吴恩达深度学习专项课程的信息图,因为它们包含的信息较多,咱们只介绍了一部分,还有不少内容只是简单的一笔带过。因此各位读者最好能够下载该信息图,并在后面的学习过程当中慢慢理解与优化。