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背后的数学也有帮助,数学解释也是如此。很抱歉,你的数学全错了,你根本没有应用链式规则。很抱歉,你的数学全错了,你根本没有应用链式规则。