反向传播算法
反向传播算法
1、介绍
反向传播算法是一种用于训练人工神经网络的优化算法。它利用梯度下降法来最小化神经网络的损失函数,并更新网络参数以提高模型的准确性。下面是反向传播算法的详细介绍。
反向传播算法的基本原理是利用链式法则(chain rule)来计算损失函数相对于每个网络参数的梯度。该算法从输出层开始,计算每个参数的梯度,并向后逐层传播,直到达到输入层。在每一层中,算法通过将该层的梯度与下一层的梯度相乘来计算该层的梯度。这个过程反向传播了误差,因此称为反向传播算法。
反向传播算法的步骤如下:
前向传播:对于给定的输入样本,计算神经网络的输出结果。
计算误差:将神经网络的输出结果与真实结果进行比较,并计算误差。误差通常使用损失函数(例如均方误差)来表示。
反向传播误差:从输出层开始,计算每个参数的梯度,并向后逐层传播,直到达到输入层。
更新参数:使用梯度下降法来更新神经网络的参数,以最小化损失函数。梯度下降法的目标是沿着梯度的相反方向更新参数,以使损失函数最小化。
重复步骤1-4,直到达到停止条件,例如达到最大迭代次数或达到期望的训练误差。
反向传播算法的优点是它可以处理复杂的非线性模型,并且可以使用梯度下降法快速优化模型参数。然而,该算法也存在一些缺点,例如容易陷入局部最优解,对初始权重值和学习率等参数敏感,以及可能存在梯度消失或爆炸的问题。
为了克服这些问题,研究人员已经提出了许多改进的反向传播算法,例如随机梯度下降法(SGD)、动量优化法(Momentum)、自适应学习率优化法(Adagrad、Adadelta、Adam等)等。这些算法使得神经网络的训练更加稳定和高效。
2、如何学习权值
1、初步想法:随机扰动一个权重,看看它是否提高了性能,而后保存更改
2、非常低效:对于一个权重的改变,需要在样本集上进行多次传递
3、其他想法:同时扰动所有权重,并将性能的提高与权重的变化联系起来
4、非常难以实现
5、所以:只扰动激活值(因为他门数量较少)但同样低效
3、反向传播
1、前向传播:接受输入x,通过中间阶段,获得输出y
2、训练结算:利用y计算标量损失
3、反向传播允许信息从损失函数反向流动来计算梯度
4、从训练数据来看,我们不知道隐藏的单元效果
5、但是,当我们改版一个隐藏的激活时,我们可以得到误差传播的速度
6、使用误差导数,也称之为hidden activites
7、每个隐藏的单元可以影响许多输出单元
8、单独的误差影响->合并这些影响
9、可以有效地计算隐藏单元的误差导数(一旦我们有了隐藏激活的误差导致,就很容易得到权重的误差导数)
4、示例
5、多维输出
6、实践
- 由上面的推导过程可以看到,反向传播就i是不断地利用求导的链式法则进行展开的过程;
- 这样的过程并不复杂,但是实际网络规模个很大的情况下非常繁琐,需要细心操作
- 常用的深度学习框架(Pytorch、Tensorflow)中均不需要我们手动编码进行反向传播
- 只要我们将前向传播的Tensor流动路径定义清楚,框架会自动帮助我们计算梯度并反传更新权值;
- 我们只需要关心损失函数的定义,网络框架的搭建等等更加宏观的内容
- 需要保证Tensor流图中的每一个Tensor均可以进行反向传播(例如Pytorch中需要关注requires——grade是否为true)