作者:智亮,鲁朗软件联合创始人
责编:胡永波
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》
在计算机行业,关于从业人员的素质,一直都有一个朴素的认识——科班出身好过非科班,学历高的好过学历低的。大部分时候,这个看法是对的。在学校学习,有老师指点,有同学讨论,有考试压迫,有项目练手。即便不大用心的学生,几年耳濡目染下来,毕业后作为半个专业人士,还是没什么问题的。
不过,量子物理告诉我们,这个世界的本质要看概率。所以,科班出身的同学,在技术上好过非科班出身的同学,这是大概率事件;相反,非机器学习专业,甚至非计算机专业的同学,在这个领域做的比本专业同学更好,则就是小概率事件了。但小概率事件并非“不可能事件”,国内很多做机器学习公司的CTO,都不是机器学习专业的科班出身,却能够抓住这里的“小概率”,让自己华丽地转身并实现弯道超车。
他们是怎么做到的?
如果在上学的时候,我们没能嗅到机器学习领域的机会,而是选择其他领域来学习和工作……如今却打算半路出家、改行机器学习,应该怎么做,才能做到跟这些人一样好?或者,至少是足够好?
我自己痛苦转型的经历,说出来可以供大家参考一下。
我也是非科班出身,但因为工作,一直需要接触计算机视觉的一些传统算法。后来,看到ImageNet竞赛的结果,我意识到了深度学习在视觉领域的巨大优势,遂决定开始转型深度学习和神经网络,走上了这条学习的不归路(笑)。
想要转型,跟上学的时候不同,因为手头正在做的工作意味着,自己需要从没有时间的情况下挤出时间,需要把别人睡觉、打游戏的时间用来学习,而所学的又是一种颇为艰深晦涩的学问。
转型,其实很容易,需要做到的只有一件事:学习。
转型,其实很困难,因为必须做到一件事:坚持学习。
最难的不是下定决心,而是贯彻到底。所以,在开始之前,不妨先问问自己这样几个问题:
“我真的已经想清楚,要踏足这个行业吗?”
“我能够付出比其他人更多的辛苦汗水,在这条路上坚定地走下去吗?”
“在遭受了痛苦甚至打击之后,我对机器学习的热爱,仍然能够维持我继续前进吗?”
根据我掌握的数据,100个程序员里大概有30个考虑过转型,而真正付诸行动的不过10个。一个月以后仍然在坚持的仅有5个,最终能完成第一个阶段学习的,最多两三个而已。
真的这么困难吗?是的。特别是你要白天上班,晚上才能学习,独学而无友,有问题又只能自己查。而要系统地入门,又不是咬牙一天两天就能学出来,恐怕得坚持几个月才能get到点。
我个人的经历是这样:一开始接触时,每周一、三、五固定3天时间,每晚花两个小时去学习、看视频、翻书,周六周日则用来完成课程附带的编程作业,大概也是每天两小时左右。在这种强度下坚持了三个月,我才算是完成了入门的第一步。
也许有的人效率更高一些,也许有的人步子更慢一些,但快和慢不是关键,即使学习最慢的人,也要比一开始放弃学习的人走得更远。
所以,其实真正重要的,不是“我该学什么”,或者“我该怎么学”;而是“我是不是真的有足够的决心”,以及“我是不是能坚持到底”。
定好决心后,我们就能看看:在学机器学习的时候,我们到底在学什么?
几乎所有人都知道人工智能这个概念;有一部分人知道“机器学习”这个概念;其中一小部分人能清楚描述“深度学习”、“机器学习”和“神经网络”的关系; 很少一部分人能够正确说明“卷积”、“池化”、“CTC”这些名词的正确含义与计算/实现的方法;非常少的人能清楚地理解损失函数和反向传播的数学表达;极少极少的人能够阐述网络的一个修改(比如把卷积核改小)对precision/recall会产生什么影响;几乎没有人能描述上述影响到底是什么原理。
这就是目前“程序员”这个群体,对于机器学习的了解程度。
我个人的经验,适用于“很少一部分人”之外的那“很大一部分人”,也就是说,他们最多知道深度学习是什么意思,神经网络又是什么概念,却并未真正系统地学习接触过这个领域。
在这之前,你所要用到的数学知识,只有以下这三点:
当然,作为开发者,想要去实现一个模型,绕不开的问题便是:
应该选择什么语言?应该选择什么框架?
对于开发人员而言,语言的选择其实不是问题。但作为入门,最为理所当然的建议则是Python,原因也非常简单:Python最好学。
对于机器学习的学习,使用Python就意味着你不必分心去学习那些复杂的数据类型约束以及转化、指针、内存管理或垃圾收集之类的“高级”(一般同时也代表着复杂)的特性,将精力集中在自己的目标上。当然,一些Python特有的方法(如lambda、yield或reduce)以及工具(如NumPy、pandas),还是需要多多使用,尽快熟练。
而框架方面,从使用者的维度去划分,当前数量非常之多的机器学习框架,则可大体上分为两大阵营。
学术友好型: Theano、Torch与Caffe
Caffe已算是最简单的了,但仍要经历漫长而痛苦的摸索历程。
工业友好型: Tensorflow、MXNet与Caffe
对于大多数有志于投身于机器学习开发(而非研究)的同学们来说,我推荐首选Tensorflow作为你的第一个开发框架。除了上述的优点之外,最主要的因素是它人气高。遇到任何问题,你都可以找到一群志同道合的伙伴们去咨询,或是一起研究。对于初学者而言,其重要程度不言而喻。
接下来,我们就需要一台机器来把框架搭建起来,以编写和运行我们的helloAI。然而,我在很多地方都看到小伙伴们在问:
我需要什么样的配置能学机器学习?
我需要买块GTX1080/TITAN/Tesla吗?
我应该装几块显卡?一块?两块?还是四块?
而答案也往往倾向于:
“必须得有GPU啊,至少1080,没有四路Titan你都不好意思跟人打招呼!”
其实,并不完全是这样。
如果仅仅是入门和学习,CPU或GPU完全不影响你对代码和框架的学习。运行MNIST或CIFAR之类的玩具数据集,它们的差距并不大。以我的机器为例,运行自带的CIFAR demo,i7 CPU和GTX 1080 Ti的速度分别是770 pics/s和2200 pics/s。GPU大概有不到三倍的性能优势。所以,差距其实也没多大。
打好基础之后,跟踪论文并复现、学习和思考,这样的任务将成为你现阶段的一项日常作业,如果你已经进入或是决定进入这个行业的话。因为稍有懈怠,便要面临着被时代抛弃、跟不上节奏的情况。所以,到这一步,对于有些人来说是一个结束,而对另一些人来说,则才刚刚是开始。
这个时候,我们可以回过头来重新问问自己前面那几个问题:
“我真的已经想清楚,要踏足这个行业吗?”
“我能够付出比其他人更多的辛苦汗水,在这条路上坚定地走下去吗?”
“在遭受了痛苦甚至打击之后,我对机器学习的热爱,仍然能够维持我继续前进吗?”
这条路,我在走,很多人在走,那么,你来吗?
最后,再说一点题外话。
看到这里的各位,一定很希望自己的深度学习路上,能有这样一位具备成功转型经验的先行者来帮助自己趟坑。
智亮老师的想法也是一样的,为了让自身的实践经验能够转化成对大家真正有帮助的东西,他特地在CSDN学院开设了《人工智能工程师》实训班课程。
这是一项为期个月的趟坑实践,目的是通过全程的实战案例学习,能直接让你从AI小白晋级为具备一年实践经验的人工智能工程师。
仅需30秒,测试自己是否适合学习AI + 智亮老师的AI实训营地址:
https://edu.csdn.net/topic/ai20?utm_source=blog08
学成之日,还会有来自AI产业界的专业讲师来做就业指导,就业推荐。
欢迎踏上这趟人工智能工程师的直通车,成功转型的经验正在向你招手。
:https://edu.csdn.net/topic/ai20?utm_source=blog08