针对深度学习误差公式 (Y - Out)^2/2的问题探讨——误差函数使用(Y - Out) or (Out - Y)?

梯度下降法,就是求函数在某一点的导数/偏导数,在该方向上,函数的变化率最大,也就是说,在优化目标函数的时候,只要按照梯度的负方向优化即可。

为了更好的理解梯度下降法,首先,求解一个一元二次函数的系数,为了方便计算,假设方程为


最终的要求,就是求出k值。

首先,我们设定误差函数为


其中,Y是实际输出,Out是通过前向计算得到的结果。

基于该公式,我们可以得到误差函数的导数

但是在实际的计算过程中,我发现了一个问题,Error的负梯度本应该是取负值,也就是说,k的更新应该按照下述公式调整


但是在实际的结算过程中,以 x = 2, y = 2进行训练,最终k的变化结果如下:

                              

总共设置了100次的迭代次数,k值应该为1,但是显然,k的值越来越小,离收敛的请也越来越远,这是什么原因?

问题出在了误差函数上,误差函数采用的是平方和,不管是(Y - Out)或者(Out - Y )都没有影响,但是在求导数的阶段,不同的误差导数就决定了k的修正方向,方向相反的情况下,k值只会越来越偏离真实结果。

为了解决这个问题,就需要确定误差函数究竟是(Y - Out)还是(Out - Y ),实际上,将问题进行简化,要让k接近真实值,那么误差值的方向应该与Out的方向相反,这里如果将Y当成一个常数,可以看到,对k求偏导时,只有Out起作用,基于此,可以看到,误差结果(Out - Y)的梯度方向才是正方向,那么其负梯度方向应该是 - (Out - Y),则k的调整公式应为


当然,如果将(Out - Y)写成(Y - Out),那么上式就变成了我们熟悉的公式


基于该公式再进行训练,设置误差率为0.01,k的变化曲线如下:

                              

可以看到,经过了27次迭代之后,输出结果已经很接近1了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值