我已经按照这个视频中的说明实现了反向传播。https://class.coursera.org/ml-005/lecture/51。看起来这似乎成功了,通过梯度检查并允许我在MNIST数字上进行训练。
然而,我注意到大多数关于反向传播的解释都将输出delta计算为
d = (a - y) * f'(z) http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm 而该视频使用的是
d = (a - y).
当我将我的delta乘以激活函数的导数(sigmoid的导数)时,我不再得到与梯度检查相同的梯度(至少相差一个数量级)。
什么使得Andrew Ng(视频中的讲师)可以省略输出delta的激活函数导数?它为什么有效?但是,当添加导数时,会计算出错误的梯度?
编辑:
我现在已经在输出上测试了线性和sigmoid激活函数,只有在两种情况下都使用Ng的delta公式(没有sigmoid导数)时,梯度检查才能通过。
然而,我注意到大多数关于反向传播的解释都将输出delta计算为
d = (a - y) * f'(z) http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm 而该视频使用的是
d = (a - y).
当我将我的delta乘以激活函数的导数(sigmoid的导数)时,我不再得到与梯度检查相同的梯度(至少相差一个数量级)。
什么使得Andrew Ng(视频中的讲师)可以省略输出delta的激活函数导数?它为什么有效?但是,当添加导数时,会计算出错误的梯度?
编辑:
我现在已经在输出上测试了线性和sigmoid激活函数,只有在两种情况下都使用Ng的delta公式(没有sigmoid导数)时,梯度检查才能通过。