首页 > 代码库 > machine learning概述
machine learning概述
一、机器学习是什么?
1、概述
a、机器学习是一个比较泛的概念
b、是不是会觉得机器学习和人工智能,数据挖掘讲的东西很像?
(1)机器学习是人工智能的一个子方向
(2)机器学习是数据挖掘的一种实现方式
c、数据挖掘的三种方式
(1)数据库 ---强调的是效率,即如何组织信息使得能够快速有效的查找信息
(2)机器学习----强调有效性,在数据分析中
(3)统计方法------强调正确性,更多的是为机器学习算法提供理论支撑
d、举个例子
给一些苹果和香蕉,人会通过特征的判断做区分,并且记忆这些特征,下次来了一个新的苹果或者香蕉的时候,就可以判断是香蕉还是苹果了。
左边一栏是输入,上边一栏是输出,而这个表中的数据,就相当于训练出来的模型。
2、数学表示
a、算法或者说用程序执行的数学问题
(1)输入----多个特征所构成向量的向量,或者说是一个矩阵
(如果只有一个特征向量是一个弱化的矩阵概念,统一称作矩阵)
(2)输出----通过对特征的判断得出的做区分的规则
b、目前机器学习的核心技术是基于矩阵的优化技术
– 输入:矩阵 – 待学习的信息
– 输出:模型 – 总结出的规则
3、形式化表示
a、主流的机器学习技术就可以形式化为
---输入:特征矩阵 X、标注向量 y
(X 是特征矩阵,不包括“样本名称”和“样本 标注”)
(y 是标注向量,即“样本标注”那列)
---输出:模型向量 w
(期望:X·w 尽可能接近 y)
(多种优化算法可以解 w,区别在于如何定义 “尽可能接近”)
b、举个例子:要计算广告的CTR(点击率)
例子中特征只有两个,query关键词和“是否飘红” —特征输入
目标是要根据已知的auc特征,猜测这个目标广告是否会被点击 —模型输出
二、一般的机器学习的步骤是什么?
1、问题分析
输入输出都有了,具体解决这个问题,就可以选用相关的算法
(1)前面定义里面有这么一个隐含的关键点:X w 尽可能接近 y
(2)如何定义这个“接近”,思路不同,算法就不同
-- LR (Logistic Regression)
-- SVM(Support Vector Machine)
(3)实际例子分析(还是那个苹果的例子,因为简单)
a.形象化表示
之后会发现,利用Logistic regression其实就是通过一批样本数据训练出系数,得出一个方程系数矩阵,之后将未知分类样本作为输入,结合训练出来的矩阵,得到的输出就是分类的结果,可以想象为是一条曲线的模拟。
b.数学化的目标函数表示
"接近"的定义不同,学术的讲,就是“优化目标不同”,无论是否相同,我们都至少可以选一个优化目标了,有了优化目标,下面要做的就是如何求解这个优化目标了
一般现在用的思路主要是L-BFGS,CDN,SGD。
2、用机器学习的方法去解决问题
优化步骤:
(1)算法 ---优化目标 + 优化算法
(2)数据 ---尽可能和实际同分布的数据 + 尽可能充分的数据
(3)特征 ---尽可能包含足够多的需要识别对象的信息
优化算法:
从优化目标的角度(学术界,发现新的算法)
从优化算法的角度(工业界,基于现有算法进行扩展)
(1)更小的计算代价---机器就可以做别的事情
(2)更快的收敛---可以更好的把结果投入使用
(3)更好的并行---用现有的大数据框架解决问题
训练数据:
(1)同分布
---样本数据和实际数据分布差异很大的话,那么你的算法得出的结果基本上就没啥用,也就是泛化能力差。
(2)数据充分
---由于期望的往往是总的误差最小,所以很可能讲数据量小的类目判别错误,所以数据越充分,训练就越充分,误判率就越低。
特征:
要求:数量多,质量高。
有一种疾病,这种疾病容易在个高且胖的人群,以及个矮且瘦的人群中易感。那么任意从给一个特征角度上看,比如肥胖,那么胖的这部分人中,得此病的概率为50%,不胖的也是50%,那么“胖”这个特征没有表达力,所以这个特征的质量就为0。
一个工程问题,特征是往往是决定最多的
一个算法方面的优化,可能只是优化了2~3%的效果,但是特征可能就是50~60%了。
一个工程项目七八成的精力往往都是花在特征选取上的,但是高质量的并不是那么容易被发现的,比如百度CTR预测,特征数据目前就是100亿级别的,通过数量弥补质量,那怎么提高特征的质量呢,答案就是深度学习,所以接下来我们来看看深度学习是怎么样提取高质量的特征的。
三、机器学习与深度学习的区别?
1、简介
叫Deep Learning那么一定就相对有Shallow Learning(机器学习的别名),最大的区别在于特征层数。
目前的机器学习算法主要是一层的,就是从特征直接推断出结果
Deep Learning和人类的处理问题的结果更接近,是由特征推断出一些中间层的结果,进而推断出最终结果的,也就是说其实特征只是一种外在表现,如何挖掘特征是如何表现的,其实这是一个特征表达力的问题,传统方法特征表达力,不如Deep Learning的多层学习得到的更有效果的表达。
2、特征表示的粒度
一个图片来说,像素级的特征根本没有价值,无法进行摩托车正例和负例的区分,而如果特征是一个具有结构性(或者说有含义)的时候,比如是否具有handlebars(把手),是否具有wheel(车轮子),就很容易把正例和负例区分,学习算法才能发挥作用
题外话:为什么LDA(一种主题模型)是合理的?
从文本来说,文本这个概念或者说一句话,一个doc表达的是什么意思,用什么来表示比较合适?
最简单的就是用一个一个字,也即是我们常用的词袋模型,但是这样只是简化方便而已,字是像素级别的,起码应该是term,换句话说每个doc都由term构成,但这样表示概念的能力就够了嘛?
可能也不够,需要再上一步,达到topic级,有了topic,再到doc就合理。注意这里就是主题模型的精髓了,但每个层次的数量差距很大,比如doc表示的概念->topic(千-万量级)->term(10万量级)->word(百万量级)
这就是主题模型的从Deep Learning角度来看的合理性
deep的含义就是多层神经元网络,每一层代表一种层次的概念,越往下概念的正交性越好,越往上概念的正交性越差,越具有相似度。因为高层概念彼此可能互相包含了相同的基本结构
高层概念分离出基本结构的方法也很容易理解,就是打散了聚类,比如doc可以通过LDA的方法搞出topic,有限个topic就可以描述一个doc,topic内部还可以通过类似的方法,再打散了聚类,得到更浅层的topic,这就好比新闻聚类可以从小类聚到大类,从大类聚到超大类就是这个思路。数据挖掘中数据仓库也有类似的情况,上卷或是下钻。
2、为什么要用多层神经网络来挖特征?
正式一点的话,身高和体型是两个Marginally independent的变量,即如果观察到了他们产生的结果,他们就不独立了。
也就是如果身高和体型在用于检测这种疾病的时候,他们就不独立了,因此需要有一种特征表示的方式来表示他们的这种不独立性,能够combine他们以形成更好的特征。
而这种更结构化的特征,需要大量的语料才能training出来。而独立性的特征,往往少部分语料就可以获得很好的结果,但随着语料数量的提高,无法observe到结构化的特征,因此更多的语料就浪费了。这就设计到机器学习里面的一些关于选取样本的问题,如何选样本,训练多少样本够。
我们都知道这是AI领域的XOR问题,也就是二层神经网络就能求解,换言之,多层神经网络能够挖掘出来更好的特征。
4、怎么进行挖掘?
小块的图形可以由基本edge构成,更结构化,更复杂的,具有概念性的图形如何表示呢?这就需要更高层次的特征表示,比如V2,V3。因此V1看像素级是像素级。V2看V1是像素级,这个是层次递进的,就好像高中生看初中生naive,大学生看高中生naive一样。
5、和人脑有什么类似的地方?原理何在?
人脑中大部分感知器是一个非常简单的计算过程。但通过组合可以达到很高的理解力。
但问题是如何组合,感知的过程如何从低级阶段到高级阶段,从明暗,色彩的感知,到人类喜怒哀乐的情感,整个过程的每一步可能都是naive得,但整个认知链条的末端一定是语义的,有感情的,上升到概念的。
比如看一本小说,脑海中就能自然浮现画面,可见不同神经感知器也不是完全独立的,而是彼此联系的。
6、如何训练?
语料切成n个部分,每个部分产生表达力强的特征,而这些表达力强的特征在一个阶段进行combine,也就是那个hidden layer可以很好的表达来自不同shard的特征,最后再展开各层,用不同shard上的tagged data 来进一步调整每条边的权重。
通常学生试验在10 million connections这个水平,因为再大已经超出计算的能力,但如果采用并发的方法,160000万个CPUs的情况下,可以达到1 billion connections这个水平。如果采用特制的GPU来计算,可以达到10 billion connections的水平。
7、需要多少特征?
我们知道需要层次的特征构建,有浅入深,但每一层该有多少个特征呢?
任何一种方法,只要特征足够多,效果总能提高,但特征多意味着计算复杂,探索的空间大,可以用来训练的数据在每个特征上就会稀疏,都会带来各种问题,并不一定特征越多越好。
8、ML和DL比较
大量使用Shallow learning主要是因为它有很好的数学特征:
---解空间是凸函数
---凸函数有大量的求解方法
machine learning概述