人工神经网络是由大量处理单元互联组成的非线性、自适应信息处理系统,试图通过模拟大脑神经网络处理、记忆信息的方式进行信息处理。
神经元
image.png这个“神经元”是一个以 及截距 为输入值的运算单元,其输出为 ,其中函数 被称为“激活函数”。在本教程中,我们选用sigmoid函数作为激活函数 :
神经网络模型
所谓神经网络就是将许多个单一“神经元”联结在一起,这样,一个“神经元”的输出就可以是另一个“神经元”的输入。例如,下图就是一个简单的神经网络:
image.png我们使用 表示从 层的 个神经元到 层的 个神经元的链接上的权重。使用 表示在 层第 个神经元的偏置,中间量 ,使用 表示 层第 个神经元的激活值。
层的第 个神经元的激活值 就和 层的激活值通过方程关联起来了。
对方程 就可以写成下面这种美妙而简洁的向量形式了
反向传播
反向传播的目标是计算代价函数 分别关于 和 的偏导数 和 。反向传播其实是对权重和偏置变化影响代价函数过程的理解。最终极的含义其实就是计算偏导数 和。
但是为了计算这些值,我们首先引入一个中间量, ,这个我们称为在 层第 个神经元上的误差。
对于层的第 个神经元,当输入进来时,对神经元的带权输入增加很小的变化 ,使得神经元输出由 变成 。这个变化会向网络后面的层进行传播,最终导致整个代价产生 的改变。所以这里有一种启发式的认识, 是神经元的误差的度量。
按照上面的描述,我们定义 层的第 个神经元上的误差 为:
输出层误差的方程
输出层误差的方程, : 每个元素定义如下:
第一个项 表示代价随着 输出激活值的变化而变化的速度。第二项 刻画了在 处激活函数 变化的速度。
使用下一层的误差 来表示当前层的误差
使用下一层的误差 来表示当前层的误差 :特别地,
其中是层权重矩阵的转置。假设我们知道层的误差。当我们应用转置的权重矩阵,我们可以凭直觉地把它看作是在沿着网络反向移动误差,给了我们度量在 层输出的误差方法。然后,我们进行 Hadamard 乘积运算 。这会让误差通过 层的激活函数反向传递回来并给出在第 层的带权输入的误差 。
证明:
我们想要以的形式重写。应用链式法则
为了对最后一行的第一项求值,注意:
做微分,我们得到
代入上式即有:
代价函数关于网络中任意偏置的改变率
代价函数关于网络中任意偏置的改变率: 就是
这其实是,误差 和偏导数值 完全一致。
代价函数关于任何一个权重的改变率
代价函数关于任何一个权重的改变率: 特别地,
反向传播算法描述
- 输入: 为输入层设置对应的激活值
- 前向传播: 对每个计算相应的 和
- 输出层误差 : 计算向量
- 反向误差传播: 对每个 ,计算
- 输出: 代价函数的梯度由 和 得出
证明见四个基本方程的证明。
网友评论