我已经实现了如本视频中所述的反向传播。
https://class.coursera.org/ml-005/lecture/51

这似乎已经成功完成,通过了梯度检查,并允许我训练MNIST数字。

但是,我注意到反向传播的大多数其他解释将输出增量计算为

d =(a-y)* f'(z)http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm

在视频使用时。

d =(a-y)。

当我用激活导数(S型导数)乘以增量时,我不再以与梯度检查相同的梯度结束(相差至少一个数量级)。

是什么让Andrew Ng(视频)忽略了输出增量的激活导数?为何起作用?但是,在添加导数时,会计算出不正确的梯度吗?

编辑

现在,我已经在输出上使用了线性和S型激活函数进行了测试,只有在两种情况下都使用Ng的delta方程(无S型导数)时,梯度检查才会通过。

最佳答案

找到了我的答案here。输出增量确实需要乘以激活的导数,如中所示。

d =(a-y)* g'(z)

但是,Ng正在利用交叉熵代价函数,该函数会产生抵消g'(z)的增量,从而导致视频中显示的d = a-y计算。如果改用均方误差成本函数,则必须存在激活函数的导数。

关于backpropagation - 反向传播激活导数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32963446/

10-12 19:32