### 激活函数的导数及其在反向传播中的应用

我在阅读这份文档,他们提到权重调整公式如下:

新权重 = 旧权重 + 学习率 * delta * df(e)/de * 输入

其中的df(e)/de部分是激活函数的导数,通常是像tanh这样的Sigmoid函数。

  • 这实际上是用来做什么的?
  • 为什么我们要乘以这个?
  • 为什么单单学习率 * delta * 输入不够?

这个问题是在这个问题之后提出的,并且与之密切相关:为什么在反向传播神经网络中必须使用非线性激活函数?


回答:

训练神经网络只是指为每个单元格找到权重矩阵的值(对于有一个隐藏层的NN有两个权重矩阵),以便最小化观察数据和预测数据之间的平方差。在实践中,组成两个权重矩阵的各个权重会在每次迭代中进行调整(它们的初始值通常设置为随机值)。这也被称为在线模型,与批处理模型相对,后者在大量迭代后调整权重。

但是,权重应该如何调整——即,方向是正还是负?调整幅度是多少?

这就是导数的用武之地。 导数值大会导致相应权重的大幅调整。这很有道理,因为如果导数值大,就意味着你离最小值还很远。换句话说,在每次迭代中,权重会沿着成本函数表面(由总误差定义,即观察值与预测值的差异)最陡的下降方向(导数值最高的地方)进行调整。

在计算每个模式上的误差后(通过在该迭代中神经网络预测的值减去响应变量或输出向量的实际值),权重矩阵中的每个权重都会根据计算出的误差梯度成比例地进行调整。

因为误差计算从神经网络的末端开始(即,从输出层开始,通过从预测值中减去观察值),然后向前进行,所以这被称为反向传播


更一般地说,导数(或对于多变量问题称为梯度)被优化技术使用(对于反向传播,共轭梯度可能是最常见的)来定位目标函数(也称为损失函数)的最小值

它的工作原理如下:

一阶导数是曲线上的点,使得与其相切的直线的斜率为0。

所以,如果你在由目标函数定义的3D表面上行走,并且你走到斜率=0的点,那么你就在底部——你找到了函数的一个最小值(无论是全局还是局部)。

但是一阶导数的重要性远不止于此。它还告诉你是否在正确的方向上以达到函数的最小值。

如果你考虑当曲线/表面上的点向函数最小值移动时,切线斜率的变化,你很容易理解为什么会这样。

斜率(因此该点函数的导数值)逐渐减小。换句话说,要最小化一个函数,就要沿着导数方向前进——即,如果值在减小,那么你就在正确的方向上移动。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注