您的位置:首页 > 大数据 > 人工智能

人工智能算法学习笔记(七)——SoftMax回归

2019-02-28 20:40 363 查看

要学习softmax回归,就不得不提到前面学习过的逻辑回归。为什么呢?直接给出结论:因为类别数 k = 2 时,SoftMax 回归退化为逻辑回归!原因在后面的推导过程中给出。

一、什么是SoftMax回归

在机器学习尤其是深度学习中,softmaxsoftmaxsoftmax(PS:该函数被称作柔性最大值传输函数)是个非常常用而且比较重要的函数,尤其在多分类的场景中使用广泛。他把一些输入映射为0−10-10−1之间的实数,并且归一化保证和为111,因此多分类的概率之和也刚好为111。
为什么叫做SoftMaxSoftMaxSoftMax?顾名思义,SoftMaxSoftMaxSoftMax由两个单词组成,其中一个是MaxMaxMax。对于MaxMaxMax我们都很熟悉,比如有两个变量a,ba,ba,b。如果a>ba>ba>b,则maxmaxmax为aaa,反之为bbb。用伪码简单描述一下就是 ifa>breturna;elsebif\quad a > b\quad return\quad a; else\quad bifa>breturna;elseb。 另外一个单词为SoftSoftSoft,因为MaxMaxMax存在的问题,如果将MaxMaxMax看成一个分类问题,就是非黑即白,最后的输出是一个确定的变量。更多的时候,我们希望输出的是取到某个分类的概率,或者说,我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了SoftSoftSoft的概念,即最后的输出是每个分类被取到的概率。

逻辑回归的分类器是以伯努利分布为模型建模的,它可以用来分两种类别;而SoftMaxSoftMaxSoftMax回归的分类器以多项式分布为模型建模的,它可以分多种互斥的类别

二、SoftMax回归

先给一张在讲SoftMaxSoftMaxSoftMax回归时很经典的图,这个图比较清晰地告诉我们softmaxsoftmaxsoftmax是怎么计算的,很直观明了。

接下来,就要介绍SoftMaxSoftMaxSoftMax回归模型了。
该模型是逻辑回归模型在多分类问题上的推广,在多分类问题中,类标签yyy可以取两个以上的值。 SoftMaxSoftMaxSoftMax回归模型对于诸如MNISTMNISTMNIST手写数字分类等问题是很有用的,该问题的目的是辨识101010个不同的单个数字。SoftMaxSoftMaxSoftMax回归是有监督的,当然也有与深度学习/无监督学习方法的结合。
在SoftMaxSoftMaxSoftMax回归中,由于解决的是多分类问题,类标yyy可以取kkk个不同的值,因此,对于训练集{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}\left \{ \left ( x^{(1)},y^{(1)} \right ),\left ( x^{(2)},y^{(2)} \right ),...,\left ( x^{(m)},y^{(m)} \right ) \right \}{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},有y(i)∈{1,2,...,k}y^{(i)}\in \left \{ 1,2,...,k \right \}y(i)∈{1,2,...,k},(注意此处的类别下标从 111 开始,而不是000),例如,在 MNISTMNISTMNIST 数字识别任务中,我们有 k=10k=10k=10 个不同的类别。

对于给定的测试输入xxx,我们想用假设函数针对每一个类别j估算出概率值 p(y=j∣x)p\left(y=j\mid x \right)p(y=j∣x)。也就是说,我们想估计 xxx 的每一种分类结果出现的概率,
令p(y=j∣x)=Φip\left(y=j\mid x \right)=\Phi_ip(y=j∣x)=Φi​ ——属于某iii类别的概率,

那么必然有∑i=1kΦi=1\sum_{i=1}^{k}\Phi _i=1i=1∑k​Φi​=1
p(y=k∣x)=1−∑i=1k−1Φip\left ( y=k\mid x \right )=1-\sum_{i=1}^{k-1}\Phi _ip(y=k∣x)=1−i=1∑k−1​Φi​

引入T(y)T\left ( y \right )T(y):k−1k-1k−1维向量,k列
T(1)=(100⋮0)T(2)=(010⋮0)T(3)=(001⋮0)...T(k−1)=(000⋮1)T(k)=(000⋮0)T\left ( 1 \right )=\begin{pmatrix} 1\\ 0\\ 0\\ \vdots \\ 0 \end{pmatrix} T\left ( 2 \right )=\begin{pmatrix} 0\\ 1\\ 0\\ \vdots \\ 0 \end{pmatrix} T\left ( 3 \right )=\begin{pmatrix} 0\\ 0\\ 1\\ \vdots \\ 0 \end{pmatrix} ... \quad T\left ( k-1 \right )=\begin{pmatrix} 0\\ 0\\ 0\\ \vdots \\ 1 \end{pmatrix} T\left ( k \right )=\begin{pmatrix} 0\\ 0\\ 0\\ \vdots \\ 0 \end{pmatrix}T(1)=⎝⎜⎜⎜⎜⎜⎛​100⋮0​⎠⎟⎟⎟⎟⎟⎞​T(2)=⎝⎜⎜⎜⎜⎜⎛​010⋮0​⎠⎟⎟⎟⎟⎟⎞​T(3)=⎝⎜⎜⎜⎜⎜⎛​001⋮0​⎠⎟⎟⎟⎟⎟⎞​...T(k−1)=⎝⎜⎜⎜⎜⎜⎛​000⋮1​⎠⎟⎟⎟⎟⎟⎞​T(k)=⎝⎜⎜⎜⎜⎜⎛​000⋮0​⎠⎟⎟⎟⎟⎟⎞​

我们定义一个运算μ(y=i)=1\mu \left ( y=i \right )=1μ(y=i)=1,表示y=iy=iy=i为真,μ(y=i)=0\mu \left ( y=i \right )=0μ(y=i)=0,表示y=iy=iy=i为假。(PS:示性函数

因此有:
T(y=i)i=μ(y=i)T\left ( y=i \right )_i=\mu \left ( y=i \right )T(y=i)i​=μ(y=i)

则联合分布的概率密度函数如下:
p(y=k∣x)p\left ( y=k\mid x \right )p(y=k∣x)
=Φ1μ(y=1)Φ2μ(y=2)...Φkμ(y=k)=\Phi _1^{\mu \left ( y=1 \right )}\Phi _2^{\mu \left ( y=2 \right )}...\Phi _k^{\mu \left ( y=k \right )}=Φ1μ(y=1)​Φ2μ(y=2)​...Φkμ(y=k)​
=Φ1μ(y=1)Φ2μ(y=2)...Φk1−∑i=1k−1μ(y=i)\qquad\quad=\Phi _1^{\mu \left ( y=1 \right )}\Phi _2^{\mu \left ( y=2 \right )}...\Phi _k^{1-\sum_{i=1}^{k-1}\mu \left ( y=i \right )}=Φ1μ(y=1)​Φ2μ(y=2)​...Φk1−∑i=1k−1​μ(y=i)​
=Φ1T(y)1Φ2T(y)2...Φk1−∑i=1k−1T(y)i\qquad=\Phi _1^{T \left ( y\right )_1}\Phi _2^{T \left ( y\right )_2}...\Phi _k^{1-\sum_{i=1}^{k-1}T \left ( y\right )_i}=Φ1T(y)1​​Φ2T(y)2​​...Φk1−∑i=1k−1​T(y)i​​
=exp(T(y)1lnΦ1+T(y)2lnΦ2+...+(1−∑i=1k−1T(y)i)lnΦk)\qquad\qquad\qquad\qquad\quad\qquad=exp\left ( T\left ( y \right )_1ln\Phi_1+T\left ( y \right )_2ln\Phi_2+...+\left ( 1-\sum_{i=1}^{k-1}T\left ( y \right )_i \right )ln\Phi_k \right )=exp(T(y)1​lnΦ1​+T(y)2​lnΦ2​+...+(1−i=1∑k−1​T(y)i​)lnΦk​)
=exp(T(y)1lnΦ1Φk+T(y)2lnΦ2Φk+...+T(y)k−1lnΦk−1Φk+lnΦk)\qquad\qquad\qquad\qquad\quad\qquad=exp\left ( T\left ( y \right )_1ln\frac{\Phi_1}{\Phi_k}+T\left ( y \right )_2ln\frac{\Phi_2}{\Phi_k}+...+T\left ( y \right )_{k-1}ln\frac{\Phi_{k-1}}{\Phi_k}+ln\Phi_k \right )=exp(T(y)1​lnΦk​Φ1​​+T(y)2​lnΦk​Φ2​​+...+T(y)k−1​lnΦk​Φk−1​​+lnΦk​)
=b(y)exp(ηTT(y)−a(η))\quad\quad=b\left ( y \right )exp\left ( \eta^TT\left ( y \right )-a\left ( \eta \right ) \right )=b(y)exp(ηTT(y)−a(η))

到了这一步,看着眼熟么?对!就是指数分布族
对应的,
η=[lnΦ1ΦklnΦ2Φk⋮lnΦk−1Φk]\eta =\begin{bmatrix} ln\frac{\Phi_1}{\Phi_k}\\ ln\frac{\Phi_2}{\Phi_k}\\ \vdots \\ ln\frac{\Phi_{k-1}}{\Phi_k} \end{bmatrix}η=⎣⎢⎢⎢⎢⎡​lnΦk​Φ1​​lnΦk​Φ2​​⋮lnΦk​Φk−1​​​⎦⎥⎥⎥⎥⎤​
a(η)=−lnΦka\left ( \eta \right )=-ln\Phi_ka(η)=−lnΦk​
b(y)=1b\left ( y \right )=1b(y)=1
因为ηi=lnΦiΦk⇒Φi=Φkeηi\eta_i=ln\frac{\Phi_i}{\Phi_k}\Rightarrow\Phi_i=\Phi_ke^{\eta_i}ηi​=lnΦk​Φi​​⇒Φi​=Φk​eηi​

以及Φk∑i=1keηi=∑i=1kΦi=1\Phi_k\sum_{i=1}^{k}e^{\eta_i}=\sum_{i=1}^{k}\Phi_i=1Φk​∑i=1k​eηi​=∑i=1k​Φi​=1

所以Φi=eηi∑j=1kΦj\Phi_i=\frac{e^{\eta_i}}{\sum_{j=1}^{k}\Phi_j}Φi​=∑j=1k​Φj​eηi​​

重点来了:Φi\Phi_iΦi​就是我们想用假设函数针对每一个类别iii估算出概率值p(y=i∣x)=eηi∑j=1kΦjp\left ( y=i\mid x \right )=\frac{e^{\eta_i}}{\sum_{j=1}^{k}\Phi_j}p(y=i∣x)=∑j=1k​Φj​eηi​​,也就是说,我们想估计xxx的每一种分类结果出现的概率。

因此呢,假设函数将要输出一个kkk维的向量(向量元素的和为111)来表示这 kkk个估计的概率值。那么假设函数hθ(x)h_\theta\left(x\right)hθ​(x)形式如下:
hθ(x)=[Φ1Φ2⋮Φk]=1∑kj=1eθjTx[eθ1Txeθ2Tx⋮eθkTx]h_\theta\left ( x \right )=\begin{bmatrix} \Phi_1\\ \Phi_2\\ \vdots \\ \Phi_k \end{bmatrix}=\frac{1}{\sum_{k}^{j=1}e^{\theta_j^Tx}}\begin{bmatrix} e^{\theta_1^Tx}\\ e^{\theta_2^Tx}\\ \vdots \\ e^{\theta_k^Tx} \end{bmatrix}hθ​(x)=⎣⎢⎢⎢⎡​Φ1​Φ2​⋮Φk​​⎦⎥⎥⎥⎤​=∑kj=1​eθjT​x1​⎣⎢⎢⎢⎢⎡​eθ1T​xeθ2T​x⋮eθkT​x​⎦⎥⎥⎥⎥⎤​
其中θ1,θ2,...,θk∈ℜn+1\theta_1,\theta_2,...,\theta_k\in\Re^{n+1}θ1​,θ2​,...,θk​∈ℜn+1是模型的参数。1∑kj=1eθjTx\frac{1}{\sum_{k}^{j=1}e^{\theta_j^Tx}}∑kj=1​eθjT​x1​这一项对概率分布进行归一化,使得所有概率之和为111,θ\thetaθ用一个k∗n−1k*n-1k∗n−1维向量来表示:
θ=[θ1θ2⋮θk]\theta = \begin{bmatrix} \theta_1\\ \theta_2\\ \vdots \\ \theta_k \end{bmatrix}θ=⎣⎢⎢⎢⎡​θ1​θ2​⋮θk​​⎦⎥⎥⎥⎤​

接下来要介绍SoftMaxSoftMaxSoftMax损失函数了。
首先,考虑一个样本(x,y)\left(x,y\right)(x,y),有P(y=i∣x;θ)=eθiTx∑j=1keθjTxP\left(y=i\mid x;\theta\right)=\frac{e^{\theta_i^Tx}}{\sum_{j=1}^{k}e^{\theta_j^Tx}}P(y=i∣x;θ)=∑j=1k​eθjT​xeθiT​x​,令aj=θjTxa_j=\theta_j^Txaj​=θjT​x
那么损失函数被定义为:
L(x,y^)=−∑j=1kl{y=j}lnyj^L\left(x,\hat{y}\right)=-\sum_{j=1}^{k}l\left \{ y=j \right \}ln\hat{y_j}L(x,y^​)=−j=1∑k​l{y=j}lnyj​^​
这种形式的损失函数被称作交叉熵损失函数
其中y^\hat{y}y^​是预测结果的概率值,l{y=j}l\left\{y=j\right\}l{y=j}是示性函数,表示yyy是第jjj个类别的真实值,只能取0or10 or 10or1.

那什么是交叉熵又要开一篇文章去介绍,给三篇文章我认为写的很不错,也比较容易理解。
理解熵与交叉熵
简单的交叉熵损失函数,你真的懂了吗?
一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉

接下来,要对损失函数求导了,对θj\theta_jθj​求偏导,运用求导链式法则即可:
∂L(x,y^)∂θj=−∑i=1k∂L(x,y^)∂yi^∂yi^∂aj∂aj∂θj=−∑i=1kl{y=i}yi^∂eai∑l=1keal∂aj∂θjTx∂θj=−∑i=1kl{y=i}yi^eai⋅l{i=j}⋅(∑l=1keal)−eai⋅eaj(∑l=1keal)2x=x(∑i=1kl{y=i}yi^eai⋅eaj(∑l=1keal)2−∑i=1kl{y=i}yi^eai⋅l{i=j}⋅(∑l=1keal)(∑l=1keal)2)=x⋅(∑i=1kl{y=i}yi^⋅yi^yj^−∑i=1kl{y=i}yi^yi^⋅l{i=j})=x⋅(yj^−∑i=1kl{y=i}⋅l{i=j})=x⋅(yj^−l{y=j})\frac{\partial L\left (x,\hat{y}\right )}{\partial \theta_j}=-\sum_{i=1}^{k}\frac{\partial L\left (x,\hat{y}\right)}{\partial \hat{y_i}}\frac{\partial \hat{y_i}}{\partial a_j}\frac{\partial a_j}{\partial \theta_j}\\\\ =-\sum_{i=1}^{k}\frac{l\left \{ y=i \right \}}{\hat{y_i}}\frac{\partial \frac{e^{a_i}}{\sum_{l=1}^{k}e^{a_l}}}{\partial a_j}\frac{\partial \theta_j^Tx}{\partial \theta_j}\\\\ =-\sum_{i=1}^{k}\frac{l\left \{ y=i \right \}}{\hat{y_i}}\frac{e^{a_i}\cdot l\left \{ i=j \right \}\cdot \left ( \sum_{l=1}^{k}e^{a_l} \right )-e^{a_i}\cdot e^{a_j}}{\left ( \sum_{l=1}^{k}e^{a_l} \right )^2}x\\\\ =x\left (\sum_{i=1}^{k} \frac{l\left \{ y=i \right \}}{\hat{y_i}}\frac{e^{a_i}\cdot e^{a_j}}{\left ( \sum_{l=1}^{k}e^{a_l} \right )^2}- \sum_{i=1}^{k}\frac{l\left \{ y=i \right \}}{\hat{y_i}}\frac{e^{a_i}\cdot l\left \{ i=j \right \}\cdot \left ( \sum_{l=1}^{k}e^{a_l} \right )}{\left ( \sum_{l=1}^{k}e^{a_l} \right )^2} \right )\\\\ =x\cdot \left (\sum_{i=1}^{k}\frac{l\left \{ y=i \right \}}{\hat{y_i}}\cdot \hat{y_i}\hat{y_j}- \sum_{i=1}^{k}\frac{l\left \{ y=i \right \}}{\hat{y_i}}\hat{y_i}\cdot l\left \{ i=j \right \} \right )\\\\ =x\cdot\left (\hat{y_j} - \sum_{i=1}^{k}l\left \{ y=i \right \}\cdot l\left \{ i=j \right \}\right )\\\\\\ =x\cdot\left (\hat{y_j} - l\left \{ y=j \right \}\right )∂θj​∂L(x,y^​)​=−i=1∑k​∂yi​^​∂L(x,y^​)​∂aj​∂yi​^​​∂θj​∂aj​​=−i=1∑k​yi​^​l{y=i}​∂aj​∂∑l=1k​eal​eai​​​∂θj​∂θjT​x​=−i=1∑k​yi​^​l{y=i}​(∑l=1k​eal​)2eai​⋅l{i=j}⋅(∑l=1k​eal​)−eai​⋅eaj​​x=x⎝⎜⎛​i=1∑k​yi​^​l{y=i}​(∑l=1k​eal​)2eai​⋅eaj​​−i=1∑k​yi​^​l{y=i}​(∑l=1k​eal​)2eai​⋅l{i=j}⋅(∑l=1k​eal​)​⎠⎟⎞​=x⋅(i=1∑k​yi​^​l{y=i}​⋅yi​^​yj​^​−i=1∑k​yi​^​l{y=i}​yi​^​⋅l{i=j})=x⋅(yj​^​−i=1∑k​l{y=i}⋅l{i=j})=x⋅(yj​^​−l{y=j})

以上是对单个样本的损失函数求偏导(PS:其实就是单个样本的梯度),但实际上,我们可能有mmm个样本,因此,需要累加在一起。如下所示:
▽θjJ(θ)=∑i=1mxi⋅(yj^−l{yi=j})\bigtriangledown_{\theta_j}J\left ( \theta \right ) =\sum_{i=1}^{m}x^i\cdot \left (\hat{y_j}-l\left \{ y^i=j \right\}\right)▽θj​​J(θ)=i=1∑m​xi⋅(yj​^​−l{yi=j})

利用梯度下降法可以求最优解,即:
θj:=θj−α▽θjJ(θ)\theta_j:=\theta_j-\alpha\bigtriangledown_{\theta_j}J\left (\theta \right )θj​:=θj​−α▽θj​​J(θ)

最后谈谈权重衰减(正则化)。
给J(θ)J\left(\theta\right)J(θ)加个L2L_2L2​权重衰减项λ2∑i=1k∑j=0nθij2\frac{\lambda }{2}\sum_{i=1}^{k}\sum_{j=0}^{n}\theta_{ij}^22λ​∑i=1k​∑j=0n​θij2​来修改代价函数,这个衰减项会惩罚过大的参数值,有了这个权重衰减项以后(λ>0)(\lambda > 0)(λ>0),代价函数就变成了严格的凸函数,这样就可以保证得到唯一的解了。

三、Softmax 回归 vs. k 个二元分类器

如果你在开发一个音乐分类的应用,需要对kkk种类型的音乐进行识别,那么是选择使用softmaxsoftmaxsoftmax分类器呢,还是使用逻辑回归算法建立kkk个独立的二元分类器呢?
这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数 k=4k = 4k=4 的softmaxsoftmaxsoftmax回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数 kkk 设为555。) 如果你的四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用444个二分类的逻辑回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。
现在我们来看一个计算视觉领域的例子,你的任务是将图像分到三个不同类别中。
111 假设这三个类别分别是:室内场景、户外城区场景、户外荒野场景。你会使用sofmaxsofmaxsofmax回归还是 333个逻辑回归分类器呢?
222 现在假设这三个类别分别是室内场景、黑白图片、包含人物的图片,你又会选择 softmaxsoftmaxsoftmax 回归还是多个逻辑回归分类器呢?
在第一个例子中,三个类别是互斥的,因此更适于选择softmaxsoftmaxsoftmax回归分类器 。而在第二个例子中,建立三个独立的逻辑回归分类器更加合适。

未完待续。。。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: