激活函数 损失函数 优化器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kl1411/article/details/82991925

均方差损失函数+Sigmoid的反向传播算法中,每一层向前递推都要乘以σ′(z)(激活函数的导数),得到梯度变化值。Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。
使用交叉熵损失函数,得到的梯度表达式没有了σ′(z),梯度为预测值和真实值的差距,这样求得的Wl,bl的梯度也不包含σ′(z),因此避免了反向传播收敛速度慢的问题。
如果我们使用了sigmoid激活函数,交叉熵损失函数肯定比均方差损失函数好用。

对于用于分类的softmax激活函数,对应的损失函数一般都是用对数似然函数,即:
 

对于梯度爆炸,则一般可以通过调整我们DNN模型中的初始化参数得以解决。
对于无法完美解决的梯度消失问题,目前有很多研究,一个可能部分解决梯度消失问题的办法是使用ReLU(Rectified Linear Unit)激活函数。
http://www.cnblogs.com/pinard/p/6437495.html

Cross Entropy损失函数常用于分类问题中,但是为什么它会在分类问题中这么有效呢?
 
其中:
- M——类别的数量;
- y——指示变量(0或1),如果该类别和样本的类别相同就是1,否则是0;
- p——对于观测样本属于类别c的预测概率。

由于交叉熵涉及到计算每个类别的概率,所以交叉熵几乎每次都和softmax函数一起出现。
 

 
交叉熵损失函数是凸函数,求导时能够得到全局最优值。
使用交叉熵损失函数,不仅可以很好的衡量模型的效果,又可以很容易的的进行求导计算。

Mean Squared Error (均方误差)
 
逻辑回归配合MSE损失函数时,采用梯度下降法进行学习时,会出现模型一开始训练时,学习速率非常慢的情况
https://zhuanlan.zhihu.com/p/35709485

损失函数的选择往往也是结合激活函数来的:
sigmoid系之外的激活函数 + MSE
sigmoid + Cross Entropy
Softmax + Cross Entropy
https://blog.csdn.net/u012193416/article/details/79520862

梯度消逝和损失函数关系不大。
https://www.zhihu.com/question/265823997

 
z4 = w41*o1+w42*o2+w43*o3
z5 = w51*o1+w52*o2+w53*o3
z6 = w61*o1+w62*o2+w63*o3

交叉熵函数形式如下:
 

为了形式化说明,我这里认为训练数据的真实输出为第j个为1,其它均为0!
那么形式变为 
 

https://zhuanlan.zhihu.com/p/25723112

Batch gradient descent(BGD)
 
在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手

Stochastic gradient descent(SGD)
 
和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新。
SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。
但是 SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

随机也就是说我们用样本中的一个例子来近似我所有的样本,来调整θ
在深度学习中,用的比较多的是mini-batch梯度下降。
https://www.zhihu.com/question/264189719

Mini-batch gradient descent(MBGD)
 
MBGD 每一次利用一小批样本,即 n 个样本进行计算。
和 SGD 的区别是每一次循环不是作用于每个样本,而是具有 n 个样本的批次。

超参数设定值: 
n 一般取值在 50~256

Mini-batch gradient descent 不能保证很好的收敛性,learning rate 如果选择的太小,收敛速度会很慢,如果太大,loss function 就会在极小值处不停地震荡甚至偏离。

SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。
如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。
整体来讲,Adam 是最好的选择。
https://blog.csdn.net/aliceyangxi1987/article/details/73210204

一个不是局部极值点的驻点(驻点就是一阶导数为 0 的点)称为鞍点。
https://blog.csdn.net/jningwei/article/details/79801699
 

猜你喜欢

转载自blog.csdn.net/kl1411/article/details/82991925