Advertisement

【ML】斯坦福Machine Learning反向传播(Backpropagation)的数学推导

阅读量:

疫情在家闲着没事把斯坦福Andrew Ng的机器学习里面的数学公式都推导了一遍。其中我发现视频中反向传播的数学跳过了一些步骤且所用的数学符号跟其他地方不太一样。今天来分享一下视频中反向传播的数学推导。

如果你喜欢看更直观的视频推导,请移步这里:

B站: https://www.bilibili.com/video/BV1GK4y1s76c/

Youtube: https://www.youtube.com/watch?v=9OzLcgy1bjs

原视频中介绍反向传播的有这两页:

有没有一种好像看懂又好像有点迷糊的感觉?我反正是的。。于是经过仔细看了之后我把我的纠结总结成了下面5个问题:

1. 为什么 g'} = a^{}.*} ?

2. 为什么下面一个视频内容说 elta_{i}^{}=rac{artial J}{artial z_{i}^{}} ,但是却从 elta^{} = a^{} - y 开始推导。这样的简化可以吗?

3. 就算2是可以的,那为什么 elta^{} = }{T}\delta{}.*g'} ?

4. 为什么 rac{artial}{artial heta_{ij}^{}}J = a_j{(l)}\delta_{i}{} ?

5. 为什么 rac{artial}{artialheta_{ij}^{l}}J = D_{ij}^{} ?

推导之前我们先来看看一些基本定义:
a_{j}^{} : 第l层的第j个node的输出
z_{j}^{} : 第l层的第j个node的输入
elta_{j}^{} : 第l层的第j个delta值
heta_{ij}^{} : 第l层的i行j列的theta值(权重值)
a^{} = g} = rac{1}{1+e{-z{}}}
z_{j}^{} = um_{k=1}^{s_{l}}} heta_{kj}{(l)}a_{j}{}+b
elta_{i}^{}=rac{artial J}{artial z_{i}^{}}

下面开始推导:

1. 为什么 g'} = a^{}.*} ?

  • 因为分式函数求导为 ' = rac{u'v-uv'}{v^{2}},所以 g'} = }}}' = rac{0-}}}{}}^{2}} = rac{e{-z{}}}{}}^{2}}
  • 因为a^{} = g} = rac{1}{1+e{-z{}}},所以 a^{}.} = rac{1}{1+e{-z{}}}rac{1+e{-z{}}-1}{1+e{-z{}}} =rac{e{-z{}}}{}}^2}
  • 所以 g'} = a^{}.*}。同理 g'} = a^{}.*}

2. 为什么下面一个视频内容说 elta_{i}^{}=rac{artial J}{artial z_{i}^{}} ,但是却从 elta^{} = a^{} - y 开始推导。这样的简化可以吗?

原来这并不是简化,推导如下:

  • 因为 a^{}=h_{heta}, J = ylog} + log}
  • 所以 rac{artial J}{artial z^{}} = rac{artial J}{artial a^{}}rac{artial a^{}}{artial z^{}} = g'}
  • = rac{y-ya{(4)}+ya{}-a{(4)}}{a{}.*}}a^{}.}
  • =y-a^{}

值得注意的一点是在机器学习里面(特别是在斯坦福这门课里面logx这个表达方式底数是e,而不是通常我们看到的logx相当于底数是10。所以上面推导中有 '=rac{1}{x} 。)

3. 就算2是可以的,那为什么 elta^{} = }{T}\delta{}.*g'} ?

(这里还是用链式法则求导,只是多了一步加总。如果不好理解请参考本文最上方视频中的动画演示)
elta_{j}^{} = um_{k}rac{artial J}{artial z_{k}^{}}rac{artial z_{k}^{}}{artial a_{j}^{}}rac{artial a_{j}^{}}{artial z_{j}^{}} = um_kelta_{k}^{}rac{artial }a_{j}^{}+b}{artial a_{j}^{}}g'} = um_kelta_{k}{(4)}\theta_{kj}{}g'}

向量化:
elta_{j}^{} = }{T}\delta{}.*g'}
elta^{} = }{T}\delta{}.*g'}

4. 为什么 rac{artial}{artial heta_{ij}^{}}J = a_j{(l)}\delta_{i}{} ?
rac{artial J}{artial heta_{ij}^{}} = rac{artial J}{artial z_{i}^{}}rac{artial z_{i}^{}}{artial heta_{ij}^{}} = rac{artial J}{artial z_{i}^{}}rac{artial }a_{j}^{}+b}{artial heta_{ij}^{}} = elta_{i}{(l+1)}a_{j}{}

5. 为什么 rac{artial}{artialheta_{ij}^{}}J = D_{ij}^{} ?

注意第四问跟这里的区别在于第四问是针对单个样本(sample)来说的,而这里相当于对所有样本的 a_j{(l)}\delta_{i}{} 加总取平均。

加总: elta_{ij}^{} = um_{k=1}{m}a_{j}{}elta_{i}^{}

取平均: rac{artial}{artialheta_{ij}^{}}J = rac{1}{m}elta_{ij}^{} = D_{ij}^{}

以上算出了j=0时的情况(也就是bias项)。对于非bias项,由于在最开始的cost function里面还有一个正则项 rac{ambda}{2m}}^{2},所以还必须加上一个正则项的偏导,也就是 rac{ambda}{m}heta_{ij}^{},所以,对于非bias项 (j不等于0) 我们有:
D_{ij}^{} = rac{1}{m}elta_{ij}^{} + rac{ambda}{m}heta_{ij}^{}

(细心的同学会发现ppt里面这里第二项没有除以m。我觉得这里应该是原视频里面写错了,或者由于除不除都是一个让你自己调的参数,所以就合并到一起考虑了。)

完结!第一次录制这种推导视频,如果对你有帮助麻烦点赞转发给需要的小伙伴啊。 :)

全部评论 (0)

还没有任何评论哟~