昨天 TechCrunch 刊文,机器学习发展将在市场上形成“杠铃效应”,从机器学习中受益的将是位于产业杠铃两端的群体:一方面,基本机器学习技术的普及将令大量的小型初创公司受益;另一方面,高级机器学习模型和大型数据将集中于极少数巨头企业。Beim 建议初创企业应设法与大企业合作以获得数据,从愈加普及的基础智能技术中探寻商机并快速行动,才能取得竞争优势。“最成功的机器学习新创企业,将有可能是那些与巨头和消费者都达成有创意的合作关系的公司。”Beim 这样总结。
6 月 2 日,风投公司合伙人、机器学习新创企业投资人 Nick Beim 在 Techcrunch 上发表了题为《机器学习的杠铃效应》(The barbell effect of machine learning)的评论文章,指出机器学习技术的发展将导致智能产业出现两极分化,就好像杠铃一样。
未来智能产业两极分化严重
机器学习为什么会让产业出现这种杠铃般的形态呢?
Beim 指出,这是由机器学习产业所依赖的几种核心资源分布不均导致的。近年来,算法、计算力和数据这三种资源都在快速增长,但大部分机器学习算法、库和工具都是公开的,而计算力资源也已经广泛成为一种可购买的商品。这意味着,大量的小型企业都可以方便地利用机器学习方面的算法和计算力这两种资源。另一方面,机器学习所需的大规模数据却高度集中在少数大企业手中,只有这些大企业能自主地使用这些数据、决定向哪些合作伙伴开放这些数据。
资源分布的两极化,将导致机器学习产业形势的两极化:在基础智能技术方面,广大范围的初创公司、中小型企业都将从图像识别、翻译等已开放的技术中受益;在高阶智能技术方面,高级技术将集中在少数产业巨头的手中,因为只有这些巨头才拥有产业中的大规模数据,从而有更多机会借助这些数据研发出高级技术和服务。谷歌、FaceBook、亚马逊等公司已在高级智能技术方面取得了极大优势;金融、零售等传统领域的巨头也已开始运用机器学习来发掘其海量数据中的宝藏。
Facebook 每日活跃用户超过 10 亿,训练深度学习引擎 DeepText
Google 开源第二代深度学习引擎 TensorFlow
Google 开源自然语言解析器 SyntaxNet
Facebook 开源人工智能硬件 Big Sur
亚马逊开源深度学习和机器学习工具 DSSTNE
巨头开源机器学习工具和平台,也是收集大数据的一种方式。
那对其他企业而言,这意味着什么呢?
首先能想到的就是并购整合,其中最为典型的是在芯片市场,格局不断洗牌,还有大公司通过收购拓展业务领域,最近的比如英特尔收购机器视觉公司,进军自动驾驶汽车市场,IBM 更是一早就通过收购,把 Watson 做成上百亿美元的产品。
云服务市场这种趋势十分明显:排名前4的公司占据了大约 70% 的市场份额。在日前公布的“互联网女皇”报告中也指出,谷歌和 Facebook 两家包揽了超过 75% 的广告市场份额。
新创机器学习企业三大出路
面对这样的局面,Beim 对新创企业给出了以下几个建议:
一、与拥有大数据的大企业建立合作伙伴关系
Beim 表示,初创企业可以像当年的谷歌利用雅虎、AOL 的数据来壮大自己一样,通过与现有的大企业合作来获得使用相关数据的机会。
首先,在由平台主导的产业领域,机器学习初创企业可以与平台合作,为企业用户提供各种平台自身尚无法提供的解决方案,Sprinklr、Hootsuite 和 Dataminr 等企业就是采用这样的方法。
其次,在由少数传统大企业主导的产业中,机器学习初创企业可以为这些企业提供数据密集型软件服务或广告解决方案,并借此得以访问这些大企业的用户数据,这也是 Palantir、IBM Watson、Fair Isaac、AppNexus 和 Intent Media 等机器学习提供商的做法。
最后,初创企业可以与拥有大规模数据的企业签订排他性的数据租约,获取其(部分)数据的访问权。
但是,如果操作不好,新创企业与巨头的合作也会发生各种问题,Siri 被苹果收购后性能不升反降就是一例。大名鼎鼎的波士顿动力,被谷歌收购后几经波折,前不久花落丰田,前途依旧未卜。
因此,Beim 也特别强调,新创企业在与巨头合作时应当尤其注意,包括技术公开程度、利润分享比例、基于市场表现的担保,以及战略性投资等等。按照目前的情况看来,大数据将变得越来越珍贵,因此新创企业与巨头合作的方式也会加快更新。
亚马逊成立了 Alexa Fund,鼓励第三方开发能够为其语音助理 Alexa 系统所用的产品或服务。就在前天,微软启动了 Microsoft Accelerator,资助与微软产品发展方向相一致的初创企业,尤其是机器学习初创企业,并提供技术资讯和支持。
二、在基础智能技术领域发掘商机
在图像识别、翻译、自然语言处理以及未来的解释、推理领域,将有越来越多的基础技术服务成为可供购买的商品,其中大部分服务还将是免费的。初创企业可以充分利用这些基础技术服务,创造更聪明、更加个性化、更具参与感的软硬件服务。例如,图像识别将带来可视化购物的商机,面部识别技术可带来新型验证和安全技术方面的商机。
就像 ARM 公司 CEO Simon Segar 说的那样,计算视觉尚处于早期发展阶段,因此 ARM 公司才会收购在嵌入式视觉领域世界领先的公司 Apical, 期望在计算机视觉领域有所突破。
这个方向确实不错,但最终还是容易走上被巨头收购的道路,也只有像亚马逊这样的大公司才可能研发出 Echo,在语音助理甚至更广泛的智能家居领域后来居上。不过,这并不是说被收购就不好,你不看 DeepMind 加入谷歌后如鱼得水,AlphaGo 的战绩自不待说,今年 4 月 DeepMind 已经进军医疗领域。当然,市场上也有像马斯克这样的搅局者,建立特斯拉、SpaceX 和 OpenAI,但这样的人或企业毕竟是少数。
那么,更广泛的初创企业该怎么办呢?Beim 的建议是——
三、快速行动。在机器学习产业中,“先到者先得”的优势很明显。因此,初创企业必须在各科技巨头意识到产业中的潜在商机之前,抢先采取动作。
“最成功的机器学习新创企业,将有可能是那些与巨头和消费者都达成有创意的合作关系的公司。”Beim 这样总结。
让大数据发挥真正的价值
当然,上面的分析是 Nick Beim 的观点。也有人认为,近年来机器学习的发展并非受益于计算力和大数据的发展。
不过,认同 Beim 分析基础的人,比如吴恩达,也有不同的看法。吴恩达认为,近年来机器学习的发展受益于计算力和大数据的发展,但在某些行业,硬件的发展导致计算力大幅提高,而相应的数据已经出现不足。因此,数据的这个限制,也并非存在于所有行业。
同时,还有很多研究者致力于让机器学习摆脱大数据的钳制:香港科技大学教授杨强认为,迁移学习能让人工智摆脱对大数据的严重依赖,从而让人工智能不再只是“富人的游戏”;南京大学计算机教授周志华提出 Learnware,如果得以实现,小数据也可以训练大的机器计算模型。
最后,再来看拥有大数据的公司是如何看待这个问题的。大数据专家、拓尔思公司总裁施水才坦言,当前国内的大数据并不赚钱,虽然有不少大数据公司,但缺乏核心技术,应用上的成果也不是很多。尤其在开源后,技术门槛变低了,想要搞出一个技术产品卖给所有人,已经很难了,所以现在的关键是要帮助客户解决问题。施水才认为,解决问题的人,才是关键,才有钱赚。发展大数据应该以技术和应用导向为主,关键是要落地,人工智能、机器学习、自然语言理解等核心技术的突破和应用是未来的关键,工业互联网和机器大数据是未来发展的方向,也是突破垄断的机会所在。
·氧分子网(http://www.yangfenzi.com)延伸阅读:
➤ 变革性的技术背后:机器学习的潜力与陷阱
➤ Facebook首次公开内部机器学习平台,启动AI帝国
➤ 深度学习会让机器学习工程师失业吗?
➤ 机器学习分析 47 万微信群,发现的 9 大规律
➤ 王馥芳:面向机器人的大规模知识引擎
➤ 可编程门阵列FPGA:深度学习的未来?
➤ 李维:反伊莉莎效应,人工智能的新概念
➤ 哥伦比亚大学教授:机器学习胜过人类编程?AI 终极挑战是创造力
当一个领域随着通用框架和库的出现而门槛降低,火起来了,以至于做什么都要扯上它,有时候都不管能不能真正解决问题,它就开始俗了。
但是,俗的是这个概念,或者说用它的人,而不是技术本身,真正作为生产者做核心技术的人永远都不会俗,都是大牛。
机器学习是不是,我觉得是。现在做什么东西,不管是科研还是工程,干什么都想把这个机器学习用进去。然而问题是它到底能不能真正解决这个项目的问题,是真正明白机器学习能做什么不能做什么还有它的真正原理,还是只会用现成库盲目写一堆Java,甚至是代码都不会写只会在presentation里面大谈机器学习大数据这些。当后者的人变多的时候,这个概念就变俗了。很显然,现在我们经常听到太多的人在吹这些东西,所以做技术的我们就觉得机器学习什么的变成了计算机四大俗。
那么问题来了,是谁让机器学习从高大上的东西变成现在的四大俗之一呢?没错,就是各路的创业人士。过热的创业风是万恶之源,太多的小白什么也不会就天天堆砌各种名词做着被玩烂的概念来忽悠比赛评委和投资人,到最后的结果就是这些本来非常好的东西被他们搞成俗不可耐的概念。机器学习是,云计算和大数据更是(关键是还有人在带头去吹这个,比如我院所有实验室都得名义上跟大数据沾点边,就连做网络安全的都不例外,具体为什么大家都懂),NLP倒还好一些。
不过话又说回来,这些东西毕竟还是有真正的技术在里面的,我觉得互联网的一些概念才是俗不可耐,low不可遏,比如社交,电商,O2O和互联网+(这个是大boss),这四个被玩烂已有成熟解决方案的东西我觉得应该被归为互联网四大俗。
要是哪个创业项目大谈特谈这四样东西,发起者又是在校或者刚毕业的大学生,基本就可以把proposal当场撕成粉末扔出窗外了。全是垃圾,根本就不靠谱。如果是工作了几年的人想去创业做这个,也可以认为80%的概率脑子进shi了,支付宝脑子进shi还有人给兜底,你脑子进shi了就挂了。
大吹互联网+的人,我认为他脑子被互联网的门夹了。
大VR给忘了,这个更是,现在技术都没成熟呢,就一帮人吵吵着要创业,连这个领域得多烧钱都不知道。这个VR早晚也得让你们给玩坏。
我在今年的Imagine Cup上看见过一个团队就是做的VR,具体项目是虚拟中学化学实验室。然后他们也没做出真正的产品,只是给了一个效果视频。反正我觉得他们做的那个东西就跟刚学会3DMax的人做的一样。机器学习并不是计算机科学的子学科,它更应该被看做是计算机科学,统计学,数学的交叉学科。同时它还在生物学,医学,社会科学等诸多与计算机科学关联较少的学科有诸多应用。
这些词汇确实变得越来越俗,确切来说:机器学习在还没有取代任何低端劳动力的情况下,会首先取代高端行业从业人员本有的行事逻辑,说简单点,就是思考上的偷懒。比方说搞金融,有些上来就是xx学习,xx聚类用于xx分析,可能里面的金融逻辑都不通,只是机器告诉我们一个貌似不错的结果而已。即便对方能将各种学习算法钻的很透彻,也不可否认是种行业精神的堕落。
更不用说科研行业也有些人拼尽跟风之力追求炫酷,比如我,此为大俗。
提个反观点:
不过反过来说,人类社会不就是这样一边骂着思想偷懒的,一边想尽办法偷懒,并美化其懒惰为人工智能的必经之路嘛?搞机器学习的人的最终目的是啥?写一堆开源库的目的是啥?难道是为了增加从业人员思考的负担,然后换来一句:你真得很高雅!
对于一股劲喊着两分钟推导SVM,三分钟写个CUDA并行LR这些。我的观点是:如果掌握的知识无法转化成解决问题的工具,一股劲憋这些太过久远的数学,代码的,变换几十套方式推导的。也是一种俗!是种装情怀的俗!如果有人问:这个问题为何要SVM?保证,还是因为SVM在这个问题上的效果出群才需要,而不是它的数学推导多么漂亮!而SVM在这个问题上的效果出群也不是因为大部分人理解了什么,而是有人试了!
机器学习,本来就不是一个用来理解为什么的行业,是一个帮助人们解决为什么的工具。天生就俗不可耐!有人把工具用不好归咎到不会数学推导上的,对吗?
因此,机器学习绝不仅仅是计算机科学的一大俗。这么说太狭隘了。
它是计算机科学,统计学,数学,社会科学,经济学等等诸多领域的一大俗。计算机视觉、机器学习、大数据、云平台,工业4.0、物联网……搞这些的都是很promising的行业,但是连计算机原理都没完全搞清楚的骚年们开始标榜自己做这些研究的时候,我就静静地看他们装逼。然而并不能说搞这些就俗气了,只是稀烂的人太多了之后容易给外界一种错觉, 觉得搞这个的人都是阿猫阿狗,而真正的大牛都被路人甲给淹没了。ML在最近比较火,火的东西当然有人想从里面获得自己的利益,所以各大高校理所应当的认为自己的计算机学院可以开这么一个专业,殊不知自己的学院老师有没有这方面的经验,只是按照正常的计算机的学院专业的科目去教,ML只涉及基本面,所以很多学生出来说自己是ML专业的,但懂的很皮毛的时候,大家就很怀疑这个学科,这个专业。其实这个专业是多个学科的交叉科学,学好并不容易。在这方面,南京大学计算机科学与技术学院的周志华教授应该是这个行业的领军与权威人物。
推荐周教授今年出的一本书介绍机器学习的《机器学习》,里面适合初学者与有经验者都可。
用这个准则来评估机器学习是否俗,答案显然是否定的。机器学习是计算机科学中门槛最高的一类技术,一方面要求智力,一方面要求时间,所以注定是少数人的专利。少数人是相对于总人口或者所有从事计算机技术的工程师或科研人员来说的;但是相对于其门槛,这人数又是相当多的,为什么?因为它创造了非常大的价值,因为它巨大的潜力,因为它融合了数学,计算机科学以及生物学的美(逼格高)。
那么为何让人有俗的感觉?因为媒体热炒,因为他们并不清楚现在离人工智能还有多遥远,以为马上要到了,集体高潮。一些理工男用来忽悠小妹。还有一些程序员知道点皮毛,会用别人的工具,就在外面大肆吹牛,例如回答中就有个人简单地把“机器学习”等同于“凸函数优化”,还去嘲笑别人。。。
所以:
学习/研究/深层次使用 机器学习 并不俗。
鼓吹夸大机器学习很俗。
半吊子技术就在外面轻浮机器学习也很俗。
云计算大数据俗是真的,
至于你说的编程语言x大浪漫,各种热门编程语言连俗都搭不上,早已烂大街了。
机器学习,或者广义的说,数据科学,不论从烂大街程度还是从有用程度来说都绝不会俗,现在不会,将来更不会。
烂街程度来说,现在数据科学类研究学习基本集中在各大高校和实验室,远未达到推广至社会各行业的水平,甚至是最先锋的挨踢it领域也只有特大型公司才有数据科学类部门(非传统的数据分析和统计部门)例如bat 360 滴滴之类。数据科学的未来发展是不可限量的。
从有用程度来说,
学会大数据云计算,能找份好工作,然后每天折磨服务器或者被服务器折磨。
学会x大编程语言,能找份好工作,然后每天码代码搬砖折腾那破网站或者app。
学会数据科学呢,退一步,在最差的情况下,你也可以用捎带学的python干上面码农的活,
除了最差的码农工种,还可以进金融行业做量化分析和交易。这算一般的。
最好的情况是什么,
你可以用自己学会的数据科学知识分析所有已知和未知领域数据,所有领域!
是的,未来数据科学就是会渗透到所有领域。
语文数学历史物理政治社会经济,哪个行业不需要分析数据!
然后你会得到什么呢,你获得了体察万物运转的能力,搞不好能大彻大悟,成王成圣。
这还不够有用吗?
那些云计算大数据javaphpiosandroid开发能行吗?这些渣渣有什么资格和数据科学相比呢
机器学习俗好还是不俗好?
机器学习如果不俗,应该只属于国内外各大高校、研究机构,国外公司,国内极少数公司的研究范畴吧。研究不到一定年头根本不好意思说自己是搞机器学习的。国内的从业者最低门槛也得是个硕士吧,想在机器学习里学个明白国内还不够,得去国外读个博士吧,要不然你说你搞机器学习?真俗。工作呢,国内?别,你说你在国内搞机器学习,真俗。国外,(大部分人)还是先读个博再谈机器学习。毕业后?万一想回国,国内机器学习太俗了啊,那该怎么办,想想其他办法….
机器学习如果俗(目前的情况),国外内大小公司都在招人搞数据挖掘/自然语言处理。不管你是CS非CS专业,无论本硕博,或者培训班出身,学会语言学会机器学习算法(注意是学会),还不用特别精通,北京8K最少了吧,稍微精通,12K不能再少了吧,国外机器学习博士学回来,15K起步你还不一定想去,3年-5年之中肯吃苦,强化一下其他方面,不断学习,做过几个还可以的项目,自称数据挖掘工程师没有问题吧?20K(北京)也不是太难吧。5年-10年,拉个稍微好点的团队,有一个互联网+的ideal,忽悠个pre-A,A不是问题吧,然后怎么办,想想办法…
那么对于大部分人来说,机器学习是俗点好,还是不俗好呢?
水涨才有船高,只不过是水有点污罢了。实话实说,我不认为那些微博啊,电视啊,包括知乎上某些人,能搞清楚机器学习到底在干什么。别说什么深度学习神经网络,手推一下SVM的原理我估计这些人都怂了。拉格朗日对偶都不一定讲得清楚。
我认识一个EE的哥们天天拿这个朋友圈装逼,问起来原理他却支支吾吾,我一看放心啦,不会和我抢饭碗的。
所以啊,做人啊,还是不能图样图森破,上台拿衣服。
云计算,大数据,机器学习,讲道理,应该还没彻底发展起来,只是名字先被用烂了而已。外人喊俗俗俗,我们闷声发大财就行了。
Andrew Ng的课算是有良心了。 简单版去coursera上看,每周会有optional的section,就是补基础知识。
同样内容广度深度更野一点搜CS229 Stanford。这是coursera那门课的真正形态。
网站里有个链接叫handouts。section notes里面都是周五TA section的东西。这门课每周五会有一个TA带着大家补基础知识的section。 基础知识和目标知识不要分开来看,看到问题了,再去补,不然干看基础知识没有实际应用的理解效果很不好。想想高中数学和后来的高数,哪些不是好东西,但不配合应用去学没什么效果。
这门课相当成熟,每堂课都有完全拿你当SB一样详细的note pdf。强烈推荐。
1. 数学方面:微积分、矩阵论
矩阵这一块,了解的越多对你推倒计算方面能力的提升提高非常多。当然,只想看懂不要求证明的话,本科的线性代数够用了(我指的是真的好好学线性代数…)
2. 凸优化
这一块的重要性非常显然了,比如你连牛顿法、梯度下降法、一维搜索等基本的凸优化都不了解 的话会非常吃力。但短期来说的话,基本上Boyd的convex optimization懂前三章就够用了。
3.概率、统计
对基本的期望啊mean啊之类的计算,极大似然,bayes,多元正太等很多相关方面的统计一定要比较熟悉,否则对涉及统计和对数据的直觉上会差很多。
4.泛函
我本科没好好学泛函,到学到一些ML的方法比如kernel相关的方法的时候就凸显出来对泛函不熟,对函数空间理解不够的话会比较吃力。但重要性上比如前面几个方面。
但我整体想说的是,对于大多数只学过微积分线性代数+基本统计的人不大会有时间和精力说把上面这些一门一门学了才开始学ML,大多数时候都是慢慢去补的。比如上面有人提到Andrew Ng的coursera课程上会有一些hangouts。这是一个很好的比较快速掌握急切所需的东西的方面。毕竟上面每一门课都需要花很多时间去学。但是,如果你能真的好好学了之后,再回过头来把ML再学一遍,你收获一定会多的多!
不建议系统的看数学书,如果你上过数学课的话。看书太费时间了,而且还是那句话,不是learn by doing,看十成记五成,理解也就三成吧。1.计算机科学基础知识和编程
2.概率统计
3.数据模拟和评价
4.将机器学习算法与程序库
5.软件工程和系统设计实际上除了微积分线代你啥都不会也能学,这课在某些专业是必修课,很多选这门课的同学数学水平 烂的不堪入目,当然这么上这门课痛苦很多就是了……
按照我正在上机器学习的同学的说法,可能有帮助的数学知识有:
数学分析
实分析(测度论)
泛函分析
概率论
数理统计
随机过程
凸优化
博弈论(我也不知道为啥有这个……)
拓扑学(这好像是那老师说着玩的……)
线性代数:《 Introduction to Linear Algebra》
概率论:《Applied multivariate statistical analysis》 《Probability Theory The Logic of Science》
统计:《All of Statistics》
其他的泛函,凸优化需要的时候再去查相关知识
最近也在看prml,感觉理解频率派跟贝叶斯学派的差别很重要,一直在看prml, 也曾经很纠结里面的公式推导,感觉难度最大的一块在于一些矩阵求导相关的内容(假设本科已经学过高等数学,线性代数的),建议先细致看一下matrix calc,自己把一些矩阵求导的公式推一遍。
1. 计算时间
在工业界的训练数据动辄上TB,每天都得train一大批的model。光从计算时间上,就限制了SVM等相对复杂算法的流行程度。个人在微软、亚马逊经常见到的是逻辑回归train天下。偶尔有特殊的问题会用上SVM,但规模很小,且training data不会每天更新。因为只有logistic regression这种程度的方法在计算上是可行的。
2. 模型诠释
如果是logistic regression来train的model,那么最起码人还能看到每个feature的权重。
但若使用SVM、神经网络或更复杂的方法,train出来的结果首先不说,其模型对人而言是很难进行诠释的。这也会限制商业上的应用。因为我作为卖家都不知道自己train出来的model究竟该怎样诠释,外行的买家大概也只能够不明觉厉了吧。
3. 过于灵活相当于没有方法
面对一个问题,可选择的机器学习模型首先就有很多。即使选定了几种方法,每一种方法还会有n多变种。比如SVM如此多的kernel、神经网络的activation function等。就算把这个选好了,还要去tune model的parameter。
最可恨的是,这个流程很难总结出一套系统的经验指导。更多时候都只能trial and error。这相当于面对一个问题,临时去找方法、试各种方法一样。
灵活过头了就变成玄学了。正是因为玄之又玄,机器学习养活了一大批论文灌水的人。
从本质原理来说,目前的机器学习方法和人脑机制差异还是巨大的,更多的是通过大量数据来训练一个可以尽量逼近训练数据分布的模型,这种本质差异决定了机器学习离人脑思考方式还很遥远。最近深度学习和神经网络很火,最常用的卷积神经网络CNN的发明者Yann LeCun都不乐意称呼卷积神经网络这个名字,更乐意称呼深度卷积网络模型等名字,因为他觉得自己在搞的模型和人脑差异太大,不应该用神经网络的名称。
从科研角度来说,一般每隔若干年就会有一次技术的质变的突破,然后紧接着一些修补完善。之前火过的SVM、AdaBoost、SIFT等,经过几年的优化后,性能基本达到极限,已经发展不动。这两年火了深度学习,目前还处于各种优化提高阶段,但应该也会到一定瓶颈后发展不动,然后需要更多的质变的突破。
从工业应用来说,机器学习的方法应用会越来越多,目前应用的瓶颈主要体现在下面一些地方:
1. 经验。机器学习的方法对于一般的工程师并不友好,如果没有了解原理和做过一些实验,这就是一个参数很多的黑盒,弄不好效果就会很差。
2. 数据量。效果好的方法大都是有监督训练的,这就需要很多标注数据,数据的质量、归一化方法、分布等,对模型的效果都影响很大。
3. 计算能力。很多模型,特别是深度学习模型,训练时间和资源消耗很大,如果需要多次训练调整策略和参数,周期很长。实际部署运行速度也受模型大小和种类影响,速度和效果会有一个权衡。
4. 工程实现能力。好的算法要有好的工程实现,才能发挥正常的作用,代码能力不行,再好的模型也不行。
5. 算法搭配。实际问题往往不是一个单一的算法可以搞定的,需要多个相关算法合理的搭配组合,具体问题具体分析解决。
6. 技术高度。机器学习还比较前沿,效果和应用场景都有天花板,期望未来几年会有更多技术突破。
《数据挖掘实用机器学习工具与技术》、《数据挖掘导论》、《机器学习》、,《数据挖掘与机器学习WAKA应用技术与实践》
Python:《利用Python进行数据分析》、《Python基础教程》、《Python Cookbook》、《“笨办法”学Python》
MATLAB:《精通MATLAB》、《MATLAB R2014a从入门到精通》、《MATLAB R2014a完全自学一本通》、《MATLAB宝典》
数据库:《MongoDB权威指南》、《数据库系统概念》、《SQL语言与数据库操作技术大全》、《Oracle从入门到精通》
R语言:《统计建模与R软件》、《R语言实战》、《ggplot2数据分析与图形艺术》、《数据挖掘与R语言》
Andrew Ng的课算是有良心了。 简单版去coursera上看,每周会有optional的section,就是补基础知识。
同样内容广度深度更野一点搜CS229 Stanford。这是coursera那门课的真正形态。
网站里有个链接叫handouts。section notes里面都是周五TA section的东西。这门课每周五会有一个TA带着大家补基础知识的section。 基础知识和目标知识不要分开来看,看到问题了,再去补,不然干看基础知识没有实际应用的理解效果很不好。想想高中数学和后来的高数,哪些不是好东西,但不配合应用去学没什么效果。
这门课相当成熟,每堂课都有完全拿你当SB一样详细的note pdf。强烈推荐。
1. 数学方面:微积分、矩阵论
矩阵这一块,了解的越多对你推倒计算方面能力的提升提高非常多。当然,只想看懂不要求证明的话,本科的线性代数够用了(我指的是真的好好学线性代数…)
2. 凸优化
这一块的重要性非常显然了,比如你连牛顿法、梯度下降法、一维搜索等基本的凸优化都不了解 的话会非常吃力。但短期来说的话,基本上Boyd的convex optimization懂前三章就够用了。
3.概率、统计
对基本的期望啊mean啊之类的计算,极大似然,bayes,多元正太等很多相关方面的统计一定要比较熟悉,否则对涉及统计和对数据的直觉上会差很多。
4.泛函
我本科没好好学泛函,到学到一些ML的方法比如kernel相关的方法的时候就凸显出来对泛函不熟,对函数空间理解不够的话会比较吃力。但重要性上比如前面几个方面。
但我整体想说的是,对于大多数只学过微积分线性代数+基本统计的人不大会有时间和精力说把上面这些一门一门学了才开始学ML,大多数时候都是慢慢去补的。比如上面有人提到Andrew Ng的coursera课程上会有一些hangouts。这是一个很好的比较快速掌握急切所需的东西的方面。毕竟上面每一门课都需要花很多时间去学。但是,如果你能真的好好学了之后,再回过头来把ML再学一遍,你收获一定会多的多!
不建议系统的看数学书,如果你上过数学课的话。看书太费时间了,而且还是那句话,不是learn by doing,看十成记五成,理解也就三成吧。1.计算机科学基础知识和编程
2.概率统计
3.数据模拟和评价
4.将机器学习算法与程序库
5.软件工程和系统设计实际上除了微积分线代你啥都不会也能学,这课在某些专业是必修课,很多选这门课的同学数学水平 烂的不堪入目,当然这么上这门课痛苦很多就是了……
按照我正在上机器学习的同学的说法,可能有帮助的数学知识有:
数学分析
实分析(测度论)
泛函分析
概率论
数理统计
随机过程
凸优化
博弈论(我也不知道为啥有这个……)
拓扑学(这好像是那老师说着玩的……)
线性代数:《 Introduction to Linear Algebra》
概率论:《Applied multivariate statistical analysis》 《Probability Theory The Logic of Science》
统计:《All of Statistics》
其他的泛函,凸优化需要的时候再去查相关知识
最近也在看prml,感觉理解频率派跟贝叶斯学派的差别很重要,一直在看prml, 也曾经很纠结里面的公式推导,感觉难度最大的一块在于一些矩阵求导相关的内容(假设本科已经学过高等数学,线性代数的),建议先细致看一下matrix calc,自己把一些矩阵求导的公式推一遍。
1. 计算时间
在工业界的训练数据动辄上TB,每天都得train一大批的model。光从计算时间上,就限制了SVM等相对复杂算法的流行程度。个人在微软、亚马逊经常见到的是逻辑回归train天下。偶尔有特殊的问题会用上SVM,但规模很小,且training data不会每天更新。因为只有logistic regression这种程度的方法在计算上是可行的。
2. 模型诠释
如果是logistic regression来train的model,那么最起码人还能看到每个feature的权重。
但若使用SVM、神经网络或更复杂的方法,train出来的结果首先不说,其模型对人而言是很难进行诠释的。这也会限制商业上的应用。因为我作为卖家都不知道自己train出来的model究竟该怎样诠释,外行的买家大概也只能够不明觉厉了吧。
3. 过于灵活相当于没有方法
面对一个问题,可选择的机器学习模型首先就有很多。即使选定了几种方法,每一种方法还会有n多变种。比如SVM如此多的kernel、神经网络的activation function等。就算把这个选好了,还要去tune model的parameter。
最可恨的是,这个流程很难总结出一套系统的经验指导。更多时候都只能trial and error。这相当于面对一个问题,临时去找方法、试各种方法一样。
灵活过头了就变成玄学了。正是因为玄之又玄,机器学习养活了一大批论文灌水的人。
从本质原理来说,目前的机器学习方法和人脑机制差异还是巨大的,更多的是通过大量数据来训练一个可以尽量逼近训练数据分布的模型,这种本质差异决定了机器学习离人脑思考方式还很遥远。最近深度学习和神经网络很火,最常用的卷积神经网络CNN的发明者Yann LeCun都不乐意称呼卷积神经网络这个名字,更乐意称呼深度卷积网络模型等名字,因为他觉得自己在搞的模型和人脑差异太大,不应该用神经网络的名称。
从科研角度来说,一般每隔若干年就会有一次技术的质变的突破,然后紧接着一些修补完善。之前火过的SVM、AdaBoost、SIFT等,经过几年的优化后,性能基本达到极限,已经发展不动。这两年火了深度学习,目前还处于各种优化提高阶段,但应该也会到一定瓶颈后发展不动,然后需要更多的质变的突破。
从工业应用来说,机器学习的方法应用会越来越多,目前应用的瓶颈主要体现在下面一些地方:
1. 经验。机器学习的方法对于一般的工程师并不友好,如果没有了解原理和做过一些实验,这就是一个参数很多的黑盒,弄不好效果就会很差。
2. 数据量。效果好的方法大都是有监督训练的,这就需要很多标注数据,数据的质量、归一化方法、分布等,对模型的效果都影响很大。
3. 计算能力。很多模型,特别是深度学习模型,训练时间和资源消耗很大,如果需要多次训练调整策略和参数,周期很长。实际部署运行速度也受模型大小和种类影响,速度和效果会有一个权衡。
4. 工程实现能力。好的算法要有好的工程实现,才能发挥正常的作用,代码能力不行,再好的模型也不行。
5. 算法搭配。实际问题往往不是一个单一的算法可以搞定的,需要多个相关算法合理的搭配组合,具体问题具体分析解决。
6. 技术高度。机器学习还比较前沿,效果和应用场景都有天花板,期望未来几年会有更多技术突破。
《数据挖掘实用机器学习工具与技术》、《数据挖掘导论》、《机器学习》、,《数据挖掘与机器学习WAKA应用技术与实践》
Python:《利用Python进行数据分析》、《Python基础教程》、《Python Cookbook》、《“笨办法”学Python》
MATLAB:《精通MATLAB》、《MATLAB R2014a从入门到精通》、《MATLAB R2014a完全自学一本通》、《MATLAB宝典》
数据库:《MongoDB权威指南》、《数据库系统概念》、《SQL语言与数据库操作技术大全》、《Oracle从入门到精通》
R语言:《统计建模与R软件》、《R语言实战》、《ggplot2数据分析与图形艺术》、《数据挖掘与R语言》
软件算法层面
算法的复杂度
特别是面对大量数据下的处理。本身很多算法的复杂度不低,造成很多算法的应用范围受到了很大的限制,不是计算时间太慢就是内存需求太大。现在的数据量是越来越大,而且最终的应用效果也是和数据量有很大的关系的,毕竟目前的学习都是通过积累经验获得模型的,数据越多经验才能越多。能否有新的更加优秀的优化方法降低学习时需要的时间和内存很重要。
并行化问题
并行化目前来看是解决复杂度的重要出路了,大家都希望利用分布式集群更加快速的学习更大规模的模型。集群本身是有物理和资源限制的,集群越大通讯开销自然也会增加,而且本身经济上也是要花钱的。何况,很多算法也很难实现高效的并行,如果加上算法本身复杂度又比较大,基本就没有意义了。
通用算法的问题
谁都希望能有一个通用的学习算法可以自适应各种不同的任务,虽然这个可能性不大。现在的深度学习和神经网络之所以比较受关注,这方面也可能是部分原因,很多特征都可以通过非监督方法来获得,不需要人工太多干预,在这一方面还是减少了工作量的,而且确实有效果,语音图像方面的测试一直被刷正确率,NLP方面估计也要被刷了。
数据层面
数据层面比较矛盾,网络上的数据是越来越多,但是可以用来训练的优良数据还是有限。开放和组织标注更大范围的训练数据对机器学习任务的作用是非巨大。对于网上那么多的数据看着用不上也心急,所以也需要非监督的方法,还有Transfer Learning来利用那么多用不上的数据。
硬件层面
集群的数量
限制增加更多的集群,才能组织更大的模型,但是集群本身的建立毕竟也受物理限制。
GPU加速/FPGA专用硬件
专用硬件用来加速学习肯定比一般的通用硬件要快的。
基础科学层面
对人类自己的神经系统的研究成果肯定对机器学习的算法和思路有很大的影响,这几年美国貌似在投入研究。这方面的突破会极大的加速机器学习。
未来展望
利用互联网上的大规模数据进行半监督的学习,完全的无监督学习即使可能效率也没有有监督的高。在学习的过程中肯定还是需要人类的调教。
现时 strong AI 的问题是: 如何令机器像人脑一样思考?
自 90 年代起,机器学习流行 statistical learning (统计学习) 和神经网络,它们已经能学出空间中的任意函数。
那为什么我们还未见到强人工智能?
原因是,「思维 (reasoning)」的内部结构是逻辑,而逻辑是符号 (symbolic) 运算。 研究者一直企图把神经网络和符号运算统一起来,叫 neural-symbolic integration。 但你会发现这个题目下的发展暂时还未有很大突破。
在逻辑的结构下,可以直接从事学习,在假设空间中寻找最佳假设,而那假设空间是全部逻辑句子。 这叫诱发式逻辑学习 (inductive logic programming) 或关系学习 (relational learning)。
这就造成了两种很不同的範畴 (paradigm): 一方面是「连续空间」中的学习,例如 SVM 和神经网络。 另一方面是「离散空间」中的搜寻,如 ILP。 前者可以是很快的,后者慢得可怜。 逻辑学习的慢,就正是我们现在还未有强人工智能的主因。
说起机器学习,现在人人都会想到统计学习,但其实最早的机器学习是在逻辑结构中搞的,那时是 70 年代。 后来统计学习的流行完全掩盖了逻辑学习,那也是经典 AI (classical AI) 「死寂」了的原因。
一般人会觉得离散和连续是两回事,但数学家们知道离散和连续只是一物的两面,这样的例子在数学中不胜枚举。 所以有希望找到逻辑和神经网络的统一,又或者连续和离散学习的统一。
P=?NP 的问题也有关,而且有可能 P=NP。 NP 中最经典的问题就是 SAT (satisfiability,逻辑的可满足性问题),它的本质是 combinatorial search (组合性搜寻),很慢,不能用连续方法搜寻。 所谓连续方法的例子就如 Newton method 那些。 但离散的组合性问题,不容易化作连续的方程解问题。
Deep learning 是最新的潮流,但它搜寻的空间仍然是神经网络那种连续空间。 如何用深层学习的技巧去搜寻有符号或逻辑结构的离散空间? 这可能是一个很好的发展方向。
我现在的研究方向,是将逻辑先转换成抽象代数,然后再去发现由代数通往其他数学分支的桥梁。
=============== 2016 年 6 月================
噢,上面是 2014 年的答案,我很高兴我已经成功地完成了目标,但结果用的不是代数方法。 因为发觉普通代数的两个运算 + 和 x 不够用,而且还要给它一个甚至多个 > 序关系。 怎样搞也好像符号不够用。(可能是我水平低,我也知道有 3 个运算的代数,和略懂一点 universal algebra 的皮毛,但不懂得怎样应用。)
最后,解决办法是放到 vector space 上,但「忽略」那代数结构,而是用机器 learn 出来。 这样的话,不需自己由 bottom-up 设计那代数结构,对我来说很易。
过渡到 vector space 之后真的豁然开朗,因为可以用到动态系统、控制论那些方法、深度神经网络等。 我现在已忙著搞那边的事。
在逻辑/代数那边,还有张量代数可以用,其实有很多人研究了用 tensor products 代表自然语言句子,有兴趣可以看看《Quantum mechanics and linguistics》(2013) 这本书。 但这属於我所谓的 bottom-up 方法,亦即是说 explicitly 给出符号逻辑的形式,但在神经网络中似乎可以用 implicit 的方法,让机器 learn 它出来,使用者不知道实际的 representation 是什么。模仿与逼近人脑我觉得会是机器学习的终极形式,但是现在由于生物科学发展的限制,人们对人脑的机理只窥得冰山一角。
现在最有希望的机器学习模型DeepLearining也正是基于对人类视觉系统的信号处理的研究发现:可视皮层是分级的。
所以可见,对人脑理解的一个小足进步都会推动机器学习一个大的发展。
现在受到计算机体系限制,即使是用大型分布式电脑也无法模拟人脑的神经网络模型,现在大型的DNN模型有上亿个神经元已经算大的了,可是人脑的神经元个数现在被估计在150亿数量级上。
另外一点是:
经过测试人脑神经元彼此传递信号的速度其实并没有计算机模型中两个神经元传递速度快,但是效果却远远好于计算机神经元模型,那是因为人脑神经元之间是高度并行化的,这一点现代计算体系根本无法突破,只能期待有生物特性的计算机了。
现在机器学习的挑战是如何从海量数据中学习目标知识。以下也许是很好的入口:
Z.-H. Zhou, N. V. Chawla, Y. Jin, and G. J. Williams. Big data opportunities and challenges: Discussions from data analytics perspectives. IEEE Computational Intelligence Magazine, 2014, 9(4): 62-74.
器学习之所以这么火的原因到底是什么呢?难道真的只是吹牛逼的玄学么?那怎么还有企业整天花钱在倒腾机器学习?机器学习在企业中到底做了什么?
我觉得当这些问题都搞明白之后,自然就会想到机器学习该怎么实现?需要解决什么样的问题,还有哪些问题解决不了需要改进,以及机器学习的意义所在。
其他不熟悉的行业不说了,就拿互联网和金融行业来说,表现出来的特点是,信息量庞大,需要决策的场景非常之多且频繁。
互联网电商中的广告投放、业绩预测、会员体系、个性化方案,金融市场中的股价波动、市场利率调整、保险产品个性化等一系列问题,让你人力上需要花很大的力气去解决,而且还不一定做的好。
也正是因为这些原因,才主要机器来辅助决策,通过机器学习的方法,第一步先减轻人力工作,第二步才是比人工效果还好。
我们在解决实际场景过程中会面临几个方面的问题:
1.我们要解决什么样的问题,需要什么样的算法来解决。到底是分类问题,还是预测决策问题,还是只是计算关联的问题。这里面就会存在因为实际业务情况复杂,而存在一般模型解决不了的时候。
2.我们需要哪些数据,可以实现这个模型的train,这里面又存在没有数据啦,数据噪音太多啦,数据格式不统一不规范,没有我们想要的数据啦,选择的feature不准确啦。
3.在train的过程中,数据都准备好了,会遇到怎么选择抽样比例才能反应客观事实?计算的时间要多久?(你丫的模型跑几天才出来,实际情况可不可行)
4.test环节评估模型效果的方式方法是否合理,选择的标准又是哪些?
5.因为是机器学习,所以又会涉及到具体的计算资源,代码口径,逻辑复杂度,人力成本,以及最终的效果表现。
基本上,如果你能用一个很轻巧又高效的模型算法,解决一个实际场景比较头疼的问题,那你就牛逼了!机器学习本身水还是很深,理论瓶颈不敢多谈,估计更多模型的提出和最优化理论方面的突破啥的,但是机器学习能够这么火,还是因为能让工业界让各个水平的人都能用统计方法去解决问题。
在工业界应用主要有算法和对应的系统的开发和算法的使用。算法开发倒也没有什么大的瓶颈,由于有基础的理论做保证(当然也有些理论没能完全保证但是真实效果ok的),更多的是系统的搭建,比如parameter server中优化通信方式,参数分离等等,尤其是数据更大时候更是需要系统设计的好.如果是理论不是特别完备的情况下就可能需要更好地探索。
算法应用的瓶颈一般来说角度会不同,更贴近业务和数据,也没什么瓶颈可言,更多的是tradeoff,如果快速上线一个简单但是可以接受的模型还是长时间开发一个复杂的但是效果更好的模型,如何调参使得效果更好,模型更新采用什么策略等等,更重要的,有没有#资源#做,老板支持不支持,老板的老板看不看重,能不能把应用全套包装好,这里水深多啦!
反正可以看到机器学习在工业界最大的瓶颈还是数据和人
1. 数据量的问题。这个可以分成两类来讨论:
a. 数据太多,那么面临着计算能力和计算成本的问题。
b. 数据太少。数据太少有时候是很客观存在的事情,很多时候工业界在启动一个项目的时候会希望你先做一个pilot。在这种情况下,只有非常少量的数据可以用。对于复杂的问题,还面临着feature的维度很高,在这种情况下模型的预测能力一般都不会太好。老板看到效果不好,这个项目就会被毙掉。
2. 模型及预测结果的可解释度。面试的时候我曾被问过一个问题:你怎么跟不具备相同知识背景的人解释你的项目?这个问题对于机器学习的实用性非常重要,因为大部分复杂算法的可解释度都很低。据我观察,在工业界比较流行的是:logistic/linear regression还有random forest。能解释才是王道。
3. 模型过拟合。这个问题也是老生常谈了,但现实生活中我们常常可以看到有同事做出了一个看起来正确率超高的模型,但放到实际过程中完全不能用。虽然有各种方法进行regularization, dropout, Bayesian learning,但很多时候overfitting还是不可避免。
4. 数据预处理(清理,弥补缺失,标准化等)。这个又是属于人云亦云的过程,每个人对于每个数据的处理方法都不相同,大部分都是按照自己的经验来处理。比如Missing value吧,各种paper提出各种方法但实际效果都不会有哪一个特别牛逼。其实数据本身就是个问题,大部分项目都是 junk in junk out。
5. 不可预测性。机器学习的每个过程都充满了不可预测性,比如解释model,比如处理missing value,也比如将文字转化为vector。按理来说,我们会觉得更复杂的处理效果更好,但大部分时候你会发现bag of words比skip-gram强多了。大概机器学习的每个环节都存在这种问题,没有唯一的经典的最好的方法。做机器学习就像是猜密码,而且是一个很多位的密码…好在不需要全对我们就可以开锁拿钱。自适应机器学习之类的研究或许可以帮助我们摆脱这种看天吃饭的工作流程。所以就像其他所有人提到的一样,机器学习是一门玄学:)
学习的定义: 是透过教授或体验而获得知识、技术、态度或价值的过程,从而导致可量度的稳定的行为变化,更準确一点来说是建立新的精神结构或审视过去的精神结构。学习必须倚赖经验才可以有长远成效。
鸭子类型法则: 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
计算机科学有个方向叫机器学习:它主要研究如何在经验学习中改善具体算法的性能。
现代机器学习领域至少是基于之前提到的两个共识之上的,而这个工作用了现在机器学习分支-强化学习和监督学习方向几乎是最好的算法。如果这篇工作不能被叫做机器人学习的话,那就至少部分否认了现代机器学习的在这两个方向上的努力。因此我认为,伯克利的这个机器人一定是具有学习的能力的。
另外现代机器学习是一门严肃学科。严格来讲,各大网站上的推荐算法,图片搜索都是机器学习方向的分支。而且有些方向(声称)比人类做的好了,比如人脸识别,图像分类。加上量子电脑的发展速度加快,比人类更会学习的机器人到来是可以预料的事情,这一点其实并不需要惊讶。如果了解强化学习在Motor Skill控制的应用和监督学习在计算机视觉上的应用的话,这篇文章的主要贡献点就是拼命凑神经网络的参数,让整个系统能通过视觉信号直接控制电机。
通过视觉信号直接控制电机最难的点在于他处理视觉信号的神经网络是一个叫CNN的网络。里面的参数有大约92000个,如何通过尝试-错误的方式优化这92000参数是个非常麻烦的事情。原因有几个。
1. 机器人必须识别物体,且分辨物体的位置。
2. 就算是最好的强化学习的方法能训练的参数也有限(大约2000个左右)。
3. 如何把人给的示范动作告知机器人且让机器人学习。
4. 机器人如何实现在不同位置的初始化都可以完成最后的结果。
那么这篇文章具体的解决方案(具体贡献)是
1 -> 识别物体位置用的算法是 CNN 的相似结构(CNN和它的变种是最经典的物体分类算法,很多新闻都有写)
2 -> 先做示范引领机器人
3 -> Guided Policy Search, 作者自己发明的一个强化学习算法
4 -> End to End 训练这类问题中,学习算法就像是一个训狗的过程。狗做出了好的举动,然后人就会告诉它Good Dog. 狗做出了不对的举动,人就告诉它Bad Dog. 然后胡锡进,啊不对,狗就学会了衔飞盘。在机器人问题上,机器人做出了成功的举动(例如把钥匙放好)系统就返回yes,或者返回yes的一个程度, 它以后就知道尽可能按这个方式做;机器人没有做出成功的举动,系统就返回no. 这玩意儿在机器学习里叫增强学习(reinforcement learning)。
每次AI技术大发展,总会冒出来"机器人终将超越人类"、"机器永远不会有情感"这种讨论不出结果的论争。百年前人想: 我们要做个东西像鸟一样飞起来。后来没人争论说你这东西不对,因为它不会下蛋孵小鸟。。。咱祖师爷给起了个引人遐想的名字人工智能,别人起的名字叫空气动力学,不叫人工鸟。
BRETT 是一个很赞的工作,但BRETT并不是学习新的技能,而是学习自己的硬件设置。对应到现实生活中,有点像是每辆车的长宽都不一样,松下油门移动的距离也不一样,怎么样让人适应这个车的配置。但是学习开车是在适应配置之前的工作。
BRETT 所实现的功能,有大量的机器人都能实现,甚至实现地更好。论文里面也提到,他们所使用的训练集,就是用一个 simple trajectory-centric algorithms 生成的。他们通过修改机械手臂的初始状态,根据之前的简单算法,计算出正确的运动轨迹,记录下运动过程中的图片纪录和其他相关信息,之后用这个数据去作为标注数据去训练。
这篇论文的核心卖点是,在不知道硬件结构的情况下,怎么去控制机器人?现有的机器人系统随着自由度,关节的增加,编程难度也是几何倍数增加。如何操作一个和人手臂一样灵活的机械臂,肩部的运动是会影响到手腕的位置的。这篇论文,把这些参数丢进了deep learning这个黑盒子里,然后自动把硬件操作和任务绑定在一起。
思路上和deepmind的atari小游戏没什么区别,但二维变三维并不简单,真实世界里的数据标注要晦涩很多。个最基础的学习闭环是:
1.从输入信号中区分环境信号和焦点信号;
2.将不同信号,主要是焦点信号映射到变量集中;
3.尝试对变量建立关系,制定试错计划;
4.执行试错计划,验证结果;
5.根据验证结果对先前的试错过程进行激励或惩罚,并按照行动路径存储经验;
6.根据可行路径完成任务。
如果再进一步,就是优化学习曲线的能力,和对复杂环境的信号辨识能力,我觉得已经可以期待这个团队未来的发展了。
可以断定这台机器人没有“学习”能力,这里说的“学习”是指创造知识的能力,就是说今天学会了A,明天给我B我也知道怎么处理,而处理B的能力不是学来的,是通过对A的分析与推理得出的。通俗点说,这里定义的“学习”指的是“举一反三”,而不是“熟能生巧”,不知道这么说是否严谨,大概就这么个意思,题主你感受下……
人工智能要真有了学习能力,那它本身就是可以脱离算法存在的(因为它能给自己写算法),它的存在形式应该是一条一条的规则。那规则与算法有啥区别咧?嗯,类似于C++/Java等与C/汇编之间的区别;类似于中医与西医之间的区别(别喷我);类似于“吃饭”和“吃米饭”之间的区别……脑洞不够了,先这样吧。这种能学习的人工智能也就是所谓的强人工智能,算是人工智能的终极形式吧,科幻片里的那些整天勾心斗角不干正事的机器人就属于这种。悄悄说一句,新出的那个《机械姬(Ex.Machina)》算是比较高智商的关于机器人的科幻电影了,不过有些镜头实在是,咳咳……
再说说这个叫啥啥BRETT的机器人吧,就像题主描述里说的,它用的是基于神经网络的深度学习算法,至于这个基于/神经网络的/深度/学习算法是个什么鬼,题主有兴趣可以搜搜文献,专业解释这里就不贴了。顺便吐个槽,真心感觉在知乎最好不要秀逼格,毕竟隔行如隔山,大家交流知识为的是开心,又不是搞科研,整那么些苦瓜脸的符号干啥。。。科研大神们请出门左转谷歌学术不谢~~
吐槽完毕,接着上面说,“学习算法”就像它字面的意思,就是教人工智能怎么学习的,曾经简略地写了一点,有兴趣可以看一下。
如何让机器人具有学习能力? – 晴天的回答
基于神经网络,就是说用的算法模型是个神经网络,没啥新奇的,关键点就在“深度”上,那啥叫“深度学习”咧,这个稍微有点专业了,下面一段需要一定的背景知识,要题主没兴趣,请跳至下一段。
基于神经网络的学习算法实际上是个通过样本训练对网络节点权重值进行调整的过程,只要节点足够多,理论上就能模拟任意非线性。但权重值怎么调整这本身也要算法啊,现在一般用最速下降法,快成默认的了,但实际上它的结果并不见得是最优的,学过自控的人应该知道PID的D调的太大有什么后果,所以有人提出了“深度学习”的概念,就是在正式对网络训练之前先进行一次无监督的预训练,为后续的正式训练找到相对较好的初始值,这样不管用什么学习算法,都能保证权值是在一个较小范围内波动,不至于对结果有太坏的影响。
通俗回答就是,小明(神经网络)要去买书,但他只知道上个月不同种类书的价格(学习样本),这时候老师对小明说:“你给我……“,啊不是,导演换剧本!!老师对班里同学说:”我昨天刚给你们订了五年高考三年模拟,明天每人带××元来,班长负责收起来……“,这就相当于对小明提前进行了一次训练,让小明对书的价格这件事有了一个初步的了解,也就是所谓的”深度学习“。。。我发现我真是有段子手的潜质啊,都快点给我点赞!!
好了,说到这其实结果就比较明显了,如果那个机器人真就只采用了这种算法,那它离有”学习“能力还早着呢,最多也就优化做的比较好,知识库丰富一点罢了。不过话又说回来,我个人到觉得没必要过度追求所谓的机器智能,毕竟学习与思考才是人类立足于自然界的最大倚仗,要真到了连这些事都想让机器来帮我们干的时候,人类存在的价值也就没多少了。现阶段机器智能的发展水平也远没有一般人想象的那么夸张,据说谷歌最新的研究成果能让人工智能具有相当于人类5~6岁儿童的认知水平,注意不是学习水平,只是根据拥有的知识对世界进行一个简单的认识,这已经算黑科技了。所以么,机器人想要逆袭,还早着呢……
而且,题主你要知道,要是真有谁解决了”机器学习“的本质问题,那他的知名度绝对不下于爱因斯坦,肯定不会像现在这样,弄个新闻链接都打不开……
一款合适的机器人平台 + 入门级的控制算法进行试验。同时深入地学习相应地理论知识。
对于一个有控制基础,需要现学现用的工作者来说,啃一本诸如《现代控制工程》的书籍,在工作者演练,下面的平台内容直接略过。
关于平台的选择和相应的学习教程,我放在最后,防止大图分散了重点。
先结合机器人来说一下控制。对于设计任何一个控制系统来说,需要了解自己的输入、输出、控制元件,和算法。在一个简易的机器人系统里,分别对应的原件是:
输入 — 传感器 (声呐,红外,摄像头,陀螺仪,加速度计,罗盘)
控制元件 — 电机
控制算法 — 控制板 (小到单片机,大到微机)
输出 — 你的控制目标 (比如机器人的路径跟踪)
对这四方面都有了解之后,才能基本对机器人的控制有一个较为感性的认识。这是入门的基础。如果你对输入和输出做一个测量,比如用电机将某个轮子的转速从10加速到100,把这个测量勾画出来,那么这一个响应曲线。如何将电机准确快速地从10加速到100,这就需要一个简易的反馈控制器。
上面所说的各个传感器元件,都有廉价版可以购买学习,但随之引入的问题就是他们不精确,比如有噪声。消除这个噪声,你就需要在你的控制系统中引入更多的控制单元来消除这个噪声,比如加入滤波单元。
上面说这么多,只是想表达,理论和算法都是有应用背景的,但同时,学习一些暂时无法应用的算法也并不助于入门,甚至可能走偏门,觉得越复杂越好。所有的工程应用者都会说某某算法非常好,但是经典还是PID。倘若不亲手设计一个PID系统,恐怕真的领略不到它的魅力。我大学本科的控制课程包含了自动控制理论和现代控制理论,但是直到我设计一个四旋翼无人机的时候,才真正建立了我自己对机器人控制的理解。
推荐的那本《现代控制工程》是一本非常经典的专业书籍,需要理论知识,再进行详细的学习。我的建议是先玩,玩到需要时,认真学习这部分理论。
推荐一些机器人平台。核心都涉及到运动控制。
基于arduino的机器人平台是最大众的平台了,这是一个开源社区,很多关于机器人的简易设计和控制算法实现都能在google得到。淘宝arduino机器人,包括arduino控制板和各类简易传感器,几百块之内钱都能得到。
同时推荐一下Udacity上的Robotics课程,基于arduino也都能实现完成。
国外的有些Robotics课程使用的都是Lego Mindstorm作为实验平台(略土豪版)。红外,声呐,陀螺仪这些传感器Lego都有,同时它的电机也可以实现闭环控制。淘宝依旧可以买到lego mindstorm_淘宝搜索(海外代购版,我买过)
应当了解到:机器人控制(Robot Control)的目的是通过人工引入控制改善原有系统的特性,使新的系统:1)跟踪性能(Tracking Performance)更好,2)抗扰动性(Diturbance Rejection)更强,3)稳健性(Robustness)更优,e.t.c.
机器人控制大致可以分为硬件和算法两个大方向:
机器人控制硬件
基本控制结构:当年,N. Wiener对神经科学很感兴趣,发现其实机器的反馈控制和人的运动控制机理是相似的。控制工程中的:传感器(各种位置、速度、力传感器等)、控制器(各种处理器以及控制算法)和驱动器(电机、液压、气动、记忆合金等)三部分,分别对应于人的感受器(receptor)(例如:视觉、听觉、味觉、嗅觉、触觉等外感受器)、神经系统(中枢和周围神经系统)和效应器(effector)(肌肉、骨骼),只不过人的结构更加复杂。
层次控制体系:了解了控制的基本结构,剩下的事情就是设计控制系统。如今,大家设计控制系统的方法还是比较统一的,基本都可以归结为5层的层次体系:1)主机 (Host),2)运动控制器(Motion Controller),3)伺服驱动器(Servo Driver),4)电机(Motor),5)机构(Mechanism )。
主机:主要完成人机交互(操作员控制或者调试机器),高级运算(机器人运动规划等)。由于需要高等运算功能,这部分算法通常是基于操作系统的,硬件载体用通用计算机即可。
运动控制器:主要用于改善机器人动力学(Robot Dynamics)。机器人的机械本身并不具备跟踪轨迹的能力,需要外加控制来改善。由于需要大量的实时运算,这部分通常是基于实时操作系统,比如QNX等,硬件载体可以用ARM或其他。比如,工业界的工业机器人主要使用运动反馈(Motion Feedback),也即将驱动器配置为位置控制或者速度控制模式,此时运动控制器的主要用于补偿传动系统非线性性,例如:由于齿轮间隙、微小弹性变形导致的末端偏移。
伺服驱动器:主要用于改善电机动力学(Motor Dynamics)。由于电机本身物理特性并不具备良好的位置、速度和力矩跟踪能力,因此需要依靠控制来改善。这部分需要更高的实时性能,因为电机的响应速度快,需要us级定时,所以可以使用高性能DSP。比如,直流有刷电机中转子速度正比于反向电动势、力矩正比于电枢电流,而没有物理量能够直接控制位置,此时需要外加位置控制器。
电机:充当执行器,将电信号转化为机械运动。
机械本体:被控制的终极对象。
算法的编写:鉴于如今几乎没人再用Op-Amp搭建模拟计算机的事实,可以说算法就是个编程问题。基本的编程语言能力,比如MATLAB、C、C++是必须的。设计好算法之后,还需面对另外几个问题:
离散化问题(Discretization):连续算法的离散化是必要的,因为如今计算机都是数字系统。对于线性系统,比如电机控制,方法当然就是从s域(传递函数)到z域(Z变换)再到t域(差分方程)的变换,非线性的就得研究微分方程的各种数值方法了。
混合控制问题(Hybrid Control):几乎当前所有的机器人控制系统都不仅有一个控制模式,比如:回初始位置、运动控制模式、人工试教模式等等,每个模式需要特殊的控制算法。单个系统存在多个控制器时被称为混合控制系统,混合控制系统常常使用有限状态机(Finite State Machine, FSM)建模,状态机的切换需注意一些问题,比如芝诺问题。
通信问题(Communication):通常机器人系统都包含几十个,甚至上百个传感器以及几个到十几个驱动器,通信时常是个头疼的问题。问题的复杂性源于:通信对象多(并发问题),顺序需要协调(时序问题),通信的速率需要兼顾(阻塞问题)。个人倾向于使用基于“事件驱动模型”+“有限状态机模型”的混合模型来处理此类问题。
机器人控制理论:控制方法千奇百怪,这里仅举机器人臂的两个比较经典而常用的方法:混合力位控制和阻抗控制。
混合力/位控制(Hybrid Force/Position Control)是Mark Raibert(现今Boston Dynamics老板)和John Craig于70s末在JPL的工作成果,当时他们是在Stanford臂上做的实验,研究例如装配等任务时的力和位置同时控制的情况。
阻抗控制(Impedance Control)是 N.Hogan的工作成果。维纳晚年,对人控制机器臂很感兴趣。后来,他组织了MIT的Robert Mann,Stephen Jacobsen等一伙人开发了基于肌肉电信号控制的假肢臂,叫Boston Elbow。后来,Hogan继续Mann的工作,他觉得假肢是给人用的,不应当和工业机器人一样具有高的刚度,而应该具有柔性,所以后来引入了阻抗。
其他控制。
建议:自己也在钻研,共同学习吧。
首先,把描述机器人运动学和力学搞定。J.J. Craig出版于80s的《Introduction to Robotics: Mechanics and Control 》,或者R. Murray出版于90s的《A Mathematical Introduction to Robotic Manipulation》都行。对于机器人的数学基础,最新的成就是基于Differentiable Manifold(微分流形)、Lie group(李群)和Screw Theory(旋量理论)的。在这方面,个人认为以下研究团队奠定了机器人的数学基础理论:
1) Harvard的Roger Brokett教授及其学生Frank Chongwoo Park等;
2) UC Berkeley的Shankar Sastry教授及其学生Richard Murray,Zexiang Li等。
3) uPenn的Vijay Kumar教授,他和他的学生Milos Zefran以及Calin Belta在90年代研究了基于Differentiable Manifold的单刚体运动学和动力学。
4)上述2)中Richard Murray的学生Andrew Lewis和Francesco Bullo等研究了基于differentiable manifold和Lagrange Mechanics的机器人动力学以及几何控制理论(Geometric Control Theory)。
再次,必要的反馈控制基础当然是不能少的。关于控制,并不推荐把下面的教材通读一遍,仅需要了解必要的控制理念即可。陷入繁杂的细节往往不得要领,并浪费时间。具体的问题需要研读论文。
首先,要建立控制理论的基本概念,如状态方程、传递函数、前馈、反馈、稳定性等等,推荐Stanford大学教授Franklin的《Feedback Control of Dynamic Systems》;
关于机器人控制的入门读物,解释的最清晰的当属MW Spong的《Robot modeling and control》,书中不仅详细讲解了基于机器人动力学的控制,也讲解了执行器动力学与控制(也即电机控制)。
关于非线性控制理论,推荐MIT教授J.J.E. Slotine的《Applied Nonlinear Control》。
最后,如果是广大的Ph.D.朋友们,硬件就不必玩了,直接上paper吧。读paper,读各种牛人的paper。发paper,最好往ICRA和IJRR里面灌水。P.S.:被paper虐的吐了一口老血:-)线性系统
机器人运动学,反向运动学,动力学
非线性控制,最优控制
微分几何
理论力学
自适应控制,智能控制
这里老是提到的pid在机器人中应用不多。pid广泛应用于过程工程,而机器人运动控制对响应速度的要求超出pid。作为最简单的例子,题主可以去搜搜lqr在倒立摆中的应用,这可以说是最简单直观的例子了
曾经在coursera上过一门机器学习基石的课程,老师利用几周的时间以一个很简单的、甚至是不常用的PLA算法为例,讲解了有关机器学习所需要的知识,后来老师说这种算法应用性不强,但通过它可以讲到机器学习所涉及到的知识。在学过这些知识以后,再去学习一些复杂的算法,而流程都与设计PLA算法类似。
自动控制和机器学习是相似的,它涉及到了很多的算法,线性控制、非线性控制,一个自动化专业的学生一学就是2个学期,效果也不见得好。我的想法是,首先从一种经典的算法入手,(比如PID),围绕其展开学习,目的就是成功应用PID算法解决一些问题,(比如机器人的运动控制),之后再学习复杂的算法。目标确定了,但在学习之前先问自己3个问题( @刘未鹏的《暗时间》曾提到 ):
控制的本质是什么;
控制的原则是什么;
控制这一专业的知识构架是什么;
以机器人运动控制举例。
机器人控制有三个元素:控制器(算法),执行器(电机),传感器;
控制的本质就是将规划系统的指令作为输入信息,将传感器探测得到的状态信息和导航系统的定位信息作为反馈,计算得到执行器的控制信号,完成运动控制的闭环。
控制的原则就是稳定、准确、快速。
知识构架分为两部分:理论环节、实践环节。
理论环节即PID控制的原理,如何作用于被控物,这里包括自动控制原理中结构图、传递函数、数学模型、求解微分方程等知识的学习;
实践部分则包括相关软硬件的知识,软件即编程,也涉及到操作系统的相关知识。硬件如工控板的使用等。
围绕知识构架,无须事无巨细的学习,但要把PID了解透彻并成功应用。在这基础上再学习复杂的算法就会好一些。
知识构架:
理论:掌握在相应环境下机器人的动力学模型、运动控制原理和方法、使用的控制策略以及运动控制器的设计。相应展开可以进行深入系统学习。
仿真调试:相关工具如matlab或自己编程,将自己的算法、模型进行实现,是对理论知识的反馈,可以看自己的设计是否合理,对理论知识有更直观的了解。
实物试验:涉及软硬件的部分,体会理论实际差距,进一步完善理论。关于这部分的掌握程度还是要看自己的目标是什么,围绕重心进行。如硬件部分,可以购买一些模块,以最少的经历实现目标。
另外,光从整体到局部是不够的,有时不理解复杂系统的一些组成部分,就没法从整体上去把握。所以在遇到瓶颈时,可以对其展开学习。整体与局部并不矛盾,是可以一起进行的。
想学习一门专业,不该先入为主地受 XXX 该怎么样的观念制约,应该充分利用身边的资源工具进行学习。有项目就针对项目,没项目可以如吕朝阳老师所说购买机器人平台,再者可以通过仿真对理论进行验证。思考、总结和交流很重要。《机器人学导论》,斯坦福的教材,80年代开始的,
有很挫的翻译版本。
我们团队的工程师人手一本。
看这个就行了,没必要想太多。
英文名字叫做《Introduction To Robotics, Mechanics and Control》multibody system dynamics(用来Modellling)一般归在力学下。
2.control theory/cybernetics,基本是applied maths的范畴,线性方面基础需要,但是由于Robot模型基本都是nonlinear的,所以用的也不多,线性控制传统上切入是泛函和线代。非线性算法是重点,现代的描述多用微分几何。另外可能会牵涉到例如优化,算子,拓扑等等这种领域,这一块基本就是数学。
3.辅助读一些robotics专门的书(不用太多,主要是了解一些术语和意义,比如forwards/backwards kinematics, DH parameter这种,前两块是主要)。另外如有兴趣的,可以看一些SO3 group的书。
4.扩展类的,比如读一些FEM/BEM,MOR等等。
autonomous的话(比如最近比较热的cv,cl等等)主要属于CS范畴,和传统的cybernetics不是一个东西。
主要需要掌握的几个思想:
1. 反馈
2. 稳定性
3. 动态性能
4. 状态及其估计
对于机器人来说,从控制的层次来区分,可以分为基于电机角速度层次的控制 (velocity level control),以及在加速度层次的控制 (acceleration control)。目前得工业机器人,大部分都提供角速度方向的控制,提供角速度和位置的反馈,控制起来也比较方便,但是基于角速度的控制和力矩控制相比,控制信号有时候不连续,会导致控制的结果发生抖动。基于力矩控制,也就是在速度和位置反馈的基础上加入了电流反馈,控制效果更加精准并具有连续性。但是基于力矩控制时,我们需要对机器人的模型(基于拉格朗日和牛顿模型)进行精准建模。当前,除非厂家明确提供了机器人的各种参数 (M, C, G模型),一般用户很难操作。当然,基于机器人模型的特性,比如LIP(linear in parameter),利用自适神经网络以及模糊控制方法,目前也有一些自适应机器人控制的算法,但是这些算法的稳定性很值得商榷,毕竟机器人控制除了控制精度和平稳性之外,首要目标是安全,自适应的过程如果出现参数的过大超调,很容易对人或者机器人造成伤害。考虑到机器人模型的不确定性,则有H2和Hinfinity的鲁棒控制。总之,反正是控制论里面有的,理论上都可以用在机器人上面,但是到底好不好使,和PID相比有啥优势,只能呵呵了。
机器人控制如果从是否与环境有直接接触来进行划分,分为无接触的控制以及阻抗控制(Impedance Control)和力和位置混合控制(hybrid force and position控制)。阻抗控制的核心思想,用通俗的话来说就是让机器人模拟一个质量、弹簧、振子系统,实现柔顺(compliance)。hybrid force and position 控制则是通过将力和位置控制进行decouple (解耦)分别实现控制。按照我的理解,阻抗控制和混合控制可以归为机器人的外环控制,内环则是上面提到的速度层次(velocity level control),以及加速度层次的控制 (acceleration control)。内环响应实现快速跟踪,外环则是优化内在和外在的控制指标。
另外,当前也有基于机器学习的控制,比如基于增强学习(reinforcement learning)、自适应最优控制(optimal control)、extreme seeking control来优化PID参数等等。这些控制同样也是基于外环。
目前比较牛逼的一个机器人控制,是Berkeley Peter Abbeel他们做的将deep learning和optimal control 结合来做机器人高维数据输入的控制(比如输入时图像,输出是控制信号)。
机器学习对于第一点,perception,的作用不可谓不深。无论是监督,非监督的方法对机器人视觉,语言,情感都有不可磨灭的贡献。举几个例子,1. 在视觉识别和分类上面,基本都是机器学习的一个模型(卷积神经网络CNN)独占天下。大家可以看看这个数据库The KITTI Vision Benchmark Suite,基本在每个识别竞赛下都是CNN的改变版本第一名。2. 在情感计算方面,机器学习提供了在数据量大的情况下,识别当前状态下的情感的可能。Stefan Wermter用Recurrent Neuron Network(RNN)的模型分析twitter上每个状态的情感从而让机器人针对不同的情况做出不同的反应。机器学习在perception方面作出的贡献其实是对控制非常有用的,和Sensor Fusion结合在一起,他其实提供了机器人一个更真实的反馈。 只不过这个方面在传统的控制算法当中不受重视,我也就不在赘述。
第二点就是传统意义上的的控制算法了。由于在计算机科学历史上,控制算法并不是主要的研究方向,所以学习算法在这个方向上的发展就有些慢。(传统上计算机科学的主要研究方向是图像和NLP)。而且以前的控制算法不需要多少输入,和动辄 1086 x 1086 x 3 x n 输入的图像研究不能比。所以人们倾向于找简单的方法(比如各种判定依据)。这一点上和图像的早期算法是相似的,都是人工的找判定依据(比如某种物品的判定依据)。计算机图像学之所以发生改变,是因为人们发现判定依据太过复杂,而计算资源又有发展,所还不如用学习算法学习这些特征。我觉得控制论也在往这个方向发展。现在很多控制算法开始大量考虑优化问题,我觉得就是趋势。优化问题普遍需要数据,很快控制算法就会和学习算法合流(基于机器学习已经合并了统计学习,以后机器学习也可以合并控制算法)。
那么从机器学习本身发展出来的控制算法有没有呢?答案是有的,比如说总有几个神人,比题主和答主早个几十年开始考虑这个问题. 哲学上有名的人是Stefan Schaal,他的文章Is Imitation Learning the Route to
Humanoid Robots?是对这个方向最直接的思考。虽然中国对这方面的了解还比较少,但是这篇文章已经有近1000的引用了,说明各国科学家还是很看好这个方向的。这之后很多人有过尝试,但是由于基本是零起步,所以并不是很成功。然后,然后一个叫增强学习方向立功了,这个方向也许很多人都不了解。他是基于强调如何基于环境而行动,以取得最大化的预期利益来学习。也就是说这个机器学习方向的数学模型允许试错存在,也就是你可以尝试,并在错误中学习。具体的数学模型可以参见Sutton的Book。
由于数学比较复杂,在比较的少的时间不好解释。我就简单的带一下他的发展史,在发现增强学习中的马克沃夫决策过程(MDP)可以解决控制问题之后,人们又发现,连续的控制过程离散化之后数据会变得非常大。于是就开始直接优化在决策函数的超参数(叫做Policy Gradient 策略梯度方法),发现学习算法终于可以和传统控制有的一比了。
不过学习算法和传统算法还有些缺陷,比如题主刚刚说的精确问题,普通学习算法精确度就和普通控制算法比就有些问题(毕竟人类帮这些控制算法总结了物理定律),神经网络就更差了。精确性是神经网络一个非常严重的问题,控制问题对模糊的容忍度比识别问题低的多。因为一次不好的控制就会导致的机器人损坏或者报废。就算在机器人学习算法的大牛里面对神经网络也是慎之又慎。大家一般都是倾向于用容易算出bound的基于马克沃夫决策过程的增强学习算法和容易求出方差的高斯过程回归。一个有趣的事实是,虽然大家都担心神经网络,但是一直都有尝试,因为它好处也太多了。比如和在部分领域最好的perception算法结合,比如训练过程简单,比如scalability非常好。解决对神经网络不信任这个问题,我觉得人们需要发展新的数学工具去解释比如CNN,RNN的复杂神经网络。
我认为随着计算能力的增强,控制算法转向学习算法是不可避免的,因为慢慢所有的反馈都由大量的数据组合而成,而没人想一个一个分析。现在人们在研究结构性重组,高斯过程回归,深度学习对算法的改进。而这是我们的时代。
神经网络控制可以分开两部分来理解,人工神经网络和自动控制。随着第一台蒸汽机的发明,控制系统从线性时不变发展到现在的非线性时变,建模对象越来越复杂,自动控制现在基本可以实现,重要的是人工神经网络。
简单点说,人工神经网络,凭借现在的技术水平实现不了,现在做的神经网络只是建模之后的模拟,最根本原因,是还没有一台神经网络计算机来建模,只能用冯诺依曼式的计算机来模拟,但是冯诺计算机很多特性跟神经网络是本质区别的,举两点例子:神经网络是并行处理数据,但是冯计算机是01010的串行处理数据;第二,神经网络的存储在每个单个神经元,每个神经元即是处理器又是存储器,但冯机是分开的。几个特性的不同,决定了处理、学习、控制方式的不同,从本质上觉决定了现在只能对人工神经网络进行模拟,而不是更逼真的去建模,于是神经网络的一些特性也会大打折扣。
而且,神经网络计算机不知何时才可实现,所以有点前景遥遥无期的感觉,没有实物,也会感觉有点虚。除非有非常大的兴趣爱好,否则很难把研究放到这个有点虚无缥缈的对象上去。
但是我认为神经网络的潜力是巨大的,要做到真正的智能控制,只能靠神经网络控制。现在从神经网络研究得到的一些模拟模型和一些理论虽然不多,但是已经对自动控制起到了很大的作用,很多也在工业中有了应用,此处不赘述。
更欣慰的是,也有着一大批前辈学者们正孜孜不倦的继续为实现智能控制而不懈研究着,相信终有一日,其会绽放光辉。
我觉得,短期前景不大,最多只是单个理论上的突破与应用。远期前景非常大,如果能成就是第四次或者第五次工业革命,机器人,智能意识甚至终结者中的天网,安德的代言中的智能都可能产生,所以我感觉这是个很重要又慎重的问题,但也要是这个世纪末或者以后得事了吧,哈哈。总而言之,现在看智能控制,很玄,就跟周易八卦一样,又神秘又虚,但是确实含金量很大。
最近围棋事件很火,也有朋友在评论里说了寒武芯片,个人感觉这些都是深度学习(训练学习)方面的进步,神经网络控制其余同样重要方面的进步还有待考证。个人愚见,目前离实现真正的神经网络控制(智能控制)还有一段距离。当然,这是我的错觉最好。现代对机构学的研究已经非常深入了,尤其是仿生学机器人的机构,在试验条件下,基本可以接近要模仿的生物特征。但是,我们还不能研究出有思想,有智慧的机器人,我觉得其中一条主要原因,就是算法。
最近,卷积神经网络非常热,谷歌、百度等公司都在做,并且也非常热。上个月,听过一个报告,经过深度学习的卷积神经网络对图片的识别率已经超过人了。
但是有两个问题。一是这种超越是在某一个方面,例如可以识别人脸,但是识别不了数字。二是需要大量的数据进行学习。为了达到较高的识别率,可能需要成千上万的学习样本。
我想,解决了这些问题,我们就有可能做出真正的智能,肯定能引发一次新的革命神经网络的应用前景主要是它的自学习和自训练,就是说当外部的pattern变化的时候网络的架构和训练法则不变,这样就更接近于人的认知过程。我觉得机器学习特别是神经网络模型的建立就是为了解决一些传统算法解决不了的事情。比如你用卷积神经网络(CNN)去对图像特区特征,进行分类,用带记忆功能的周期神经网络(RNN)去做NLP,语义分析,情感分析,上下文分析等等。你可以用LSM去提取脑电信号EEG,肌电信号EMG,然后分类给出一份健康报告等等,至于DBM,RBM这些深度学习典型的算法就更有可以利用的地方。然后可以把上面的传统算法转换成SNN(spiking neural network),然后提出新的学习法则,训练法则,去探究神经元之间的连接,权重的配置等一系列问题。从CS的角度来看,个人还是坚持人工+生物混合智能。
我们如果model一个系统,如果它是非线性,有多个未知变量,已经是极其困难的了。从纯数学角度出发,我们虽然可以进行解析和理解,但其复杂程度呈几何增长。
这是从数学和物理角度进行理解和分析,如果我们走形而上学的路,不求甚解,而只在已知条件下达到控制要求其复杂程度就大大减少,也大多不会是一个几何增长的复杂问题了。
所以我觉得特殊环节采用控制论,而整体则使用机器学习的方式进行控制,将会大大减小问题的复杂程度。
由于如今人工智能和机器学习尚未发展到真正的智能,离理解问题的本质尚有非常远的路要走,我们不妨不要把事情看得那么清楚,只要知道多数情况下的多数解即够用。
我个人认为,机器学习做的再好,有时候也不如将问题本质看清楚来的透彻,精确和好用,所以控制论的研究仍然有不可复制的作用。但机器学习可以让我们在复杂情况下以较小代价获得优解的作用,更对实际应用具有巨大意义。
方法没有高低贵贱,但又好用不好用的区别,用铅笔多练练也能画个圆解几何题,虽然圆规很好,但若是老是造不出来就先用铅笔吧,把题解决是主要的。
但我觉得控制论这样走下去博士没读完都是很难有巨大贡献的,所以没有强烈兴趣的人我觉得不要走这个科研方向。向在控制论科研一线奋斗,为世界贡献人生理想的的大神们致敬!核函数提供了数据点间两两的相似信息(并不严格)。如果把欧式空间上两点之间的内积作为他们是否相似的评判标准的话,核函数就是其直接拓展。注意,这里所谓的相似并不是严格意义下的,只是一种很粗糙的解读。
而很多机器学习的算法,比如(dual)svm,其实只用到了数据间的相似信息(linear SVM只用到内积),所以这就提供了一种系统性的扩展方式:把内积换成其他的核函数!
当然了,想从理论的角度很好的理解核函数需要将其理解成一个两步的方法,1)将原数据映射到另一个(低维高维无穷维)空间;2)在那个空间上做内积。这对核函数的选择造成了限制,但是实际中,下蛋的母鸡才是好母鸡,你可以任意选择效果好的核函数!
核函数和映射没有关系。核函数只是用来计算映射到高维空间之后的内积的一种简便方法。
一般英文文献对Kernel有两种提法,一是Kernel Function,二是Kernel Trick。从Trick一词中就可以看出,这只是一种运算技巧而已,不涉及什么高深莫测的东西。
具体巧在哪里呢?我们如果想进行原本就线性不可分的数据集进行分割,那么选项一是容忍错误分类,即引入Soft Margin;选项二是我们可以对Input Space做Feature Expansion,把数据集映射到高维中去,形成了Feature Space。我们几乎可以认为(引用Caltech的课堂用语“We are safe but not certain”)原本在低维中线性不可分的数据集在足够高的维度中存在线性可分的超平面。
围绕选项二,那么我们所做的就是要在Feature Space套用原本在线性可分情况下的Input Space中使用过的优化方法,来找到那个Maximaizing Margin的超平面。原理机制一模一样,是二次规划,唯一不同是代入数据的不同,我们需要代入而不是。这时(在假设我们已知了如何选取mapping之后)才有了核函数的概念。
具体Trick的意义,就是简化计算二次规划中间的一步内积计算。也即中间步骤有一步必须求得,而我们可以定义核函数,使得我们在不需要显式计算每一个、甚至不需要知道长什么样的情况下,直接求出的值来。
也就是说,核函数、内积、相似度这三个词是等价的。因为inner product其实就是一种similarity的度量。核函数和映射是无关的。
但为什么这么多的认知中核函数是一种映射呢。一来这两件事一般先后进行,所以常常被混为一谈。二来就像前面所述,核函数让人们不需要知道长什么样,不需要知道怎么选取映射,就能够算出内积。因此这常常被认作是一种implicit mapping。这是由Mercer Theorem保证的,即只要核函数满足一定条件,那么映射空间一定存在。
从前有一个世界X,X里面有很多很多的数据点,这些数据点属于两个帮派,正类和负类。正类点居住在y轴右边,负类点居住在y轴左边,他们以y轴为分界线,泾渭分明,互不侵犯。
突然有一天,不知道是X纪年的几年几月几日,负类开始大举进攻正类领地的第四象限。正类很快失去了很多领地,又被迫签订了和平条约,从此X世界的居民们发现了一个问题,他们不能再用y轴作为国界了!
还好,在负类点中有一位聪明的数学家,他发现两国的地盘可以用一条直线分开,把平面上每一点坐标放进直线方程ax+by+c里,如果大于零,这就是正类的领地,小于零是负类的领地,中间这条线后来被命名为分类面,于是X世界里第一个线性分类器诞生了。有了数学的帮助,X世界太平了很多年。
然而好景不长,贪得无厌的负类君主再一次发起了远征,这一次他们占领了第一象限之外的大量领土,吞并了整个第四象限。然而由于进军过于激进,导致战线过长,负类远征的脚步也不得不停滞于此,开始休养生息。但是国界怎么办呢?
聪明的数学家苦思冥想,发现这么一个事实:之前两国的分类面是直线时,分类面可以用分类面两侧的两个点(两点中垂线是分类面)表示。如果叫这两个点(x+,y+),(x-,y-)的话,那么正类领地的所有点和(x+,y+)的内积都大于它们和(x-,y-)的内积;反之对负类领地也成立。数学家还发现,对于任意一群世界X中的点,(x+,y+)和(x-,y-)都能表示成它们的线性组合,对于一个新来的点,它和这两个点的内积就可以表示成所有点和所有其它点的内积的加权和。所以给定一些两个国家的点之后,我们可以计算两两点之间的内积,并把分类面表达成这些内积的线性加权和。后来人们把这些点的内积放在了一个矩阵里,并叫它核矩阵,核矩阵定义了世界的分类。在这个核矩阵里,矩阵里每个点的值是两个X世界点的线性内积,它定义的分类面在原来的X世界里是一条直线,所以这个核矩阵后来被成为线性核矩阵,而以两个点生成矩阵中每个点的映射被成为线性核函数。
这个发现可不得了。等数学家发现这一点之后,负类的领地已经进一步扩张了,现在正类的领地已经只剩下第一象限里一个抛物线的内部了。但有了新的核理论,这个国界问题难不倒数学家,他定义了一个映射,把X世界的点映射到
的四维世界,把这个世界的内积定义为新的核函数,在两个类的领地分别取了几个点作为基础之后,一个抛物线的分类面就被定义了出来。这是X世界里第一个被成功推导并得到公认的非线性分类面,而这里用到的核函数是上述映射的内积,也就是点坐标的多项式表示,所以这个核函数(矩阵)又被称为多项式核函数(矩阵)。
历史总是一遍遍重演,但这一次正类将历史推动到了前所未有的境地。X纪年若干年后的某一天,负类境内的第三象限突然因为正类策反发生哗变,同时正类也大举进攻第一象限的负类领地,希望收复失地。经过若干年的战争,最后两类将领地用第一、三象限的两条双曲线隔开,负类保有包括原点在内的第二、四象限和坐标轴附近的区域;正类则占领了第一、三象限的大部分。
现在的问题是,这么一来国界要怎么划分呢?
这回一个来自正类世界的懒惰的数学家想到了一个基于核方法的解决方案:我们不如跳过映射和内积的步骤,直接定义一个核函数吧!这种异想天开的方法被负类数学界嗤之以鼻,但在正类却大获成功。很快正类的数学家们发现两点之间距离的平方的指数的倒数(其实没这么复杂,就是正比于两点距离所定义的高斯概率)是一个不错的核函数,这样在分类面附近两类中分别选一些点,就可以定义任意的非线性分类面了。为了纪念这个伟大的正类数学家,后世用这位数学家生平最喜欢的三种食物:拉面、牛肉和和薯条命名了这个核函数,称之为RBF核(误)。
这个发现为推动后来两类数学界的统一做出了巨大的贡献,而发明RBF核的数学家也因为一句“数学家是有分类的,但数学是无分类的”的名言获得了菲尔茨和平奖(误)。
至于内积?后来有负类的数学家研究了一下RBF核是否对应一个向量映射,结果是如果想把RBF核表达成一个向量内积,我们需要一个映射将向量映射到一个无穷维的线性空间去。发现了这一点的数学家又发展了Mercer定理和重建核希尔伯特空间(Reproducing Kernel Hilbert Space)理论,但这就是另外一个故事了。kernel 和 svm 没有什么依附关系, 两个都是独立的玩意. 只是在svm的公式推导中, 以及最后对新来的点做预测的时候, 用到了两个向量的内积, 那么这不就是天然的可以使用 kernel 了吗? kernel的好处就是可以使在原空间线性不可分的点集合, 投射到核空间之后就有很大的可能变得线性可分.将原来的样本从原始空间映射到一个高维的特征空间,使得样本在这个特征空间内线性可分。如果原始空间是有限维的。那么一定存在一个高维特征空间使样本可分。
令Φ(x)表示将x映射后的特征向量,可是,这样每次都会涉及到,这是样本xi和xj映射到特征空间之后的内积。由于特征空间维数很高,直接这么算特别麻烦。为了避开这个麻烦,假设函数。所以xi和xj在特征空间的内积等于他们在原始样本空间通过函数k直接计算可得。所以计算就变为非常的简单。
记住,特征映射就只是特征映射,他不是核技巧,核技巧只是使得计算变更加简单的一种方法而已。
不过,如果已知Φ(x)的具体形式了,那么核函数k(.,.)也可以得到,但是特征空间在现实生活中我们并不知道而且它的好坏对支持向量机的性能至关重要。所以,我们并不知道什么样的核函数是合适的,而核函数仅仅是隐式的定义这个特征空间。“核函数的选择”成为支持向量机的最大变数。若核函数选的不合适,效果肯定不好。
svm与核函数的关系,如同logistic回归于logit函数的关系。
如同线性回归的最小二乘法确定一条直线,SVM的目的只是找一个最优超平面,这个超平面将两组样本分开的同时有最大的margin,于是就成了求极值的问题。确定的margin边界上的点与各自一遍任何样本的积都比另一边的大,于是只要找到两个边界上的点就可以给以后出现的新样本分类提供依据。
对那些不能用一个超平面分开的两组样本,可以用曲线或曲面分开,但曲线或曲面的函数很难获得,于是人们就通过函数将样本映射到高维空间直到能找到一个超平面将其分开,但是这个映射函数如何确定呢?高维空间如何确定呢?这难度不亚于构建将两类样本分开的非线性函数。
幸好,人们发现判别分类时只需要比较高维空间超平面边缘的点与新来样本的乘积差别即可,同时核函数可以通过低维空间样本向量的内积计算代替映射后高维空间的样本向量内积的计算,于是人们恍然大悟,我们其实不需要知道映射函数和映射后的空间情况,只需要在本空间内用核函数的计算结果代替就可以了。