UFLDL 08 Softmax Regression

所谓softmax regression 是在logistic regression基础上的升级版。

logistics是二分类,而softmax可以多分类。

1 logistic regression

学习softmax regression之前 我们先回归一下 logistic regression的相关知识。

(参见http://blog.csdn.net/bea_tree/article/details/50432411#t6

logistic regression的函数是

他的名字虽然是回归,但是功能却是分类,原因是,原有数据回归的曲线是logistic的曲线,他们的值要么接近1 要么接近0。

另外他们的目标函数是利用概率相乘得到的最大似然估计:

为了好计算一般取对数,L最大时就拟合好了。

这里的利用梯度下降法得到的迭代公式与线性回归的迭代公式是一样的,好巧。还有其他算法(perceptron learning algorithm)的迭代形式也是这样。

文中的代价函数是处理之后的,直接求最小值就行了

2 softmax regression

上面可以看到logistic的公式主要的思想是用的概率,当y等于0时得到的是等于0的概率,y=1时得到的是等于1的概率。

softmax的思想是分别得到多分类的概率,其公式如下:

好好理解下上式:

可以看成这是k个式子组成的矩阵形式。属于一组x会得到k个类别的概率。

既然我们对每个类别的概率已经做了假设

那么可以仿照最大似然的思想来得到下面的代价函数

如果输入x对应的类别是j,那么对应的概率就是

将所有的m个x的概率相乘就是最大似然函数,求log(乘积变相加)然后加负号之后求最小值就相当于求最大似然的最大值。

上面的代价函数就是这个意思。

其梯度的迭代公式如下

3 softmax 的参数特性

知道了它的基本原理之后,我们思考一个问题,如果我们知道前k-1个分类的概率,那么第k个的概率还需要知道么?显然 是没有必要的,这可以理解为softmax参数冗余性overparameterized 的直接理解(博主的理解,慎信)。

文中的理解更加严密些:

将概率公式中的参数直接减去一个向量ψ得到概率公式依然没有变

也就是说得到的最优化结果直接减去这个向量之后的结果依然是满足条件的最优解,换句话说,最优解有无数个。也就是hessian矩阵是奇异的(singular/non-invertible),使用牛顿法就不好用了。

按照上面的理解我们可以将其中一类的参数全都设为0,这样就不会产生冗余了,但是实际中我们并不这然做,而是加了规则相,不过这里不叫做规则化而叫作Weight Decay。

4 weight decay

加入惩罚项之后的样子

由于后面一项一定会大于零,那么Hessian 矩阵就不会是不可逆了,这样就变成了严格的凸函数,各类求解方法就可以用了。也可以直接的理解为,所有的参数有两个一个新的约束或者优化方向,因此最优解只有一个。迭代公式如下:

5 softmax VS. Binary Classifiers

当有k种分类时我们是选择softmax呢还是选择k个二分类呢?

答案是如果这k中分类时相互排斥的我们就选择softmax,但是如果是相互有叠加的部分就不行了,比如在 男人,女人,小孩,小女孩 这样的分类就没法用softmax了

时间: 2024-10-28 16:01:41

UFLDL 08 Softmax Regression的相关文章

UFLDL实验报告1: Softmax Regression

PS:这些是今年4月份,跟斯坦福UFLDL教程时的实验报告,当时就应该好好整理的…留到现在好凌乱了 Softmax Regression实验报告 1.Softmax Regression实验描述 Softmax回归模型是逻辑回归模型的推广,它可以把数据分类到两个以上的类别.在本实验中,我们的目标是采用Softmax回归模型对MNIST手写数字数据库进行分类,识别每个手写数字,把它们归类于0到9之间的10个类别.实验中需要计算成本函数J,参数Theta,成本函数的梯度,及预测假设h. Figure

ufldl学习笔记与编程作业:Softmax Regression(vectorization加速)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节是对ufldl学习笔记与编程作业:Softmax Regression(softmax回归)版本的改进. 哈哈,把向量化的写法给写出来了,尼玛好快啊.只需要2分钟,2

ufldl学习笔记和编程作业:Softmax Regression(softmax回报)

ufldl学习笔记与编程作业:Softmax Regression(softmax回归) ufldl出了新教程.感觉比之前的好,从基础讲起.系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其它机器学习的算法,能够直接来学dl. 于是近期就開始搞这个了.教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习链接:http://ufldl.stanford.edu/tutoria

ufldl学习笔记与编程作业:Softmax Regression(softmax回归)

ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在deep learning高质量群里面听一些前辈说,不必深究其他机器学习的算法,可以直接来学dl. 于是最近就开始搞这个了,教程加上matlab编程,就是完美啊. 新教程的地址是:http://ufldl.stanford.edu/tutorial/ 本节学习链接:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/ softmax回归其实是逻

深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 5:Softmax Regression

Softmax Regression Tutorial地址:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/ 从本节开始,难度开始加大了,我将更详细地解释一下这个Tutorial. 1 Softmax Regression 介绍 前面我们已经知道了Logistic Regression,简单的说就判断一个样本属于1或者0,在应用中比如手的识别,那么就是判断一个图片是手还是非手.这就是很简单的分类.事实上,我们只要把L

Deep Learning 学习笔记(一)——softmax Regression

茫然中不知道该做什么,更看不到希望. 偶然看到coursera上有Andrew Ng教授的机器学习课程以及他UFLDL上的深度学习课程,于是静下心来,视频一个个的看,作业一个一个的做,程序一个一个的写.N多数学的不懂.Matlab不熟悉,开始的时候学习进度慢如蜗牛,坚持了几个月,终于也学完了.为了避免遗忘,在这里记下一些内容.由于水平有限,Python也不是太熟悉,英语也不够好,有错误或不当的地方,请不吝赐教. 对于softmax背后的理论还不是很清楚,不知道是来自信息论还是概率.不过先了解个大

学习笔记TF024:TensorFlow实现Softmax Regression(回归)识别手写数字

TensorFlow实现Softmax Regression(回归)识别手写数字.MNIST(Mixed National Institute of Standards and Technology database),简单机器视觉数据集,28X28像素手写数字,只有灰度值信息,空白部分为0,笔迹根据颜色深浅取[0, 1], 784维,丢弃二维空间信息,目标分0~9共10类.数据加载,data.read_data_sets, 55000个样本,测试集10000样本,验证集5000样本.样本标注信

机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression

技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识,线性回归因为它的简单,易用,且可以求出闭合解,被广泛地运用在各种机器学习应用中.事实上,除了单独使用,线性回归也是很多其他算法的组成部分.线性回归的缺点也是很明显的,因为线性回归是输入到输出的线性变换,拟合能力有限:另外,线性回归的目标值可以是(?∞,+∞),而有的时候,目标值的范围是[0,1](可以表示概率值),那么就不方便了. 逻辑回归可以说是最为常用的机器学习算法之一,最经典的场景就

【DeepLearning】Exercise:Softmax Regression

Exercise:Softmax Regression 习题的链接:Exercise:Softmax Regression softmaxCost.m function [cost, grad] = softmaxCost(theta, numClasses, inputSize, lambda, data, labels) % numClasses - the number of classes % inputSize - the size N of the input vector % la