bp前向传播和反向传播举例

本文介绍了反向传播(BP)算法的基本原理,它是神经网络中最有效的学习方法。BP通过前向传播计算损失,然后利用梯度下降法反向更新权重,以最小化误差。链式求导法则在BP中用于计算多层网络中各参数的梯度。在面试中,理解并能清晰解释这些概念对于展示你的深度学习知识至关重要。

2.4 简单阐述一下BP的过程?

阅读原文

1.基本概念

BP(Back Propogation)算法是一种最有效的学习方法,主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的。前向过程中通过与正确标签计算损失,反向传递损失,更新参数,优化至最后的参数。

而面试的过程中,我们可以拿出一支笔,给面试官直接说,“老师,我来直接写一个吧,您看看呗?

“你看哈,我这一个两层的神经网络。其中 x x x是网络的输入, y y y是网络的输出, w w w是网络学习到的参数。"

“在这里, w w w的值就是我们需要更新的目标,但是我们只有一些 x x x与跟它对应的真实 y = f ( x ) y=f(x) y=f(x)的值,所以呢?我们需要使用这两个值来计算 w w w的值了,整个问题就转变成了下面的优化问题了,也就是我们需要求函数的最小值。”

image

在实际中,这类问题有一个经典的方法叫做梯度下降法。意思是我们先使用一个随机生成的 w w w,然后使用下面的公式不断更新 w w w的值,最终逼近真实效果。

w + = w − η ⋅ ∂ E ∂ w w^{+}=w-\eta \cdot \frac{\partial E}{\partial w} w+=wηwE

这里 w w w 是一个随机初始化的权重, ∂ E ∂ w \frac{\partial E}{\partial w} wE是表示当前误差对权重 w w w的梯度。 η \eta η是表示的学习率,通常不会很大,都是0.01以下的值,用来控制更新的步长。

2. BP基础之链式求导

y = g ( x ) y=g(x) y=g(x), z = f ( y ) z=f(y) z=f(y),那么 z = h ( x ) z=h(x) z=h(x),其中 h = f ∘ g h=f \circ g h=fg。其中 d y d x = g ′ ( x ) , d z d y = f ′ ( y ) \frac{d y}{d x}=g^{\prime}(x), \frac{d z}{d y}=f^{\prime}(y) dxdy=g(x),dydz=f(y)

当我们需要求 z z z x x x的导数 d z d x \frac{d z}{d x} dxdz就需要使用链式求导了。根据我们之前学过的知识:

h ′ ( x ) = d z d x = d z d y ⋅ d y d x h^{\prime}(x)=\frac{d z}{d x}=\frac{d z}{d y} \cdot \frac{d y}{d x} h(x)=dxdz=dydzdxdy

这里说的都还是以单变量作为例子,实际中,多维变量就是变成了求偏导数了。

OK!基本上面试的时候,答到这个份儿上了,就已经够了!!

3. 参考

  • https://blog.youkuaiyun.com/qq_43196058/article/details/102670461
  • https://zhuanlan.zhihu.com/p/40378224
  • https://zhuanlan.zhihu.com/p/21407711
### 梯度误差的定义 梯度误差通常指在梯度计算过程中产生的偏差或不准确的情况。在机器学习深度学习中,使用梯度下降等优化算法时,需要计算损失函数关于模型参数的梯度,以指导参数的更新。但由于计算方法的近似性、数据的噪声、数值计算的误差等原因,实际计算得到的梯度真实梯度之间可能存在差异,这种差异就是梯度误差。 ### 梯度误差的举例解释 以一个简单的线性回归模型 $y = wx + b$ 为例,其中 $w$ $b$ 是待学习的参数。假设使用均方误差损失函数 $L = \frac{1}{n}\sum_{i=1}^{n}(y_{i}-\hat{y}_{i})^2$,其中 $y_{i}$ 是真实值,$\hat{y}_{i}=wx_{i}+b$ 是预测值。 在计算梯度时,理论上可以通过求导得到 $\frac{\partial L}{\partial w}$ $\frac{\partial L}{\partial b}$ 的精确表达式。但在实际计算中,可能会因为以下原因产生梯度误差: - **数据噪声**:如果训练数据 $x$ $y$ 中存在噪声,那么计算得到的梯度可能会偏离真实梯度。例如,原本的真实关系是 $y = 3x + 1$,但由于数据采集过程中的噪声,使得部分数据点偏离了这个真实关系,导致计算出的梯度不准确。 ```python import torch import numpy as np from matplotlib import pyplot as plt # 1准备数据,加入噪声 x = torch.rand([100]) noise = torch.randn([100]) * 0.1 # 加入噪声 y = 3 * x + 1 + noise # 先随机生成一个wb w = torch.rand(1, requires_grad=True) b = torch.rand(1, requires_grad=True) # 定义一个对损失反向传播得到梯度的函数 def loss_fn(y, y_predict): loss = (y_predict - y).pow(2).mean() for i in [w, b]: # 每次反向传播把梯度设置为0 if i.grad is not None: i.grad.data.zero_() loss.backward() return loss.data # 定义一个函数计算wb的下降后的值,learning_rate为学习率 def optimize(learning_rate): w.data -= learning_rate * w.grad.data b.data -= learning_rate * b.grad.data for i in range(3000): # 下降3000次,次数越多越精确 # 使用当的wb值来计算出预测值 y_predict = x * w + b # 计算误差 loss = loss_fn(y, y_predict) # 更新wb optimize(0.01) # 计算最终的预测值 predict = x * w + b # 计算最后的误差 final_loss = (predict - y).pow(2).mean() print(f"最终损失: {final_loss.item()}") ``` - **数值计算误差**:在计算机中,浮点数的表示计算存在一定的精度限制。当进行大量的数值计算时,这些微小的误差可能会累积,导致最终计算得到的梯度真实梯度之间存在差异。 ### 反向传播的作用 反向传播(Backpropagation,BP)算法是计算梯度下降所需梯度的有效方法,它在训练神经网络中起着核心作用。训练神经网络的核心任务是找到一组最佳的权重参数,使得网络能够对输入数据进行准确的预测。梯度下降是一种常用的优化算法,它通过迭代地调整权重参数来最小化损失函数。而反向传播算法则通过链式法则,从输出层开始,逐层向后计算每个神经元的梯度,从而指导权重参数的更新[^3]。 具体来说,反向传播的作用包括: - **高效计算梯度**:在神经网络中,手动计算每个参数的梯度是非常复杂耗时的。反向传播算法利用链式法则,将梯度计算过程进行了高效的组织优化,使得可以通过一次传播一次反向传播,计算出所有参数的梯度。 - **指导参数更新**:通过计算得到的梯度,梯度下降算法可以根据梯度的方向大小,对网络中的权重偏置进行更新,使得损失函数逐渐减小,从而提高模型的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值