前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【机器学习】机器到底在学习什么?

【机器学习】机器到底在学习什么?

作者头像
量化投资与机器学习微信公众号
发布2018-01-29 15:07:05
8660
发布2018-01-29 15:07:05
举报

机器识别手写数字的问题早已经解决,MNIST数据集http://yann.lecun.com/exdb/mnist/如今机器识别的准确率已经超过99%。事实上,这种问题无法通过一条条规则去hard code式的解决,我们不得不承认机器确实学到了东西。但我们好奇的是机器到底学到了什么?它是如何学到的?

问题设定

我们现在有MNIST数据集中60000张已经标注过得手写数字图片,每一张图片可以看做(28,28)的二维数组,像右图这样。我们需要通过这些训练数据预测未标注的数据。

思路

我们拿到一张未知的图片,我们把它与训练集的所有图片进行比较,我们找到训练集中与它最相似的一张图片,如果这张图片的label是k,我们就可以说我预测未知的手写数字也是k。这样的方法对手写数字识别确实有效,KNN算法对此方法稍作了推广,取得了90%以上的好成绩。但是我们很快就能发现这种方法的问题。

首先,我学到了什么?KNN算法实际上没有学到任何东西,它只不过是把已知的数据存起来,没有真正的“训练”过程,因此我们每一次预测都需要巨大的计算量,把训练数据集拿出来一张一张的跟需要预测的这样比较,耗时耗费资源。

再者,如果某一个新的机器学习问题过于复杂,比如识别人脸,分类更复杂的图像,那我没有足够大的训练集怎么办?即使我对每一个复杂的问题都有足够多的训练集,那我预测的时候又会带来计算更耗时的问题。

理想的训练情况是什么样?我训练的过程可以耗费一些时间,一旦我训练完成,拿去做预测就需要非常快才行。比如说新闻分类问题,每天都会产生大量数据,每天要对大量新闻分类,所以我们必须把预测的时间限制在可控的范围内。再比如,量化策略中的预测,如果预测未来一天的行情需要三天,这种模型就不靠谱。高频交易对时间的要求更加严格,AlphaGo下一步棋的预测过程如果需要30分钟,肯定无法打败李世石了。

实际上,机器学习的过程应该大致可以分为三步:

1.提出基本假设(哪些模型可能是对的?),确定模型的空间:线性模型?非线性模型?简单模型?复杂模型? 2.定义模型的”最优”到底是什么?:损失函数Loss Function 3.如何找到最优?: 梯度下降法 Gradient Discent

1.哪些模型可能是对的?

这是可能有效的模型 :GoogLeNet

这也是可能有效的模型:output = weight*input

上面第一个是谷歌的深度神经网络的模型,模型非常复杂,参数非常多,能学习的问题也更复杂,但是学习过程慢,需要大量的数据驱动,还需要高性能的运算能力。第二个模型非常简单,就是一条通过原点的直线而已,也就是说它的假设空间就是所有的

直线,训练过程是在所有的这些直线中搜索一条最好的,什么是”最好”?等下再说。我们现在可以知道的是简单模型能够学习的问题少,y=kx 这种模型只能把一个坐标系分成两部分,学出二分类问题,连三分类问题都学习不出来,甚至二分类的问题中y=3x+1 这条直线它都学不出来,因为假设空间里面根本没有这条直线。反观人家谷歌的模型就高大上了,模型复杂,可以学到k分类的问题,虽然我可能需要很多的数据,很多台计算机,但是至少我有学到的可能性。

通过以上我们可以看到,机器学习模型假设空间的选择需要在计算效率和待解决问题的复杂度之间trade off,解决简单问题,我们需要简单的模型,这样能学习到表现好的模型,并且计算效率高。复杂问题上复杂模型,保证我们可以学到东西,但是要更多的数据和计算资源训练。

2.假设空间内哪一个才是最优?

通过上面的介绍我们现在知道,机器学习问题需要现有基本假设,然后在假设空间里面做搜索,找到最优的模型。那什么才是最优? 我以线性模型为例。

我的输入可以转化成大小为1*784数组,我们可以理解成有784个特征,我们给每一个特征打分,得到最终结果就表示分到某一类的可能性有多大。 比如我们判断数字是不是0,y^{(0)}=\sum_{i}^{784}x_{i}w_{i}^{(0)} 同理,判断数组是不是1,也可以打一个分 y^{(1)}=\sum_{i}^{784}x_{i}w_{i}^{(1)} 以此类推,我们有10个这样的模型,我们的参数有10*784=7840个。我们的学习过程实际就是找到最优的这7840个参数,对应的是784维特征空间的10个超平面(其实就相当于二维平面中找到10条直线,只不过输入数据的维度高,直线表示为超平面)。现在这个模型中,我只要输入一张图,它会告诉我是这张图是[0,1,2,3,4,…..]的可能性分别是[0.01, 0.03, 0.8, 0.09….],我们就知道模型预测的是3。

那么什么是最优?SVM定义的最优是这样的,模型给我的结果是1*10的数组,表示图像是手写数字0到9的可能性大小,SVM要求正确的label的分值至少比其他分值大1,越接近这种状态,越好。 比如预测结果为[0.01, 0.01,0.9, 0.01….]的模型肯定比[0.1, 0.1, 0.6, 0.05,…..]要好(SVM的预测分值可以大于1,这里为了说明是“可能性”举得例子小于1)。Logistic Regression定义的最优跟SVM不一样,Logistic Regression先在线性模型的结果上套一个softmax函数,把结果压缩到[0,1]的范围内,表示概率,然后和真实结果计算交叉熵cross entropy,交叉熵越大,交叉熵损失函数越小越好。这里引入的损失函数(loss function/costfunction)实际上就是对”最好的”一种数学表达。比如SVM的损失函数就是

损失函数的意思就是模型当前的状态越偏离我定义的”最优”,损失函数就越大,这样找最优的模型就是对损失函数的最小化。

3.如何搜索到最优模型

我们现在已经知道机器学习就是在我们的假设空间找到一个最优的模型,最优就是损失函数最小化。如何做到损失函数最小化就对应我们要解决的”如何搜索到最优模型”。 我们知道机器学习现在就是在不断的调节参数,直到loss function最小。也就是说的每一次变动都会导致的变动。这里引入微积分,计算Loss function的梯度

梯度表示当前状态下,W每增加dW,b每增加db,损失函数增大的幅度,如果我每次让W,b都按照dW,db的幅度减小,那么损失函数就对减小一定幅度。因此学习/训练过程可以表示为

learning_rate通常是一个很小的数,这样避免学习幅度过大,到不了最优的点。

总结

机器学习的问题非常复杂,但是复杂主要体现在:要解决复杂问题需要的模型也要复杂,复杂模型带来了更多的参数,更多的数据需求,更大的运算能力,在我们设计假设空间时又有很多hyperparameter需要设置等等。 我们面临一个新的机器学习问题时,我们需要思考的是:

1.我用多复杂的模型? 线性模型中一个超平面行不行?线性模型中多个超平面行不行?不行再做非线性模型,一个隐藏层的神经网络行不行?两个呢?十层呢?…(当然比选择模型更重要的往往还是找特征) 2.我对最优模型的定义是什么? 采用哪种损失函数?logistic哪种的的交叉熵?svm哪种的? 3.怎么找到最优? 梯度下降?其他方法?

以上三个问题的背后都有大量的理论支撑,学习这些理论,你会发现机器学习,深度学习就是一系列数学的,计算机的,统计学的工具的组合,如何用好这些工具不仅需要你对工具的理解,还需要你对领域知识的掌握,对数据或者业务需求的敏感。

在量化投资领域,机器学习更像是一套验证你投资思路的工具,我们不可能把他当成一个黑箱,输入一些训练数据,得到一个万能预测模型。不明确这一点很容易误入歧途。

后面我们会在这条机器学习主线的基础上引入一些例子,主要介绍工具的使用。使用的环境主要是Python+anaconda+theano。下次再更!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化投资与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档