书籍参考
参考英文在线书籍 Neural Networks and Deep Learning 第二章。
博文提要
上篇讲了代价函数、梯度下降法进行学习调参的过程,但是没有讲怎么计算梯度!一个快速计算的方法就是反向传播。
该篇着重介绍这两个概念,偏数学一些,数学兴趣不浓的话可以快速浏览,懂不懂没关系,不影响后续学习。在实践中也不需要你懂得反向传播,函数库底层都封装好了,你直接调用即可。但是懂得它会有个好处,让你更深刻理解调参怎么影响的神经网络。要弄懂这,需要大量的记忆上的重复,产生条件反射,看到文字或符号就有概念,看到概念就能联想。
因环境问题暂没有使用公式编辑插件,本章会有大量的示意图和公式截图。
一、回顾和引子
简单回顾下上篇说的神经网络和代价函数:
- 神经网络可以有多层,最左层为输入层,最右层为输出层,中间为隐含层(hidden layer)。每个神经元(输入层的除外)对前一层的每个输入值,都会求加权和sum(后面简化用z表示),然后可以选择代入一个激活函数求得该神经元的输出,激活函数可以有多种,我们引入的是sigmoid函数。激活函数能将很大/很小的值映射到一个小范围内。
- 学习过程中,我们有输入x、计算输出y、相应正确输出a,根据y和a的差值能得到误差:
公式有点迷惑性,实际上计算输出a,跟一系列的参数w、b相关;y(x)是常量,一旦输入x确定它就确定了。 - 学习过程的本质是调参——朝着减小误差C的方向调参。为此,我们研究了梯度下降法,这个方法说的是往误差下降最快的方向调参,即梯度方向。重点就是梯度怎么求,或者说C对每个参数的偏导数怎么求。
二、从公式推导看原理
下面先回忆下公式及其变形,再提出俩容易懂的假设来简化问题,最后推导出C的梯度。
1. 输出-输入关系式的向量形式
神经网络中参数w、b很多,参照下面俩图,我们先约定一个清晰的表示方式:
wjkl 表示(l-1)层第k个神经元->