Softmax Regression Tutorial地址:http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/

从本节開始,难度開始加大了。我将更具体地解释一下这个Tutorial。

1 Softmax Regression 介绍

前面我们已经知道了Logistic Regression。简单的说就推断一个样本属于1或者0。在应用中比方手的识别。那么就是推断一个图片是手还是非手。这就是非常easy的分类。

其实。我们仅仅要把Logistic Regression练习中的样本换成手的样本。那么就能用训练出来的结果来识别手了,因此Logistic Regression是非常实用且强大的算法。

那么在实际问题中,有非常多问题须要分类的类别非常多(multi-class classification),比方数字识别,就有0~9 一共10个类,这个时候,我们须要对Logistic Regression进行扩展。这就是Softmax Regression。
因此也称为Multinomial Logistic Regression.
那么基本思想还是概率,我们须要计算p(y=j|x)即样本属于某一个类的概率,从而选择概率最大的那一个作为终于的结果。因此。对于h(x)即Hypothesis,如今就不再仅仅是一个值,而是一个k维向量。
以下就是给出h(x)的表达式,我们在这里不须要深究这是怎样得到的。而仅仅需知道怎么用。依照Andrew Ng在某个lecture视频说的。先让东西work,再来理解。
hθ(x)=⎡⎣⎢⎢⎢⎢P(y=1|x;θ)P(y=2|x;θ)⋮P(y=K|x;θ)⎤⎦⎥⎥⎥⎥=1∑Kj=1exp(θ(j)⊤x)⎡⎣⎢⎢⎢⎢⎢exp(θ(1)⊤x)exp(θ(2)⊤x)⋮exp(θ(K)⊤x)⎤⎦⎥⎥⎥⎥⎥
那么大家从上面的公式能够看到,如今的參数theta也不再仅仅是一个列向量,而是一个nxk的矩阵,每一行相应一个theta,因此能够例如以下denote:
θ=⎡⎣⎢⎢⎢|θ(1)||θ(2)||⋯||θ(K)|⎤⎦⎥⎥⎥.

2 Cost Function

那么在确定Hypothesis之后,下一步的工作就是确定Cost Function的表达以及每个theta的偏导也就是得到Gradient梯度从而使用梯度下降法。

Tutorial直接给出了Cost Function的表达式:
J(θ)=−⎡⎣⎢⎢∑i=1m∑k=1K1{y(i)=k}logexp(θ(k)⊤x(i))∑Kj=1exp(θ(j)⊤x(i))⎤⎦⎥⎥

然后假设k=2就是仅仅有0或1,能够推出Logistic Regression的Cost Function是上面公式的特殊形式。

在Softmax Regression 中,有

P(y(i)=k|x(i);θ)=exp(θ(k)⊤x(i))∑Kj=1exp(θ(j)⊤x(i))

然后给出theta偏导的公式:

∇θ(k)J(θ)=−∑i=1m[x(i)(1{y(i)=k}−P(y(i)=k|x(i);θ))]

这里 ∇θ(k)J(θ) 本身是向量, 因此它的第j个元素是 ∂J(θ)∂θlk , J(θ) 关于 θ(k)的第j个元素的偏导。

3 Softmax Regression參数化的属性

这里介绍了Softmax Regression的一个特别属性。就是它的參数theta能够多重,即Redundant,就是有一组最优的參数theta,就能够推出无数其它组最优參数,原文以下这句话非常关键:
if the cost function J(θ) is minimized by some setting of the parameters (θ(1),θ(2),…,θ(k)), then it is also minimized by (θ(1)−ψ,θ(2)−ψ,…,θ(k)−ψ) for any value of ψ. Thus, the minimizer of J(θ) is not unique.
那么问题就来了。假设最优參数不唯一,那么怎么来计算呢?怎么最优化?
我们须要引入新的调节參数来保证可计算。这里有两种方法。一种就是指定一个參数为0,这样其它參数就唯一。
还有一种是下一节介绍的。

4 Weight Decay 权值衰减

非常easy的想法,把theta^2作为參数放进Cost Function中,问题就攻克了,这和Regulization(防止overfit的处理)全然一样。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29uZ3JvdGVr/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="500" alt="" />

5 Softmax Regression vs. k Binary Classifiers

上面就是Softmax Regression的内容了。那么有另外一个问题:
对于上面识别10个数字的样例。我们仅仅能用Softmax Regression吗?
显然不是,我们还能够用 K Binary Classifiers来解决。
什么意思呢?就是我们弄10个二进制的分类器,或者说十个Logistic Regression。然后一个一个推断某一个样本是属于1,还是2,还是3.。。

。。

这样也是能够解决这个问题的。仅仅只是非常显然。这种效率比較低。须要训练多个分类器
可是并非全部的问题都是这种,有时候我们不能使用Softmax Regression而仅仅能使用k Binary Classifier。根本在于分类的类别是否相关。比方推断一个图片是属于动物,属于鸟类,属于老鹰。。。

这些类是相关的,就不能用Softmax Regression来攻克了。

6 exercise解答

方法和前面的练习都是一样的。最困难的问题在于怎样用Vectorization来将Cost Function和Gradient表达出来。

以下是我的解答,仅仅列出softmax_regression_vec.m

function [f,g] = softmax_regression_vec(theta, X,y)
%
% Arguments:
% theta - A vector containing the parameter values to optimize.
% In minFunc, theta is reshaped to a long vector. So we need to
% resize it to an n-by-(num_classes-1) matrix.
% Recall that we assume theta(:,num_classes) = 0.
%
% X - The examples stored in a matrix.
% X(i,j) is the i'th coordinate of the j'th example.
% y - The label for each example. y(j) is the j'th example's label.
%
m=size(X,2);
n=size(X,1); % theta is a vector; need to reshape to n x num_classes.
theta=reshape(theta, n, []);
num_classes=size(theta,2)+1;
theta = [theta,zeros(n,1)]; % initialize objective value and gradient.
f = 0;
g = zeros(size(theta)); %
% TODO: Compute the softmax objective function and gradient using vectorized code.
% Store the objective function value in 'f', and the gradient in 'g'.
% Before returning g, make sure you form it back into a vector with g=g(:);
%
%%% YOUR CODE HERE %%% yCompare = full(sparse(y, 1:m, 1)); %??y == k ?? ? %yCompare = yCompare(1:num_classes-1,:); % ? ?y = 10??? M = exp(theta'*X);
p = bsxfun(@rdivide, M, sum(M));
f = - yCompare(:)' * log(p(:)); g = - X*(yCompare - p)';
g = g(:,1:num_classes - 1); g=g(:); % make gradient a vector for minFunc

怎样解释是个比較麻烦的问题,我推出的方法还是通过矩阵的size。

首先cost function有两个连加号,这意味着假设每个计算得出一个值,cost function能够得到一个kxm的矩阵,而yCompare就是kxm,因此后面的概率项也应该如此。theta‘*X是非常easy想到的,得到kxm,而对于概率项的分母,我们得这样理解:kxm每个列就是某一个样本相应于每个类的数据,我们因此对于分母项的求法非常easy。就是用sum把每一列的数据加起来。

其它的推导是一样的道理。

执行结果为:

Average error :0.000005  (Gradient Checking 结果显示梯度计算没有问题)
Training accuracy: 94.4%
Test accuracy: 92.2%

这里有一些实用的MATLAB函数须要关注一下:

full 和 sparse。举比例如以下:

>> y = [1 2 3]

y =

     1     2     3

>> sparse(y,1:3,1)

ans =

   (1,1)        1
(2,2) 1
(3,3) 1 >> full(sparse(y,1:3,1)) ans = 1 0 0
0 1 0
0 0 1

而bsxfun能够用来做矩阵的各种运算,非常快!

非常多函数假设不清楚一种就是直接在MATLAB help,一种那就是直接百度了。

【本文为原创文章,转载请注明出处:blog.csdn.net/songrotek 欢迎交流QQ:363523441】

深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 5:Softmax Regression的更多相关文章

  1. 深度学习 Deep Learning UFLDL 最新 Tutorial 学习笔记 1:Linear Regression

    1 前言 Andrew Ng的UFLDL在2014年9月底更新了. 对于開始研究Deep Learning的童鞋们来说这真的是极大的好消息! 新的Tutorial相比旧的Tutorial添加了Conv ...

  2. 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 3:Vectorization

    1 Vectorization 简述 Vectorization 翻译过来就是向量化,各简单的理解就是实现矩阵计算. 为什么MATLAB叫MATLAB?大概就是Matrix Lab,最根本的差别于其它 ...

  3. 深度学习 Deep Learning UFLDL 最新Tutorial 学习笔记 4:Debugging: Gradient Checking

    1 Gradient Checking 说明 前面我们已经实现了Linear Regression和Logistic Regression.关键在于代价函数Cost Function和其梯度Gradi ...

  4. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

  5. 机器学习(Machine Learning)&深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  6. 机器学习(Machine Learning)&amp;深度学习(Deep Learning)资料

    机器学习(Machine Learning)&深度学习(Deep Learning)资料 機器學習.深度學習方面不錯的資料,轉載. 原作:https://github.com/ty4z2008 ...

  7. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)

    ##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...

  8. 机器学习——深度学习(Deep Learning)

    Deep Learning是机器学习中一个非常接近AI的领域,其动机在于建立.模拟人脑进行分析学习的神经网络,近期研究了机器学习中一些深度学习的相关知识,本文给出一些非常实用的资料和心得. Key W ...

  9. (转)深度学习(Deep Learning, DL)的相关资料总结

    from:http://blog.sciencenet.cn/blog-830496-679604.html 深度学习(Deep Learning,DL)的相关资料总结 有人认为DL是人工智能的一场革 ...

随机推荐

  1. VMware网络使用NAT模式

    公司的网络中,要在本地安装一个Linux虚拟机,但是只分配给宿主机一个IP,那么怎么实现Linux虚拟机的网络访问呢? 使用NAT模式:这是VMware用于虚拟NAT网络下的虚拟交换机. 1.设置网络 ...

  2. 软链接ln -s以及如何解决其产生“Too many levels of symbolic links ”的错误?

    Q1:如何利用ln -s来创建快捷方式? A1:ln(link,链接文件): Windows中的快捷方式,实际上快捷方式和它指向的文件是独立的两个文件,两个都占硬盘空间,只不过用户访问快捷方式时,其效 ...

  3. 通用后台管理系统(ExtJS 4.2 + Spring MVC 3.2 + Hibernate)

    通用后台管理系统(ExtJS 4.2 +Spring MVC 3.2 + Hibernate) 开发语言JAVA 成品成品 前端技术extjs 数据库mysql,sql server,oracle 系 ...

  4. php 裁剪图片类

    <?php /* *说明:函数功能是把一个图像裁剪为任意大小的图像,图像不变形 * 参数说明:输入 需要处理图片的 文件名,生成新图片的保存文件名,生成新图片的宽,生成新图片的高 * writt ...

  5. Android ViewPage的使用(一)

    ViewPage是一个简单的页面切换组件,左右滑动的话,有效果,和ListView一样 也需要配合适配器(PagerAdapter)来使用. 先来个效果图吧 先随便创建3个view页面,用于放到 Vi ...

  6. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    在使用selenium处理中文网页或者网页标题是中文的时候,出现UnicodeEncodeError: 'ascii' codec can't encode characters in positio ...

  7. shell常用命令大全

    目录: 一.文件目录类命令 二.文件压缩和归档类命令 三.系统状态类命令 四.网络类命令 五.其他 一.文件目录类命令 1.查看联机帮助信息. man命令.#man ls info命令. #info ...

  8. Spring Cloud Config 自动刷新所有节点 架构改造

    详细参考:<Sprin Cloud 与 Docker 微服务架构实战>p162-9.9.4节 要做的改动是: 1.在spring cloud config server 服务端加入 spr ...

  9. js关于函数和对象的概念

    <script type="text/javascript"> function func1(fn){ if(typeof(fn)=="function&qu ...

  10. 【转】Windows 7 API Internet Connection Sharing(ICS) 与 Wireless Hosted Network构建本地AP

    原文:http://hi.baidu.com/ritrachiao/item/bf7715e6bb8cb3a0c10d75be [此刻我要大大地记录一下!] 这个折腾了我好几天的Windows 7 A ...