自己的一点理解,感觉还是要记下来…
Softmax 是将LR用于多分类, 就按照类比的思路写下来。
先简单说一下LR
首先,还是要基于这个框架(如下)做一个假设函数 (hypothesis function)
假设自变量 x 是多维向量,也可以理解为多维特征吧:
我们就可以把假设函数设为:
![image_1bnhu1jfihjv7ebokv1ok311upm.png-9.2kB](https://i-blog.csdnimg.cn/blog_migrate/18a4893e7b753297fe0782da92c4c915.png)
为了简化, x0=1 , 即 x=[1,x1,x2,...,xn] , 就有:
![image_1bnhu4s0tk8a195a16e57fjulo13.png-10.4kB](https://i-blog.csdnimg.cn/blog_migrate/349239a7181463afcab9974198ea9f64.png)
此时 θ 是一个1 * n+1的向量
然后我们在将这个假设函数代入Sigmoid函数:
然后定义loss function, 做梯度下降。
那类比到Softmax;因为解决的问题是多分类,Sigmoid函数就解决不了问题了。
但有的时候我不想这样,因为这样会造成分值小的那个饥饿。所以我希望分值大的那一项经常取到,分值小的那一项也偶尔可以取到,那么我用softmax就可以了
现在还是a和b,a>b,如果我们取按照softmax来计算取a和b的概率,那a的softmax值大于b的,所以a会经常取到,而b也会偶尔取到,概率跟它们本来的大小有关。所以说不是max,而是 Soft max
所以这里引入Softmax函数:
假设
V=[v1,v2,...vm]
那么第i个元素的Softmax值:
那如果现在将softmax应用到多分类:
依然用同样的自变量x, 同样的假设函数,如上:
但是这里的 θ 不再是一个1 * n+1的向量,我们假设目标类别 y 有 k 个类别, 这里的 θ 是一个k * n+1的矩阵。
和上面一样,
θ
就是我们要训练的参数;
这里可以列出LR 和 softmax的loss function 做对比:
LR:
Softmax:
可以看到,Softmax代价函数与logistic 代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的
k
个可能值进行了累加。注意在Softmax回归中将
x
分类为类别
j
的概率为:
总结:
softmax对于LR来说
- 目标函数不同(sigmoid 和 softmax)
- 优化参数 θ 的形式不同
至于loss function的推导,暂时还没有深究;
ref:
http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
http://blog.csdn.net/supercally/article/details/54234115