本文讨论机器学习中常见的softmax函数,并推导了softmax函数的梯度,讨论了softmax函数的一些基本性质。
softmax函数定义为
可以认为是先对 x 的每个分量 xi 做了一个非线性变换 exp(⋅) ,再将变换后的结果归一化到区间 [0,1] 。
然而,上式中存在“冗余”,可以参考UFLDL中关于softmax的相关描述。
Softmax regression has an unusual property that it has a “redundant” set of parameters
这是因为 xi,i=1,2,⋯,n 实际只有 n−1 个自由变量。例如,将式中分子分母同时除以 exp(x1) 并用 xj 代替 x1−xj ,得到:
sigmoid函数是softmax函数在
n=2
的一种特殊情形。取
x1=0
,
x2=x
:
sigmoid函数经常用于二元回归问题,而softmax则可以应用于多元回归,可以认为softmax函数是sigmoid函数的推广。
下面推导softmax函数的导数
为简化推导过程,令归一化参数
Z=∑nj=1exp(xj)
,则:
最后的结果很优雅,写成向量形式:
可以发现,这个和sigmoid函数的导数计算公式相似:
这也不难理解:前面已经说过,sigmoid函数视为softmax的一种特例,所以二者本来就应该有相似的形式。
推导出softmax函数的导数之后,对含有sigmoid函数的目标函数求导也就很容易了。
-
J1=h
∂J1∂x=h(x)(1−h(x)) -
J2=12h2
∂J2∂x=h2(x)(1−h(x)) -
J3=hlog(h)
∂J3∂x=(1+logh(x))h(x)(1−h(x)) -
J4=ylog(h)
∂J4∂x=y(1−h(x))
实际中常用的是 J3 和 J4