上一节讲了神经网络的优化办法,这节讲神经网络会遇到的其他问题
梯度消失
看一下sigmoid激活函数的图像,在两端的导数都非常的小
那么在多层感知机中,反向传播计算梯度的时候,这种情况尤为明显
这也就意味着,我们在梯度下降的时候,迈的步子非常非常小,可能永远也无法从山上下来,这种现象就叫做梯度消失
如何解决这个问题呢?
使用其他激活函数
一个方法就是使用其他激活函数,比如说双曲正切
Relu函数,这个函数也是除了sigmoid之外最常用的,我们可以在前面的一些单元使用relu函数,最后使用sigmoid函数,因为sigmoid会返回0~1的值
动量
还有一个方法就是动量,动量β是一个0~1之间的数,每次的步长跟前几次的步长有关系,上一步×1,再上一步×β,再再上一步×β²……,越往前的影响越小,这种方法在实际应用中效果很好
批次与随机梯度下降
在计算的时候,每次都需要把所有的数据带入吗?这样会导致非常庞大的矩阵运算。
如果数据分布合理,那么只要其中一小部分的数据,就可以得到梯度下降的方向,最然不是最准确的梯度估算结果,但是这样计算很快。
比如我们有24个点,就分成4个batch,每个batch 6个点,先拿出第一个batch的数据,正向传播反向传播之后得到更新的weights,然后再用更新的weights拿出第二batch的数据完成相同的流程,得出更好的权重和更好的boundary界限区域……
学习速率衰退
如果学习速率太大,那么可能最后会在最小值附近震荡,如果速率太小,速度又很慢
我们可以使用学习速率衰减的方法
本系列笔记来自Udacity课程《Intro to Deep Learning with Pytorch》
全部笔记请关注微信公众号【阿肉爱学习】,在菜单栏点击“利其器”,并选择“pytorch”查看