讲微分的应用,一定要先看微分的意义;微分的意义在很多方面有很多种解释,比如在直线上可以理解为斜率,曲线上经过再求导可以扩展为曲率等。不过我想有一点意义应该是几乎本质的,那就是微分是求一个对象对另一对象的变化程度,换句话说可以理解为一对象对一个对象的影响。比如就X2来说:
X2对X求导=2x,说明其对于X的变化率为2X
X2对X2求导=1,说明X2永远和X2相等
上面的话,尤其第二句几乎废话,不过可以更好的揭示这个性质,那就是求导微分并不能只理解对对X求导套公式,其内涵为对任何一个对象的变化程度。
有了这个理解,我们来看一个具体的应用,来推导一下伟大的神经元学习网络的误差反传算法。
写过这个误差反传算法的人,可能不计其数,不过真正理解这个公式的来源的人就不多,原因就是归结于书上那些复杂的数学符号,下面对该问题的分析中,我不会写一个数学公式,完全用大白话来show一下微分的威力。
分析误差反传算法,有一个必须的步骤,就是理解梯度下降算法,梯度下降很好理解,就是要求最优值的时候永远沿着正比且与导数符号相反的方向就能逼近最优值。这句话不好理解,确实我打出来都费劲,但举一个例子就明白了,有一座山谷,我们要寻找这个山谷的最低点,那么就必须在下坡时,一直往前走,但是很遗憾,我们可能走过了这个点,那么当再上坡时(走过了),往回走。而每次走的距离都和坡度成正比,可以想象,当快到山谷时,那里几乎平地了,坡度很小,自然我们的步伐也变慢了,这样反复的逼近最优值。
这种逼近迭代的思想太重要,它贯彻了数值分析的始终。这种思想再升华就是,最优算法我求不出来,但我知道改进的方向。熟悉图论的朋友马上就想到了,其实图论里面最大流、最大匹配、最佳匹配,很多思想都源与此,可以说不管是数值算法还是非数值算法,有些精髓是相通的。
转回来再说梯度下降,有下降就有上升,的确,就像上山,每次都沿着坡度走,直到找到最高峰,这也是SVM最优算法的实现方法之一。
过了梯度下降这关,剩下的就好说了,神经元网络的表现实质是啥?是用一堆权值矩阵,来模拟线性或者非线性的式子。
A D
B E
C F
A、B、C代表n层的三个节点,D、E、F代表n+1层的三个节点,假设A、B、C就是输入,D、E、F就是输出,那么输入输出的关系就是用A、B、C到D、E、F这个3*3的权值矩阵来模拟的,怎么模拟?
D=A*w11+ B*w21 + C*w31
E=A*w12 + B*w22 + C*w32
F=A*w13 + B*w23 + C*w33
我们想要的结果就是适合的w11到w33这9个权值,可以达到我们模拟输出的效果。
伟大的思想往往在算法设计时起到指导作用,我们不知道怎么选这9个权值,但是如果给权值们一个初值,而以后按照改进的方向走,次次迭代,逼近我们想要的理想结果,不就达到目的了嘛。
现在思路有了,给权值初值,然后按照一定的原则对权值做修改,直到收敛。
但是,怎么修改呢,按照爬山的想法,我们得按照坡度的方向来走,那么到这里的应用,就是按照误差对权值到微分来走。误差就是最终的输出结果和我们的D、E、F得到结果的平方差。其实具体到平方差不平方差都不重要,重要的是误差是由D、E、F来计算的。
现在我们的目的就是求误差对w11到w33的微分,以w11为例:
A -w11-> D
A通过w11作用到D,那么误差对w11的导,可以看成误差对D的导,再乘以D对w11的导(这是微分方程里面一个常用技巧)
D对w11的导,很好求,用我们开始的微分意义来说,就是w11对D的影响,很显然是A,因为w11只通过A对D有影响;那么剩下的唯一的关键就是如何求误差对D的导数了。
如果D是最后一层,那么该值很明显,直接拿误差的式子(比如平方和)对D求到即可。但是如果D所在的不是最后一层,那么误差对D求导怎么办呢?(因为误差是最后一层,所以当D是中间层是不好办)
注意了,误差反传这四个字的意义就来源于下面的解释:
“当一个对象X,通过一些代理对象,对另一个对象Y起作用时,那么对象X对对象Y的作用实际就是代理对象对Y的作用之和对X的微分”
等价这里:
“当D,通过下一层的节点们H、I、G,对误差起作用时,那么D对误差的作用,实际上就是H、I、G对误差的作用之和对D的微分”
如果不理解没关系,只要能看懂有这个意思即可,就是求D对误差的作用,就必须要求D的下一层的节点们对误差的作用,而求D的下一层的节点对误差的作用,就要求下下层对误差的作用,依此往后推。而最后一层的误差对节点的作用最好求,所以才会从最后一层计算误差。
这就是误差反传的来历。
再举一个俗例子做补充,一个杂技表演有几个人组成,这个杂技表演失误的概率实际上是由这几个人各自的失误的概率来影响的,那么杂技表演的误差概率就得从这几个人的失误概率往下推,等理于误差反传。
这个神经元网络的公式推导,是我所能想到的最完美体现微分涵义的实际软件应用,从梯度下降到误差反传,无一不深度包含这微分运算的数学本质。
当然,作为高等数学基础中基础的微分,对于很多理论都有基础作用,泰勒公式、拉格朗日中值,都以微分做起点,这里不做介绍了。高数中考高分容易,但是能把高等数学思想和计算机程序设计联系起来就不那么简单了,这也就是那些大师为什么称做大师的原因