后向传播(BackPropagation)算法理解

后向传播算法是深度学习中一种训练与学习方法,用来调整深度网络中各个节点之间的权重,使得网络输出的样本标签与实际标签相一致。本文将对后向传播算法的实现细节进行总结。
后向传播算法是将输出层的误差向后进行传播来实现权重的调整。如图1所示,一个含有1个隐藏层的网络,输入层有2个节点,隐藏层有3个节点,输出层有2个节点。

这里写图片描述

图1 示例网络

则后向传播的实现细节如下:
1.计算输出层各个节点的误差
这里写图片描述

其中 δα 表示 α 节点的输出误差; outα 表示经过前向传播后的输出; Targetα 表示输出节点的真值,即样本对应的标签。式中 outα(1outα) 是由于激活函数采用sigmoid所造成的。
2.更新输出层的权重
这里写图片描述

其中 W+ 为更新后的权重; W 为更新前的权重;η为学习率,控制权重更新的强度。
3.将输出层的误差传递给隐藏层
这里写图片描述

4.更新隐藏层的权重
这里写图片描述

下面给出一个计算示例:
如图2为一个简单的网络

这里写图片描述

图2 样例网络

假设目标输出为0.5,即target=0.5,则按照以上的方法计算如下:
1.计算各节点的值与激活值
a.隐藏层最顶端节点:(0.35×0.1)+(0.9×0.8)=0.755;
节点输出:out=sigmoid(0.755)=0.68;
b.隐藏层最低端节点:(0.9×0.6)+(0.35×0.4)=0.68;
节点输出:out=sigmoid(0.68)=0.6637;
c.输出层节点:(0.3×0.68)+(0.9×0.6637)=0.80133
节点输出:sigmoid(0.80133)=0.69

2.后向传播更新权重
a.输出误差: δ =(t-o)(1-o)o=(0.5-0.69)(1-0.69)0.69=-0.0406;
b.更新输出层权重:
W1+=W1+(δ×input) =0.3+(-0.0406×0.68)=0.272392
W2+=W2+(δ×input) =0.9+(-0.0406×0.6637)=0.87305

c.隐藏层误差与权重更新
误差计算:
δ1=δ×W1 =-0.0406×0.272392×(1-o)o=-2.406× 103
δ2=δ×W2 =-0.0406×0.87305×(1-o)o=-7.916× 103
权重更新:
W3+=0.1+(2.406×103×0.35)=0.09916
W4+=0.8+(2.406×103×0.9)=0.7978
W5+=0.4+(7.916×103×0.35)=0.3972
W6+=0.6+(7.916×103×0.9)=0.5928

  • 13
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴为你解答问题!关于使用PyTorch的backward()编程实现例题,我可以为您提供以下解答: 误差反向传播backpropagation,BP)算法深度学习中非常重要的一种算法。在PyTorch中,可以使用其自带的backward()函数来实现BP算法。下面是一个简单的例子: ``` import torch # 定义输入和输出 inputs = torch.tensor([[0.8, 0.2], [0.1, 0.9]]) targets = torch.tensor([[0.4, 0.6], [0.1, 0.9]]) # 定义模型参数 w1 = torch.randn(2, 3, requires_grad=True) w2 = torch.randn(3, 2, requires_grad=True) b1 = torch.randn(1, 3, requires_grad=True) b2 = torch.randn(1, 2, requires_grad=True) # 前向传播 h = torch.matmul(inputs, w1) + b1 h_relu = torch.relu(h) outputs = torch.matmul(h_relu, w2) + b2 # 计算损失并进行反向传播 loss = torch.nn.functional.mse_loss(outputs, targets) loss.backward() # 更新参数 with torch.no_grad(): w1 -= 0.01 * w1.grad w2 -= 0.01 * w2.grad b1 -= 0.01 * b1.grad b2 -= 0.01 * b2.grad w1.grad.zero_() w2.grad.zero_() b1.grad.zero_() b2.grad.zero_() ``` 在这个例子中,我们首先定义了一个包含两个输入和两个输出的简单的全连接神经网络。我们随机初始化了模型的权重和偏差,并对模型进行了一次前向传播,得到模型的输出并计算出损失。接下来,我们使用backward()函数计算出损失对每个模型参数的梯度,并使用梯度下降来更新模型参数。最后,我们将梯度清零以准备下一次迭代。 希望这个例子能为您提供帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值