Softmax Regression

Softmax Regression

1. 问题引出

pics

mnist dataset
  对于一个手写字体图片识别的任务,人类可以轻而易举的完成,但如果编写一个代码来完成这个任务绝非易事。

2. 机器学习

  假设有一种程序能够提取数字的特征,抽象出数据的模型,并能够进行很好的总结,再用其对手写数字进行预测,那么应该就能获得很好的效果。但再次之前,必定需要准备大量标注好的图片对其进行训练,这种方式被称为监督学习。而这种先通过学习获取到较优的模型的方法被称为机器学习。
机器学习的三种主要成分是:

  1. 假设类 :程序将输入数据映射到输出的方式,输出一般为类标签对应的概率。例如手写字体识别任务,输出应当为0-9这十个数字分别对应的概率。一般也被称为模型。
  2. 损失函数:它描述了一个具体的假设类在对应任务中的错误程度。因此学习的目标可以是使得这种错误尽可能的小。
  3. 优化方法:通过训练集将损失函数优化,即寻找损失函数的全局最优解的方法。但一般寻找全局最优解是非常困难的,我们只能够去不断逼近全局最优解。

3. 多分类任务

3.1 假设类

  考虑一个多分类任务例如手写字体识别。对于训练集我们有:
x ( i ) ∈ R n , y ( i ) ∈ { 1 , . . . , k } , i = 1 , . . . m x^{(i)} \in R^n, y^{(i)} \in \{1,..., k\}, i=1,...m x(i)Rn,y(i){1,...,k},i=1,...m
  其中 n n n表示输入数据的维度, k k k表示不同标签的数量 m m m表示训练数据的数量。
以MNIST数据集为例:

n = 28 × 28 = 784 n = 28 \times 28 = 784 n=28×28=784
k = 10 k = 10 k=10
m = 60000 m=60000 m=60000

  因此这里的假设类就是将输入 x ∈ R n x \in R^n xRn映射为 k k k维的向量:
h : R n → R k h:R^n \rightarrow R^k h:RnRk
  一种操作是利用矩阵操作进行映射,即:
h θ ( x ) = θ T x h_\theta(x)=\theta^Tx hθ(x)=θTx
其中 θ ∈ R n × k \theta \in R^{n \times k} θRn×k

3.2 损失函数

  一种最简单的损失函数的形式是,若模型预测与标签一致,那么损失函数的值为0, 否则为1:
l o s s e r r ( h ( x ) , y ) = { 0 , i f   a r g m a x i h i ( x ) = y 1 , o t h e r w i s e loss_{err}{(h(x), y)}=\left\{\begin{matrix}0,{if \, argmax_ih_i(x)=y} \\1,{otherwise} \end{matrix}\right. losserr(h(x),y)={0ifargmaxihi(x)=y1otherwise
  虽然其能够用来评价模型的质量,但是由于这种函数不可微分,因此在无法对模型参数进行优化,我们应当选择别的函数形式。

最大熵原理

  这个原理认为,在学习概率模型时,在所有可能的概率模型中,熵最大的模型就是最好的模型。通常用约束条件来确定概率模型的集合,所以最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的模型。
  对于单个离散的变量 x x x,,其概率分布为 P ( x ) P(x) P(x),则其熵为:
H ( p ) = − l o g p ( x ) H(p)=-logp(x) H(p)=logp(x)

  
  根据上面的最大熵原理,我们可以得到一个新的损失函数。
  首先我们将假设类的输出转化为概率形式,对其进行指数归一化:
z i = p ( l a b e l = i ) = e x p ( h ( x i ) ) ∑ j = 1 k e x p ( h ( x j ) ) ⇔ n o r m a l i z e ( h ( x ) ) z_i=p(label=i)=\frac{exp(h(x_i))}{\sum_{j=1}^kexp(h(x_j))}\Leftrightarrow normalize(h(x)) zi=p(label=i)=j=1kexp(h(xj))exp(h(xi))normalize(h(x))
  则其损失函数为:
l c e ( h ( x ) , y ) = − l o g p ( l a b e l = y ) = − h y ( x ) + l o g ∑ j = 1 k e x p ( h j ( x ) ) l_{ce}(h(x), y) = -logp(label=y)=-h_y(x)+log{\sum_{j=1}^kexp(h_j(x))} lce(h(x),y)=logp(label=y)=hy(x)+logj=1kexp(hj(x))
  这种函数被称为softmax损失函数或者cross entropy损失函数。

3.3 优化方法

  在给定的数据集上,我们的目标是寻找到合适的参数 θ \theta θ,使得损失函数的平均值最小,即:
m i n i m i z e θ    1 m ∑ i = 1 m l c e ( θ T x ( i ) , y i ) \underset{\theta}{minimize} \,\, \frac{1}{m} \sum_{i=1}^m l_{ce}(\theta^T x^{(i)}, y^i) θminimizem1i=1mlce(θTx(i),yi)
  对于一个矩阵形式的输入以及一个输出函数 f f f,梯度被定义为输出函数对于每个参数的偏导数所构成的矩阵:
▽ θ f ( θ ) ∈ R n × k = [ ∂ f ∂ θ 11 . . . ∂ f ∂ θ 1 k . . . . . . . . . ∂ f ∂ θ n 1 . . . ∂ f ∂ θ n k ] \bigtriangledown _ \theta f(\theta) \in R^{n \times k} = \left[\begin{matrix} \frac{\partial f}{\partial \theta_{11}}&...& \frac{\partial f}{\partial \theta_{1k}}\\ ...&...&...\\ \frac{\partial f}{\partial \theta_{n1}}&...& \frac{\partial f}{\partial \theta_{nk}} \end{matrix}\right] θf(θ)Rn×k= θ11f...θn1f.........θ1kf...θnkf
   梯度总是指向函数 f f f增长最快的方向。
  因此在损失函数函数中,我们顺着梯度相反的方向按一定的步长去更新参数 θ \theta θ,就可以逐渐逼近函数最优解。
θ    : = θ − α ▽ θ f ( θ ) \theta\,\,:=\theta - \alpha \bigtriangledown_\theta f(\theta) θ:=θαθf(θ)
  其中 α > 0 \alpha>0 α>0是步长,也被称为学习率。

pics

   由上图可以看出,当学习率过于小时,参数以非常慢的速度去逼近最优,但学习率过于大时,参数会在空间中反复震荡,并可能错过最优解的情况。因此应当选取合适大小的学习率。

梯度计算(以softmax为例)

   回顾softmax的公式:
l c e ( h , y ) = − h y + l o g ∑ j = 1 k e x p   h j l_{ce}(h, y) =-h_y+log{\sum_{j=1}^kexp\, h_j} lce(h,y)=hy+logj=1kexphj

  因此对于 h i h_i hi,有:
∂ l c e ( h , y ) ∂ h i = ∂ ∂ h i ( − h y + l o g ∑ j = 1 k e x p ( h j ) ) = − 1 { i = y } + e x p   h i ∑ j = 1 k e x p   h j = z − e y \frac{\partial l_{ce}(h, y)}{\partial h_i}=\frac{\partial}{\partial h_i}(-h_y+log{\sum_{j=1}^kexp(h_j)}) \\ =-1\{i=y\}+\frac{exp\,h_i}{\sum_{j=1}^kexp\, h_j}=z-e_y hilce(h,y)=hi(hy+logj=1kexp(hj))=1{i=y}+j=1kexphjexphi=zey

  其中 z z z为对 h h h做softmax的结果, e y e_y ey为将 y y y的值作为索引生成的单位矩阵。

  那么对于参数 θ \theta θ,可以通过链式运算得到,由于:
h = θ T x h=\theta^Tx h=θTx

  那么
∂ ∂ θ ( l c e ( θ T x , y ) ) = ∂ ( l c e ( θ T x , y ) ) ∂ θ T x ∂ θ T x ∂ θ = ( z − e y ) x \frac{\partial }{\partial \theta}(l_{ce}(\theta^Tx, y))=\frac{\partial (l_{ce}(\theta^Tx, y))}{\partial \theta^T x} \frac{\partial \theta^T x}{\partial \theta}=(z-e_y)x θ(lce(θTx,y))=θTx(lce(θTx,y))θθTx=(zey)x

  其中:
   x x x为单个样本,因此 x ∈ R n × 1 ; x \in R^{n \times 1}; xRn×1;
   z z z为参数归一化的结果,因此其维度与 θ T x \theta^Tx θTx相同,由于 θ ∈ R n × k \theta \in R^{n \times k} θRn×k,因此 z ∈ R k × 1 z \in R^{k \times 1} zRk×1
  由于 θ \theta θ偏导数的维度与其本身的维度一致,为了使得维度统一,最终的梯度更新公式为:
▽ θ l c e ( θ T x , y ) ∈ R n × k = x ( z − e y ) T \bigtriangledown_\theta l_{ce}(\theta^Tx,y) \in R^{n \times k}=x(z-e_y)^T θlce(θTx,y)Rn×k=x(zey)T

  同样的对于整个样本集,梯度计算公式为:
∂ ∂ θ ( l c e ( X θ , y ) ) = ∂ ( l c e ( X θ , y ) ) ∂ X θ ∂ X θ ∂ θ = ( Z − I y ) X \frac{\partial }{\partial \theta}(l_{ce}(X\theta, y))=\frac{\partial (l_{ce}(X\theta, y))}{\partial X\theta} \frac{\partial X\theta}{\partial \theta}=(Z-I_y)X θ(lce(,y))=(lce(,y))θ=(ZIy)X

  其中:
   X ∈ R m × n ; X \in R^{m \times n}; XRm×n;
   Z Z Z的维度与 X θ X\theta 相同,即 Z ∈ R m × k Z \in R^{m \times k} ZRm×k
  因此确保 θ \theta θ的偏导数与自身维度不变的情况下的梯度更新公式为:
∂ ∂ θ ( l c e ( X θ , y ) ) = X T ( Z − I y ) \frac{\partial }{\partial \theta}(l_{ce}(X\theta, y))=X^T(Z-I_y) θ(lce(,y))=XT(ZIy)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值