查看原文
其他

想入行 AI,别让那些技术培训坑了你...

2017-10-30 李烨 GitChat技术杂谈



本文来自作者 李烨 在 GitChat 上分享「想入行 AI,怎么选择有效的技术培训」,「阅读原文」查看交流实录

「文末高能」

编辑 | 奕迅

引子

IT 行业发展迅速,各种新名词此起彼伏。身处这样一个热点行业,学习是必须的。不打算成为终身学习者的程序员,失业就在明天。

可是,怎么学呢?

都已经毕业了,每天要上班,不能像以前读书的时候,整天只是学习,学什么都有老师教,坐在那儿听就可以了。

自己从头看书太辛苦了,网上的文章又太碎片化——是不是报一个培训班,交点钱听人讲更容易学会?

培训班有那么多,这个是证书,那个是优惠,再一个给提供工作机会,到底选哪个好呢?

今天我们就来说说这件事。

NOTE:我们此处说得培训班指需要较长时间(一般以月为计)的付费培训。线上线下都包括,但一定能够和培训教师直接交流,有答疑过程。

自学的困境

如今,网络资源那么发达,IT类技术都不难找到各式各样免费或费用很低的书籍、资料、课件、讲座、代码。从理论到实践都有讲解。

如果想要自学,是完全有条件的,那为什么还要去上培训班呢?原因大概有一下这些:

•    直接原因:精力分散,不够专注,书读不下去,代码看不下去。
•    深层原因:驱动力不足以让自己专注。
•    根本原因:没有足够渴望的目标,无法调动自身能量形成驱动力。

其实归根到底,学不下去是因为不知道学习是为什么,学了到底有什么用。漫无目的的学习注定是浪费时间。

有效学习三要点:目标明确,系统性强,足够深入。三者缺一不可。

明确学习目标

好在读本文的同学,已经共同拥有了一个优势:目标明确。

我们学习的目的是为了入行AI!

在明确目标的指引下,比较容易找到什么“有用”——虽然有点功利,但不得不承认,“有用”与否是大多数人产生驱动力的重要所在。

我们可以以“在AI领域找到技术岗位工作”为基准,进行学习。避免东一下,西一下的“乱学”。

什么样的目标才算明确

但是要注意,这个目标如果仅仅停留在:“我要做AI”,是不能称之为一个目标的。真正的目标必须具有可实施性,并最终体现为实施计划

想要入行AI,先搞清楚几件事:

  • 目前真正落地的AI领域都有哪些?

  • 每个领域有什么样的代表企业?

  • 这些企业中,都有什么样的技术岗位?

  • 每种岗位哦需要什么入门条件?

至少要能够定位到你的目标岗位,明确了这个/类岗位的技术要求,才有可能确定需要学习的内容有哪些,从而选择到正确的培训课程。

如何划定明确的目标

但是怎么能知道这些呢?笔者个人推荐如下调研步骤:

Step 1. 先确定一个领域(图像、语音、NLP等等)

可能你本来就有特别感兴趣的领域;或者你对某一种技术,比如人脸识别,特别兴趣,那么可以直接由此入手。

如果你本来对AI了解不多,只是想做当前市场上最热门的领域,那也比较好办。多爬一些招聘网站、职场社交媒体的招聘信息,做一下数据分析,看看哪些领域招的人最多,薪水最高。

Step 2. 了解本领域当前的科研状况

最简单的方法:找十篇本领域核心期刊或会议的论文,读一遍。

用Google找论文还是比较赞的,而且相关度排序综合了论文的成果贡献,作者的学术地位和新颖度。

如果方便用Google,直接输入领域相关keyword,取前3-5篇拿来读。读后再根据阅读中遇到的问题、产生的兴趣回溯寻找其引用文献,或者重新搜索。

真的能认真读进去10篇比较新的论文,哪怕是普通博士生发表的,也能让你对一个学术领域有最基本的理解了。

Step 3. 了解本领域理论的落地技术以及相关企业

AI作为一个新兴方向,很多领域还处在研究阶段,真正能够应用到现实产品中的领域相当有限。

有代表性不过就是:语音识别/合成,图片/人脸识别,和NLP的一些分散应用。

当然并不是说尚未投入使用的技术就不值得去了解或者投身,比如现今热点中的热点——自动驾驶——尚处于研究性质远超实用的探索阶段,虽然很多公司都在做,但其实并没有实际的投入真实世界使用。

此处只是说,落地技术的范围并不算太广,了解起来投入也有限。

有了目标技术再找企业就相对容易多了。虽然大公司掌控了当前AI领域的绝大多数人才和资源,但是也有越来越多的小企业在具体技术点上发力。

普遍来说,进大公司是为了公司,而进小公司则是为了跟人。而AI行业又是一个强学术背景的行业,一个公司也好,团队也罢,如果连一个有一些最起码学术建树的博士都没有,那能走多远真的不好说。

从这一点来看,step 2的调研过程也可以应用到此处。如果有感兴趣的小公司,尤其是刚刚创业不久的startup,不妨先评估一下技术合伙人的学术水平。

Step 4. 了解具体岗位的招聘需求

这里的具体岗位,到并不一定指XXX公司的XXXX岗位,而是指同一类型公司同一技术角色的相对普遍要求。

AI行业的技术岗位,按角色可以简单地分为三类:

角色1:科学家——研究理论,开发/改进算法;
角色2:工程师——结合业务,训练模型;
角色3:工程辅助——选择、清洗、标注数据等。

从目前实践来看,一个团队中,如果工程辅助不是外包给第三方的话,工程师本身也要肩负工程辅助的责任。或者虽然内部有分工,但工程师和工程辅助都属于一个团队,在职衔上也没有明显区别。

一般来说,如果不是科班出身,没有在学校读到相关专业博士毕业,在入行的时候就不必指望AI科学家了。对于一般人而言,需要确定的是角色2和3 而已。

当你选定了公司之后,注意先看看同等类型公司,至少有代表性的那些,角色2和3是分开的还是合并在一起的。这一点,通过招聘启事的职位描述就应该可以找到。

从描述来看,角色2和角色3是不同成员来分担时,2显然比3 cool多了。但正因为如此,两者的能力要求必然也有区别。

领域、企业和角色共同定义了岗位之后,再根据岗位需求来反推需要学习的内容,就是有的放矢了。

容易被误导的「捷径 」

虽然推荐上述路径,但是笔者确实知道,很多人喜欢走“捷径“——去招聘网站用AI、人工智能等关键词搜索一堆职位,看看那些职位要求的工具和语言是什么,直接去学就好了。相当于从step1直接跳到了最后。

反正现在大多数职位都要求Python,Tensorflow,直接报个班学学怎么用 Python 调用现成的算法,或者怎么用 tensorflow 处理数据不就好了?何必那么麻烦,还要看什么论文,学什么理论。

这种想法,属于典型的被“捷径“误导。在AI行业从事技术工作,哪怕是做角色3的工程辅助工作,如果想要做得长久,有所发展,理论学习是必不可少的。

要详细解释这一点,完全可以单独开个chat了。此处且举个直观的例子:

工具就像是武器,学会使用一种工具只是学会了使用这种武器的最基本的招式和套路。而理论学习则是学习策略,决定了未来在真实对战中,遇到对手攻击时,你选取哪些招式套路,如何组合起来去迎敌。

不排除现在有些公司跟风慕名,想做AI,自己没有人才,就直接招聘,要求会用XX工具就可以了。

只学会用工具做一些基本操作,也许就可以应聘这样的职位。但是这样的职位能长久吗?能解决真正的问题,产生价值吗?做这样的工作,能有长进提高个人价值吗?

为了个人长远的职业发展,我们还是扎实打牢基础。

制定学习计划

有了明确的目标,也就有了明确的范畴(scope)。同时,经过上节step2-4,还搞明白了,学了这些东西,能用来干什么,最终会把它用到什么场景中去。

有了这些,就可以确定一个知识体系(至少是其中一个结构分明的分支)。并进一步确定,对这个体系中的内容需要了解到什么深度。

有了体系和深度,进而可以列举出所需要掌握的各个知识模块。在此基础上,划分学习内容。然后根据需要学习的内容制定学习计划。

很多人在制定学习计划的时候,会从时间出发。但是如果没有内容,光指定时间是没有意义的。学习计划的最初步应该是知道要学什么。具体步骤可以这样来走:

  1. 明确知识范畴和应用目的;

  2. 划定知识体系并确定深度目标;

  3. 填充知识模块;

  4. 列举针对具体模块的主要知识点。

可以借鉴做作文列提纲的办法:在勾勒出轮廓之后,先把知识结构的骨干勾勒出来,分为篇章,列出大标题,再在其中填注小标题(知识点)。

这里很关键的一点是,计划中最细粒度的“小标题”到底有多大。

个人意见:学习一个计划中的最小单位,如果是不脱产,仅在业余时间学习,掌握它的时间不应该超过一周;如果是全脱产学习,最好不要超过2天。

我们下面用一个例子来说明一下具体从目标到学习计划的制定过程。

【举例说明】

从需求出发:笔者要学习基于机器学习的自然语言处理,具体的应用是开发聊天机器人的语言理解模块。

进行调研:通过 i) 向有类似经验的同事请教; ii) 到网上搜索综述性文章和 NLP 领域论文;iii) 查找实践类的文章、类似开源项目……等一系列手段,笔者了解到,最起码有两件事情必须要做:意图分类和实体提取。

目前,要做这两件事情,有基于规则和基于机器学习/深度学习模型两类方法。

基于规则虽然直接、初始代价小,但是可扩展性差,所有规则都需要人工添加。

而基于模型的方法有较强的可扩展性,而且随着聊天机器人用户和语料的增多,还可以通过反馈持续增强模型。在聊天机器人中应用机器学习/深度学习不仅符合产品发展的需求,也是当前业界的发展方向。

机器学习和深度学习的区别在于:前者适合相对数据量、运算资源较小,而开发者对业务理解较深的场景;后者则更加“自动化”,但对于数据量和运算量需求巨大,尤其是对人工标注的数据要求很高,先期投入太大。

笔者决定在工作用应用机器学习模型,因此就要先从机器学习学起。

目标确定:根据调研,确定了目标为机器学习。

接下来第一步就是了解“机器学习”的学科框架。

很多学校计算机专业的都开设机器学习课程,找到相应的教学大纲和课本并不难。通过高等院校的教学大纲和课本目录来了解一个学科体系,普遍而言是最靠谱的方法。

机器学习有一点特殊的地方——有一位大牛,Andrew Ng,在几年前就发布了一份免费网上课程叫做“机器学习”。因其经典和学术上的严谨,也可以用来作为了解机器学习体系的一个来源。

但是一般情况下,不建议在最开始的时候就直接把公开课、培训课程作为学习体系架构的依据。

构建体系:通过对比多本机器学习著作,不难发现,机器学习理论是以一个个模型为主要内容的。

之前工作中要用到的意图识别和实体提取,正好对应分类和seq2seq预测模型。而为了获取意图,可能还需要对原始语料做文本聚类。

因此我们构建的体系可以以模型为主要节点。

填注内容: 确定了主干节点,下一步就是填注课程的“血肉”。

归根到底,模型是用来解决问题的。比如 chat bot 语言理解所用到的分类,序列预测,聚类等,都是典型的机器学习问题,每一个问题都对应多个模型。每一个模型都有其适用的具体情形。

模型的获得包括算法和数据两个方面。需要一个训练过程,训练过程一般迭代进行,期间要做多次验证,根据验证结果调优,最终通过测试来检验模型质量。

再通过进一步查询资料得知,要了解这些模型的运行原理,就得读公式,那么就需要求导、求微分、求积分、矩阵运算、概率统计等方面的知识。

还有就是,所有模型处理的都是数值,我们要把现实当中的文本等人类可读信息都转化成向量。这就需要掌握将文本转化为向量空间模型的能力,和数据清洗整理的能力。这些能力又都是以编码能力为支撑的。

制定提纲:由此,我们学习计划体系就已经有了眉目。

我们需要学习(复习)下列这些知识:

1)高数、线代和概率论的知识;
2)选择一批在实践中应用较多的典型模型,学习其原理、数学推导过程和训练模型的算法;
3)模型的训练、验证、测试过程和评判模型的指标;
4)将人类可读信息转化为数值的方法;
5)训练、测试模型的工具、框架和编程语言。

学习计划成型:有了上面这些,再结合资料和自己当前需求,确定必学范畴内的模型类型,就可以构建详细计划了。

“机器学习”学习内容提纲:

A. 数学
 a. 数学分析:求导、微分、积分
 b. 线性代数:向量基本运算,矩阵基本运算,矩阵分解,多种矩阵的性质
 c. 概率统计:古典概率模型,贝叶斯公式,常见概率分布及其公式和特点

B. 模型原理及公式
 a. Linear Regression(最小二乘法)
 b. Logestic Regression(极大似然估计)
 c. Naive Bayes
 d. Decision Tree(ID3, C4.5)
 e. SVM
 f. CRF
 g. KMeans
 h. Spectral Clustering
 i. LDA

C. 模型的构建和验证
 a. Binary-Classification vs Multi-Classification
 b. Normalization & Regularization
 c. Validation & Test
 d. Cross Validation Methods
 e. Precesion, Recall, F1Score  f. ROC, AUC

D. 数据处理和向量模型空间的构建
 a. 文本标注
 b. Bagging & Boosting
 c. 中文分词方法及原理
 d. n-gram模型原理
 e. bi-gram文本特征提取
 f. 计算文档tf-idf 及其信息熵

E. 工具及语言
 a. Python,Java,C#类比及对比
 b. Python 库,Java 库,C# 库
 c. 分词工具(jieba分词)和词库
 d. word2vec

F. 实践

如上只是第一个版本,可以先依据它制定一个为期两到三个月的学习计划。在执行过程中,根据新的认识和具体需要可随时调整提纲和计划。

选择培训课程

本文的主题就是如何选择技术培训,居然前面废了那么多话才说到选择培训课程,是不是已经有朋友等不及了?

选课容易选对难

或者有的朋友觉得,选培训课有什么难的?现在互联网信息这么发达,就把培训课当餐馆电影院一样选又有什么不好?

大众点评里有好多培训机构培训班呢,上去看看评价,看看星级,还有优惠券拿,直接选一个不就行啦。何必还要自己定制什么学习计划,多此一举。

此处笔者想说的是:选择培训课程容易,选择有效的培训课程可就难了。

如果选择了错的培训课程,浪费钱还是小事,浪费自己的时间才可惜。

尤其是像 AI 这种热点、风口,如果因为总也学不进去东西,错过了发展最迅速阶段的黄金入门期,可能错过的是大好的职场机遇!

培训的用处

AI行业的知识、技术,包括各种工程实践,best practice,都是纯粹的书面知识。

不像乐器、舞蹈之类,文字不足以描述,需要老师面对面指导和反复多角度演示才能掌握到位的技能;书面知识,肯定是可以自学的。

对于这样的知识,培训课程的作用何在?

上培训课的原因很简单:为了省事——自己学太累了,不如听老师讲。用耳朵听,比用眼睛看书轻松,而且老师讲得,总比书上写的丰富细致吧。

用自己的金钱和时间换取他人的知识和经验当然没问题,甚至可能是高效的办法。但如果觉得,只要自己花了钱,就可以坐在那里,等着老师把知识塞到自己脑子里,可就大错特错了。

学习的过程,必须学习者主动吸收理解,才能达到掌握知识的目的。

而培训课程的作用,无外乎两点:

I. 讲解细致

相对于力求清晰、简洁、逻辑性强,具有“攻击性”的书面资料,合格的课堂讲解应该是丰富、细腻、包容性强,具有“防守性”的。

特别是和数学相关的内容,那些公式推导过程,往往一步千里,如果有人能够给每一个前进步骤一个解释,理解起来会比自己看轻松好多。

II. 和教师直接交流,获得即时反馈(答疑)

学习复杂的东西时,常有这样的体验:

  • 前面一大段都会,就是绊在一个点、一句话上,这一点东西不明白,后面的全都不懂。

  • 自己的理解明明是这样的,可是习题答案却是那样的,是自己学错了,还是习题答案印错了?

  • 这种情况应该这样,那么那种情况呢,也这样还是另有不同解法?

  • ……

学习的过程中,疑问是难免的,如果疑问解决不了,则学习很难继续下去。

无论文字还是影音资料,都是只有传达过程,没有针对每个读者个人的答疑解惑。培训课程恰恰可以弥补这个不足。

让培训有效

可能有些同学上培训班的目的之一是直接获得系统性知识的传达,因此,也就觉得不必做之前说的,自己构建知识体系,定制学习计划的事情了。

自己就算定了个计划,也不太可能找到完全一致的培训班。随便报个班,老师自然有教学大纲,听着就是了,为什么要自己费力气?

此处需要提示这些同学一点:如果你自己都不知道想要学习什么东西,又怎么能够正确判断一门培训课程的质量呢?

毕竟,培训(不止是培训,其实所有教学都是如此)要有效,一定是教师和学生双方配合的结果。

教学双方能够配合好至少有三个前提:

    1)教的人有足够的个人积累和授课技巧用以传达知识;
    2)学的人主动吸收传授内容并同步思考、理解;
    3)教的人教的内容与学的人想学的内容相匹配,且张力适度。

学生在一无所知的情况下,看广告报个班,对于学习本身缺乏动力和认识,自己都不知道想从课程中获得什么;或者教的内容与学生的背景相差太远,学生一句都听不懂——这种情况下,即使有幸碰到了好的老师和课程,能吸收的恐怕也非常有限。

通过制定学习计划,学生不仅能够明确自己的需求,具体到每一节课想学什么,而且能够了解到这些授课内容之间的联系和优先级排序。

拿着自己的学习计划去找培训,能在大概率上保证培训课程的有效性。因为:

1)制定计划的过程,是一个带着问题探索的过程,而“带着问题”很容易产生驱动力。

当自己有疑问要解答的时候,就会有探索、学习下去兴趣和好奇,不至于看见那些东西就想睡觉。

2)对照自己制定的学习计划寻找满足内容需求的课程,有助于独立判断培训课程和培训教师的“斤两”。

3)制定计划也是一个了解自己的过程。

知道自己现在缺什么,缺到何种程度。同时对照培训课程大纲和介绍,也可以辨识自己目前知识背景和培训课程深度是否匹配。

对于课程深度的了解,还可以借助事先咨询授课教师或者培训学校来完成,对自己的了解则无人可以替代。

搜寻有效培训的途径

现在我们已经有了一份自己定制的详细学习计划,而且也明白了按图索骥的重要性。下一步就要寻找具体的培训课程了。

对找寻过程,笔者的建议是:先从免费资源开始

1)首先,AI领域有少量非常经典的现在培训课程,是完全免费的,而且非常容易找到。

如果你和前面例子一样,已经选定了机器学习作为学习目标,Andrew Ng 的 Machine Learning 是一定要从头到尾学一遍的。每节课后的习题都比较简单,要逼着自己做完。

2)其次,通过书籍、文章、论坛、微信/QQ群、免费讲座和分享等渠道,去搜集大家的学习经验和各种培训班的信息。

和有同样目标的人交流,经常能在不经意间得到优质推荐。

3)然后,在尽量广泛地收集了大量培训信息后,对照课程大纲和自己的学习计划进行选择。

教师声誉、培训机构声誉、网友评价等可以作为参考和背书,但核心是课程大纲与个人计划的匹配度!

4)再次,按优先级裁剪个人计划。

当然,想找到和最初版本计划100%匹配的培训课程基本是不可能的(除非的你的计划就是照着某个培训课抄的)。

这就不能不涉及到对于个人学习计划的裁剪。裁剪的原则应该是:确保核心知识和大体结构,在细节上做出妥协。

比方说,你自我判断数学是必须要补习的部分,那么就不要找完全一点数学基础都不讲,上来就是模型的培训课。你确定了要学每个模型的数学推导过程,就不要找只是描述原理,把绝大多数时间都放在代码实践上的课程。

但是如果大致结构和计划一致,只是有部分细节(例如模型类型)和你自己最初计划不同,则可以再进一步考虑。

比如你希望学习 CRF,某个课程不讲,但讲 HMM。这两者都是 seq2seq 模型,不过一个判别模型,另一个是生成模型,有很多共性的地方。如果其他方面都合适,不必为了这一个模型放弃一门课。

【亲历】笔者本人在机器学习方面的收费培训只上过一门,就是按照上述方法一步步完成的。结果感觉相当不错。

不仅内容大多是笔者想听的,而且老师的风格与笔者颇为合拍——做计划做得类似的人,想必有不少共同的特质,交流起来也比较顺畅。这就是自己定制学习计划更深层次的好处。

为了避免软文之嫌,这个课程具体为何在此就不说了。不过,对别人合适的课程未必对自己合适。这门课我曾经推荐给几位有兴趣的朋友,有人真的买了课,但是却听不下去,浪费了钱。原因就是教学不相匹配。

本文的目的,并不是推荐具体的课程或者讲师,而是希望大家掌握去寻找适合自己的有效培训课程的方法。

有效学习的几点提示

分享几个笔者认为行之有效的日常学习Tips。

关联

把新学到的东西和日常的工作、生活联系起来,进行思考。比如:将理论代入现实,不同领域间事物的类比,相似内容的对比等。

以身边的实例来检测理论。不仅能够加深理论知识的理解,而且有助于改进日常事物的处理方法。

记录

准备一个笔记本,纸的或者电子的。有什么发现、感想、疑问、经验等等,全都记下来。

如果是对某个话题、题目有比较完整的想法,最好能够及时整理成文,至少记录下要点。

隔一段时间后把笔记整理一下,把分散的点滴整理成块,一点点填充自己的“思维地图”。

分享

知识技能这种东西,学了,就得“得瑟”——把学习到的新知识、理论、方法,分享给更多的人。如此一来,倒逼自己整理体系、记忆要点,堪称与人方便自己方便的最佳实例。

把自己的感想、体会、经验分享出来也是同理,还多出了锻炼自己逻辑思维能力和归纳总结能力。一举多得,何乐而不为?

定制知识速查手册

这一点算是针对AI方面学习的专门建议吧。

AI涉及到的数学特别多。很多数学问题,之所以让人头大,其实并不是真的有多难,而是符号系统比较复杂,运算繁复,或者运算所表达的物理意义多样。

很多时候造成困扰是因为想不起来这里用到什么定理,哪个公式,或者这样操作表达的含义是什么了。

如果把常用的细小知识点都记录下来,按主题整理在一起,做成速查手册(小字典),需要用的时候迅速查找一下对应点,效果往往意想不到地好。能让我们的学习“机器学习”之路顺畅不少。

下面是两个笔者自己制作的例子,大家可以参考一下:

1. 机器学习常用「微积分」知识速查手册http://gitbook.cn/books/59ee907516fc0231837614e3/index.html

2.机器学习常用「线性代数」知识速查手册

 http://gitbook.cn/books/59ed598e991df70ecd5a0049/index.html


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存