背景

DNN分类任务中,有两个相似的常见的损失函数:

1)二分类:-log(sigmoid(x)), 其等价于softplus(-x),曲线比较直观,比较好理解。-- 《Deep Learning Book》中有较为详细的推导和曲线图,这里不复述。

2)多分类:cross_entropy(softmax(x)),或-log(softmax(x)); 但这个函数不好画曲线,很少有资料描述它的梯度是什么样子的。

 

结论

找到了一份资料,整理了一下写在这里。先说结论:

d( - log( softmax(x_i) ) / d(x_i) = 1 - softmax(x_i)

即,其梯度随着 x_i 相对其它 x_j 大小变化而变化,x_i占比越大,梯度越小。x_i最大时梯度接近于0,x_i最小时梯度接近与1。适合最大化 x_i 时使用。-- 交叉熵版本在此基础上稍加思考即可。

 

推导过程

(截图取自ljvmiranda博客:https://ljvmiranda921.github.io/notebook/2017/08/13/softmax-and-the-negative-log-likelihood/

log softmax的梯度求解 (Gradient of log(softmax) )

log softmax的梯度求解 (Gradient of log(softmax) )

 

参考资料:

https://ljvmiranda921.github.io/notebook/2017/08/13/softmax-and-the-negative-log-likelihood/

 

 

相关文章: