代码之家  ›  专栏  ›  技术社区  ›  Afshin Mehrabani Mohd Jafar

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

  •  0
  • Afshin Mehrabani Mohd Jafar  · 技术社区  · 7 年前

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

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mahdi Dibaiee    7 年前

    您应该使用这些值本身来计算导数。

    计算输出层误差的方程如下( f 作为激活功能和 f'

    # outputs[a] represents the output of the (a)th layer
    outputs[n] = f(outputs[n-1] . weights[n] + biases[n]) # final output
    
    output_error = (outputs[n] - labels) * f'(outputs[n-1]) 
    

    请注意 f' outputs[n-1] outputs[n] 输出[n-1] 是我们函数的原始输入 f(outputs[n-1] . weights[n] + biases[n]) .


    Wikipedia

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

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

    现在,关于将导数应用于函数的结果或其输入,因为我们希望看到函数的输出根据其输入变化了多少,导数必须取函数的原始输入,以便为我们提供有关它们的信息;这就是为什么导数应用于层的输入(在这种情况下,是最后一层的输出)。

    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软件 提供有关输入比例的信息。


    http://neuralnetworksanddeeplearning.com/chap2.html