半日闲心 2018-07-04
人工智能已经成为一个非常火的方向。作为一名普通的程序员,该如何转向人工智能方向。以程序员为例,看看普通程序员如何开启人工智能之路。
AI,也就是人工智能,工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。目前能够用来研究人工智能的主要物质手段以及能够实现人工智能技术的机器就是计算机,人工智能的发展历史是和计算机科学与技术的发展史联系在一起的。除了计算机科学以外, 人工智能还涉及信息论、控制论、自动化、仿生学、生物学、心理学、数理逻辑、语言学、医学和哲学等多门学科。
既然要学习,首先会想到的一个问题是:AI好入门吗?其实不好是很好入门的。以机器学习为例。在学习的过程中,你会面对大量复杂的公式,在实际项目中会面对数据的缺乏,以及艰辛的调参等等。如果仅仅是因为觉得这个方向未来会“火”的话,那么这些困难会很容易让人放弃。考虑到普通程序员的特点,而要学习如此困难的学科,是否就是没有门路的?答案是否定的。只要制定合适的学习方法即可。
首先,要思考一下三个问题:我要学的是什么?我要怎么学习?我怎样学习?
这三个问题其实就是:学习目标,学习计划和学习方针。学习目标就是你要学那个方向,这个目标很好确定。
学习方针可以总结为 “兴趣为先,践学结合”。简单的来说就是先培养兴趣,然后学习中把实践穿插进来,螺旋式提高。这种方式学习效果好,而且不容易让人放弃。有了学习方针以后,就可以制定学习计划,也就是学习路线。下面就是学习规划路线的介绍,以机器学习为例。
小编推荐的学习路线是这样的,如下图:
首先要了解这个领域,建立起全面的视野,培养起充足的兴趣,然后开始学习机器学习的基础,这里选择一门由浅入深的课程来学习,课程最好有足够的实验能够进行实战。打下基础后,对机器学习已经有了充足的了解,可以用机器学习来解决一个实际的问题。
无论学习什么,都需要过硬的基础知识,以及较强的编码能力,因此很能考察和锻炼水平。经过这个阶段以后,可以说是踏入AI领域的门了。“师傅领进门,修行在个人”。之后的路就要自己走了。
下面就是每个阶段的具体介绍:
在学习任何一门知识之前,首先都是了解这个知识是什么?它能做什么事?它的价值在什么地方?如果不理解这些的话,那么学习本身就是一个没有方向的舟,不知道驶向何处,也极易有沉船的风险。了解这些问题后,你才能培养出兴趣,兴趣是最好的引路人,学习的动力与持久力才能让你应付接下来的若干个阶段。
如果你离校非常久,或者觉得基础不牢,最好是先准备一下复习工作,“工欲善其事,必先利其器”。以下的准备工作不多,但足以应付后面阶段的学习。
数学:复习以下基本知识;
线性代数:矩阵乘法;
概率论:条件与后验概率。其他的一些知识可以在后面的学习的过程中按需再补;
英文:常备一个在线英文词典,例如爱词霸,能够不吃力的看一些英文的资料网页;
梯子:最好是可以随时随地的上Google,这是一个很重要的查询工具。倒不是说百度不能查不能看,而是大多数的情况下Google搜出来的资料比百度搜的几十页的资料还管用,尤其是在查英文关键字时。节省时间可是很重要的学习效率提升;
机器学习的第一门课程首推Andrew Ng的机器学习。这门课程有以下特点:难度适中,同时有足够的实战例子,非常适合第一次学习的人。
在学完基础课程之后,你对机器学习就有了初步了解。现在使用它是没有问题的,你可以把机器学习算法当作黑盒子,放进去数据,就会有结果。在实战中你更需要去关心如何获取数据,以及怎么调参等。如果有时间,自己动手做一个简单的实践项目是最好的。
深度学习:深度学习是目前最火热的研究方向。有以下特点:知识更新快,较为零碎,没有系统讲解的书。因此学习的资源也相对零散,下面是一些资源介绍:
UFLDL: 非常好的DL基础教程,也是Andrew Ng写的。有很详尽的推导,有翻译,且翻译质量很高;
Deep learning (paper):2015年Nature上的论文,由三位深度学习界的大牛所写,读完全篇论文,给人高屋建瓴,一览众山小的感觉,强烈推荐。如果只能读一篇论文了解深度学习,我推荐此篇。这篇论文有同名的中文翻译;
Neural networks and deep learning:这本书的作者非常擅长以浅显的语言表达深刻的道理,虽然没有翻译,但是阅读并不困难;
Recurrent Neural Networks: 结合一个实际案例告诉你RNN是什么,整篇教程学完以后,会让你对RNN如何产生作用的有很清晰的认识,而这个效果,甚至是读几篇相关论文所没有的;
深度学习未必就是未来的一定主流,至少一些大牛是这么认为的。传统的机器学习有如下特点,知识系统化,有相对经典的书。其中统计学习(代表SVM)与集成学习(代表adaboost)是在实践中使用非常多的技术。下面是相关资源:
机器学:如果是在以前,机器学习方面的经典教材首推PRML,但现在周老师的书出来以后,就不再是这样了。首先推荐读周老师的书。这本书有一个特点,那就是再难的道理也能用浅显精炼的语言表达出来。正如周老师的名言:“体现你水平的地方是把难的东西讲容易了,而不是把容易的东西讲难,想把一个东西讲难实在太简单“;
当知识储备较为充足时,学习可以再次转入实践阶段。这时候的实践仍然可以分两步走,学习经典的开源项目或者发表高质量的论文。开源项目的学习应该以尽量以优化为目的,单纯为读代码而学习效果往往不太好。好的开源项目都可以在Github 里搜索。这里以深度学习为例。深度学习的开源优秀库有很多,例如torch,theano等等,这里列举其中的两个:
DeepLearnToolbox:较早的一个深度学习库,用matlab语言撰写,较为适合从刚学习的课程转入学习。遗憾的是作者不再维护它了;
tensorflow:Google的开源库,时至今日,已经有40000多个star,非常惊人,支持移动设备;
首先你需要对这个领域进行充分的了解,培养兴趣。在学习的时候,保持着循序渐进的方法,不要猛进的学习过难资源;结合着学习与实践相辅的策略,不要只读只看,要实际动手才有成就感。学习某个资源时要有充分的目的,不是为了学开源项目而看代码,而是为了写开源项目而看;
如果一个学习资源对你太过难,并不能理解,这也不代表一定是你的问题,可能是学习资源的演讲或撰写人的问题。能把难的问题讲简单的人才是真正有水平的人。所以,一定要学习优质资源,而不是不分青红皂白的学习。最后,牢记以兴趣来学习。学习的时间很长,过程也很艰难,而只有兴趣才是让你持之以恒,攻克难关的最佳助力。
分享 IT 技术和行业经验,请关注-技术学派。