不同损失函数与激活函数所带来的训练的不同
|
|
|
|
---|---|---|---|
导数 | |||
对比前两列,最大的不同在,使用交叉熵的模型少乘了一个
,而
往往是很小的(只在0附近比较大),所以第二列会比第一列收敛快。
但关键是在,大家都一样,但是随着l的不断减小,累乘的
越来越多,最后导致有的
越来越小趋近于0造成梯度消失(因为
)。这样导致底层网络权重得不到有效训练。同样,有的激活函数导数可能会很容易>1,这样就会造成梯度爆炸。总结起来就是,由于反向传播算法的固有缺陷,在网络层数过多时,会出现梯度学习问题,为了解决有如下常用方法,具体见上链接。
- 针对梯度爆炸,可以人为设定最大的梯度值,超过了就等于最大梯度值。这种做法叫梯度剪切。另外也可以对权重做正则化,来确保每次权重都不会太大。
- 针对梯度消失,如果激活函数的导数=1,那么就不会出现消失或爆炸,于是提出了ReLu激活函数
另外还有残差网络,batchnorm等技术
根本上就是针对BP的的组成,要么从激活函数导数入手,要么从权重W入手,要么从连乘的传递结构入手等等。