索引多层感知器(MLP)深度神经网络的激活函数介绍深度神经网络的损失函数多层感知器的反向传播算法神经网络的训练技术深度卷积神经网络前馈神经网络(feedforwardneuralnetwork)是最简单的神经网络,每个神经元都是分层排列的。每个神经元只连接到上一层的神经元。接收上一层的输出,输出到下一层。层与层之间没有反馈。它是使用最广泛、发展最快的人工神经网络之一。研究始于1960年代,目前的理论研究和实际应用都达到了很高的水平。——百度百科和深度学习模型,类似的模型统称为深度前馈网络(DeepFeedforwardNetwork),它的目标是拟合某个函数f,因为从输入到输出的过程中没有与模型本身的反馈连接,所以它被称为“前馈”。常见的深度前馈网络包括:多层感知器、自动编码器、受限玻尔兹曼机、卷积神经网络等。01多层感知器(MLP)简介说到多层感知器(Multi-LaterPerceptron),不得不介绍一下单层感知器(SingleLayerPerceptron),它是最简单的神经网络,包括输入层和输出层层,没有所谓的中间层(hiddenlayer),可以看下图:也就是说输入向量被赋予不同的权重向量,积分后相加,通过激活函数,一般是单层感知器,只能解决线性可分的问题,如下图:我选择了0个隐藏层,也就是我们介绍的单层感知器。对于线性可分的数据,效果还是可以接受的。如果换成线性不可分的数据集,如下图,跑了半天也出不出结果。这时引入了多层感知器,它比单层感知器多了一个隐藏层。同样的数据集,我加了两个隐藏层,瞬间就可以很好的分类了。为了上面的直观理解,我还是想深入介绍一下多层感知机的原理。Multi-LayerPerceptron(后面我们称之为MLP),MLP没有规定隐藏层的层数,所以我们可以根据自己的需要选择合适的层数,输出的神经元个数没有限制层。02深度神经网络的激活函数感知机算法包括前向传播(FP)和反向传播(BP)算法,但是在介绍它们之前,我们先了解一下深度神经网络的激活函数。为了解决非线性分类或回归问题,我们的激活函数必须是非线性函数。此外,我们使用基于梯度的方法来训练模型,因此激活函数也必须是连续可导的。@混创AI常用的激活函数主要有:Sigmoid激活函数Sigmoid函数即Logistic函数,其数学表达式为:对应的函数图像为:对应的导数函数为:可见Sigmoid激活函数在定义域上是单调的,越靠近两端,变化越平滑,这会导致我们在使用BP算法时出现梯度消失的问题。Tanh激活函数Tanh激活函数中文称为双曲正切激活函数,其数学表达式为:对应的函数图像为:对应的导数函数为:同理,tanh激活函数与sigmoid激活函数存在同样的梯度消失问题,但是tanh激活函数的整体效果会比Sigmoid激活函数好。问:为什么Sigmoid和Tanh激活函数有梯度消失?A:当z很大(正无穷大)或很小(负无穷大)时,导数函数会趋近于0,导致梯度消失。ReLU激活函数ReLU激活函数,又称修正线性单元或整流单元函数,是目前应用广泛的激活函数。其数学表达式为:对应的函数图像为(a):对应的导数函数为:ReLU激活函数ReLU激活函数的收敛速度比上面两者快很多。ReLU激活函数X轴左侧的值始终为0,使得网络具有一定的稀疏性,从而降低参数间的依赖性,缓解过拟合的情况,其部分导函数是常数1,所以不存在梯度消失的问题。但是ReLU激活函数也有缺点,就是会丢失一些特征信息。LReLU激活函数的图像可以在LReLU激活函数上方看到。它和ReLU激活函数的区别在于,当z<0时,它的值不是0,而是一个斜率为a的线性函数(一般a会是一个很小的正数),这样一来,单边实现了抑制,负梯度信息没有完全丢失。导数函数的表达式为:03深度神经网络的损失函数。损失函数(LossFunction)也称为成本函数,作用是表示预测值与真实值之间的误差。深度学习模型的训练是基于梯度法最小化损失函数的过程。下面介绍几种常见的损失函数。MeanSquaredErrorLossFunction均方误差(MeanSquaredError,MSE)是一种常用的损失函数,其数学表达式如下:训练数据值与真实值之间的交叉熵作为损失函数,其数学表达式如下:适用场景一般来说,MSE更适用于输出值为连续值的神经网络,以及最后一层不包含Sigmoid或Softmax激活函数;而交叉熵适用于二分类或多分类场景。04多层感知器的反向传播算法在MLP中,输入信号经过各网络层的隐藏节点产生输出的过程称为“前向传播”,前向传播最终产生一个标量损失函数。反向传播算法(Backpropagation)是将损失函数的信息沿网络层向后传播计算梯度,从而达到优化网络参数的目的。05神经网络训练技巧神经网络训练,经常遇到的问题就是过拟合,解决过拟合问题的方法有很多,下面简单罗列:DataAugmentation(数据增强)、Regularization(正则化)、ModelEnsemble(modelintegration)、Dropout等。另外,训练深度学习网络还包括学习率、权重衰减系数、dropout比等参数调优。还有BatchNormalization,BN(batchnormalization)也可以加速训练过程的收敛,有效避免复杂参数对网络训练效率的影响。DataAugmentationDataAugmentation也是数据增强的意思,即不改变数据类别,这里主要针对图像数据,主要包括但不限于:1)角度旋转2)随机裁剪3)颜色抖动:指的是它是颜色的数据增强,包括图像亮度、饱和度、对比度变化等。4)增加噪声:主要是高斯噪声,随机添加到图像中5)水平翻转6)垂直翻转参数初始化考虑了全连接深度神经网络在网络中,同一层中的任何神经元都是同构的,因此具有相同的输入和输出。如果所有的参数都初始化为相同的值,则前向传播和反向传播的值都会相同。学习过程将无法打破这种情况。因此,我们需要对神经网络的参数值进行随机初始化,一般是在的均匀分布中随机选择,其中d是一个神经元接受的输入维度。Learningrate学习率通常设置为0.1,但如果实际中验证集上的loss或accuracy保持不变,可以考虑将learningrate提高2~5倍。Dropout原理Dropout在深度学习网络训练中非常常用。它是指以一定的概率p随机丢弃一些神经元节点,这种“丢弃”只是暂时的,是针对每一小批训练数据的。因为是随机丢弃的,所以每次神经网络的结构都会不同,也就是说每次迭代都是在训练一个结构不同的神经网络,有点像传统机器学习中的bagging方法。具体实现上,在训练过程中,神经元的节点激活值以一定的概率p被“丢弃”,即“停止”。因此,对于一个包含N个神经元节点的网络,在Dropout的作用下,可以看成是2的N次方模型的集合。这个过程会削弱所有神经元之间的联合适应性,减少过拟合。风险,增强泛化能力。BatchNormalization的原理由于神经网络训练过程的本质是学习数据分布,因此在训练前对输入数据进行归一化非常重要。我们知道神经网络有很多层。在每个隐藏层之后,由于参数的变化,训练数据的分布会发生变化,导致网络在每次迭代中拟合不同的数据分布,从而增加训练量。复杂性和过度拟合的风险。因此,我们需要对数据进行归一化处理(均值为0,标准差为1),在一个数据分布下强制统一数据分布,而这一步不是一开始就做,而是在下一层每时间之前需要做的一切。即在每一层网络输入前加上一个当前数据归一化处理,然后输入到下一层网络进行训练。我们已经看到了很多Regularizations(正则化)。一般L1和L2比较常用,也是用来防止过拟合的。L1正则化导致权重向量w在优化过程中变得稀疏(例如非常接近零向量)。以L1正则化项结尾的神经网络仅使用其最重要且接近恒定的噪声输入的稀疏子集。相比之下,来自L2正则化的最终权重向量通常是分散的和小的数字。在实践中,如果您不关心显式特征选择,L2正则化有望优于L1。L2正则化可能是最常用的正则化形式。可以通过在目标函数(objective)中加入模型中所有参数的平方水平作为惩罚项来实现。L2正则化对尖峰向量有很强的惩罚,并且倾向于分散权重向量。ModelEnsemble(模型集成)模型集成在现实中非常普遍。一般来说,就是针对一个目标训练多个模型,对每个模型的预测结果进行加权,输出最终的结果。主要有3种方法:1)模型相同,但初始化参数不同;2)集成几个在验证集上性能较好的模型;3)直接采用相关的Boosting和Bagging算法。06深度卷积神经网络(CNN)终于来到了我们熟悉的CNN,即卷积神经网络(ConvolutionalNeuralNetwork,CNN),它也是前馈神经网络的一种,其特点是神经网络每一层的元节点只响应上一层局部区域的神经元(全连接网络中的每个神经元节点响应上一层的所有节点)。一个深度卷积神经网络模型一般由若干个卷积层叠加若干个全连接层组成,包括各种非线性操作和池化操作。卷积运算主要用于处理网格结构的数据,因此CNN在图像数据的分析处理方面具有先天优势。简单理解,CNN就是用一个过滤器(Filter)来过滤相邻像素之间的轮廓。出来。卷积(Convolution)卷积滤波器(Filter)可以看作是一个窗口。您可以观察以下情况。有一个6X6的网络和一个3X3的Filter,其中Filter的每个格子都有一个权重。拿着过滤器在网络上移动,直到所有的小格子都被覆盖。每次移动时,Filter“观察到”的内容都会乘以它的权重并作为结果输出。最后,我们可以得到一个4X4的网格矩阵。(以下6张图片来自参考文献5,入侵删除)Padding(填充)卷积后的矩阵大小与初始的不一致,那么我们需要对边缘进行填充,保证大小一致。Stride(步长)是滤波器移动的大小。上面的例子是1,其实可以自己指定,有点像学习率。深度(depth)是指画面的深度。一张6X6X3的图片会经过3X3X3的filter过滤得到一张4X4X1的图片,所以深度为1。我们也可以通过增加Filter的数量来增加深度,如下:Pooling(池化)因为filter在移动窗口的过程中会有很多冗余计算,效率很慢,池化操作的目的是加速卷积运算,最常用的是Maxpooling,其原理如下图所示:一个完整的深度CNN网络卷积运算的本质1)SparseInteraction(稀疏交互)因为卷积核的尺度会小于输入维度,也就是我们的FILter会小于网络的大小,这样每个输出神经元只会和特定局部区域的一些神经元有连接权重(也就是交互)。这种操作特性称为稀疏交互。稀疏交互会将时间复杂度降低几个数量级,同时也会改善过拟合的情况。2)ParameterSharing(参数共享)是指在同一模型的不同模块中使用相同的参数,这是卷积运算的固有属性。我们上面说的Filter上的权重大小适用于所有的网格。
