Project Description
【活动实录】机器学习就是让计算机自己从数据里寻找规律
2017年06月27日 WeX5移动开发云 起步软件
大家好,很高兴通过千聊这个平台和码农基地的小伙伴们一起讨论下机器学习这个话题。简单自我介绍一下,我是来自聚合数据的软件架构师,入行有10年了。我在工作中主要做的是WEB系统的设计和开发,机器学习主要是出于兴趣爱好,在业余时间了解的,后来在工作中也有应用,今天跟大家分享的是作为一个普通程序员,怎么走进机器分享的大门。
下面就从我自己的学习经历介绍一下吧。刚开始接触机器学习,是在网易公开课上看的一个课程,第一节课上有一个分离声音的课程,就像我们手机上有些降噪的功能差不多。在这里面之用一行的代码就实现了,当时觉得大开眼界,这些高科技的东西原来是机器学习的技术搞出来的,而且并没有想象的那么复杂,就发现这才是计算机技术有意思的地方。
不过继续往下看这门课程就很快看不下去了,因为里面的一些知识都忘完了,于是就找来线性代数、微积分的一些公开课学了一遍。再回过头来看机器学习,不过看完了感觉还是啥也不会,只看不练还是不行,后来又找了一个可以参与的机器学习课程,然后跟着课程看看视频、做做作业,还有考试、写写代码、完成一些算法,才真正理解了机器学习的那些概念。
我估计很多人数学可能不太好,可能会担心数学不好的话会不会耽误机器学习。我自己觉得,其实我们学他并不是为了做研究,只是做应用的话,其实对数学要求也不是很高,重点还是要理解机器学习里面那些概念,了解各种模型所表达的关系。很多实际应用的问题,并不需要深厚的数学功底,而是需要对概念的理解来推理出问题的答案。
虽说对数学的要求不是很高,但是对向量和矩阵的要求还是必须非常清楚的,因为平时写代码的话,到处都是这些东西。可能并不需要线性代数学的很好,但是对向量、矩阵等基础知识必须是非常熟练的。
刚才说到了概念其实比数学更重要,今天这个二十分钟三言两语也说不清什么事,就好好说说概念吧。先说说什么是机器学习吧。在机器学习广泛应用前,像翻译、自动驾驶、云识别这类的复杂问题,思路都是找规律、定规则,我们人类最强大的能力就是发现规律、利用规律,但是想要把这些规律用代码描述出来告诉计算机,就是个不可能的任务,因为我们自己也不知道大脑处理问题的逻辑。
后来我们就找到另一条思路,我们所说的从成功中总结经验,在失败中吸取教训,其实也就是一个正反馈和负反馈,在数学中也能表达,那就也可以让计算器在数据中吸取经验,同样的任务计算机可以比我们快无数倍。我们苦练十年,可能不如计算机一天积累的经验多,阿法狗不就是这样打败人类的么?
所以什么是机器学习,简单说就是让计算机自己从数据里寻找规律的一门技术。他最终寻找到的规律是什么,很多时候我们自己也不清楚,反正电脑就是能把事情做好了,就像下围棋一样。
那么问题来了,规律到底是什么东西,它长什么样呢,在电脑上怎么表达?那就引出了机器学习的下一个概念,叫模型。简单地说,模型可以理解成一个函数,一头是输入参数,一头是返回值,我们搞编程的这个都比较熟悉。然后这个模型你可以一头放个语音进去,另一头变成英文输出来。一头放个英文句子进去,另一头把翻译好的中文输出来。一头把汽车上的传感器或微波雷达收集到的信号放进去,另一头可以把方向盘角度、油门深度、刹车深度输出出来。
而这个模型真正神奇的地方在于,我们不需要用代码实现输入怎么变成输出的细节,而是根据对这个问题的理解,假设输入和输出之间的关系,但这个关系的细节并不清楚,然后给计算机一堆数据,让他根据数据来确定这个关系的细节。
举个简单的例子,根据我们对市场的理解,可以假设房屋的价格和面积成正比,然后就可以设计一个模型,价格等于面积乘以A,然后A就是模型里所缺少的细节,然后我们可以去小区里打听房子有多大,多少钱买的,然后就得到了一些数据。这些数据就可以利用机器学习的技术,让计算机来计算出模型所缺少的A的数值,然后我们就得到了一个可以计算房价的黑盒子。
刚才例子,可以解释机器学习里面的一些术语。比如我们要计算的房价,在机器学习就叫做目标变量,这个房屋的面积就是一个??向量,咱们这个向量只有一个维度,我们打听来的房价和面积叫一个训练机,是用来给计算机找规律用的。
我们有一个模型了,需要知道这个模型是不是靠谱,需要有一个方法来验证一下。这就引出了模型检验的一些概念,有训练机、测试机、过拟合和欠拟合。我们训练好一个模型,需要找一些例子来测试一下计算的结果到底对不对,这时候我们是不能用训练里的例子来测试的,为什么呢,因为会存在过拟合的情况。
刚才发了一个图片,这个图片里的蓝色曲线是我们模型里表达的X、Y 的关系,在一个模型很复杂,会有很多参数的情况下,在训练机的数据很少的时候,这个模型会把训练机的每一个数据点当作特例来记住,划出一条经过每一个点的曲线,就像这张图的最右边这样。如果从训练机选出几个来做测试的话,效果会非常好,但这个模型其实并没有很好地反映出X、Y这两个数据的变化与趋势,当遇到一个没见过的数据时,他的测试结果就会有比较大的误差了。
另一种情况就是欠拟合,就像这张图上左边的情况,这个模型太简单了,它也没法表达X、Y之间的关系,这种情况下训练的误差和测试的误差就会非常大。我们理解过拟合和欠拟合这个概念,就会在模型需要改进的时候,可以用来判断下一步该做什么,是需要多找一些数据呢,还是换一个复杂点的模型,还是需要换一个简单点的模型。
另外我还想把机器学习和人的认知过程做一个类比。其实认知规律不仅适用于人类,对机器学习也是有效的,反过来机器学习的一些概念对人也是有效的。比如有些人就倾向于过拟合,比如他见过几个河南人偷井盖的新闻,就把这个当成规律了。有些人就比较固执,不愿意改变,这也是欠拟合的一些表现。我们平时从生活中总结出来的一些经验,也是一些模型。有些人的性格和思维方式,也是一种模型,我们的父母给了这个模型的初始值,然后之后的整个生命都是在和环境的交互中,对这个模型训练、优化。
其实机器学习还是一个比较新的领域。目前只有有监督的学习研究的比较透彻了,其实我们今天说的这些例子,都是有监督的学习。就是我们有输入,还有输出,有很多的例子可以供计算机去学习,然后我们还有很多问题是没有成熟的套路可以效仿的,我们把手头许多非数值的数据整理成特征向量,还有时间维度的预测问题,还有动态更新的在线学习、非监督学习、强化学习,这些还都需要应用领域的专门知识和技巧去解决的。
另外还有更重要的一点,机器学习还只是工具,要做一个好的效果出来,数据本身是最重要的。所以深入地了解你的数据,在准备和整理数据上多花一些心思,对于整个项目结果的共享可能比算法和模型更大。
最后简单聊一下现在特别热的深度学习。其实深度学习就是一个神经网络的模型,神经网络其实发明的比较早了,但这个模型比较复杂,根据前面说到的拟合和模型复杂度的关系,要训练这样的模型就需要大量的数据,受限于当时的计算能力,神经网络还没法很好地应用起来。但现在处理器技术强多了,还有很多的GPU和专用的芯片,可以进行大规模地并线计算,所以现在深度学习就应用的比较多了。
大家都知道脑子是个好东西,地球上所有高级生物的控制系统,基本上都是相同的架构,就是大量的神经元汇聚在一起,组成一个脑子,然后控制中心会接受身体各个器官发来的数据,会从这些数据里发现规律,把这些信号解释成图像、声音、触觉、动作什么的。相信看过《黑客帝国》的同学,对这个说法就比较熟悉。
深度学习受到这么多的关注,因为这个算法跟大脑有点像,它是一个比较通用的模型,不需要对输入输出做太多的假设,理论上足够深的网络加上足够多的训练数据,这个深度学习网络可以发现数据中的任何规律,而且它还可以用在一些非监督的学习,来实现自动化的特征提取。还可以做一些时间序列的学习,还有一些自动的强化学习。所以这个东西前途还是很广阔的。
最后总结一下吧,对于想要入门机器学习的同学,可以先从网上的公开课开始,学习一些机器学习的理论基础。最后可以根据兴趣或者工作中的需要,在某个领域进行深度学习。而且深度学习其实是一个很好的方向,建议大家有了基础的话,还是很有必要学习一下的。
后面大家有什么问题,咱们慢慢回答一下。
像个孩子~:机器学习问题需要哪些技术基础啊,张老师帮忙指导下。
回复:网上的公开课大多没有对知识背景有很高的要求,必要的基础知识也会在课程里同时讲授的。
SeanSun:机器学习是不是需要有一个稳定的大数据平台做支撑?
回复:大数据并不是机器学习的必要条件,模型的开发测试一般都是在单机环境下完成的,但是机器学习配合大数据会有更好的效果。
有不少小伙伴都提到了机器学习用什么数据的问题,其实在看一些公开课的时候,老师也会给你提供一些数据集,这些也都是网上开源的做研究或者什么的,都是常用的数据集,但是在实际工作中,现成准备好的,准备成向量、目标变量这样的数据集也是很少见的,所以现在机器学习也只能教会你怎么用模型来解决问题。
在实际的机器学习的应用里,准备训练集也是一个很大的工作,这个工作室没有什么套路可以套用的,主要还是靠对问题的理解,需要从输入里面找出跟输出有相关性的,来构造一个特征向量,来训练模型,这个特征向量的质量就决定了模型最终的效果。
对于学完了公开课该怎么实践或者训练的问题,有一个网站是不少机器学习的训练者和爱好者练习和交流的地方。里面有不少机器学习的问题,还有不少大公司发出来悬赏的问题,提供了比较规整的数据集,具体的任务,可以在这个平台上做一些练习和交流。
DK:看完cousera上的课怎么才能运用到实践呢?
7960a:请问从实际应用角度,是以学模型知识为主还是工具为主?因为我发现python上面有很多库和框架,似乎不需要对原理很理解就能使用。
回复:对于应用来会所,模型不用太深究,了解模型的特点就行。比如他对特征向量有什么要求,表达的输入输出之间是什么关系,有这样一个概念就可以。
有时候甚至可以从工具反向地去学习模型,比如在工具里看到一个算法,他是用来做分类的,可以先试试下他的效果,然后再详细了解它的参数是什么含义。
这个Orange数据分析工具在做一些数据可视化,简单的模型测试方面也很方便。http://orange.biolab.si
孤寒飘雪:老师怎么看神经网络和机器学习这两个概念,框架那块特别是谷歌那个开源框架TensorFlow
回复:神经网络是个比较通用的模型,目前也在不断发现神经网络的新用途,在有了机器学籍基础知识之后,还是很有必要了解一下的,TensorFlow和上面的Keras让神经网络这个最复杂的模型的实现变得非常方便,理解了神经网络模型还是可以做很多比较酷的事情的。
孤寒飘雪:我想说我的理解就是,丢一堆数据让机器去分析,然后知道规律使其拥有流程控制(模型判断),返回我们需要看到的结果,那么这就是一个大数据的处理,不知道理解的对不对?
回复:是的,模型就是一个函数,但里面有很多参数待定,根据这个函数可能会构造另一个CostFunction,把模型对于所有训练数据输入产生的输出,和实际的输出的偏差累计起来,具体训练的过程,就是对CostFunction求最小值的过程。最终确定了所有的参数,就得到了训练好的模型了。