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