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)
神经网络的分类问题有两种:
二元分类问题(01分类)
只有一个输出单元 ()
多元分类问题
输出单元不止一个()
神经网络的代价函数公式:
: 神经网络的总层数
: 第 层激活单元的数量(不包含偏置单元)
: 分为第 个分类()的概率
: 输出层的输出单元数量,即类数 - 1
: 第 个训练样本的第 个分量值
: 维向量
注:此处符号表达和第四周的内容有异有同,暂时先按照视频来,有必要的话可以做下统一.
公式可长可长了是吧,但是不是有些熟悉?对照下逻辑回归中的代价函数:
在神经网络的代价函数中,
: 即 维向量
: 即 维矩阵
再次可见,神经网络背后的思想是和逻辑回归一样的。
类似于回归模型中的梯度下降算法,为了求解神经网络最优化问题,我们也要计算 ,以此 。
在神经网络中,代价函数看上去虽然不复杂,但要注意到其中 的求取实际上是由前向传播算法求得,即需从输入层开始,根据每层间的权重矩阵 依次计算激活单元的值 。 在最优化代价函数时,我们必然也需要最优化每一层的权重矩阵,再次强调一下,算法最优化的是权重,而不是输入。
反向传播算法用于计算每一层权重矩阵的偏导 ,算法实际上是对代价函数求导的拆解。

首先运行前向传播算法,对于给定训练集 得到初始预测
接下来则应用反向传播算法,从输出层开始计算每一层预测的误差(error),以此来求取偏导。

输出层的误差即为预测与训练集结果的之间的差值:,
对于隐藏层中每一层的误差,都通过上一层的误差来计算:
解得 。
根据以上公式计算依次每一层的误差 。
初始化 矩阵,即令所有的 ,使得 为一个全零矩阵。
然后依次求解 ,向量化实现即
求解完 后,最后则可求得偏导
: 第 层的误差向量
: 第 层的第 个激活单元的误差
: 从第 层的第 个单元映射到第 层的第 个单元的权重代价的偏导(所有样本实例之和)
: 的样本均值与正则化项之和
注意:无需计算 ,因为输入没有误差。
这就是反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。
应用反向传播(BP)算法的神经网络被称为 BP 网络,也称前馈网络(向前反馈)。
《机器学习》一书中提到的 BP 网络强大之处:
任何布尔函数都可由两层神经网络准确表达,但所需的中间单元的数量随输入呈指数级增长;
任何连续函数都可由两层神经网络以任意精度逼近;
任何函数都可由三层神经网络以任意程度逼近。
这节给出了反向传播算法中误差的数学意义:
视频内容实际在上文都涉及到了,上节也做了解释:
反向传播算法,即从输出层开始不断向前迭代,根据上一层的误差依次计算当前层的误差,以求得代价函数的偏导。
不过,这块还是有些不好理解,可回顾视频。下面以实际例子为基础给出证明。
神经网络中代价函数求导的推导过程:
代价函数无正则化项时:
再次的,为了方便起见,这里假设样本只有一个,则有:
忆及 ,,,代入后整理后可得:

再次为了便于计算,我们用到如上图这个四层神经网络。
我们有
观察考虑各变量与 之间的关系,有
要计算 的偏导,就要按照关系不断往前看,每一次回头看,就称为一次反向传播。
把回头看的关系说的“微积分一点”,那就是 的微小改变会引起 的改变, 的微小改变会引起 的改变, 的微小改变又会引起 的改变,关系方向也可以反过来写:。
如果你还记得微积分(不然你应该也不会看到这里(*^_^*)~),听起来像不像在暗示链式求导?
令 ,则有 关于 的偏导:
忆及 ,则
则对于输出层,我们证得 。
再次忆及
即证得
对于任意的输出层单元,有 关系不变,故证得:
好了,接下来来看一下 关于 的偏导
仍然观察考虑各变量与 之间的关系,有
易求得
则
则
即证得
实际上所有隐藏层都可以上面的方式求解并得到同一结果,故证得:
再添回为了计算方便去掉的 和正则化项(时刻记住偏置单元不正则化),即为上节中 的偏导。
证明结束,留个课后作业呀,自己来计算一下 关于 的偏导,是不是能得到同样的结果?