Machine learning 在激活函数的反向传播过程中,为什么我们要用梯度而不是除法来多重增量?

Machine learning 在激活函数的反向传播过程中,为什么我们要用梯度而不是除法来多重增量?,machine-learning,neural-network,deep-learning,gradient-descent,backpropagation,Machine Learning,Neural Network,Deep Learning,Gradient Descent,Backpropagation,为什么在激活函数的反向传播过程中,我们应该通过梯度而不是除法来多倍增量 例如,众所周知:斜率为0.1的ReLU激活: 如果(x>0)y=x;否则y=x*0.1 因此: 向前(推断):如果(x>0)y=x;否则y=x*0.1 反向(反向传播):如果(x>0)梯度=1;else梯度=0.1然后new_delta=delta*gradient-因此,这与向前if(delta>0)new_delta=x中的公式相同;else new_delta=delta*0.1 另外,众所周知的gradient

为什么在激活函数的反向传播过程中,我们应该通过
梯度
而不是
除法
来多倍
增量

例如,众所周知:斜率为0.1的ReLU激活:

如果(x>0)y=x;否则y=x*0.1

因此:

  • 向前(推断):
    如果(x>0)y=x;否则y=x*0.1

  • 反向(反向传播):
    如果(x>0)梯度=1;else梯度=0.1
    然后
    new_delta=delta*gradient
    -因此,这与向前
    if(delta>0)new_delta=x中的公式相同;else new_delta=delta*0.1


另外,众所周知的
gradient=dY/dX

在梯度下降过程中,我们通过
y=ReLU(x)
激活函数传播
delta
,也就是说,最后我们希望通过该值
delta=dY
改变ReLU函数的输出
y

为此,我们应通过
dX
更改
x
,即
dX=dY/gradient

但在所有的框架中,包括Caffe,我们用梯度乘以它,而不是除法

i、 e.
dX=dY*梯度

为什么在通过激活函数的反向传播过程中,我们通过
gradient
而不是
division
来多个
delta





你可以很容易地找到反向传播的数学公式,所以我现在将坚持直觉

第一件你搞错的事情是,我们没有试图改变X,事实上,我们无法控制X,它是网络的输入。我们试图改变的是W(重量)

但为什么我们要用δ乘以激活梯度呢?在反向传播中,我们要计算一个权重W_ij,这个权重与产生的误差(dE/dW_ij)有多大关系,这样我们就可以知道如何校正每个权重。delta_ij是神经元j(W_ij末端的神经元)的输入导致错误的程度的指示器。然后将神经元j的激活函数应用于其输入,该函数的导数越大,我们就越不需要改变输入以减小误差。换句话说,激活函数导数与W_ij对产生的误差的贡献成正比


学习BP背后的数学也有帮助,数学解释也是如此。

你可以很容易地找到反向传播的数学,所以我现在将坚持直觉

第一件你搞错的事情是,我们没有试图改变X,事实上,我们无法控制X,它是网络的输入。我们试图改变的是W(重量)

但为什么我们要用δ乘以激活梯度呢?在反向传播中,我们要计算一个权重W_ij,这个权重与产生的误差(dE/dW_ij)有多大关系,这样我们就可以知道如何校正每个权重。delta_ij是神经元j(W_ij末端的神经元)的输入导致错误的程度的指示器。然后将神经元j的激活函数应用于其输入,该函数的导数越大,我们就越不需要改变输入以减小误差。换句话说,激活函数导数与W_ij对产生的误差的贡献成正比


学习BP背后的数学也有帮助,数学解释也是如此。

很抱歉,你的数学全错了,你根本没有应用链式规则。很抱歉,你的数学全错了,你根本没有应用链式规则。