深度学习课程笔记(二)Classification: Probility Generative Model 

2017.10.05

相关材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html

本节主要讲解分类问题:

classification 问题最常见的形式,就是给定一个输入,我们去学习一个函数,使得该函数,可以输出一个东西(label)。如下所示:

其实好多其他的问题,都是分类问题演化而来,都可以通过分类问题来解决,如:物体检测,跟踪,分割 等等。。。

那么该怎么执行这个任务呢?万事都是从 training data 说起,我们首先需要收集 训练数据,如下图所示:

收集足够的 training data,这些data 是由 输入 和 输出构成的,即:input 和  label信息。我们可以简单的将分类问题当做回归问题来做。例如:我们要进行二分类的问题,我们可以将 label 1 设置为目标1,label 2 设置为 目标2. 然后测试的时候,根据输出 value 的高低来进行判别。即:如果接近于 1,就认为该类是属于 class 1,接近于 -1,就认为属于 class 2.

那么,可以得到如下的效果:

我们只要找到这个分界线即可,使得我们可以将蓝色和红色的数据分布,区分开来。看起来,效果不错的,可以搞。。。但是,实际上,是有问题的。。。有什么问题呢?

因为当蓝色点数据的分布是如下的情况,即:右下角有部分数据,其输出的score 远大于 1,但是回归的目标是,使得蓝色数据的输出向1靠近,那么,这部分蓝色点就会出现 error,那么,模型就会调整分界面,朝着紫色的方向移动,从而使得蓝色数据那部分的score 不是那么的大,从而使得整体的 error 降低。但是这个时候,得到的分界面并不是好的,因为它错误的划分了某些点。

所以,上述例子就说明了,回归问题得到的模型,并不直接适用分类问题。而理想的解决分类问题的流程,应该是这样子滴:

即:我们要找一个 function,该函数能够对于类别1 的输出score 大于0,对于另一个类别,小于 0. 损失函数就是在训练集合中,错误分类的次数。而找这么一个函数的方法有 SVM,Perceptron 等等。但是这次课程,李宏毅老师讲了另外一种方法。什么方法呢?

====================  分割线  =======================

李宏毅老师先给了一个例子:

告诉你以上信息关于两个盒子中,从 盒子1中取出蓝色球的概率是多少?根据贝叶斯公式,我们可以得到上述公式,然后带进去算一下就得到了。这个看起来,没什么问题。

类似的,我们将两个盒子,换成 两个类别:

那么,给定一个 x,问这个样本属于 class 1 的概率是多少?我们可以用上述公式来完成。但是问题是,我们需要知道右边公式中的每一项的值是多少?我们的任务就是要从 training data 中去学习这些概率,从而完成整个分类问题。

所以,这样子就变成了一个产生式模型(Generative Model)。我们要构建一个这样子的model,使得:

那么,产生出样本 x 的概率是什么呢?就是从类别1中采样出的x的概率乘以从c1中采样出 x 的概率 加上 类型2的概率乘以从类别2中采样出x的概率的加和。这样,我们就可以自己产生 x ,这就是产生式模型。

回到二元分类的问题,我们有两个类别,water 和 normal,那么统计 training data 中这两个类别出现的概率,分别算出来,这个算是先验信息。

那么,问题来了,给定一个海龟,问,该海龟属于 water 的概率是多大呢?我们知道,我们的 sample 都是用 vector 来表示的,那么,我们可以将 water 类别的sample 都可视化出来看看,他们的分布到底是什么样子的呢?

我们简单的用两维的 feature 来可视化这 79种 training sample,可以得到如下的分布图:

那么,其中每一个点,都代表了一个样本,我们可以将其可视化出来看,如:【48,50】代表了是这个鸭子,【65,64】代表了这个站立的乌龟,那么,我们所要猜测的海龟并不在这些 sample 当中,那么它属于 water 类别的概率该怎样计算呢?

那么,我们将这 79 个样本看做是 所有water class 的冰山一角,而真正的 water 类别是属于一个高斯分布的,而这些样本只是高斯分布采样出来的一点点的样本。

我们怎样才能model出这个高斯分布,才是着重要解决的问题。然后李宏毅老师又讲解了部分高斯分布的知识。看看就可以了,大家都懂吧?

那么,问题继续:假设有了这些样本,我们可以model出一个高斯分布出来,然后只要将 new sample x,带入这个函数就可以得到其属于该高斯分布的概率了。

那么,我们怎么找这个 均值和方法呢?使得该高斯分布尽可能好的去model 这些样本?这就要引入最大似然估计了。。。。

如下所示,这些样本可能是任意高斯分布采样出来的,但是不同的高斯分布采样出这些点的似然性是不同的,如:就似然性来说,左下角的那么高斯分布就比右上角的高斯分布要高。

我们该怎么计算这个似然性呢?我们可以将这些点可以看做是独立采样出来的,那么这些点的似然性就是,每一个的概率相乘得到。我们要优化的目标就是,使得找到一组参数,使得该似然性最大:

可以通过微分的方法,来求解出上述结果。有了上面这两个公式,我们将两个类别的数据分别带进去,可以得到:

有了这两个高斯分布的情况,我们就可以直接带进去算算就知道分类的情况了。

下图是李宏毅老师做的一些实验,上面左上角那个是根据样本得到的概率分布的情况,右上角那个是确定一个边界线之后,在 training data 上的分类情况。可以看到,在两维的情况下,效果不是很好。在测试数据上,只有 47%的精度。

所以,又尝试了 7维的情况,得到了较好结果,但是,依然不是非常好。。。后续会有改进。。。

=========================  分界线  ================================

为了得到更好的结果,我们可以做如下的改动:

我们用参数共享的方法,来做这件事。我们要得到的高斯分布,其均值不变,但是共享方差。所以优化的目标,变成了上述的情况。根据这个计算规则,我们可以得到一组新的高斯分布。

来看看结果怎样吧。

我们可以看到,在我们共享方差之后,这个分界线变成了直线。。。再用了7维的feature之后,其识别精度达到了 73%。。。。可以看到这个提升,还是蛮明显的。

再次回到我们之前说过的三个步骤:

当然,这里概率的选择,不是固定的,你可以选择高斯分布,也可以选择其他的分布。。。


紧接着,我们分析下后验概率:

那么,我们继续来看这个关于 z 的 sigmoid 函数:

我们把上面 P(x|c)带入到 z 的函数中去,做相关的整理后,可以得到:

关于 1/2 那一项中的两项,我们可做进一步的展开:

将这两项分别带到上述公式中,我们可以得到 z的新的表达式:

假设这两个方差是相同的,那么我们有:

然后上述 z 的函数,可以进一步的简化,我们可以得到:

最终 z 变成了:

我们有了均值和方差,那么z 函数中的值,都可以用新的标量来表示,即:

那么,可以看出,这个 z 的函数,其实是一个线性的函数了,这也就解释了为啥之前共享方差后,分界面是一个直线了。还记得吧,看这里:

那么,在产生式模型中,我们所要做的就是算出:

然后,我们就有了 w 和 b。。。。呵呵。 。。。是的,我们类似累活,就是为了算出这两个参数。。。

那么,分类问题,其实不用这么“舍近求远”直接求出 w 和 b 不就可以了吗?是的啊,我们下节课再说吧。。。哈哈。。。。

深度学习课程笔记(二)Classification: Probility Generative Model的更多相关文章

  1. 深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning)

    深度学习课程笔记(十七)Meta-learning (Model Agnostic Meta Learning) 2018-08-09 12:21:33 The video tutorial can ...

  2. 深度学习课程笔记(十二) Matrix Capsule

    深度学习课程笔记(十二) Matrix Capsule with EM Routing  2018-02-02  21:21:09  Paper: https://openreview.net/pdf ...

  3. 深度学习课程笔记(七):模仿学习(imitation learning)

    深度学习课程笔记(七):模仿学习(imitation learning) 2017.12.10 本文所涉及到的 模仿学习,则是从给定的展示中进行学习.机器在这个过程中,也和环境进行交互,但是,并没有显 ...

  4. 深度学习课程笔记(十一)初探 Capsule Network

    深度学习课程笔记(十一)初探 Capsule Network  2018-02-01  15:58:52 一.先列出几个不错的 reference: 1. https://medium.com/ai% ...

  5. 深度学习课程笔记(五)Ensemble

    深度学习课程笔记(五)Ensemble  2017.10.06 材料来自: 首先提到的是 Bagging 的方法: 我们可以利用这里的 Bagging 的方法,结合多个强分类器,来提升总的结果.例如: ...

  6. 深度学习课程笔记(四)Gradient Descent 梯度下降算法

    深度学习课程笔记(四)Gradient Descent 梯度下降算法 2017.10.06 材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...

  7. 深度学习课程笔记(十八)Deep Reinforcement Learning - Part 1 (17/11/27) Lectured by Yun-Nung Chen @ NTU CSIE

    深度学习课程笔记(十八)Deep Reinforcement Learning - Part 1 (17/11/27) Lectured by Yun-Nung Chen @ NTU CSIE 201 ...

  8. 深度学习课程笔记(十六)Recursive Neural Network

    深度学习课程笔记(十六)Recursive Neural Network  2018-08-07 22:47:14 This video tutorial is adopted from: Youtu ...

  9. 深度学习课程笔记(十五)Recurrent Neural Network

    深度学习课程笔记(十五)Recurrent Neural Network 2018-08-07 18:55:12 This video tutorial can be found from: Yout ...

随机推荐

  1. Yii2 Restful api搜索实现

  2. css selectors tips

    from https://saucelabs.com/resources/articles/selenium-tips-css-selectorsSauce Labs uses cookies to ...

  3. 排序(I)

    NSSortDescriptor 排序 Person类 #import <Foundation/Foundation.h> @interface Person : NSObject @pr ...

  4. 使用js实现登录随机验证码的效果

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. 【Hadoop学习之十】MapReduce案例分析二-好友推荐

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-3.1.1 最应该推荐的好友TopN,如何排名 ...

  6. python编程快速上手第7章习题20

    20.如何写一个正则表达式,匹配每 3 位就有一个逗号的数字?它必须匹配以下数字:'42''1,234''6,368,745'但不会匹配: '12,34,567' (逗号之间只有两位数字) '1234 ...

  7. Java重排序

    重排序数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性.数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个 ...

  8. BIOS 搭配 MBR/GPT 的开机流程

    鸟哥私房菜书上内容: BIOS 搭配 MBR/GPT 的开机流程 在计算机概论里面我们有谈到那个可爱的BIOS与CMOS两个东西, CMOS是记录各项硬件参数且嵌入在主板上面的储存器,BIOS则是一个 ...

  9. Subversion客户端接受服务器证书出现“The certificate hostname does not match”的问题

    当使用https://形式的URL连接Apache时,Subversion客户端将会受到两个类型的响应: 1.一个服务器证书 2.一个针对客户端证书的请求 在本人的应用场景主要涉及SVN仓库迁移的操作 ...

  10. nodejs之pm2自动重启服务

    pm2 start xxx #启动服务器 pm2 list #查看运行状态 pm2 logs #查看日志 pm2 restart xxx #重启应用 pm2 stop xxx #停止应用 监听修改,并 ...