吐槽一下UFLDL上神经网络反向传播算法的公式

[size=large]在斯坦福的神经网络课件的反向传播算法一节[/size]([url]http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm[/url])[size=large],对于权重更新,有着以下的公式,记为[color=blue]公式(1)[/color]:[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/5987/7af43fe0-14f7-3019-8954-981dc92e3cc1.png[/img]
[size=large]其中,[b]m[/b]为样本个数。
首先,这组公式肯定是正确的,而且是很直观。今天重看时还被其直观性所折服!
这种做法也给了我做事儿的一种思路:[color=red]先针对一个样本的情况,进行公式的推导,得到初步的结果;在对多个样本再取平均,得到直观的结果~最后,再用严谨的数学推导进行证明,得到简化后的公式。[/color]
那么,为什么还要吐槽呢?因为UFLDL课件缺少了最后一步——数学证明,及公式的简化![/size]

[size=large]下面从[color=blue]公式(1)[/color]的直观性——也就是其优点说起:
这组公式啥意思呢?对于一个神经网络(参数为各层的权重矩阵[b]W[/b]和偏置向量[b]b[/b]),给定一个输入样本[b]x[/b](向量),该网络会产生一个输出[b]y[/b](向量),对应有一个误差[b]J[/b]:[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/5989/2847c794-409b-3a88-ac1a-d40edfd52f5e.png[/img]
[size=large]那么,如果该网络只有一个输入,我们可以对W、b求导。也就是上面公式中的Delta W部分。
如果有m个样本呢,很自然的一种想法就是对导数求平均,这也就是公式中的Delta W要除以m的意义所在!很直观,很容易理解。

对应的总体误差函数如下(另外,还多了个weight decay项):[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/5991/a0ad1791-5268-3557-a175-5a24f824f0db.png[/img]

[size=large]问题定义清楚了,接下来涉及编程实现了,槽点也就来了:
程序该怎么写?是不是直观的写法就是最好的?
答案显然是否定的,否则课件中也就不会讲什么Vectorization了!
这一部分我没有细看,课件中还是按直观的方法来讲的“你看,我们没Vectorization前使用这个循环写的,balabala,嘿,这个循环正好是矩阵相乘!于是我们可以这么写。。。。”

但是,,但是,,其实我们可以有更为严谨的做法——按照求导的链式法则进行公式的推导(只需要针对一层网络进行推导就可以了,剩下的完全一样)。
采用这种做法,我们得到的结果自然就是矢量化的,而且,,直接根据[b]J(W,b)[/b]来求导,我们会得到和直观的[color=blue]公式(1)[/color]稍有不同的[color=blue]公式[/color]:

[color=red]假设最后一层的输出为[b]Y[/b],误差函数[b]J(W,b)[/b]对其导数为 [b]dJ_dY[/b],
则,我们再通过[b]dJ_dY[/b]进行反向传播,后续的公式中是不会出现样本个数m的![/color][/size]

[size=large]下面用公式来说明(抱歉,误差J的符号改为E,样本个数m之后用N来代替):[/size]
[img]http://dl2.iteye.com/upload/attachment/0101/6020/31491dab-d833-3d56-98d6-86722dd2103a.png[/img]
[size=large]也就是说,只要在输出层对网络输出Y求导时除以了样本个数N,之后各层求导时,就不用再除以N了。而在Andrew Ng的课件中,由于在输出层没有除以N(这样一来,其保留了误差的原始意义,也就各个样本的误差),之后的每一层才需要除以N。也就是我们之前所说的对于各个样本产生的误差(的导数)求平均。[/size]
[size=large]后续的求导公式和课件中给的相同:[/size][url]http://ufldl.stanford.edu/wiki/index.php/Neural_Network_Vectorization[/url]

[size=large]如果想自己用[color=blue]矩阵求导[/color]进行推导的话,可以看一下我之前的笔记(建议还是看张贤达老师的书吧,感觉自己写的不够清楚):[/size][url]http://cherishlc.iteye.com/blog/1765932[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值