吴恩达BP算法中公式的数学推导(不漏步,不跳步)

前言:

最近我在看吴恩达的机器学习的BackPropagation的时候,发现他在讲关于BP算法中公式的来源和推导的时候比较含糊,仅仅给了一点不严谨的intuition,让大家把公式死记住当成黑盒子来用。这对于想详细学习BP算法里公式的同学有点难受,于是我自己推了一下,感觉从数学上好像推得还算完整,就发到博客上当作笔记啦。如果你看了吴恩达的机器学习感觉这一块儿没有讲很清楚,也想进一步了解的话,可以看看这篇博客,希望能对你有一些帮助!

前提条件:

推导过程涉及矩阵求导。 如果你还不会矩阵求导,不要灰心,它很简单,几个小时就可以掌握,网上也有很多教学博客大家可以自学。【矩阵求导用起来超级方便,吴恩达前面的Gradient Descent的normal equation(其实就是最小二乘法)和Logistic Regression里导数的推导,用矩阵求导都能迅速推导出来,这里的BP用起来就更方便了!】。如果你找不到相关资料,也可以看这个博客https://www.jianshu.com/p/186ea261f2e4

正文:

在正式开始之前,以防你还没有看过《吴恩达机器学习》的免费课程,先整理一下记号让大家了解,在后面看到不知道的记号可以回到这里看,也顺便大家熟悉或复习一下基本概念,如下图,(打下标不太方便,所以采取手写了,请见谅,已经/正在学习吴恩达机器学习,很熟悉记号的童鞋这张图可以跳过):吴恩达BP算法中公式的数学推导(不漏步,不跳步)_第1张图片
(补充第9条 J:=损失函数/代价函数)
通过上面的说明和一个小例子,相信你一定已经熟悉了吴恩达课程中的各种记号。那么我们正式开始我们的问题。
我们的根本问题/需求:求出神经网络的参数的最优值,使得代价函数J最小。
如果你看了吴恩达机器学习前面的几课,可以知道如果我们想要拟合参数 theta 的最优值,只需要计算损失函数J和J对每个theta的导数,然后把他们传给梯度下降法或者是像共轭梯度法等advanced method里,然后你就能得到参数 theta 的最优值了。BP算法做的事情,其实就是计算J对于每个theta的导数。但我们不一开始就来BP。按顺序来:

(一)先计算损失函数J是什么(即使你想直接进入算导数环节,也得搞清楚J是什么东西才能算吧):吴恩达BP算法中公式的数学推导(不漏步,不跳步)_第2张图片

(对于上图中第一行表达式来源不清楚的话,可以参见吴恩达机器学习week5第一个视频;图中的A(L)是我自己定义的,对于一次性处理所有m个training example来说更加方便)

这样,代价函数J就有了一个简洁的矩阵表达式。等等,你问为什么J(Θ)的表达式中没有 Θ ?咳咳,这是因为a(L)或者A(L)(神经网络的输出值)其实就是由Θ通过forward propagation算出来的啦。对forward propagation有疑问的话可以看下图,没有问题的话可以直接跳过下图:吴恩达BP算法中公式的数学推导(不漏步,不跳步)_第3张图片

OK,现在我们已经完全弄清楚J的表达式了。对于想要求出Θ的最优值,我们的任务已经完成了半壁江山!

(二)接下来的任务就是要求出J对于每个θ的导数。

想法1:将J直接写成Θ的的表达式,然后直接矩阵求导,简直完美解决。
想法很好,其实之前的logistic regression正是这么做的。But,在神经网络中,你可以看到我们的J是写成了A(L)的表达式,然后A(L)可以由Θ递推出来。为什么不把J直接写成Θ的表达式呢,这样可以直接求导,哪还需要什么BP算法?可是,臣妾做不到啊!大家可以看到每次在A(i)推出A(i+1)的过程中,都加了一个m×1维的 1 ⃗ \vec 1 1 m向量,这样的话咱们只能往前迭代,但是没办法具体写出A(L)关于Θ的表达式,这样,直接用J关于Θ的表达式来矩阵求导的计划就泡汤了。

想法2:BP算法
正常想法行不通,于是BP算法应运而生。BP想法:J对θ求导不是不能一次性全部求出来吗?问题就在于中间的嵌套迭代过程不能直接写成θ的具体表达式。那么我们求导也可以迭代着求,具体数学推导如下(本文核心):吴恩达BP算法中公式的数学推导(不漏步,不跳步)_第4张图片
OK,现在δ从后往前的递推关系式也有了,最后只需要求出δ(L)就可以算出所有的δ了。计算δ(L)
吴恩达BP算法中公式的数学推导(不漏步,不跳步)_第5张图片
所以 δ(L)=a(L)-y。根据前面推导的δ往回递推的公式,可以算出所有δ的值,进而算出所有J对θ的导数,BP算法大胜利!

总结:

BP算法的本质就是倒着算导数或者说倒着算δ(导数由δ唯一决定),先算δ(L)再算δ(L-1),再算δ(L-2)… …倒着算,所以是BackPropagation。《吴恩达机器学习》中将δ称作是每一个结点的 error,确实可以这么理解,但是在数学上看,δ只不过是求导中间所定义的一个变量罢了。BP算法的目的就是求导,之所以出现这么麻烦的事情,还是因为J不能具体写成Θ的直接表达式,不能直接求导了。

转载请注明来源:三小憨博客。

你可能感兴趣的:(吴恩达BP算法中公式的数学推导(不漏步,不跳步))