为什么机器能够学习——PAC Learnability
机器学习中,我们根据训练集训练一个模型,来对测试数据进行预测。通常我们并不关心模型在训练集上的好坏(即训练误差,in sample error),举个简单例子,我们想要根据前六个月股市行情训练一个模型来对未来股市走向进行预测,即使我们的算法在过去的数据上做的再精准都没有任何意义,我们希望模型在未来某一天能够预测的准,这样我们才能赚大钱。因此我们更着重于其在从未见过的数据(测试集)上的正确率(即泛化误 差,generalization error、out sample error)。因为泛化误差从整体上告诉我们 模型表现的好坏,这是我们事先不知道的一个参数, 正是由于不知道,所以我们才要估计它, 这也是机器学习的核心任务。初看起来,这个问题有点无从下手, 因为我们没办法知道输入空间的分布,因此也没办法估计泛化误差。不过,别忘了我们手头上有一笔训练数据,我们要根据这笔资料从假设集中挑一个假设出来,对 测试数据进行分类。一个很自然的想法是,我们可以挑训练误差最小的那个假设,这点很容易理解,训练误差小的假设泛化误差也应该比较小,也就是说我们挑出来 的假设和真实的target function比较接近。那么这个想法是正确的吗? 一定意义上来说,是对的。不然也不会有经验风险最小化(ERM)算法了。ERM是说从假设集中挑一个使得训练误差最小的那个假设h。数学上定义如下:
下
面说明为什么这个方法可行。统计学里,大数定理家族有个著名的不等式——Hoeffding's
equality。这个不等式的背景是,假设有一组独立同分布的随机变量$Z_1,\ldots,Z_m$,它们都服从Bernoulli分布,
即$P(Z_i=1)=\phi,
P(Z_i=0)=1-\phi$。我们想通过这组变量的均值$\hat{\phi}\frac{1}{m}\sum_{i=1}^m
Z_i$来估计参数$\phi$的值。Hoeffding不等式从概率意义上刻画了估计值和参数值的接近程度:
\[ P(|\hat{\phi}-\phi|<\epsilon)\leq 2\exp{-2\epsilon^2 m} \]
其
中,$\epsilon>0$是一个误差限,$m$是训练集中的样例个数。这个不等式告诉我们,我们的估计和真实值得差距相差很大的概率很小,也就
是说二者接近的概率很大。因此我们可以说,$\hat{\phi}=\phi$是PAC(probably approximate
correct,可能近似正确)的。PAC这个术语很有意思,他不能打包票说二者一定是等的,他只能保证大多数情况下是这样;而这个“等”只是越等,即相
差很近但不一定完全一样,例如我投一百次硬币,最后的频率可能是0.51或者是0.49,接近0.5但不会相等。有了Hoeffding不等式的理论基
础,我们想把这个刻画参数估计和真实值接近程度的方法套用到学习问题上去。
为了能够套用Hoeffding不等式到学习问题上,我们需要做出一些
假设:
给定一个假设h,我们认为h在一个样例x上与类标号y是否一致是一个服从Bernoulli分布的随机变量,也记为Z,即$Z=I[h(x)\neq
y]=\mu$,这里$\mu$可以认为是泛化误差。我们进一步假设训练集的样本是独立同分布采样的,那么$Z_1,Z_2,...,Z_m$是一组
iid且服从Bernoulli分布的随机变量,它们的平均即训练误差(记为$\nu$)实际上就是对泛化误差$\mu$的一个估计。
根据Hoeffding不等式有:
\[P(|\nu-\mu|<\epsilon)\leq 2\exp{-2\epsilon^2 m} \]
根
据PAC理论,$\nu$和$\mu$离得很近,而且随着样本数的增加,它们的距离会越来越靠近,
如果此时训练误差$\nu$很小,那么我们可以说泛化误差$\mu$也很小是一个PAC的事件,泛化误差很小说明什么?说明我们的假设h和目标函数f真的
长得很像($h= f$ is PAC)。
至此,我们就证明了ERM确实是可行的, 那么我们就能高枕无忧了吗?今天我们选取一个假设,它的训练误差很低甚至接近于0,就能说它的泛化误差一定很低吗? 答案是否定的。 如果这个命题成立,也不会有所谓的overfitting了。
Hoeffding
不等式只告诉我们,我们抽一个样本,有很大概率抽到一个好的样本(这里好的样本指的是
训练误差和泛化误差很接近);而抽到一个坏的样本(两个误差相差很远,特指过拟合的情况,训练误差很小而泛化误差很大)的概率有一个上限且很小,
但并不等于说抽到一个bad sample就是不可能的(实际上有可能,只是概率非常小),如果不幸抽到了bad sample,
那么恭喜你,你可以去买彩票了。那么如何避免这种overfitting的产生呢?
其中一个选择是增加样例数,随着样例数的增加,Hoeffding不等式右侧的上限值会越来越小, 于是乎我们抽到bad sample的概率也就越来越小了,我们更有把握说我们的模型不容易过拟合了。
上
面说到的bad sample是相对于一个hypothesis而言的,对于每个不同的hypothesis,可能的bad sample都不同。
那么给定一个训练集,我们在假设空间中的选择是有限制的,因为我们不知道哪个假设在这个数据集上会overfit,因此在选择假设的过程可能会踩到雷。有
的时候,踩到雷是不可避免的,因为我们没有选择数据集的权利。但我们可以做的事情是 估计踩到雷的概率上限是多少。这里我们只假设
假设空间有限,且大小为K。“踩到雷”这件事从集合论的角度来讲就是 至少存在一个假设$h_i\in
\mathcal{H}$,使得$|\nu_{h_i}-\mu|>\epsilon$发生。我们记事件$A_i=|\nu_{h_i}-
\mu|>\epsilon$。利用联合界定理,我们可以推导其概率上限为
\[ P(\exists h\in
\mathcal{H},|\nu_h-\mu|>\epsilon) = P(\bigcup_{i=1}^{K} A_i) \leq
\sum_{i=1}^K P(A_i)\leq 2K\exp(-2\epsilon^2 m) \]
在假设空间有限的情况下,通过增加样本集大小m,就能减少我们在假设集上踩到雷的几率,从而估计的失真度,减少过拟合现象。
总结一下:这篇文章中我们证明了在加上一些统计学假设(训练集是独立同分布抽样) 且 假设空间是有限的情况下, PAC理论保证了学习是可行的。对于假设空间是无限的情况(比如线性分类器),需要用到VC-dimension来证明其可行性。
为什么机器能够学习——PAC Learnability的更多相关文章
- 机器不学习:CNN入门讲解-为什么要有最后一层全连接
哈哈哈,又到了讲段子的时间 准备好了吗? 今天要说的是CNN最后一层了,CNN入门就要讲完啦..... 先来一段官方的语言介绍全连接层(Fully Connected Layer) 全连接层常简称为 ...
- 理解机器为什么可以学习(二)---Training versus Testing
前边由Hoeffding出发讨论了为什么机器可以学习,主要就是在N很大的时候Ein PAC Eout,选择较小的Ein,这样的Eout也较小,但是当时还有一个问题没有解决,就是当时的假设的h的集合是个 ...
- Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)
所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的 ...
- 理解机器为什么可以学习(四)---VC Dimension
前面一节我们通过引入增长函数的上限的上限,一个多项式,来把Ein 和 Eout 的差Bound住,这一节引入VC Bound进一步说明这个问题. 前边我们得到,如果一个hypethesis集是有bre ...
- 理解机器为什么可以学习(三)---Theory of Generalization
前边讨论了我们介绍了成长函数和break point,现在继续讨论m是否成长很慢,是否能够取代M. 成长函数就是二分类的排列组合的数量.break point是第一个不能shatter(覆盖所有情形) ...
- PAC学习理论:机器学习那些事
参考翻译,有大量删除和修改,如有异议,请拜访原文.一定要看英文原文!!!. 本文转载于:深度译文:机器学习那些事 英文[原题]A Few Useful Things to Know About Mac ...
- Generalizing from a Few Examples: A Survey on Few-Shot Learning 小样本学习最新综述 | 三大数据增强方法
目录 原文链接:小样本学习与智能前沿 01 Transforming Samples from Dtrain 02 Transforming Samples from a Weakly Labeled ...
- 【腾讯Bugly干货分享】深度学习在OCR中的应用
本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5809bb47cc5e52161640c5c8 Dev Club 是一个交流移动 ...
- Deep Learning(深度学习)学习笔记整理
申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表 ...
随机推荐
- 【转】Javascript中理解发布--订阅模式
Javascript中理解发布--订阅模式 阅读目录 发布订阅模式介绍 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时 ...
- Java finally关键字
关于finally语句块,有如下特点: 1.finally语句块可以直接和try语句块联用.try...finally... 2.try...catch...finally也可以 3.通常在final ...
- Binder or AIDL的最简单实践
1.前言: 在Android开发中多进程的合理使用+进程间通信的IPC是一个比较难的点.特别是Android特有的Binder机制,非常复杂,对于应用层开发的初级开发工程师强求深入理解Binder机制 ...
- javaScript删除对象、数组中的null、undefined、空对象、空数组方法
这两天在项目中遇到后台需要传的数据为不能有null,不能有空值,而这个数据又是一个庞大的对象,对组集合,所以写了个方法来解决这个问题.为了兼具所有的种类类型,封装了方法,代码如下: let obj = ...
- 利用 Task\Query 实现定位 , FeatureLayer 的属性查询
放纵了几天,又有了学习的动力.今天实现了利用对 FeatureLayer 进行属性查询在地图上进行跳转. 一.我下载了一幅浙江省的县界面地图,存在NAME字段,利用Name就能进行查询了: var n ...
- Windows API 编程----将错误代码转换成错误描述信息
Windows编程有时会因为调用函数而产生错误,调用GetLastError()函数可以得到错误代码.如果错误代码为0,说明没有错误:如果错误代码不为0,则说明存在错误. 而错误代码不方便编程人员或用 ...
- 查看postgre都有哪些语句占用CPU
查看占用CPU最多的几个postgresql ps aux | grep postgres | sort -n -r -k 3 | head -10 | awk '{print $2, $3}' 查看 ...
- Android 低版本sdk中没有getSupportedPreviewSizes和getSupportedPictureSizes函数怎么办?
在做camera和SurfaceView做摄像头程序时,需要获取camera支持的相片大小,在低版本sdk中没有getSupportedPictureSizes函数,怎么办呢,请参阅下面的关键代码: ...
- 【Web crawler】print_all_links
How to repeat Procedures&Control CS重要概念 1.1 过程procedures 封装代码,代码重用 1.2 控制Control DEMO # -*- codi ...
- C#清空回收站
曾经用过bat处理回收站,但是效果很不理想(应该是我水平不够吧),后来发现C#可以直接调用系统dll,非常简单.下面是具体函数: class ClearRecycle { [DllImport(&qu ...