深度学习|1|softmax回归

系列文章目录


前言

softmax 回归(softmax regression)其实是 logistic 回归的一般形式,logistic 回归用于二分类,而 softmax 回归用于多分类


深度学习|1|softmax回归_第1张图片

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} xRn×1, y ∈ R m × 1 \pmb{y}\in\mathbb{R}^{m\times 1} yRm×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} WRm×n,bRm×1


Softmax回归的输出不是一个实值,而是一个在0和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。

例1:给定数组{-0.5, 0, 10},计算他们的softmax输出

e − 0.5 = 0.6065 , e 0 = 1 , e 100 = 22026.4658 e^{-0.5}=0.6065, e^{0}=1, e^{100}=22026.4658 e0.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

例2:给定数组{0.5, 0.8, 0.4},计算他们的softmax输出

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)


我们期望softmax模型输出什么样的数据?

线性回归采用(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

例子:在iris数据集中,山鸢尾、变色鸢尾、维吉尼亚鸢尾分别为的标签为1, 2, 3,那么在softmax模型中,我们期望的最佳输出分别是:

山鸢尾 = [1, 0, 0]

变色鸢尾 = [0, 1, 0]

维吉尼亚鸢= [0, 0, 1]

那么对于给定的softmax输出,我们如何测量他与lable之间的差距?

交叉熵损失

不同于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)=ipilog(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

显然,预测越准确,与真实概率之间的分布越接近,交叉熵也就越低。
因此,很适合将交叉熵作为损失函数。

理论总结

  1. 表达式

[ 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} o1on = w11wn1w1mwmn × x1xm + b1bn

写成矩阵形式即为:

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= y1yn =softmax(o)=ieoi1 eo1eon

  1. 损失函数
    交叉熵损失函数
    L ( y , y ^ ) = − ∑ i y i log y ^ = − log y ^ i ∣ y i = 1 \mathcal{L}(\pmb{y, \hat{y}})=-\sum_{i}y_i\text{log}\hat{y}=-\text{log}\hat{y}_{i|y_i=1} L(y,y^)=iyilogy^=logy^iyi=1

你可能感兴趣的:(深度学习,回归,深度学习,机器学习)