softmax 回归(softmax regression)其实是 logistic 回归的一般形式,logistic 回归用于二分类,而 softmax 回归用于多分类
神经网络:所有输出层的神经元,与所有输入层的神经元,线性相连。没有中间层
对任意输出神经元 y j y_j yj,都有 y j = ∑ w i , j x i + b j y_j = \sum w_{i, j}x_i + b{j} yj=∑wi,jxi+bj
进而,softmax回归模型可写为:
y = W x + b \pmb{y}= \pmb{Wx+b} y=Wx+b
假定 x ∈ R n × 1 \pmb{x}\in\mathbb{R}^{n\times 1} x∈Rn×1, y ∈ R m × 1 \pmb{y}\in\mathbb{R}^{m\times 1} y∈Rm×1,
T h e n Then Then
W ∈ R m × n , b ∈ R m × 1 \pmb{W}\in\mathbb{R}^{m\times n}, \pmb{b}\in\mathbb{R}^{m\times 1} W∈Rm×n,b∈Rm×1
softmax回归与线性回归的本质区别在于:输出意义不同
以鸢尾花为例: y 1 , y 2 , y 3 y_1, y_2, y_3 y1,y2,y3分别表示 x \pmb{x} x属于山鸢尾、变色鸢尾还是维吉尼亚鸢尾的概率。
既然是概率,则 y 1 , y 2 , y 3 y_1, y_2, y_3 y1,y2,y3的取值范围:
1. 应当在1的范围之内
2. 和应当为1
用线性回归的方式对其进行处理,并不能保证 y 1 , y 2 , y 3 y_1, y_2, y_3 y1,y2,y3的取值范围满足上述条件。
需要对输出进行softmax处理。
y i = e y i ∑ j = 1 3 e y j y_i = \frac{e^{y_i}}{\sum_{j=1}^{3} e^{y_j}} yi=∑j=13eyjeyi
上述公式即为softmax函数。
很显然, y i ∈ ( 0 , 1 ] y_i\in(0, 1] yi∈(0,1], y永远不可能等于0, 但有可能非常逼近0。
e − 0.5 = 0.6065 , e 0 = 1 , e 100 = 22026.4658 e^{-0.5}=0.6065, e^{0}=1, e^{100}=22026.4658 e−0.5=0.6065,e0=1,e100=22026.4658
∑ j = 1 3 e y j = 22028.0723 \sum_{j=1}^{3} e^{y_j}=22028.0723 ∑j=13eyj=22028.0723
y 1 = 0.00003 y_1 = 0.00003 y1=0.00003
y 2 = 0.00004 y_2 = 0.00004 y2=0.00004
y 3 = 0.99993 y_3 = 0.99993 y3=0.99993
e 0.5 = 1.649 , e 0.8 = 2.226 , e 0.4 = 1.492 e^{0.5}=1.649, e^{0.8}=2.226, e^{0.4}=1.492 e0.5=1.649,e0.8=2.226,e0.4=1.492
∑ j = 1 3 e y j = 5.367 \sum_{j=1}^{3} e^{y_j}=5.367 ∑j=13eyj=5.367
y 1 = 0.307 y_1 = 0.307 y1=0.307
y 2 = 0.415 y_2 = 0.415 y2=0.415
y 3 = 0.278 y_3 = 0.278 y3=0.278
综上所示,更完整的softmax回归模型可写为
y = s o f t m a x ( W x + b ) \pmb{y}= softmax(\pmb{Wx+b}) y=softmax(Wx+b)
线性回归采用(mean square error, MSE)损失
l = 0.5 ( y ^ − y ) 2 l = 0.5 (\hat{y}-y)^2 l=0.5(y^−y)2
其目的在于令预测值和真实值更加接近。显然,这并不适用于softmax回归模型。
softmax回归模型中,输出为离散的值,每个值表示一个类别的概率。
我们期望:
正确类的预测类别更高 → \rightarrow →接近1
错误类的预测类别更低 → \rightarrow →接近0
那么到极限情况,我们期望的输出应当是一串由1和0组成的数字,其中有且仅有一个元素为1,且1的位置在正确的类别上。
y i = { 0 , c a t e g o r y ≠ i 1 , c a t e g o r y = i y_i= \begin{cases} 0,& category \neq i \\ 1,& category = i\end{cases} yi={0,1,category=icategory=i
山鸢尾 = [1, 0, 0]
变色鸢尾 = [0, 1, 0]
维吉尼亚鸢= [0, 0, 1]
–
不同于MSE或者L1范数损失,交叉熵损失能够更敏感的反应预测结果与真实值之间的差距:
结果相差越大
↓ \downarrow ↓
损失值越大
↓ \downarrow ↓
对模型的乘法也就越大
↓ \downarrow ↓
参数调整力度也就越大
H ( p , q ) = ∑ i − p i log ( q i ) H(p, q)=\sum_{i} -p_i\text{log}(q_i) H(p,q)=∑i−pilog(qi)
其中 p , q p, q p,q分别表示输出和真实值的概率。
例1
真实值为第1类鸢尾花,其在第一维的值为1;预测的结果为[0.3, 0.2, 0.7],其第一维的值为0.3.
那么就可以计算交叉熵 H ( [ 1 , 0 , 0 ] , [ 0.3 , 0.2 , 0.7 ] ) = − ( 0.3 ) ≈ 1.7 H([1, 0, 0], [0.3, 0.2, 0.7])=-(\text{0.3})\approx 1.7 H([1,0,0],[0.3,0.2,0.7])=−(0.3)≈1.7
例2
真实值为第1类鸢尾花,其在第一维的值为1;预测的结果为[0.6, 0.2, 0.2],其第一维的值为0.6.
那么就可以计算交叉熵 H ( [ 1 , 0 , 0 ] , [ 0.6 , 0.2 , 0.2 ] ) = − ( 0.6 ) ≈ 0.74 H([1, 0, 0], [0.6, 0.2, 0.2])=-(\text{0.6})\approx 0.74 H([1,0,0],[0.6,0.2,0.2])=−(0.6)≈0.74
例3
真实值为第1类鸢尾花,其在第一维的值为1;预测的结果为[0.8, 0.1, 0.1],其第一维的值为0.8.
那么就可以计算交叉熵 H ( [ 1 , 0 , 0 ] , [ 0.8 , 0.1 , 0.1 ] ) = − ( 0.6 ) ≈ 0.32 H([1, 0, 0], [0.8, 0.1, 0.1])=-(\text{0.6})\approx 0.32 H([1,0,0],[0.8,0.1,0.1])=−(0.6)≈0.32
显然,预测越准确,与真实概率之间的分布越接近,交叉熵也就越低。
因此,很适合将交叉熵作为损失函数。
–
[ o 1 ⋮ o n ] = [ w 11 ⋯ w 1 m ⋮ ⋱ ⋮ w n 1 ⋯ w m n ] × [ x 1 ⋮ x m ] + [ b 1 ⋮ b n ] \begin{bmatrix} {o_1}\\ {\vdots}\\ {o_{n}}\\ \end{bmatrix} = \begin{bmatrix} {w_{11}}&{\cdots}&{w_{1m}}\\ {\vdots}&{\ddots}&{\vdots}\\ {w_{n1}}&{\cdots}&{w_{mn}}\\ \end{bmatrix}\times \begin{bmatrix} {x_1}\\ {\vdots}\\ {x_{m}}\\ \end{bmatrix}+\begin{bmatrix} {b_1}\\ {\vdots}\\ {b_{n}}\\ \end{bmatrix} o1⋮on = w11⋮wn1⋯⋱⋯w1m⋮wmn × x1⋮xm + b1⋮bn
写成矩阵形式即为:
O = W x + b \pmb{O}=\pmb{Wx+b} O=Wx+b
最终结果进行softmax:
y = [ y 1 ⋮ y n ] = softmax ( o ) = 1 ∑ i e o i [ e o 1 ⋮ e o n ] \pmb{y}=\begin{bmatrix} {y_1}\\ {\vdots}\\ {y_{n}}\\ \end{bmatrix}=\text{softmax}(\pmb{o})=\frac{1}{\sum_{i}e^{o_i}}\begin{bmatrix} {e^{o_1}}\\ {\vdots}\\ {e^{o_n}}\\ \end{bmatrix} y= y1⋮yn =softmax(o)=∑ieoi1 eo1⋮eon