手写误差反向传播算法Error BackPropagation

本文详细介绍如何从零开始手写神经网络的训练代码,包括两层权重的神经网络模型,损失函数的定义,以及训练过程中的前向传播和反向传播算法。文章深入解析了权重更新的数学原理,适合初学者理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文介绍如何手写神经网络训练代码

已知数据:

输入数据X∈Rn×dX\in\mathbb{R}^{n\times d}XRn×dnnn为样本个数,ddd为样本维数,也就是神经网络输入节点数。
标注数据Y∈Rn×tY\in\mathbb{R}^{n\times t}YRn×t, ttt为输出维数,也就是神经网络输出节点数。
注意,为了便于书写,不考虑偏置Bias。

神经网络模型:

两层权重,三层节点。
Y^=f2(f1(XW1)W2)\widehat{Y}=f_2(f_1(XW_1)W_2)Y=f2(f1(XW1)W2)W1∈Rd×hW_1\in\mathbb{R}^{d\times h}W1Rd×hW2∈Rh×tW_2\in\mathbb{R}^{h\times t}W2Rh×t为带求参数。Y^\widehat{Y}Y为预测输出。f1,f2f_1,f_2f1,f2为激励函数。

损失函数:

L=12∣∣Y^−Y∣∣2L=\frac{1}{2}||\widehat{Y}-Y||^2L=21YY2

训练伪代码:
  1. 初始化W1W_1W1,W2W_2W2.

  2. 前向过程:
    H=f1(XW1)H=f_1(XW_1)H=f1(XW1)
    Y^=f2(HW2)\widehat{Y}=f_2(HW_2)Y=f2(HW2)

  3. 反向过程:
    e=Y^−Ye=\widehat{Y}-Ye=YY
    ∂L∂W2=f1T[e.∗f2′]\frac{\partial L}{\partial W_2}=f_1^T[e.*f_2']W2L=f1T[e.f2]

    ∂L∂W1=XT[eW2T.∗f1′]\frac{\partial L}{\partial W_1}=X^T[eW_2^T.*f_1']W1L=XT[eW2T.f1]
    此处注意误差eee传递过程,当层数更多时只需计算eWTeW^TeWT即可。
    (直观上说,任何一条权重的梯度等于aieao′a_iea_o'aieaoaia_iai为输入权重的激励值,e为传到输出节点aoa_oao的误差,ao′a_o'ao为激励函数导数输出。)
    注意:反向传播是一种自动微分技术,是一种特殊的反向模式自动微分技术,其通过构建计算图来计算所有权重的梯度。
    如下是一个两层权重神经网络的计算图示意图:

    ∂L∂Y^=(Y^−Y).∗f2′\frac{\partial L}{\partial \widehat{Y}}=(\widehat{Y}-Y).*f'_2YL=(YY).f2
    ∂Y^∂W2=H.∗f2′\frac{\partial\widehat{Y}}{\partial W_2} = H.*f_2'W2Y=H.f2
    ∂L∂W2=∂Y^∂W2T∂L∂Y^\frac{\partial L}{\partial W_2}=\frac{\partial\widehat{Y}}{\partial W_2}^T\frac{\partial L}{\partial \widehat{Y}}W2L=W2YTYL
    ∂Y^∂H=W2.∗f2′\frac{\partial \widehat{Y}}{\partial H} = W_2.*f_2'HY=W2.f2
    ∂L∂H=∂Y^∂H∂L∂Y^\frac{\partial L}{\partial H}=\frac{\partial \widehat{Y}}{\partial H}\frac{\partial L}{\partial\widehat{Y}}HL=HYYL
    ∂H∂W1=X.∗f1′\frac{\partial H}{\partial W_1} = X.*f_1'W1H=X.f1
    ∂L∂W1=∂H∂W1T∂L∂H\frac{\partial L}{\partial W_1}=\frac{\partial H}{\partial W_1}^T \frac{\partial L}{\partial H}W1L=W1HTHL
    实际梯度batch平均梯度为:
    ∂L∂W2=∂L∂W2/n\frac{\partial L}{\partial W_2}=\frac{\partial L}{\partial W_2}/nW2L=W2L/n
    ∂L∂W1=∂L∂W1/n\frac{\partial L}{\partial W_1}=\frac{\partial L}{\partial W_1}/nW1L=W1L/n

  4. 应用梯度更新权重:
    W1=W1−α∂L∂W1W_1=W_1-\alpha\frac{\partial L}{\partial W_1}W1=W1αW1L
    W2=W2−α∂L∂W2W_2=W_2-\alpha\frac{\partial L}{\partial W_2}W2=W2αW2L
    α\alphaα为学习率。

  5. 计算损失函数,不收敛则继续2-4步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值