接下来我们再把隐含在g()、f() 函数中的激活函数单独提取出来。提取激活函数以后,对每一个神经元的处理过程就能表述得更具体。每一个神经元的功能都可划分为两个部分:
● 汇集各路输入传递过来的加权信息,得出一个加权和。
● 使用激活函数对加权和进行“加工”后,神经元给出相应的输出。
这样,每个神经元的输出都是将所有输入的加权和(以 s 表示)作为参数,传给激活函数(以 σ表示)进行计算得出的结果,上述过程可使用如下式子表示:
$$
\begin{array} { r l } { s _ { j } } & { { } \sum w _ { i j } x _ { i } } \\ { x _ { j } } & { { } \sigma ( s _ { j } ) } \end{array}
$$
至此已经得出了推导误差反向传播算法所需的全部前置知识,现在我们就从神经网络本身的运算过程转到误差反向传播算法的操作步骤上。虽然这个算法的名字中只包含了“反向”二字,但是其操作过程是包含了正向和反向两个阶段的,具体步骤如下:
● 准备阶段:随机初始化网络中的所有权值 w,最简单的做法是初始化为符合高斯分布的一组较小但不为零的随机数。
● 第一阶段:正向传播阶段,将训练集的数据输入神经网络,经过神经元的权值和激活函数处理,神经网络会获得一个输出值,这个值作为网络对输入值的响应。
● 第二阶段:反向传播阶段,由于权值最初都是随机产生的,神经网络对输入值的响应与训练集中标示的标签值势必会存在误差,该误差使用损失函数 E 来表示。由于这个误差值是由随机权值导致的,我们的目标就是要求解出每一层、每一个神经元的权值(从神经元 i 到神经元j 的连接权值以 $w _ { i j }$ 表示)对误差到底产生了多少影响。“一个变量对结果产生的影响程度”就是数学上导数的定义。只有求得导数之后,我们才能使用该导数逐步修正权值的大小,也即梯度下降的优化方法。所以第二阶段的核心就是求 $\frac { \partial E } { \partial w _ { i j } }$ ,如何求导是此算法的重点,稍后会详细解释。
252
第三部分 第三波高潮