人工智能教程 - 1.2.5 计算图

朋友们,如需转载请标明出处:http://blog.csdn.net/jiangjunshow

总目录(新手请点击总目录从序言看起,否则你可能看不懂本篇文章)

首先向大家道个歉,过了很长时间没有写新文章。我也想写,但是人人都有本难念的“精”啊(精力不足)!
这里写图片描述
有同学在评论里骂我为什么这么久没有写文章,情有可原!我不怪你们。
其实我现在跑到乌克兰来了,如果有同学对这边详情感兴趣的话我下篇文章里会介绍(有感兴趣的请在评论里留言)。
这里写图片描述

总之,让我们继续学习吧!

本篇文章给大家讲解的是计算图,它是我们在研究神经网络时经常用到的一个重要手段,因为在实际工作中神经网络是很复杂的,要借助于计算图才能使其条理清晰,让复杂的事情变得直观便于研究。这里要吐槽一下不少人的坏习惯,不喜欢画图,觉得自己是天才,画图会显得自己智商低,这是自欺欺人的表现,多少大师、教授、真正的天才他们都一丝不苟地画图,可见画图是很重要的。

神经网络的计算是由一个前向传播以及一个反向传播构成的。先通过前向传播计算出预测结果以及损失;然后再通过反向传播计算出损失函数关于每一个参数(w、b)的偏导数,并对这些参数进行梯度下降,然后用新的参数进行新一轮的前向传播计算,这样来回不停地进行前向传播反向传播计算来训练(更新)参数使损失函数越来越小使预测越来越精准。

通过计算图可以把上面所述的计算过程非常直观地展示出来。

为了便于理解,本篇文章先用一个简单的计算过程来讲解计算图,下一篇文章再将神经网络计算过程和计算图结合起来讲。

我们将用函数J(a,b,c)=3(a+bc)来讲解计算图。这个函数有三个计算步骤组成。若第一步用U来表示,则U=bc;第二步用V来表示,则V=a+U;最后是J=3V。如果用计算图表示函数J的计算过程,那么将有下图(其中假设a、b、c分别为5、3、2)
这里写图片描述
如上图所示,通过前向传播一步一步地最终即可算出函数J的值,在神经网络的计算中,通过前向传播我们可以最终算出预测值和损失值。

下面我们再来介绍一下反向传播。反向传播用于计算函数J关于各个参数的偏导数,然后对参数进行梯度下降。
这里写图片描述
首先我们来计算J关于中间量V的偏导数, 我们将其记为dJ/dV。前面的文章有讲到过“偏导数说白了就是斜率。斜率就是变化比例,即w改变一点后J会相应的改变多少”。所以为了计算关于V的偏导数,我们可以假设改变V一点点,比如让V加上0.001,即V从11变成了11.001。然后看J改变了多少,J从33变成了33.003(J=3V=3*11.001)。J的变化量除以V的变化量(0.003÷0.001)等于3,即变化比例等于3,即斜率、偏导数等于3。同理我们可以计算出中间量V关于中间量U的偏导数dV/dU为1。也可以算出中间量U关于参数b的偏导数dU/db为2。那么J关于中间量U的偏导数是多少呢?其实道理一样,我们让U改变一点点,从6变成6.001,这会导致V从11变成11.001,而V的改变会导致J从30变成33.003,J的改变量除以U的改变量等于3(0.003÷0.001),即偏导数dJ/dU为3。其实J关于U的偏导数等于J关于V的偏导数与V关于U的偏导数的乘积,即dJ/dU=dJ/dV*dV/dU=3*1=3。这种传导性计算在微积分里面我们称之为链式法则。同理,J关于参数b的偏导数dJ/db=dJ/dU*dU/db=3*2=6。dJ/db这个偏导数才是我们最终需要的,我们需要的是函数J关于参数a、b、c的偏导数。为了得到这三个偏导数,我们需要先计算出关于中间量V的偏导数然后再计算出关于中间量U的偏导数,最后计算出关于参数的偏导数,一步一步反向推进,这个过程就是一个反向传播的过程。大家可以自己计算一下关于a和c的偏导数,看自己掌握了没有,dJ/da等于3,dJ/dc等于9。

通常我们会将最终函数(在这里是J)的偏导数的符号进行简化,例如dJ/da可以写成da,将dJ/dU写成dU,当你看到db时你会知道它是dJ/db而不是dU/db。

扫描二维码关注公众号,回复: 2787490 查看本文章

本篇文章用一个简单的函数讲解了计算图、前向传播反向传播、求导计算,下篇文章将这些知识应用到神经网络计算中进行实战。

新的文章将改为在公众号上发布,请大家加我的微信,之后会用微信向大家公布测试题答案和一些通知,以及统一回答大家遇到的常见问题,有项目也可以招集大家一起做。加我时请注明“人工智能”。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/jiangjunshow/article/details/79168250