
深度学习之损失函数与激活函数的选择
深度学习之损失函数与激活函数的选择在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结。其中使用的损失函数是均方差,而激活函数是Sigmoid。
实际上DNN可以使用的损失函数和激活函数不少。这些损失函数和激活函数如何选择呢?以下是本文的内容。MSE损失+Sigmoid激活函数的问题先来看看均方差+Sigmoid的组合有什么问题。
回顾下Sigmoid激活函数的表达式为:函数图像如下:从图上可以看出,对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。
同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。在均方差+Sigmoid的反向传播算法中,每一层向前递推都要乘以σ′(z),得到梯度变化值。
Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。那么有什么什么办法可以改进呢?
交叉熵损失+Sigmoid改进收敛速度Sigmoid的函数特性导致反向传播算法收敛速度慢的问题,那么如何改进呢?换掉Sigmoid?这当然是一种选择。
另一种常见的选择是用交叉熵损失函数来代替均方差损失函数。每个样本的交叉熵损失函数的形式:其中,?为向量内积。
这个形式其实很熟悉,在逻辑回归原理小结中其实我们就用到了类似的形式,只是当时我们是用最大似然估计推导出来的,而这个损失函数的学名叫交叉熵。
使用了交叉熵损失函数,就能解决Sigmoid函数导数变化大多数时候反向传播算法慢的问题吗?我们来看看当使用交叉熵时,我们输出层δL的梯度情况。
对比一下均方差损失函数时在δL梯度使用交叉熵,得到的的δl梯度表达式没有了σ′(z

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



