营长的一位转型AI的朋友,最近对营长抱怨,“走过的最远的路,就是机器学习过程中的弯路”,然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑…一路吐槽。
尤其是论文,他骂道:“最讨厌的就是那种,高高在上、假装清高、站着说话不腰疼、戳不到痛点的论文。比如那一堆只能在理论中刷存在感,实际落地中只能‘呵呵哒’的论文,根本就是浪费时间。”
的确,对于现在刚刚入行的机器学习新人来说,不怕吃苦,但最怕走弯路,最怕白白浪费时间。
那么,总结起来,都有怎样的弯路呢?来看几位点赞量颇高的知乎答主的总结:
那些年,他们在机器学习中走过的弯路…
在知乎答主张馨宇(就职于百度地图)看来,机器学习的弯路有以下四个:
最大的弯路就是自己xjb学xjb试,和加入一个真正能做出东西的团队或跟随真正的牛人一起学习相比,速度要慢十倍都不止。学是要学,但不要以为自己xjb学就够了,差得远呢。
第二大的弯路就是成天xjb看论文,以为这样就能打通任督二脉,从来不复现论文或者尝试自己做出一些东西,这都是〇。
第三大弯路浅尝辄止,有些东西不往死里怼屁都做不出来。
第四大弯路迷信复杂的东西和新技术,以为新东西怼上去肯定就效果爆棚。其实都是不存在的。
个人主页:
https://www.zhihu.com/people/diegozhang/activities
还有一位知乎答主ycszen,在他看来,最大弯路,就是迷信论文,不去实验。
DL\ML其实是一门实践性的学科,只有通过实验才能把握到其中的细节与真谛。虽说也是在写程序,但是DL的程序基本上无法直观地debug,所以非得自己去复现一下,实践一下,用performance来说话,才知道有没有出错。
尤其是DL,研究发展到现在,论文和实际做的东西脱节已经是心照不宣的事了。正因为NN+GD的鲁棒性,你xjb搞好像也能搞上去,所以写论文很多纯粹在编故事(好论文除外)
所以,我们最好不要一味相信论文所说,尤其是各种解释(经典算法,优秀论文除外)。NN就是个黑盒,谁也别说谁。而我们能做的,更重要的是,去实践去复现,去去伪存真,去发现其中真正的本质所在。
专栏地址:https://www.zhihu.com/people/yu-chang-qian/columns
而知乎答主:YukiRain(CV/ML方向研究生在读)则认为,非科班出身,刚转型AI的程序员最大的弯路是:没学好数学。
而对于数学基础好,科班出生的AI程序员来说,则应注意以下几个问题:
1.一开始没人带的时候,看论文喜欢看最新的,很大程度上忽视了很多比较老比较基础的论文,嫌弃以前的方法performance不好什么的……感觉我身边一些人也走进过这个误区……
2.永远不要迷信某个特定的模型,不要因为random forest在某个任务上效果好,就以后遇到什么任务都上random forest;也不要觉得深度学习就是万能的,什么都可以套神经网络解决;不要看到比赛里面大家整天用xgboost就整人云亦云地复制。学各种算法的时候,书上一般会告诉你这个算法有balabala优点一堆,但是一般不会告诉你这个算法也有balabala一堆缺点,我花了蛮长时间在这个坑里,慢慢摸索各种不同模型的特性。
3. 不要迷信一些理论性很强的论文,我一开始的时候,经常看到一大堆公式就下意识会觉得这个模型可能效果不错。事实上很多论文的理论推导和它的代码毫无关联(参见已经彻底回归炼丹的WGAN GP),还有很多论文的推导需要很强的assumption支持(参见每年都会出现在顶会的一些给模型加riemannian geometry的论文),等等。
个人主页:https://www.zhihu.com/people/yukio-2/activities
那么面对这些弯路,又应该如何解决呢?
机器学习新人应该注意的5个问题
知乎用户a88i99(微信公众号:yiqixue_ai)对此提供了非常接地气的论述。他曾是写后台的码农,此后又做了两三年数据挖掘工作,最近一年多正在学深度学习、强化学习。以下为他对于如何少走弯路这个话题的经验分享,也许能对你有帮助。(一起学AI专栏地址:https://zhuanlan.zhihu.com/yiqixue-ai)
首先,这个圈子里有价值的工作无非就三块
1. 发明牛逼的模型、算法、理论
2. 底层系统搭建,如各种框架
3. 学懂1中大神的部分发明,再会使用2中大神搭建的框架,来解决实际业务中的问题,产生商业价值。大部分人属于这里吧!!!
对于1与2,我读过理论物理博士,虽由于某种原因中途退学,也还是能说两句。那就是走正统的教育路线,能出国的出国,毕业后能去好公司的去好公司。但这里只强调一点:你跟的人是真正做事情的人,做的业务是真正有价值的业务,否则也是浪费青春。
我想大部分都是转行过来的吧,你看机器学习/深度学习的关注人数快100万了,科班出身能占10%,我觉得都高估了。下面只针对这群人来简单说下,莫怕,你们才是主流人群,就像三四线的用户是快手/头条的主流用户一样。
1. 不要求快,没有捷径。自己首先有个心理预期,数学好的入门也得一年半载的,数学需要补基础的估计要1-2年。可以去上培训班,交点钱,但也就跟机器学习混个脸熟。想入门还得花时间慢慢磨,真的没捷径,真的没捷径,真的没捷径!
2. 模型不求多,精通几个常见的,把机器学习的套路摸透就可以了。比如LR,朴素贝叶斯,决策树,基于SVD相关的简单模型,如推荐系统等。
把机器学习的套路摸透什么意思呢?比如LR为什么用logloss,而不是平方损失?为什么logloss 是凸函数,而平方的不是?优化算法啥时候用一阶mini-batch sgd,啥时候用二阶方法,为什么?这还只是说了损失函数与优化算法,还有模型结构,模型的效果评估指标,如何利用欠拟合/过拟合来分析指导优化模型等等。
因为简单的模型容易理解,有时数学上的证明也是可行的。这样,以它们为例子更容易理解机器学习这套东西,建立自己的直觉,自己的直觉,自己的直觉,几何的或物理的。
3. 选择规模中等的公开数据集,实战。一般有两个目的,首先是验证或纠正你前面学习的理解,其次是尝试解决实际问题。实际应用中的流程大概是:
a) 根据业务选择合适的线下与线上评估指标。
线下的指标可以辅助快速迭代,因为线上测试流程较长。线下指标缺点是过于片面。所以,一般利用线下指标来迭代,找到觉得不错的特征与模型,再搬到线上去测。
b) 快速构建基线模型与线上测试系统。
c) 调试系统,迭代想法
对工程师来讲,理解业务与线上系统真的很重要!因为你既没能力发明牛逼的算法模型,也没本事写框架,你若只会乱调包,那你的价值在哪里呢?所以,不深刻理解业务而是去瞎换模型算法,真得不合适,效果分分钟打脸。
4. 结伴而行,尽量不要放弃。只是觉得没有个讨论具体技术问题的社区,知乎说的东西太泛了,不系统。大家也不爱答具体的技术问题。
5. 这条专门送给码农转行过来的。
机器学习这套系统与传统技术系统有个非常大的差别。搭建个web/app系统难度不大,且做的好与坏,短期内不好区分与评价。垃圾系统在用户量不大的时候也能表现得不错。只有在用户量变得较大时,才会掉链子而遭打脸。 机器学习的系统不是这样,它是分分钟打脸。也就是我们常说的,这个系统不确定性较大,驾驭它的门槛略高。
掌握了以上几个要点,那么新人应该如何系统地学习机器学习呢?
新人该如何系统地学习机器学习?
以下来自阿萨姆(普华永道,数据科学家)的回答,他从宏观的角度,按照职业规划、学习方法、实际应用三个方向,系统性地回答了“新人应如何学习机器学习”这个话题。
机器学习中有很多弯路,从宏观角度分享一些我的观察。回答分为三个部分:a) 职业规划。 b) 学习方法。c) 实际应用。
职业规划篇
1. 一个好的老板/老师远胜于自学。机器学习还没有达到批量化流水生产的阶段,因此一个好的“老师傅”比自学效果好很多。不仅如此,老师傅们一般都有自己多年经验总结出来的经验,往往可以避免很多不必要弯路。但选择老师傅应该注意是不是“挂羊头卖狗肉”,尤其要提防跨专业但号称多年的经验的人,有很高的概率是在蹭热点。这在选择导师以及选择工作分组时要尤其注意,毕竟已经是全民ML,all in AI的时代了…
2. 如果是转行来机器学习,不要和科班的人比拼编程能力和数学,要取巧利用自己已经了解的领域知识做结合。换句话说,转行做机器学习的最大的优势是你曾经所熟悉的领域,如果能与机器学习有所结合,你比科班出身的机器学习工程师更有市场。
参看:未来 3~5 年内,哪个方向的机器学习人才最紧缺?
https://www.zhihu.com/question/63883507/answer/227019715
和 阿萨姆:转行人士如何在人工智能领域保持一定的竞争力?
https://www.zhihu.com/question/67036323/answer/248527279
3. 如果有机会读一个相关学位(统计、计算机、应用数学等),去读。现阶段的就业市场还面临有价无市的局面,一方面企业开出高薪吸引机器学习人才,一方面符合条件的人太少。一般来说,名校相关学位硕士以上学历是大企业的基本要求,更高端的岗位还需要顶会和PhD。磨刀不误砍柴工,如果有可能,读一个硕士项目能很大程度的扫清路障,防止简历卡在人事手里。
参看 阿萨姆:外行应届毕业生找数据分析工作多难?
https://www.zhihu.com/question/57618120/answer/155396514
4. 调整心理预期,放宽搜索域。国内的机器学习领域除了BAT这种大公司,厉害的中小型(创业)公司比如商汤科技以外,还有很多其他不错的公司。很多同学都抱着非牛逼公司不去,但没有考虑到僧多肉少的问题,这不成熟。计算机科学作为常年霸占毕业生人数排行榜的专业,有再多科技公司都很难容纳所有人,更何况现在是人人都想机器学习的时代。人生不是线性的,不是高考高分->名校->好工作->升职加薪->走上人生巅峰一定会发生。所以,你即使没有进入谷歌实习也不代表你这辈子就完蛋了。想开一些,眼界再放的远一些,人生没那么急。
5. 机器学习面试是有规律的,摸清楚面试内容有助于盲目准备。机器学习的面试和传统的软件工程师不同,不仅有基本的编程能力考查,还有对数学、模型、以及业务理解的考查。更多机器学习面试经验分享可以参考:面试官如何判断面试者的机器学习水平?
更多的讨论可以参考:
现在的大数据、AI 这么火,会不会像曾经的 Android 和 iOS 一样,五年后也回归平淡?https://www.zhihu.com/question/67120248/answer/281427231
和 阿萨姆:工科生一年时间转行 cs 是否有可能?
https://www.zhihu.com/question/66421918/answer/245974321
和 阿萨姆:机器学习门下,有哪些在工业界应用较多,前景较好的小方向?
https://www.zhihu.com/question/57072166/answer/280824223
学习篇
1. 不要把深度学习作为入门第一课,建议从经典机器学习开始入手。虽然很多人都是冲着深度学习来的,但把深度学习作为机器学习第一课不是个好主意。
原因如下:
深度学习的黑箱性更加明显,很容易学得囫囵吞枣
深度学习的理论/模型架构/技巧还在一直变化当中,并未尘埃落定
深度学习实验对硬件要求高,不太适合自学或者使用个人电脑进行学习
2. 不要过度收集材料,机器学习的资料有很大的时效性。机器学习的资料很多,动辄就有几个G的材料可以下载或者观看。而很多朋友都有“收集癖”,一下子购买十几本书的人我也常常能够看到。而机器学习的发展和变化速度很快。在入门期间,建议“小而精”的选择资料,选择近期出版的且口碑良好的书籍。这不仅可以节约重复学习的时间,也可以读有品位的材料。
3. 选择符合自己风格的材料,进行T字形阅读。举个简单的例子,很多人认为PRML比ESL好读,但如果个人对贝叶斯的理解有限,ESL更符合你的认知,翻阅起来也更得心应手。至于阅读方式,建议以一本书为主深入理解,同时备着多本参考书,遇到问题时横向搜索阅读。
4. 如果在读,优先进实验室,再去找实习,最后一条路是好好刷GPA。一般来说,大三的时候你应该已经有了基本的机器学习知识,尽管还比较浅。这个时候可以向老师/学长/学姐毛遂自荐进实验室,即使是无偿劳动和做基本的苦力活。进实验室有两个明显的好处:
a. 对某个小方向会有比较深入的了解。一般实验室做纯理论的不大需要本科生,做机器视觉或者自然语言处理(NLP)等小方向的比较需要本科生,所以这是很好的深入了解一个方向的机会。
b. 补充了研究经历也可以明白自己是否适合这个领域。如果运气好的话,你也有可能成为论文的作者之一,甚至可以去开会(公款旅游顺道见一下业内大佬)。这对于继续深造和去国外继续学习都很有帮助,有科研经历和论文是很大的筹码,对于找工作来说也绝对有利无害。
5. 学好英语,至少打下阅读和听力的基础。虽然人工智能领域中国现在已经做得很不错,但主流的书籍、期刊和会议,资料都是英文的。我们可以接受翻译版,但最好的方法还是自己有能力直接阅读。即使你将来不做机器学习,英文阅读能力还是会有很大的帮助。
6. 不要试图掌握所有的相关数学知识再开始学习。一般人如果想要把这些知识都补全再开始机器学习往往需要很长时间,容易半途而废。而且这些知识是工具不是目的,我们的目标又不是成为运筹学大师。建议在机器学习的过程中哪里不会补哪里,这样更有目的性且耗时更低。
参看 阿萨姆:如何看待「机器学习不需要数学,很多算法封装好了,调个包就行」这种说法?
https://www.zhihu.com/question/60064269/answer/172305599
网络或者线下培训班是否值得上?我觉得需要一分为二的看待。机器学习培训班有一定的帮助,但最大的帮助应该是看是否有可能推荐靠谱的工作。一个尴尬的局面是,大师级的从业者有更好的选项,一般不会做那种三个月包分配的商业培训班。因此大量的机器学习讲师资质往往良莠不齐,而且存在经历造假的情况。如果选择上培训班,要有心理预期而且避免昂贵的天价培训班。当然,培训班有一定的价值,往往比自学的效果还是要好,但千万不要孤注一掷倾其所有的押宝,往往会输。
更多的讨论可以参考:如何用3个月零基础入门机器学习
https://zhuanlan.zhihu.com/p/29704017
和 阿萨姆:深度学习的教学和课程,与传统 CS 的教学和课程有什么区别
https://www.zhihu.com/question/63883727/answer/225499427
应用篇
1. 即使选择做学术,也试着去工业界了解一下。在其他很多答案中我都提到过,其实工业界用的大部分技术并不酷炫,广义线性模型(generalized linear models)如逻辑回归还是占据了大壁江山。做一些实习和工业界活动有助于:
a). 打破幻想,了解工业界的主流模型。工业界用的大部分技术并不酷炫,你很少能看到深度强化学习那种AlphaGo一样酷炫的模型。
b). 补上学术界忽视的内容,比如可视化和数据清洗。工业界的最终目的是输出商业价值,而获得商业洞见的过程其实是非常痛苦的,比如第一步就是令人深恶痛绝的数据清洗。
c). 了解技术商业化中的取舍,培养大局观。做技术的人往往一头扎进技术里面,而忽视了从全局思考。更多的讨论可以参考:阿萨姆:现在机器学习工业界和学术界的差别越来越大了吗?尽早实习和踏实科研各有什么利弊?
2. 机器学习虽然是一门技术,但良好的大局观可以帮助你走的更远。很多人以为机器学习是一门专精岗位,但在中小型企业,公司希望机器学习工程师可以独挑大梁,完成从数据收集、清理、建模、调整、到部署上线,甚至维护和更新的一系列工作。因此在大部分中小型公司的机器学习工程师也做了全栈的工作,捎带着把网站做了的也不是没有…因此,不要抓着机器学习不放,适当了解不同的知识有时候也很有用。
可参考:阿萨姆:怎样才算是一个合格的机器学习工程师 和 阿萨姆:机器学习与移动端会碰出怎样的火花?
3. 在实际应用机器学习时,总结论文中或者书本里面不会提到的技巧,比如:a) 数据质量不高,数据质量不连续时,可以选择抛弃一部分数据。 b) 如果有必要,需要把回归问题转化为分类问题。 c. 特征工程不是每个模型都必须的,表示学习的方法一般要避免过度的特征工程等。d. 选择交叉验证的k值不是越大越好(「交叉验证」到底如何选择K值?)。更多实用小技巧可以参考我前一阵子的免费分享课。
4. 在机器学习的实际应用中,有很多“玄学”或者难以解释的部分,对机器学习理念的抽象理解有助于避免困惑。
可参考:带你了解机器学习(一): 机器学习中的“哲学”
https://zhuanlan.zhihu.com/p/27680090
和 带你了解机器学习(二):机器学习中的稳定性
https://zhuanlan.zhihu.com/p/27787096
5. 调参不是最终目的,而是迫不得已的手段。避免过度调参主要还是依赖经验选对方向,在小的区间正确的模型上调。如果选错了模型方向,那是无论如何都调不出好效果的。
可以参考:阿萨姆:机器学习如何才能避免「只是调参数」?
https://www.zhihu.com/question/264528062/answer/282229458
写在最后
机器学习的路不好走,而且往往都有鲜明的个人主义色彩,正是条条大路通罗马。人大的周孝正教授说过:“一个问题不能证实,也不能证伪,那就要存疑。” 而机器学习就是这样一门学科,我们必须抱着“批判”和“怀疑”的精神来学习,不管是看书、读论文、还是听老师傅的教诲都要有这样的精神。
机器学习的路上没有捷径,想要避免走弯路就要摒弃急于求成的想法,因为捷径往往才是最长的弯路。
媒体合作请联系:
邮箱:contact@dataunion.org