计算机视觉-全连接神经网络(多层感知机)

全连接神经网络


全连接神经网络级联多个变换来实现输入到输出的映射。

每一层神经网络就是一个线性变换,将上一层的变换结果经过激活函数处理传递给下一层就形成了多层全连接神经网络。

激活函数的目的就是对结果进行非线性操作。

 

 

 全连接神经网络的描述能力更强。因为调整W1行数等于增加模板个数,分类器有机会学到两个不同方向的马的模板。

除了输入层以外有多少层神经网络,就是几层神经网络。

常用激活函数:

Sigmoid,Relu,tanh,LeakyRelu。

Sigmoid:将数据压缩到(0-1)之间。

tanh:将数据压缩到(-1,1)之间。

Relu:小于0的部分为0,大于0的部门是他本身。

Leaky Relu:在Relu的基础上,让小于0的部分为0.1倍的x。

网络结构设计:

神经元、隐藏层的个数越多,分界面就可以越复杂,在这个数据集合上的分类能力就越强。

小结:

全连接神经网络组成:一个输入层、一个输出层及多个隐藏层。

输入层与输出层的神经元个数由任务决定,而隐藏层数量以及每个隐藏层的神经元个数需要人为指定。

激活函数是全连接神经网络中的一个重要部分,缺少了激活函数,全连接神经网络将退化为线性分类器。

SOFTMAX:

每一种类别的e的指数次方占所有类别指数次方的比例,就可以得到预测为该类别的概率。

不添加softmax层与添加softmax层一般都模型预测的准确度不产生影响。只不过在加入softmax后,不仅能够得到预测结果,而且可以得到获得该结果的概率是多少。

交叉熵损失:

交叉熵的出现是为了预测结果可以与真实的标答进行比较。在这个过程中,需要对标答进行one-hot编码而且这个过程中其实是使用的相对熵,而一般情况下(在信息熵等于0),交叉熵会等于相对熵。

当真实分布为one-hot形式时,交叉熵损失简化为:Li=-log(qj)。

度量分类器的输出值与预测值之间的距离。

相对熵:也叫KL散度,用来度量两个分布之间的不相似性(不相似程度)。

 

 

 

所以可以直接使用交叉熵来度量这两个分布之间的不一致性就好了。

计算图:

计算图是一种有向图,它用来表达输入、输出以及中间变量之间的计算关系,图中的每个节点对应着一种数学运算。

 

 

 

链式反向传播可以算出相对于输出的任何一个输入的导数。同时也可以算出输出相对于任何一个节点的导数。导数即梯度。

 

 

  

激活函数:

梯度消失:是神经网络训练中非常致命的问题,其本质是由于链式法则的乘法特性导致。

 

 

 

在反向传播过程中,由于激活函数的导数为0,因此会导致反向传播的局部梯度为0,而下一层(实则是正向传播的上一层)的梯度是由上层梯度*局部梯度。而牛顿下降法要靠梯度响应来做,从而导致梯度消失。

梯度爆炸:局部梯度很大,从而导致上层梯度乘上局部梯度出现一个非常大的值。因为权值=权值-学习率*梯度。当梯度很大,就会导致权值反复横跳。

断崖处梯度乘以学习率后会是一个非常大的值,从而“飞”出合理区域,最终导致算法不收敛。

解决方案:把沿梯度方向前进的步长限制在某个值内就可以避免“飞”出了,这个方法也称为梯度裁剪。简单来说就是当沿梯度方向前进的步长超过了阈值时,就以特性的步长作为替换进行学习训练。

tanh与sigmoid类似,局部梯度特性不利于网络梯度流的反向传递。

 

 

 

 

 

 

 

激活函数选择:尽量选择Relu函数或者LeakyRelu函数,相对于Sigmoid、tanh,Relu这两个函数会让梯度流更加顺畅,训练过程收敛得更快。

 

 

 

使用动量法的目的是为了改进梯度下降算法存在的问题,减少震荡,加速通往谷底。

改进思想:利用累加历史梯度信息更新梯度。

动量法:简单来说就是利用动量累加的方法,在反复横跳的方向上,动量逐渐相互抵消,而动量较小的单方向上呢,会逐渐变大,从而对梯度更新方向进行更改。

 

 

 

动量法的优势:由于动量的存在,算法可以冲出局部最优解以及鞍点,找出更优的解。

自适应梯度法:

通过减小震荡方向步长,增大平坦方向步长来减小震荡,加速通过谷底放下。

如何区分震荡方向与平坦方向?

梯度幅度的平方较大的方向是震荡方向,梯度幅度的平方较小的方向是平坦方向。

 

 

 

自适应AdaGrad方法的缺点就是虽然能够加快往正确梯度方向修正的速度,但是由于累计梯度平方会越来越大,因此导致最终的第4步的权重更新步长越来越小,导致更新缓慢。

RMSProp:

  

在第3步的过程中,获得r与越接近当前时刻的梯度g关系越大,越远离当前时刻的梯度g的关系越小。

Adam:

同时使用动量与自适应的思想。

 

 

 

 

秒啊,分别用v来修正梯度,r来修正学习率。最后在第5步中加入了一个修正偏差,这一步是为了解决冷启动问题,其中的t表示第几轮运算。当t=1时,表示第1轮,这个时候的v=g,r=g*g。

总结:大多数情况下使用Adam,但是Adam没有动量法+SGD的传统的算法调优的效果更好。 但是Adam在很多情况下很快就能处理好,而动量法+SGD手动调优想调到一个很优的值是不太容易的。

权值初始化:

建议:采用随机初始化,避免全零初始化!

有效的初始化方法:使网络各层的激活值和局部梯度的方差在传播过程中尽量保持一致;以保持网络中正向和反向数据流动。

就是是的输出和输入之间具有相同的数据分布情况,如果输入是0均值1方差,那我也要保证输出也是0均值1方差。

Xavier初始化。

 

 

其中,式中的E表示均值,Var表示方差。

因此,随机初始化,权值采样自均值为0,方差为1/N的高斯分布,N为输入神经元的个数。

Xavier方法再Relu上的表现并不好,因此何凯明等人都提出了MSRA。区别知识在方差的分子变成了2.

 

 

因此,如果使用的是Relu的激活函数,这应该使用MSRA初始化方法,如果使用的是Sigmoid和tanh激活函数,则使用Xavier的初始化方法。

好的初始化方法可以防止前向传播过程中的信息消失,也可以解决反向传递过程中的梯度消失。

 

批归一化:

方法:直接对神经元的输出进行批归一化。

简单来说,假设每次小批量梯度下降算法会输出32个值,对着32个值减均值除方差操作,就可以保证当前神经元的输出值是分布符合0均值1方差。

 

 批归一化(BN)层一般被插在非线性操作之前。

 

 在批归一化这个过程中,由网络自动学习方差γ和均值β。而在单样本测试时,使用到的x尖是由训练过程中所有的均值方差的平均值来计算y的。

不管是使用激活函数还是批归一化还是权值初始化都是为了保证正向和反向的信息流通畅。

过拟合现象:

学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对位置数据预测得很差的现象。

欠拟合现象:

模型描述能力太弱,以至于不能很好地学习到数据中的规律。

机器学习的根本问题就是优化和泛化的问题。

优化:调节模型参数,让他更好的拟合训练样本。

泛化:训练好的模型在前所未见的数据上的性能好坏。

训练初期,优化和泛化是相关的:训练集上的误差越小,验证集上的误差也就越小,模型的泛化能力逐渐增强。

训练后期,模型在验证集上的错误率不再降低,转而开始变高。模型出现了过拟合,开始学习仅和训练数据有关的模型了。因此,我们将验证集错误率发生转折的那个点对应的模型进行输出,这个时候是泛化能力最好的模型。

应对过拟合:

最优方案:获取更多的训练数据。

次优方案:调节模型允许存储的信息量或者对模型允许存储的信息加以约束,该类方法也称为正则化。

调节模型大小。

约束模型权重,即权重正则化(常用的有L1、L2正则化。)。

随机失活(Dropout)。

L2正则损失对于大数值的权值向量进行严厉惩罚,鼓励更加分散的权重向量,使模型倾向于使用所有输入特征做出决策,此时的模型泛化性能好。

L2正则过程中会选择尽量多的考虑到所有的维度特征,而不是简单依赖于其中某一个或几个特征就得出结果,避免了某个重要维度出现损伤的情况下导致整体出错。也就是避免了对其中某些少数维度的强依赖性。同时防止模型过拟合。

随机失活比率:是被设为0的特征所占的比例,通常在0.2-0.5范围内。

随机失活

随机失活为什么能够防止过拟合呢?

1.随机失活使得每次更新梯度时参与计算的网络参数减少了,降低了模型容量,所以能防止过拟合。

2.随机失活鼓励权重分散,从这个角度来看,随机失活也能起到正则化的作用,进而防止过拟合。

3.Dropout可以看作模型集成。

Dropout只在训练阶段产生作用,而在测试阶段会全部打开,运用所有的神经元来进行预测。

神经网络中的超参数:

超参数:

网络结构:隐藏层神经元个数,网络层数,非线性单元选择等。

优化相关:学习率、dropout比率、正则项强度等。

学习率设置:

学习率过大,训练过程无法收敛。

学习率偏大,在最小值附近震荡,达不到最优。

学习率太小,收敛时间较长。

学习率适中,收敛快,结果好。

退火法:就是在学习率为0.1时,loss达到平稳,将学习率减小10倍。如此重复。

超参数优化方法:

网格搜索法:

1.每个超参数分别取几个值,组合这些超参数值,形成多组超参数。

2.在验证集上评估每组超参数的模型性能。

3.选择性能最优的模型所采用的那组超参数值作为最终的超参数的值。

随机搜索法:(最常使用的方法。)

1.参数空间内随机取点,每个点对应一组超参数。

2.在验证集上评估每组超参数的模型性能。

3.选择性能最优的模型所采用的那组值作为最终的超参数的值。

 

 

总结上图:首先从整体空间中随机选取一部分超参数值进行训练,然后得到这部分值中的较优值,对这部分较优值所在的空间进行进一步随机选取一部分点,然后再进行训练,选择出较优值,经过多轮选取,找到在验证集上精度最高的那组超参数。

 

 

对于学习率、正则项强度这类超参数,在对数空间上进行随机采样更合适。

posted @ 2021-11-21 11:13  用余生去爱  阅读(1946)  评论(0)    收藏  举报