第四课反向传播算法与神经网络(一)

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

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180103G047M600?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区