这是一个转型AI的励志故事,从非科班到拿下AI一等奖

这是一个转型AI的励志故事,从非科班到拿下AI一等奖

这是一个真实的故事,希望有志于从事AI的你,有恒心,有毅力!坚持到底,也以此来自勉!

一、Know youself

在计算机行业,关于从业人员的素质,一直都有一个朴素的认识——科班出身好过非科班,学历高的好过学历低的。大部分时候,这个看法是对的。在学校学习,有老师指点,有同学讨论,有考试压迫,有项目练手。即便不大用心的学生,几年耳濡目染下来,毕业后作为半个专业人士,还是没什么问题的。

​ 不过,量子物理告诉我们,这个世界的本质要看概率。所以,科班出身的同学,在技术上好过非科班出身的同学,这是大概率事件;相反,非机器学习专业,甚至非计算机专业的同学,在这个领域做的比本专业同学更好,则就是小概率事件了。但小概率事件并非“不可能事件”,国内很多做机器学习公司的CTO,都不是机器学习专业的科班出身,却能够抓住这里的“小概率”,让自己华丽地转身并实现弯道超车。

他们是怎么做到的?

​ 如果在上学的时候,我们没能嗅到机器学习领域的机会,而是选择其他领域来学习和工作……如今却打算半路出家、改行机器学习,应该怎么做,才能做到跟这些人一样好?或者,至少是足够好?

我自己痛苦转型的经历,说出来可以供大家参考一下。

​ 我也是非科班出身,但因为工作,一直需要接触计算机视觉的一些传统算法。后来,看到ImageNet竞赛的结果,我意识到了深度学习在视觉领域的巨大优势,遂决定开始转型深度学习和神经网络,走上了这条学习的不归路(笑)。

​ 想要转型,跟上学的时候不同,因为手头正在做的工作意味着,自己需要从没有时间的情况下挤出时间,需要把别人睡觉、打游戏的时间用来学习,而所学的又是一种颇为艰深晦涩的学问。

转型,其实很容易,需要做到的只有一件事:学习。

转型,其实很困难,因为必须做到一件事:坚持学习。

​ 最难的不是下定决心,而是贯彻到底。所以,在开始之前,不妨先问问自己这样几个问题:

“我真的已经想清楚,要踏足这个行业吗?” 
“我能够付出比其他人更多的辛苦汗水,在这条路上坚定地走下去吗?” 
“在遭受了痛苦甚至打击之后,我对机器学习的热爱,仍然能够维持我继续前进吗?''
根据我掌握的数据,100个程序员里大概有30个考虑过转型,而真正付诸行动的不过10个。一个月以后仍然在坚持的仅有5个,最终能完成第一个阶段学习的,最多两三个而已。真的这么困难吗?是的。特别是你要白天上班,晚上才能学习,独学而无友,有问题又只能自己查。而要系统地入门,又不是咬牙一天两天就能学出来,恐怕得坚持几个月才能get到点。

我个人的经历是这样:一开始接触时,每周一、三、五固定3天时间,每晚花两个小时去学习、看视频、翻书,周六周日则用来完成课程附带的编程作业,大概也是每天两小时左右。在这种强度下坚持了三个月,我才算是完成了入门的第一步。

​ 也许有的人效率更高一些,也许有的人步子更慢一些,但快和慢不是关键,即使学习最慢的人,也要比一开始放弃学习的人走得更远。

​ 所以,其实真正重要的,不是“我该学什么”,或者“我该怎么学”;而是“我是不是真的有足够的决心”,以及“我是不是能坚持到底”。

二、上手的课程

定好决心后,我们就能看看:在学机器学习的时候,我们到底在学什么?

几乎所有人都知道人工智能这个概念;有一部分人知道“机器学习”这个概念;其中一小部分人能清楚描述“深度学习”、“机器学习”和“神经网络”的关系; 很少一部分人能够正确说明“卷积”、“池化”、“CTC”这些名词的正确含义与计算/实现的方法;非常少的人能清楚地理解损失函数和反向传播的数学表达;极少极少的人能够阐述网络的一个修改(比如把卷积核改小)对precision/recall会产生什么影响;几乎没有人能描述上述影响到底是什么原理。

这就是目前“程序员”这个群体,对于机器学习的了解程度。

我个人的经验,适用于“很少一部分人”之外的那“很大一部分人”,也就是说,他们最多知道深度学习是什么意思,神经网络又是什么概念,却并未真正系统地学习接触过这个领域。

在这之前,你所要用到的数学知识,只有以下这三点:

  1. 懂得矩阵运算的基本计算方法,能够手动计算[3×4]×[4×3]的矩阵,并明白为什么会得到一个[3×3]的矩阵。
  2. 懂得导数的基本含义,明白为什么可以利用导数来计算梯度,并实现迭代优化。
  3. 能够计算基本的先验及后验概率。
  4. ….

三、编程语言与深度学习框架的选择

当然,作为开发者,想要去实现一个模型,绕不开的问题便是:

应该选择什么语言?应该选择什么框架?

对于开发人员而言,语言的选择其实不是问题。但作为入门,最为理所当然的建议则是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大概有不到三倍的性能优势。所以,差距其实也没多大。

打好基础之后,跟踪论文并复现、学习和思考,这样的任务将成为你现阶段的一项日常作业,如果你已经进入或是决定进入这个行业的话。因为稍有懈怠,便要面临着被时代抛弃、跟不上节奏的情况。所以,到这一步,对于有些人来说是一个结束,而对另一些人来说,则才刚刚是开始。

这个时候,我们可以回过头来重新问问自己前面那几个问题:

“我真的已经想清楚,要踏足这个行业吗?” 
“我能够付出比其他人更多的辛苦汗水,在这条路上坚定地走下去吗?” 
“在遭受了痛苦甚至打击之后,我对机器学习的热爱,仍然能够维持我继续前进吗?”

这条路,我在走,很多人在走,那么,你来吗?

猜你喜欢

转载自blog.csdn.net/ZZQHELLO2018/article/details/82707501