我是靠谱客的博主 难过中心,最近开发中收集的这篇文章主要介绍Softmax RegressionSoftmax 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}(Xtheta, y))=frac{partial (l_{ce}(Xtheta, y))}{partial Xtheta} frac{partial Xtheta}{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 θ Xtheta 相同,即 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}(Xtheta, y))=X^T(Z-I_y) θ(lce(,y))=XT(ZIy)

最后

以上就是难过中心为你收集整理的Softmax RegressionSoftmax Regression的全部内容,希望文章能够帮你解决Softmax RegressionSoftmax Regression所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部