我有点困惑,为什么反向传播中的激活函数导数是这样的设置。
首先,当我从反向传播算法中移除激活函数导数,并用一个常数替代时,网络仍然可以训练,尽管速度稍慢。因此,我认为激活函数导数对算法来说并不是必不可少的,但它确实提供了性能优势。
然而,如果激活函数导数(简单来说)只是激活函数相对于当前输入的变化率,那么为什么这能带来性能提升呢?
难道在激活函数变化最快的地方,我们不应该使用一个较小的值,使权重更新也较小吗?这样可以防止由于靠近激活函数陡坡的权重变化而导致输出发生大的变化。然而,算法的实际操作却完全相反。
能有人解释一下为什么它被这样设置,以及为什么这能带来如此大的性能提升吗?
回答:
我不确定这是否是你所问的,但这个回答可能会对你试图理解的内容有所帮助。
所以想象一下误差曲线:
我们试图使用梯度下降来最小化成本函数,对吗?假设我们处于曲线的最外侧,误差非常高。通过计算曲线上的梯度下降,函数会意识到斜率很陡,因此误差很高,所以它会迈出大步。当它沿着曲线向下移动时,斜率逐渐接近0,因此每次会迈出更小的步子。
使用激活函数导数的梯度下降可视化:
看到它是如何从迈出大步开始,然后每次都迈出更小的步子了吗?这是通过使用激活函数导数实现的。它开始时迈出大步,因为有陡峭的曲线。随着斜率变小,步子也变小。
如果你使用一个常数值,你将不得不选择一个非常小的步子以避免超过最小值,因此需要更多的迭代才能达到类似的结果。