转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer
公众号:搜索与推荐Wiki
个人网站:http://thinkgamer.github.io
Softmax回归也称多项(multinomial)或者多类(multi-class)的Logistic回归,是Logistic回归在多类分类问题上的推广。和逻辑回归一样属于线性模型。
SoftMax回归简介
对于多类问题,类别标签
y
∈
1
,
2
,
3
,
.
.
.
,
C
y \in {1,2,3,...,C}
y∈1,2,3,...,C
可以用C个取值,给定一个样本x,softmax回归预测的是属于类别c的概率为(公式-1):
p
(
y
=
c
∣
x
)
=
s
o
f
t
m
a
x
(
w
c
T
x
)
=
e
x
p
(
w
c
T
x
)
∑
c
=
1
C
e
x
p
(
w
c
T
x
)
p(y=c|x)=softmax(w_c^Tx)=\frac{exp(w_c^Tx)}{\sum_{c=1}^{C}exp(w_c^Tx)}
p(y=c∣x)=softmax(wcTx)=∑c=1Cexp(wcTx)exp(wcTx)
其中w_c是第c类的权重向量。
softmax回归的决策函数可以表示为(公式-2):
y
^
=
a
r
g
m
a
x
C
c
=
1
p
(
y
=
c
∣
x
)
=
a
r
g
m
a
x
C
c
=
1
w
c
T
x
\hat{y}= \underset{c=1}{ \overset{C}{arg max} } \ p(y=c|x) =\underset{c=1}{ \overset{C}{arg max} } \ w_c^T x
y^=c=1argmaxC p(y=c∣x)=c=1argmaxC wcTx
softMax与Logistic回归的关系:
当类别个C=2时,softMax回归的决策函数为(公式-3):
y
^
=
a
r
g
m
a
x
y
∈
0
,
1
w
y
T
x
=
I
(
w
1
T
x
−
w
0
T
x
>
0
)
=
I
(
(
w
1
−
w
0
)
T
x
>
0
)
\hat{y} = \underset{y\in {0,1}}{ arg max } \ w_y^Tx=I(w_1^Tx - w_0^Tx >0 )=I((w_1 - w_0)^Tx >0 )
y^=y∈0,1argmax wyTx=I(w1Tx−w0Tx>0)=I((w1−w0)Tx>0)
其中I(.)是指示函数,对比二分类决策函数(公式-4)
g
(
f
(
x
,
w
)
)
=
s
g
n
(
f
(
x
,
w
)
)
=
{
+
1
if
f
(
x
,
w
)
>
0
−
1
if
f
(
x
,
w
)
<
0
g(f(x,w))=sgn(f(x,w))=\begin{cases} & +1 \text{ if } f(x,w)>0 \\ & -1 \text{ if } f(x,w)<0 \end{cases}
g(f(x,w))=sgn(f(x,w))={+1 if f(x,w)>0−1 if f(x,w)<0
其中sgn表示符号函数(sign function),可以发现两类分类中的权重向量w=w1-w0
向量表示:
公式-1用向量形式可以写为(公式-5)
y
^
=
s
o
f
t
m
a
x
(
W
T
x
)
=
e
r
p
(
W
T
x
)
1
T
e
x
p
(
W
T
x
)
\hat{y}=softmax(W^Tx)=\frac{erp(W^Tx)}{1^Texp(W^Tx)}
y^=softmax(WTx)=1Texp(WTx)erp(WTx)
其中W=[w_1,w_2,…,w_C]是由C个类的权重向量组成的矩阵,1为全1的向量,
y
^
∈
R
C
\hat{y}\in R^C
y^∈RC
为所有类别的预测条件概率组成的向量,第c维的值是第c类的预测条件概率。
参数学习
给定N个训练样本{(x^n, y^n)},n<=N,softmax回归使用交叉熵损失函数来学习最优的参数矩阵W。
这里用C维的one-hot向量
y
∈
0
,
1
C
y \in {0,1} ^C
y∈0,1C
来表示类别标签,其向量表示为(公式-6):
y
=
[
I
(
1
=
c
)
,
I
(
2
=
c
)
,
.
.
.
,
I
(
C
=
c
)
]
T
y = [I(1=c),I(2=c),...,I(C=c)]^T
y=[I(1=c),I(2=c),...,I(C=c)]T
其中I(.)为指示函数。
采用交叉熵损失函数,softmax的经验风险函数为(公式-7):
R
(
W
)
=
−
1
N
∑
n
=
1
N
∑
c
=
1
C
y
c
n
l
o
g
y
^
c
n
R
(
W
)
=
−
1
N
∑
n
=
1
N
(
y
n
)
T
l
o
g
y
^
n
R(W)=-\frac{1}{N}\sum_{n=1}^{N}\sum_{c=1}^{C}y_c^nlog\hat{y}_c^n R(W)=-\frac{1}{N}\sum_{n=1}^{N} (y^n)^Tlog\hat{y}^n
R(W)=−N1n=1∑Nc=1∑Cycnlogy^cnR(W)=−N1n=1∑N(yn)Tlogy^n
其中
y
^
n
=
s
o
f
t
m
a
x
(
W
T
x
n
)
\hat{y}^n = softmax(W^Tx^n)
y^n=softmax(WTxn)
为样本x^n在每个类别的后验概率。
说明:公式-7第一个式变换到第二个式是因为y_c类别中只有一个为1,其余为0,所以将第二个求和去除。
风险函数R(W)关于W的梯度为(公式-8):
∂
R
(
W
)
∂
W
=
−
1
N
∑
n
=
1
N
x
n
(
y
n
−
y
^
n
)
T
\frac{\partial R(W)}{\partial W} = -\frac{1}{N}\sum_{n=1}^{N}x^n(y^n-\hat{y}^n)^T
∂W∂R(W)=−N1n=1∑Nxn(yn−y^n)T
证明:
计算公式-8中的梯度,关键在于计算每个样本的损失函数
L
n
(
W
)
=
−
(
y
n
)
T
l
o
g
y
^
n
L^n(W)=-(y^n)^Tlog\hat{y}^n
Ln(W)=−(yn)Tlogy^n
关于参数W的梯度,其中需要用到两个导数公式为:
-
若y=softmax(z),则
∂ y ∂ z = d i a g ( y ) − y y T \frac{\partial y}{\partial z}=diag(y)-yy^T ∂z∂y=diag(y)−yyT -
若
z
=
W
T
x
=
[
w
1
T
x
,
w
2
T
x
,
.
.
.
,
w
C
T
x
]
T
z=W^Tx=[w_1^Tx,w_2^Tx,...,w_C^Tx]^T
z=WTx=[w1Tx,w2Tx,...,wCTx]T
则
∂
y
∂
w
c
\frac{\partial y}{\partial w_c}
∂wc∂y
为第c列为x,其余为0的矩阵。
∂
z
∂
w
c
=
[
∂
w
1
T
x
∂
w
c
,
∂
w
2
T
x
∂
w
c
,
.
.
.
,
∂
w
C
T
x
∂
w
c
]
=
[
0
,
0
,
.
.
,
x
,
.
.
.
,
0
]
=
M
c
(
x
)
\frac{\partial z}{\partial w_c} = [ \frac{\partial w_1^Tx}{\partial w_c},\frac{\partial w_2^Tx}{\partial w_c},...,\frac{\partial w_C^Tx}{\partial w_c} ] =[0,0,..,x,...,0] =M_c(x)
∂wc∂z=[∂wc∂w1Tx,∂wc∂w2Tx,...,∂wc∂wCTx]=[0,0,..,x,...,0]=Mc(x)
根据链式法则,
L
n
(
W
)
=
−
(
y
n
)
T
l
o
g
y
^
n
L^n(W) = -(y^n)^T log\hat{y}^n
Ln(W)=−(yn)Tlogy^n
关于w_c的偏导数为(公式-12):
∂
L
n
(
W
)
∂
w
c
=
−
∂
(
(
y
n
)
T
l
o
g
y
^
n
)
∂
w
c
\frac{\partial L^n(W) }{\partial w_c} = -\frac{ \partial ((y^n)^T log \hat{y}^n) }{\partial w_c}
∂wc∂Ln(W)=−∂wc∂((yn)Tlogy^n)
=
−
∂
z
n
∂
w
c
∂
y
^
n
∂
z
n
∂
l
o
g
y
^
n
∂
y
^
n
y
n
= -\frac{\partial z^n}{ \partial w_c } \frac{\partial \hat{y}^n}{ \partial z^n }\frac{\partial log \hat{y}^n}{ \partial \hat{y}^n } y^n
=−∂wc∂zn∂zn∂y^n∂y^n∂logy^nyn
=
−
M
c
(
x
n
)
(
d
i
a
g
(
y
^
n
)
−
y
^
n
(
y
^
n
)
T
)
(
d
i
a
g
(
y
^
n
)
)
−
1
y
n
=-M_c(x^n)(diag(\hat{y}^n)-\hat{y}^n(\hat{y}^n)^T)(diag(\hat{y}^n))^{-1} y^n
=−Mc(xn)(diag(y^n)−y^n(y^n)T)(diag(y^n))−1yn
=
−
M
c
(
x
n
)
(
I
−
y
^
n
1
T
)
y
n
=-M_c(x^n)(I-\hat{y}^n1^T)y^n
=−Mc(xn)(I−y^n1T)yn
=
−
M
c
(
x
n
)
(
y
n
−
y
^
n
1
T
y
n
)
=-M_c(x^n)(y^n-\hat{y}^n1^Ty^n)
=−Mc(xn)(yn−y^n1Tyn)
=
−
M
c
(
x
n
)
(
y
n
−
y
^
n
)
=-M_c(x^n)(y^n-\hat{y}^n)
=−Mc(xn)(yn−y^n)
=
−
x
n
[
y
n
−
y
^
n
]
c
=-x^n[y^n-\hat{y}^n]_c
=−xn[yn−y^n]c
公式-12也可以表示为非向量形式(公式-13):
∂
L
n
(
W
)
∂
w
c
=
−
x
n
(
I
(
y
n
=
c
)
−
y
^
c
n
)
\frac{\partial L^n(W) }{\partial w_c} = -x^n(I(y^n=c)-\hat{y}_c^n)
∂wc∂Ln(W)=−xn(I(yn=c)−y^cn)
其中I(.)为指示函数,根据公式-12可以得到(公式-14)
∂
L
n
(
W
)
∂
W
=
−
x
n
(
y
n
−
y
^
n
)
T
\frac{\partial L^n(W) }{\partial W} = -x^n(y^n-\hat{y}^n)^T
∂W∂Ln(W)=−xn(yn−y^n)T
采用梯度下降法,softmax回归的训练过程为:初始化W_0 <- 0,然后通过下式进行迭代更新。
W
t
+
1
=
W
t
+
α
(
1
N
∑
n
=
1
N
x
n
(
y
n
−
y
^
W
t
n
)
T
)
W_{t+1} = W_t + \alpha (\frac{1}{N} \sum_{n=1}^{N}x^n(y^n - \hat{y}_{W_t} ^ n)^T)
Wt+1=Wt+α(N1n=1∑Nxn(yn−y^Wtn)T)
其中a是学习率,
y
^
W
t
n
\hat{y}_{W_t}^n
y^Wtn
是当参数为W_t时,softmax回归模型的输出。
注意:
softmax回归中使用的C个权重向量是冗余的,即对所有权重向量都减去一个同样的向量v,不改变其输出结果。因此,softmax往往需要正则化来约束参数。此外,可以利用这个特性来避免计算softmax函数时在数值计算上溢出问题。
扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!