9 神经网络: 学习(Neural Networks: Learning)9.1 代价函数(Cost Function)9.2 反向传播算法(Backpropagation Algorithm)9.3 直观理解反向传播(Backpropagation Intuition)9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters)9.5 梯度检验(Gradient Checking)9.6 随机初始化(Random Initialization)9.7 Putting It Together9.8 自主驾驶(Autonomous Driving)

9 神经网络: 学习(Neural Networks: Learning)

9.1 代价函数(Cost Function)

神经网络的分类问题有两种:

神经网络的代价函数公式:

: 神经网络的总层数

: 第 层激活单元的数量(不包含偏置单元)

: 分为第 个分类()的概率

: 输出层的输出单元数量,即类数 - 1

: 第 个训练样本的第 个分量值

: 维向量

 

注:此处符号表达和第四周的内容有异有同,暂时先按照视频来,有必要的话可以做下统一.

公式可长可长了是吧,但是不是有些熟悉?对照下逻辑回归中的代价函数:

在神经网络的代价函数中,

: 即 维向量

: 即 维矩阵

再次可见,神经网络背后的思想是和逻辑回归一样的。

 

9.2 反向传播算法(Backpropagation Algorithm)

类似于回归模型中的梯度下降算法,为了求解神经网络最优化问题,我们也要计算 ,以此

在神经网络中,代价函数看上去虽然不复杂,但要注意到其中 的求取实际上是由前向传播算法求得,即需从输入层开始,根据每层间的权重矩阵 依次计算激活单元的值 。 在最优化代价函数时,我们必然也需要最优化每一层的权重矩阵,再次强调一下,算法最优化的是权重,而不是输入

反向传播算法用于计算每一层权重矩阵的偏导 ,算法实际上是对代价函数求导的拆解。

  1. 首先运行前向传播算法,对于给定训练集 得到初始预测

  2. 接下来则应用反向传播算法,从输出层开始计算每一层预测的误差(error),以此来求取偏导。

  3. 输出层的误差即为预测与训练集结果的之间的差值:

    对于隐藏层中每一层的误差,都通过上一层的误差来计算:

    解得

    根据以上公式计算依次每一层的误差

  4. 初始化 矩阵,即令所有的 ,使得 为一个全零矩阵。

    然后依次求解 ,向量化实现即

  5. 求解完 后,最后则可求得偏导

    • , if ,
    • , if .(对应于偏置单元)

: 第 层的误差向量

: 第 层的第 个激活单元的误差

: 从第 层的第 个单元映射到第 层的第 个单元的权重代价的偏导(所有样本实例之和)

: 的样本均值与正则化项之和

 

注意:无需计算 ,因为输入没有误差。

这就是反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。

应用反向传播(BP)算法的神经网络被称为 BP 网络,也称前馈网络(向前反馈)。

 

《机器学习》一书中提到的 BP 网络强大之处:

任何布尔函数都可由两层神经网络准确表达,但所需的中间单元的数量随输入呈指数级增长;

任何连续函数都可由两层神经网络以任意精度逼近;

任何函数都可由三层神经网络以任意程度逼近。

9.3 直观理解反向传播(Backpropagation Intuition)

这节给出了反向传播算法中误差的数学意义:

视频内容实际在上文都涉及到了,上节也做了解释:

反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。

不过,这块还是有些不好理解,可回顾视频。下面以实际例子为基础给出证明。

 

神经网络中代价函数求导的推导过程

代价函数无正则化项时:

再次的,为了方便起见,这里假设样本只有一个,则有:

忆及 ,代入后整理后可得:

再次为了便于计算,我们用到如上图这个四层神经网络。

我们有

观察考虑各变量与 之间的关系,有

要计算 的偏导,就要按照关系不断往前看,每一次回头看,就称为一次反向传播。

把回头看的关系说的“微积分一点”,那就是 的微小改变会引起 的改变, 的微小改变会引起 的改变, 的微小改变又会引起 的改变,关系方向也可以反过来写:

如果你还记得微积分(不然你应该也不会看到这里(*^_^*)~),听起来像不像在暗示链式求导?

,则有 关于 的偏导:

忆及 ,则

则对于输出层,我们证得

再次忆及

即证得

对于任意的输出层单元,有 关系不变,故证得:

好了,接下来来看一下 关于 的偏导

仍然观察考虑各变量与 之间的关系,有

易求得

即证得

实际上所有隐藏层都可以上面的方式求解并得到同一结果,故证得:

再添回为了计算方便去掉的 和正则化项(时刻记住偏置单元不正则化),即为上节中 的偏导。

 

证明结束,留个课后作业呀,自己来计算一下 关于 的偏导,是不是能得到同样的结果?

9.4 实现注意点: 参数展开(Implementation Note: Unrolling Parameters)

9.5 梯度检验(Gradient Checking)

9.6 随机初始化(Random Initialization)

9.7 Putting It Together

9.8 自主驾驶(Autonomous Driving)