人工智能算法学习笔记(七)——SoftMax回归
要学习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−1T(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)1lnΦ1+T(y)2lnΦ2+...+(1−i=1∑k−1T(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)1lnΦkΦ1+T(y)2lnΦkΦ2+...+T(y)k−1lnΦ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Φ1lnΦ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=Φkeη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=1keη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Φjeη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Φjeη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=1eθjTx1⎣⎢⎢⎢⎢⎡eθ1Txeθ2Tx⋮eθkTx⎦⎥⎥⎥⎥⎤
其中θ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=1eθjTx1这一项对概率分布进行归一化,使得所有概率之和为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=1keθjTxeθiTx,令aj=θjTxa_j=\theta_j^Txaj=θjTx
那么损失函数被定义为:
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∑kl{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∑kyi^l{y=i}∂aj∂∑l=1kealeai∂θj∂θjTx=−i=1∑kyi^l{y=i}(∑l=1keal)2eai⋅l{i=j}⋅(∑l=1keal)−eai⋅eajx=x⎝⎜⎛i=1∑kyi^l{y=i}(∑l=1keal)2eai⋅eaj−i=1∑kyi^l{y=i}(∑l=1keal)2eai⋅l{i=j}⋅(∑l=1keal)⎠⎟⎞=x⋅(i=1∑kyi^l{y=i}⋅yi^yj^−i=1∑kyi^l{y=i}yi^⋅l{i=j})=x⋅(yj^−i=1∑kl{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)▽θjJ(θ)=i=1∑mxi⋅(yj^−l{yi=j})
利用梯度下降法可以求最优解,即:
θj:=θj−α▽θjJ(θ)\theta_j:=\theta_j-\alpha\bigtriangledown_{\theta_j}J\left (\theta \right )θj:=θj−α▽θjJ(θ)
最后谈谈权重衰减(正则化)。
给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回归分类器 。而在第二个例子中,建立三个独立的逻辑回归分类器更加合适。
未完待续。。。
- 机器学习之-逻辑回归算法【人工智能工程师--AI转型必修课】
- ML:Scikit-Learn 学习笔记(3) --- Nearest Neighbors 最近邻 回归及相关算法
- UFLDL 教程学习笔记:4.Softmax回归
- ufldl学习笔记与编程作业:Softmax Regression(softmax回归)
- 线性回归、逻辑回归、cnn、lstm、faster-rcnn等等算法学习笔记
- Machine Learning 学习笔记 (3) —— 泊松回归与Softmax回归
- 机器学习-3.3[拓展]Softmax回归-学习笔记
- 回归算法学习笔记(二)局部加权线性回归
- logistic回归算法学习笔记-从疝气症预测病马死亡率
- 学习内容:KNN算法实现-阿里云人工智能课程笔记
- 回归&logistics回归笔记-七月算法(julyedu.com)4 月机器学习算法班学习笔记
- 机器学习十大经典算法之线性回归(学习笔记整理)
- 数据挖掘学习笔记——十大算法之决策树算法、逻辑回归概述
- 机器学习十大经典算法之岭回归和LASSO回归(学习笔记整理)
- UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)
- UFLDL教程笔记及练习答案三(Softmax回归与自我学习***)
- 大数据学习笔记之四十一 数据挖掘算法之预测建模的回归模型
- [学习笔记]人工智能-感知器分类算法
- 人工智能学习笔记——可视化库Seaborn
- 【算法学习笔记】83.排序辅助 动态规划 SJTU OJ 1282 修路