Machine learning 我应该使用Softmax的输出进行反向传播吗?

Machine learning 我应该使用Softmax的输出进行反向传播吗?,machine-learning,neural-network,softmax,Machine Learning,Neural Network,Softmax,我能够实现Softmax,以便将其用于交叉熵成本函数,但我的问题是,我是否应该使用Softmax的输出(即概率)进行反向传播和更新权重 对我来说,它看起来并不完全正确,因为Softmax返回的是概率,而不是神经元的实际值 另一个选项是使用Softmax的导数输出。有人能解释一下吗?你应该用这些值来计算导数 计算输出层误差的方程式如下(f为激活函数,f'为其导数): 请注意,f'应用于输出[n-1],而不是输出[n],因为输出[n-1]是函数f(输出[n-1]。权重[n]+偏差[n])的原始输入

我能够实现Softmax,以便将其用于交叉熵成本函数,但我的问题是,我是否应该使用Softmax的输出(即概率)进行反向传播和更新权重

对我来说,它看起来并不完全正确,因为Softmax返回的是概率,而不是神经元的实际值


另一个选项是使用Softmax的导数输出。有人能解释一下吗?

你应该用这些值来计算导数

计算输出层误差的方程式如下(
f
为激活函数,
f'
为其导数):

请注意,
f'
应用于
输出[n-1]
,而不是
输出[n]
,因为
输出[n-1]
是函数
f(输出[n-1]。权重[n]+偏差[n])
的原始输入


为了更好地理解导数是如何有用以及它是如何工作的,让我们先看看它的用途(摘自):

实变量函数的导数测量函数(输出)值相对于其参数(输入值)变化的灵敏度

本质上,它测量了当输入发生少量变化时,输出变化的速度(以及方向)(可以说它测量了输出如何依赖于输入)

结合测量网络误差(成本函数)的方法,我们可以获得调整激活函数输入(即我们的权重)的最佳方法的信息,从而使输出更接近我们想要的标签

我们将误差乘以导数,我们在方向和比例上进行了一个小的更新,以最佳方式优化函数以实现我们的目标。更新应用于权重(激活函数的输入),因此下次激活函数启动时,输出将稍微接近我们的标签

现在,关于将导数应用于函数的结果或它的输入,当我们想知道函数的输出根据它的输入改变了多少时,导数必须取函数的原始输入,以便给我们关于它们的信息;这就是为什么导数应用于层的输入(在本例中是最后一层的输出)

您也可以尝试下面的实验,看看为什么会出现这种情况:

softmax [-1, 0, 1] # [9.003057317038046e-2,0.24472847105479767,0.6652409557748219]
softmax' [-1, 0, 1] # [0.19661193324148185,0.25,0.19661193324148185]
softmax' (softmax [-1, 0, 1]) # [0.24949408957503114,0.24629379904081422,0.22426006146673663]
正如您所见,应用于
softmax
结果的
softmax'
并没有传达太多关于原始值的信息,因为生成的值彼此太接近,但应用于
softmax
原始输入的
softmax'
给出了有关输入比例的信息



我推荐这篇文章来解释反向传播方程:

谢谢Mahdi。为什么我们需要计算
f'(输出[n-1])
?我假设
f'
是Softmax的导数,对吗?我有点困惑。我想我们只在输出层使用Softmax,而不是其他层(即隐藏层)。是的,
f'
是Softmax的派生。在反向传播过程中,我们使用激活函数对其输入的导数,以查看函数如何根据其输入行为。由于您的最后一层使用softmax,您必须在最后一层的反向传播期间使用softmax的导数,早期层使用其自己的激活函数的导数。我将对答案进行解释。
softmax [-1, 0, 1] # [9.003057317038046e-2,0.24472847105479767,0.6652409557748219]
softmax' [-1, 0, 1] # [0.19661193324148185,0.25,0.19661193324148185]
softmax' (softmax [-1, 0, 1]) # [0.24949408957503114,0.24629379904081422,0.22426006146673663]