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

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

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

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

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

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


回答:

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

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

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

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

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


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

它的工作原理如下:

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

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

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

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

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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