Stanford深度学习课程第四课反向传播算法与神经网络(一)
预备知识
我们不直接介绍课程内容,首先介绍一些预备知识,这样可以更好的理解课程内容。下面我们介绍导数的基本概念及一些常用函数的导数。有些人大概在高中就学过导数,但是有些人没有学过,但是不管怎么样,大家在中学阶段的时候一定学过直线方程!那么不知道大家还记得不记得斜率,下面我们看一个例子,有一个函数方程为y=2x+4,其函数图像如下:
这里的斜率k=2,这里的斜率就是上面直线在直线上每一点的导数。导数其实也可以理解为在某一点上函数值的变化情况(包括变化快慢及变化方向)。
对于任意一个函数f(x),其在x0处的导数可以定义为:
下面不加证明的列出一些常用函数的导数形式及相关公式:
然后还有比较重要的链式法则,若有一个函数:
那么可以得到:
在简单介绍这部分知识后,我们来到反向传播算法。
反向传播算法
对于任意一个运算,我们可以通过构建计算图,然后利用链式法则前向求导,从而求出每一个变量的梯度。举个例子,假如有函数:
且
根据运算法则,我们首先要计算x+y,再计算乘法,所以可以令:
根据上述运算顺序画出如下计算图
首先前向计算得到:
下面我们看看反向梯度是如何计算的,我们需要计算的是:
根据函数式及求导公式,我们首先可以得出以下结论:
所以最终求得梯度为:
有了梯度之后就可以使用梯度下降法对参数进行更新了。
稍微复杂的一个例子
上面介绍了及其简单的一个例子,下面是稍微复杂的例子,也是在实际中会经常用到的例子:逻辑回归的梯度求解。需要求解梯度的函数如下:
然后我们将上述函数画成计算图(原课程中的图截图过来后不是很清晰,故重画了),通过换元将上面复杂的式子写成简单的式子(特别方便求导的式子):
根据上面过程画出来图形如下:
给定一组已知的输入,比如:
下面根据链式法则来求
的梯度,实际应用中只会对系数求梯度,输入变量是固定的。
通过上面的式子我们可以得到:
则我们可以得到如下列的反向计算结果:
上图中的结果就是给前面的公式中带入具体的值计算出来的。一旦计算得到各个变量的梯度值之后,就可以执行梯度下降,从而对损失函数进行优化。
总结
由上面的推导,对于上面示例中的函数,其反向传播梯度可以通过如下公式进行求解。
后续
1.神经网络简介
2.反向传播算法(矩阵)
Github
使用电脑的同学可以通过Github链接直接查看高清版本!
NGSHotpot Github:
https://github.com/NGSHotpot
本文链接:
https://github.com/NGSHotpot/deep-learning/blob/master/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%8F%8A%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD%E7%AE%97%E6%B3%95.md
领取专属 10元无门槛券
私享最新 技术干货