本文作者 2013 年本科毕业,做过并行计算开发、嵌入式底层,目前在游戏创业公司做服务器开发。
自从作者自学机器学习等 AI 领域技术以来已经有一段时间了,本文作者将简单总结这一段时间的进修情况。
后悔大学不努力
大三的时候学过一门“人工智能导论”的课,只记得课里有一些回溯和图搜索的算法,具体细节全忘了。
虽然算法与数据结构、编程语言很有深度,但当时认为真正厉害的是能干项目,写网站的,懂框架写实际应用程序。
什么语言、算法,现学会用就行。那些编译原理、操作系统课程、数学、英语,听课就行,毕竟真正招人不看这些基础课。
尤其是蕴含其中的算法思想。它们决定了你从事程序员这个行业以后所能达到的深度,而英语决定了你以后的广度。趁年轻,可以多尝试各个方向,但一定要明白基础知识的重要性。
如果想形成知识体系,本人是不赞同碎片化学习某一领域知识的。碎片化时间适合看技术“花边文章”,开眼界。碎片化学到的知识,都是零散的,个别天才除外。
真正能形成系统性的,有深度知识到自己脑海里的一定是靠长时间系统地持续性地学习才能积累和形成的(至少我自己适合持续性学习)。
我刚入学那会儿被各种各样的大部头吓坏了,这能啃完吗?甚至有的老师也不建议啃。
但其实现在看来,大学期间最适合啃这些书,因为那时候有非常多的时间来心无旁骛地学习。
如果你热爱这一行,或者立志想一辈子靠技术吃饭的话,如果不知道啃哪本,就从《算法导论》啃起吧。
不要怕难,认真反复多看几遍,如果全弄懂你的人生肯定会与其他人不一样。
大学里最重要的是学习思想性的知识,好的学习知识的方法,专注和自学的能力,这些是能伴随你一生的习惯,是修炼内功的绝好机会。
这个时候心无杂念,找本自己想学的方向,很容易钻进书本里。如果你还在校园里,那就踏踏实实夯实基础吧(比如4学分的课)。
如果你觉得老师讲得不好,那么去网上自学公开课,自学能力也几乎是技术成长必备的能力。
再一个,
不要害怕与众不同,我们从小到大,太强调一致性了,要相信自己。
为什么想学 AI ?
随着近几年计算机领域的不断发展,云服务与并行计算促进了计算力的提升,互联网的发展提供了海量的数据,这些方向的发展都促进了人工智能的发展,也促进了 AI 领域机器学习的发展。
我觉得学习 AI 是投资自己的技术未来,就像前几年火热的移动端开发一样,传统岗位也会依然存在。但是 AI 行业的发展也一定会产生新的岗位。
而人对未知的事物都是充满好奇或者担忧的,至少我是好奇。好奇大家口中的机器学习、神经网络这些名词到底是怎么回事,有什么高深的算法,会如何发展,是否存在自己一直寻找的兴趣方向。
之前的一些机器学习入门的文章也看了很多,都看得迷迷糊糊,大家说的模棱两可,比如不用在乎数学推导,直接调用接口,就好了。
简单的 API 调用,我想大家都很容易学会,但如果我仅把函数当成黑盒使用,我心里是没底的,因为我不知道里面怎么做的,我就会觉得没底。
也许是我性格的原因,会经常执迷于细节,而且学习速度很慢,并且无法从宏观上对事情进行更好的抽象,我现在也在逐渐提高自己的抽象能力,先从宏观上看事情。
一次偶然的机会,看到一篇文章:《
入行AI,如何选个脚踏实地的岗位
》。这篇文章是我看过所有的入门文章中,介绍的最详细最明白的文章,相见恨晚。
文章中的观点我完全赞同,尽管很多技能我还不具备,但我觉得说得都很对,同时也揭开了各个岗位都是干什么的神秘面纱。
首先,我觉得不懂内部原理甚至细节,只会调用库,是没办法更深入和提高的。所以我觉得数学基础很重要,照着教程敲一遍代码已经不足以满足我现在的追求,做完了没有什么成就感。
成就感是个很神奇的东西,就跟你玩游戏打怪练级一样,如果认识到这件事充满成就感,你会有非常多的力量在上面,找到最大化自己成就感的事情,那个应该就是兴趣所在了,做那件事也就能实现自我的意义和价值。
其次,同意文章中说的在成为机器学习工程师之前要首先要是一名合格的程序员,基本数据结构和算法一定要掌握,我距离合格程序员还有很大差距。要认清自己,脚踏实地。
最后,文章末尾有个讲课的链接,我以前对培训和讲课是很抵触的,片面觉得所有的东西都要自己悟才可以,现在想想是自己钻死胡同里了。
如果有老师讲很好的课,可以帮你快速入门,大幅提高你的时间效率的,而且这门课很便宜。
此外,我个人认为当一篇文章让我有极大认同和感想以后,我就会把作者的所有相关文章都检索出来。
看一遍,如果 80% 甚至更多都和自己的认知相同,那么这个人多半你就是认同的,大概率买她课不会让你失望,李烨老师给我的感觉就是这样。
以上只是我的真实感受,不多说了,要不然有打广告的嫌疑。看完这篇文章后,我对整个 AI 行业有了一些认识,决定要开始行动起来,临渊羡鱼,不如退而结网。
关于买书
关于买书,我从不吝惜,希望自己也能一直保持着这个习惯。基本 200 以内的书,真的需要,或者我知道自己买完了一定会看,我从不犹豫。
但仍然有很多书没买,Amazon 上的购物车,常年有上千的书存着,因为穷,哭。
之前是怕租房搬家麻烦不买,现在觉得自己以前好蠢,这点麻烦算什么。个人觉得电子书的确方便,但的确适合查阅,不适合阅读。
想系统学,还是要买好书经典书,甚至大部头才好,这样知识才能系统建立起来,比碎片化有意义很多。
碎片化当开眼界和休息时的新闻看看就行了。
关于知识付费
我觉得学习上不要吝啬,衣服可以不买,吃的可以温饱,但是学习上,不用小气,一件衣服,一双鞋,都够买一年的课或者书了。
我本人收入并不高,但买了很多课,别乱买,买那些你一定会去学的,一定让你有产出的,可以内化成你自己知识的。
我自己买了一些某乎 live 课,但觉得里面都是一些宏观上的方法,细节很少,干货也很少,整个 live 过程都觉得非常赶时间,学到的就更少了,可以作为开眼界,理清一下脉络的方式,甚至有的 live 买完能学到脉络就不错了。
App 上也订阅了某人工智能专栏,老师照书本式的念,听着实在是烦,生硬。说白了,我识字,但你写的我看不懂,你念一遍我也还是不懂。
没有详细解释,只能靠我自己去网上一点点找,也许对数学基础要求很高,我的基础距离主讲人定义的数学基础差太多。
数学基础
个人觉得,如果有好的详细推导过程严谨的教材/教程,看书或图文教程,是学习上手最快的。因为,你可以自己控制学习的速度。
【1】微积分
首先由于连微积分最基础的知识都忘记了,就先回去补高数了,虽然大学上课认真听课了,但不是学霸那种,毕业后基本没怎么用过,就全还给老师了。
看大学教材,这里我用的是 GitChat 上李烨老师推荐的微积分讲义(北师大出版社邝荣雨等编著的《微积分学讲义》),书很薄,很适合快速过一遍。
我属于只看书和例题没有做题的,因为懒。我觉得大学期间,很多时候都留在做题上了,我整个教育历程重点都是题海战术。
但我忽视掉了,真正的数学定义中的物理和几何意义,其实这些意义非常重要。这里重点补充了一下。
如果后面想往算法科学家方向发展的话,这部分还要继续强化,做题,多练,提高自己的计算能力,多看书和例子。MIT 的在163上的微积分公开课也非常棒。
【2】线性代数
由于第一份工作用到了浮点数高阶矩阵求逆并行优化算法相关的工作,这个在当时认真学了,而且当时包括现在的理解,线性代数,只是进行矩阵变换和运算。
【3】概率论
这个是弱项,从高中开始,抽球,就抽不明白,现在也没太明白。但是我属于对学习资料比较苛刻的那种人,各种强调器,而不去做事。其实如果用心学随便一本,都可以内化成自己的知识,但我暂时还达不到这种境界。
学知识不是为了满足自己的我很上进的样子,也不是为了学过这些知识以后,自我满足感。
一定要强调自己的内化——就是拍着自己的胸脯问自己,你真的学会了吗?你学到了什么?都理解了吗?没理解,好,说明没学会,那就重新再看视频,再查阅各种相关资料,再学,每天吃饭睡觉都去想,去琢磨。
这里我推荐台湾大学的叶丙成老师在 Coursera 上的课程:"頑想學概率"(一)和(二)。
话说叶老师说话很像我已经离职的 Leader,亲切感十足。虽然只学了前面几节课,但明显是非常棒的概率课程。跟着学就好。教材,请打印课堂的ppt。
【4】统计学
网上有 edx 或者可汗等国外的公开课,暂时还没有补习,大面积用到了再补。
大家多利用好网上公开课视频。我自己本人是,基本上所有的公开课 App 都装了(买了几千块的手机,不能白买)。