本文共 1704 字,大约阅读时间需要 5 分钟。
在网上看到很多关于机器学习中正向传播与反向传播的介绍,基本上都是基于单样本来进行概括性的讲解和公式的介绍,对于对数学不是很好的我在多样本的情况下容易混乱,因此手写了关于正向和反向传播的计算,在正向传播中比较容易理解,反向传播中要求误差和梯度这是重点要搞明白的。
首先介绍一下模型,模型是一个三层的神经网络模型,分别是输入层(x),隐藏层( a ( 1 ) a^{(1)} a(1))和输出层( a ( 2 ) a^{(2)} a(2))。在这个模型中也没有添加偏置b和激活函数,我觉得把下面内容理解了,其他添加内容都是比较容易理解的。模型结构如下:
来看一下我们的输入数据( x ( 1 ) x^{(1)} x(1)),是一个4行m列的矩阵,4表示4个特征,m表示m个数据集。
这边是第一层的权重参数 θ ( 1 ) \theta ^{(1)} θ(1)三行四列,三行四列是根据( a ( 1 ) a^{(1)} a(1))的神经元个数和( x ( 1 ) x^{(1)} x(1))的特征个数组成的矩阵,如下: 接下来求解 A ( 1 ) A^{(1)} A(1),是一个三行m列的矩阵: 第二层的权重参数一行三列,一行四列是根据( a ( 2 ) a^{(2)} a(2))的神经元个数和( a ( 1 ) a^{(1)} a(1))的神经元个数组成的矩阵,如下: 最后求的 A ( 2 ) A^{(2)} A(2)也就是最后的预测值, 到这边已经完成了神经网络的正向传播过程。接下来是反向传播。在上面中已经求的最后神经元的值也就是预测值,接下来就是通过预测值和实际值求的最后一层的误差 δ ( 2 ) \delta ^{(2)} δ(2),如下:
接下来求解第二层的 Δ θ ( 2 ) \Delta \theta ^{(2)} Δθ(2)更新权重参数梯度,应用的公式如下: Δ θ ( 2 ) = 1 m δ ( 2 ) ( A ( 1 ) ) T \Delta \theta ^{(2)}=\frac{1}{m}\delta ^{(2)}(A^{(1)})^{T} Δθ(2)=m1δ(2)(A(1))T 上面的结果得到一个一行三列的值,分别是第二层权重的梯度值 Δ θ ( 2 ) \Delta \theta ^{(2)} Δθ(2)。 还需要求解 A ( 1 ) A^{(1)} A(1)层的误差 δ ( 1 ) \delta ^{(1)} δ(1),反向传播计算中,因为第一层是输入变量 x ( 1 ) x^{(1)} x(1),不存在误差。只计算到 A ( 1 ) A^{(1)} A(1)层对应的误差,对应的公式如下: δ ( 1 ) = ( θ 2 ) T δ ( 2 ) ∗ a ( 1 ) ( 1 − a ( 1 ) ) \delta ^{(1)}=(\theta ^{2})^{T}\delta ^{(2)}*a^{(1)}(1-a^{(1)}) δ(1)=(θ2)Tδ(2)∗a(1)(1−a(1))最终求的第一层更新权重参数的梯度 Δ θ ( 1 ) \Delta \theta ^{(1)} Δθ(1):经过这一轮后,一共求的 Δ θ ( 1 ) \Delta \theta ^{(1)} Δθ(1)和 Δ θ ( 2 ) \Delta \theta ^{(2)} Δθ(2)的更新梯度值,然后更新模型,即
θ ( 1 ) : = θ ( 1 ) − α Δ θ ( 1 ) \theta ^{(1)}:=\theta ^{(1)}-\alpha\Delta \theta ^{(1)} θ(1):=θ(1)−αΔθ(1) θ ( 2 ) : = θ ( 2 ) − α Δ θ ( 2 ) \theta ^{(2)}:=\theta ^{(2)}-\alpha\Delta \theta ^{(2)} θ(2):=θ(2)−αΔθ(2)整个流程计算如下:
在上述多样本正向传播和反向传播中,如果有地方存在错误麻烦提出来我改正,谢谢。转载地址:http://nfulf.baihongyu.com/