0. 前言

  这学期 Pattern Recognition 课程的 project 之一是手写数字识别,之二是做一个网站验证码的识别(鸭梨不小哇)。面包要一口一口吃,先尝试把模式识别的经典问题——手写数字识别做出来吧。这系列博客参考 deep learning tutorial ,记录下用以下三种方法的实现过程:

  1. Logistic Regression - using Theano for something simple
  2. Multilayer perceptron - introduction to layer
  3. Deep Convolutional Network - a simplified version of LeNet5

  目的在于一方面从理论上帮自己理顺思路,另一方面作为课程最后一课 presentation 的材料。这三种方法从易到难,准确率也由低到高,我们先从简单的入手。

1. Binomial logistic regression model

  尽管线性分类器方法足够简单并且使用广泛,但是线性模型对于输出的 y 没有界限,y 可以取任意大或者任意小(负数)的值,对于某些问题来说不够 adequate, 比如我们想得到 0 到 1 之间的 probability 输出,这时候就要用到比 linear regression 更加强大的 logistic regression 了。

 y = w • x

  直觉上,一个线性模型的输出值 y 越大,这个事件 P(Y=1|x) 发生的概率就越大。 另一方面,我们可以用事件的几率(odds)来表示事件发生与不发生的比值,假设发生的概率是 p ,那么发生的几率(odds)是 p/(1-p) , odds 的值域是 0 到正无穷,几率越大,发生的可能性越大。将我们的直觉与几率联系起来的就是下面这个(log odds)或者是 logit 函数 (有点牵强 - -!):

  进而可以求出概率 p 关于 w 点乘 x 的表示:

  (注:为什么要写出中间一步呢?看到第三部分的你就明白啦!)

  这就是传说中的 sigmoid function 了,以 w 点乘 x 为自变量,函数图像如下:

(注:从图中可以看到 wx 越大,p 值越高,在线性分类器中,一般 wx = 0 是分界面,对应了 logistic regression 中 p = 0.5)

2. Parameter Estimation

  Logsitic regression 输出的是分到每一类的概率,参数估计的方法自然就是最大似然估计 (MLE) 咯。对于训练样本来说,假设每个样本是独立的,输出(标签)为 y = {0, 1},样本的似然函数就是将所有训练样本 label 对应的输出节点上的概率相乘, 令 p = P(Y=1|x) ,如果 y = 1, 概率就是 p, 如果 y = 0, 概率就是 1 - p ,(好吧,我是个罗嗦的家伙),  将这两种情况合二为一,得到似然函数:

  嗯?有连乘,用对数化为累加, balabala 一通算下来,就得到了对数似然函数为

  应用梯度下降法或者是拟牛顿法对 L(w) 求极大值,就可以得到 w 的估计值了。

3. Softmax regression

  这一小节旨在弄清 softmax regression 和 logistic regression 的联系,更多细节请参考 Andrew Ng 的英文资料,需要快速浏览也可以看看中文翻译版本,或者 wiki 一下。

  logistic regression 在多类上的推广又叫 softmax regression, 在数字手写识别中,我们要识别的是十个类别,每次从输入层输入 28×28 个像素,输出层就可以得到本次输入可能为 0, 1, 2… 的概率。得花点时间画个简易版本的,看起来更直观:

  OK, 左边是输入层,输入的 x 通过中间的黑线 w (包含了 bias 项)作用下,得到 w.x, 到达右边节点, 右边节点通过红色的函数将这个值映射成一个概率,预测值就是输入概率最大的节点,这里可能的值是 {0, 1, 2}。在 softmax regression 中,输入的样本属于第 j 类的概率可以写成:

  (注:对比第一部分提到过的中间一步,有什么不同?)   

注意到,这个回归的参数向量减去一个常数向量,会有什么结果:

  没有变化!这说明如果某一个向量是代价函数的极小值点,那么这个向量在减去一个任意的常数向量也是极小值点,这是因为 softmax 模型被过度参数化了。(题外话:回想一下在线性模型中,同时将 w 和 b 扩大两倍,模型的分界线没有变化,但是模型的输出可信度却增大了两倍,而在训练迭代中, w 和 b 绝对值越来越大,所以 SVM 中就有了函数距离和几何距离的概念)

  既然模型被过度参数化了,我们就事先确定一个参数,比如将 w1 替换成全零向量,将 w1.x = 0 带入 binomial softmax regression ,得到了我们最开始的二项 logistic regression (可以动手算一算), 用图就可以表示为

  (注:虚线表示为 0 的权重,在第一张图中没有画出来,可以看到 logistic regression 就是 softmax regression 的一种特殊情况)

  在实际应用中,为了使算法实现更简单清楚,往往保留所有参数,而不任意地将某一参数设置为 0。我们可以对代价函数做一个改动:加入权重衰减 (weight decay)。 权重衰减可以解决 softmax 回归的参数冗余所带来的数值问题。并且此时代价函数变成了严格的凸函数, Hessian矩阵变为可逆矩阵,保证有唯一的解。(感觉与线性分类器里限制 ||w|| 或者设置某一个 w 为全零向量一样起到了减参的作用,但是这个计算起来简单清晰,可以用高斯分布的 MAP 来推导,其结果是将 w 软性地限制在超球空间,有一点 “soft” 的味道,个人理解^ ^)

  加入权重衰减后的代价函数是:

  等号右边第一项是训练样本 label 对应的输出节点上的概率的负对数,第二项是 weight decay ,可以使用梯度下降法和 L-BFGS 等算法可以保证收敛到全局最优解。总结起来,logistic regression 是 softmax regression 的一种特殊形式,前者是二类问题,后者是多类问题,前者的非线性函数的唯一确定的 sigmoid function (默认 label 为 0 的权重为全零向量的推导结果), 后者是 softmax, 有时候我们并不特意把它们区分开来。

好,基础知识准备完毕,下面我们就要在数字手写识别项目里面实战一下了。(^_^)


参考资料:

[1] 统计学习方法, 李航 着

[2] http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

转载于:https://www.cnblogs.com/daniel-D/archive/2013/05/30/3109276.html

Logistic Regression 之基础知识准备相关推荐

  1. 逻辑回归Logistic Regression 之基础知识准备

    0. 前言   这学期 Pattern Recognition 课程的 project 之一是手写数字识别,之二是做一个网站验证码的识别(鸭梨不小哇).面包要一口一口吃,先尝试把模式识别的经典问题-- ...

  2. 逻辑回归模型(Logistic Regression, LR)基础

    逻辑回归模型(Logistic Regression, LR)基础 逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数, ...

  3. 逻辑回归模型(Logistic Regression, LR)基础 - 文赛平

     逻辑回归模型(Logistic Regression, LR)基础 - 文赛平 时间 2013-11-25 11:56:00 博客园精华区 原文  http://www.cnblogs.com/ ...

  4. python训练模型函数参数_一步步亲手用python实现Logistic Regression

    前面的[DL笔记1]Logistic回归:最基础的神经网络和[DL笔记2]神经网络编程原则&Logistic Regression的算法解析讲解了Logistic regression的基本原 ...

  5. 机器学习算法(一):逻辑回归模型(Logistic Regression, LR)

    目录 1 LR 1.1 直观表述 1.2 决策边界(Decision Boundary) 2. 权值求解 2.1 代价函数(似然函数) 2.1.1 为什么损失函数不用最小二乘?即逻辑斯蒂回归损失函数为 ...

  6. Logistic Regression:最基础的神经网络

    一.什么是logictic regression 下面的图是Andrew Ng提供的一个用logistic regression来识别主子的图片的算法结构示意图: 「左边」的「x0到x12287「是输 ...

  7. 机器学习基础(十一)—— Logistic Regression 梯度更新公式的推导

    Logistic Regression 所要最佳化的问题是: minw1N∑n=1Nln(1+exp(−ynwTxn))Ein( ...

  8. [机器学习] Coursera ML笔记 - 逻辑回归(Logistic Regression)

    引言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,涵盖线性回归.逻辑回归.Softmax回归.神经网络和SVM等等.主要学习资料来自Standford Andrew N ...

  9. 第05课:神经网络基础知识

    在第01课深度学习概述中,我们介绍了神经网络的基本结构,介绍了神经网络的基本单元组成是神经元.如何构建神经网络,如何训练.优化神经网络,这其中包含了许多数学原理,需要具备一些基本知识.本课,我将重点罗 ...

最新文章

  1. Spring Cloud Gateway 使用 Token 验证
  2. easy js test--方便对js进行测试,不需要刷新
  3. P1268-树的重量【图论】
  4. 数据结构前缀,后缀,中缀表达式
  5. 职场 | 3天准备5天面试,跳槽完成
  6. Unity Text 插入图片
  7. ​全网首发,TensorFlow 2.0 中文视频教程来啦
  8. c语言中字符串数组应用,C语言中字符变量字符串和字符数组应用.doc
  9. vue 指令 v-if v-else-if v-else
  10. 文档级关系抽取方法,EMNLP 2020 paper
  11. python是什么 自学-自学Python会有什么困难?老男孩自学python编程
  12. 蓝桥杯2019年第十届C/C++省赛C组第一题-求和
  13. 头脑王者开发小程序系统文案
  14. 推荐一些2021年整理的跨平台uniapp的作品案例
  15. android 6 root权限,安卓手机获取root权限真的很简单
  16. 婚纱预订小程序开发,商家线上展示平台
  17. C++程序设计:原理与实践读书笔记(第十二章)
  18. APMserv常见问题
  19. 用c语言写鸡兔同笼问题
  20. HTML+CSS静态——绿色的餐饮美食网站(1页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码

热门文章

  1. 丁晓东_丁晓东|一种光盖过了另一种光NO.984
  2. html输入框数字无法读取,关于input无法获取小数点的问题!!!!-汗血宝马
  3. 广州站 | 云原生 Serverless 技术实践营精彩回顾
  4. 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布
  5. oracle查询blob数据,C#查询Oracle clob blob数据
  6. vrp车辆路径问题 php,车辆路径问题
  7. js生日计算年龄_JS根据生日算年龄的方法
  8. gc的原因 频繁full_系统缓慢+CPU 100%+频繁Full GC问题的定位排查思路!
  9. 编写五子棋程序时如何添加下棋时的音效_干货:如何提高编程能力
  10. python ftp模块_python中的FTP文件模块