专栏名称: AI数据派
THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。
目录
相关文章推荐
艾格吃饱了  ·  抢完的好东西新鲜到货了,让我来享受一下 ·  23 小时前  
中国消费者报  ·  近期大量上市,多人吃进急诊室!紧急提醒→ ·  昨天  
中国消费者报  ·  近期大量上市,多人吃进急诊室!紧急提醒→ ·  昨天  
日食记  ·  换季后,建议养生党把奶茶换成它。 ·  3 天前  
51好读  ›  专栏  ›  AI数据派

送你一篇关于如何成为一名AI算法工程师的长文

AI数据派  · 公众号  ·  · 2019-07-04 07:30

正文

来源: Datawhale

本文约 5000字 ,建议阅读 9分钟

本文和大家分享一篇成为AI算法工程师的文章,助力大家早日成为专业人士~


这是一篇关于如何成为一名 AI 算法工程师的长文~


经常有朋友私信问,如何学 python 呀,如何敲代码呀,如何进入 AI 行业呀?


正好回头看看自己这一年走过的路,进行一次经验总结。


来看看你距离成为一名 AI 工程师还有多远吧~


⭐具体内容:


  • 我是因为什么开始接触敲代码

  • 人工智能/机器学习/深度学习

  • 自学如何寻找学习资料

  • 如何选择编程语言/框架

  • 校招/社招/实习/面试经验

  • 一碗鸡汤


⭐声明:


  • 本篇内容均属于个人观点,建议采纳对自己有用的经验,如有疏漏,欢迎指正,共同进步!

  • 2017 年 5 月开始第一份实习 / 2017 年 7 月开始学敲代码 / 2017 年 11 月硕士毕业

  • 擅长的编程语言:R / Python

  • 不花钱报班,全靠自学,最初是因为穷,后来发现开源的世界真是太美好了!



我是因为什么开始接触敲代码?


我的第一个模型是什么?


由于本科是数学,研究生是量化分析,第一份实习是一家金融科技公司,开始接触所谓的 Fintech 😝


第一个任务就是做客户的信用评分卡模型,目的是给每个用户打一个信用分数,类似支付宝的芝麻信用分。这是银行标配的一个模型,最常见最传统的算法用的就是逻辑回归。


在课堂上使用的工具是 SAS,SPSS,属于有操作界面的,菜单非常齐全,只需要鼠标点一点就能建模,很好上手。但是 SAS 这些要付钱的,年费还是相当的贵,所以深圳大部分公司进行数据分析和建模工作都选择开源免费的 R 语言或者 Python。这就体现了掌握一门编程语言的重要性。


虽然说是建模任务,但是前三个月跟建模基本都扯不上边。都在做数据清洗,表格整理(摊手),都在 library 各种包,用的最多的可能是 data.table 和 dplyr。没办法,很多模型都有包可以直接调用,是最简单的环节了。


其实一开始,我一直在犯很低级的错误,各种报错,没有 library 啦,标点符号没打对啦,各种很 low 的错误犯了一次又一次,而且连报错的内容都不会看,不知道怎么去改正。如果你也像我一样,真得请不要灰心,我就是这样走过来的。对着错误一个个去解决就好了~


当时什么都不知道的时候,觉得真难呀,每个环节都有那么多细节要照顾,要学的那么多,做完一个还有一个,还要理解业务含义。但是当完整的做一遍之后再回头,就会觉得,其实,也没那么难嘛~



敲代码容易吗?


因为我不是计算机专业的,所以基本上属于没怎么敲过代码的那种。


后来发现程序员也有好多种类的,前端后端等,因此敲的代码种类也很多,才会有几十种的编程语言,下图是一些这几年的主流语言。



实习时我一直被队友嫌弃很蠢,而且一开始敲的东西怎么也运行不通,运行出来的都是鬼结果。有 n 次想放弃的念头, “我干嘛一定要敲这玩意儿? ,但也有 n+1 次想坚持的理由,因为我真的喜欢我正在做的事。为什么用 “坚持” ,因为真的不容易。不难,但真的需要有耐心。


一开始我的状态就是一行行代码的运行,一个个命令的熟悉,反复看,反复运行。


  • 从敲出第一行代码到敲出第一个完整的模型花了 3 个月。

  • 学习 XGBoost,光是理论学了 3 个月,因为前期铺垫要学的还有 adaboost/gbdt 和各种机器学习的知识模块。

  • 从 R 切换到 python 花了 1 个月。

  • 从机器学习 (Machine Learning) 切换到自动机器学习 (Auto Machine Learning) 花了 2 个月。

  • 从 NLP 零基础到搭建一个智能问答机器人花了 1 个月。


从一年前的 什么是过拟合,什么是交叉检验,损失函数有哪些 到后来参加全球人工智能峰会时都能听懂的七七八八,会觉得,努力没有白费呀!



可以看出,经过前面的积累,后面会学的越来越快。


慢慢的就从一开始的那种唉,怎么又报错啊,好挫败的心态变成现在的 啊? 没 error?感觉不对啊,再查验一遍吧 这种抖 M 倾向的人。代码虐我千百遍,我已经被磨的没有了脾气。


已经有几个朋友说想转行了,我何曾没想过,只是不知不觉中坚持了下来而已。因为热爱,越虐越停不下来🌈


小结


📌设定一个非常清晰的目标


为什么第一个写: 我是因为什么开始敲代码的 ,因为动机真的非常重要!


所以,很多人在问我 如何学 python? 这种问题时,我的第一回答都是 你学 python 用来干嘛?


在学校也敲打过 python,做个爬虫 demo 什么的,因为目的性不强没多久就放一边了。清晰的目标就比如说你要做 NLP,你要知道 NLP 的应用有智能问答、机器翻译、搜索引擎等等。


然后如果你要做智能问答你要知道现在最发达的技术是深度学习,使用的算法有 RNN/LSTM/Seq2Seq/等等一系列。


而我的清晰目标是在实习的时候给我的任务。当任务很明确的时候,所需要的语言就明确了,所要学习的算法也就明确了,很多东西就顺理成章了不用一头乱撞了。


📌从金融到科技


AI 的应用范围很广,每一个研究方向都是无穷尽的。由于金融公司很少与图像处理,NLP 等技术会有交集,而我强大的好奇心让我决定去纯粹的科技公司一探究竟。目前已投身于智能家居,目标是 Javis🌍


⚡人工智能/机器学习/深度学习


我经常在公交的广告牌上看见这些词,好像哪家公司没有这个技术就落后了似的。更多的还有强化学习,迁移学习,增量学习等各种学习。


这些词儿之间到底什么关系?


机器学习是人工智能的一种,深度学习是机器学习的一种。学 AI 先学机器学习。



计算机的算法与数学的算法的区别


理论知识对于 AI 算法工程师极其重要。敲代码只是思路的一个实现过程。这里的算法和计算机 CS 的算法还不太一样,AI 算法是偏数学推导的,所以数学底子还是需要点的,学的越深,要求越高。面试的时候,很少让手写代码,90% 都是在问模型抠算法细节。


在学校我是一个不爱记笔记的人,甚至是一个不爱上课的人。但是自从入了机器学习的坑后,笔记写的飞起~



机器学习的框架


按照数据集有没有 Y 值可以将机器学习分为监督学习、半监督学习和无监督学习。监督学习是分类算法,无监督学习是聚类算法。



机器学习的通用流程和相关技术如下图:



ML 这棵树还可以有更多的分支。先有个整体感受,再一个一个的解决掉。这里的知识点也是面试最爱问的几个,是重点呀!面试过的同学应该都不陌生了。


机器学习如何入门


机器学习之大,初学者都无从下手。说白了,机器学习就是各种模型做预测,那么就需要有数据,要想有好的效果,就要把原始的脏数据洗干净了才能用。数据内隐藏的信息有时候是肉眼不可见的,那么就需要一些相关技巧来把有用信息挖出来。所有绞尽脑汁使用的技巧,都是为了能预测的更准确。但是谁也没办法做到百分百的命中。


这里简单介绍下机器学习的三大块:传统的机器学习 ML、图像处理 CV、自然语言处理 NLP。


再推荐一个入门神器:


  • Kaggle (www.kaggle.com)


这是一个世界级的最权威的机器学习比赛,已被谷歌收购。上面的赛题不仅很有代表性,还有很多免费的优秀的数据集供你使用,要知道收集数据是机器学习的第一大难题,它就帮你解决了。入门不用立马参加比赛,把数据下载下来,尽情折腾就好了,要是没有思路,去网上搜别人的解题笔记和代码借鉴一下也很美好~因为这是大家都争相打榜的比赛,所以你并不孤单。


📌ML 入门该参加的赛题 (Titanic)



📌图像入门该参加的赛题(数字识别)



📌NLP 入门该参加的赛题(情感分析、quora 问句语义匹配)



等做完第一个 titanic 的比赛应该就有点感觉了。上面 4 个比赛我都做过,觉得很经典,很适合入门。


深度学习的入门算法有哪些


如今的样本输入可以是文字,可以是图像,可以是数字。


深度学习是跟着图像处理火起来的。甚至现在这个概念都火过了机器学习。


深度学习的算法主要都是神经网络系列。入门推荐 CNN(卷积神经网络) 的一系列:


  • LeNet5

  • AlexNet

  • VGG

  • GoogleNet

  • ResNet


自学如何寻找学习资料?


开源的世界,美好的世界❤


开源,我的爱!代码届里开源的中心思想就是,share and free😍


对于机器学习,网上的社区氛围特别好,分享的很多很全面,而且 MLer 都非常乐于助人。


介绍几个我经常逛的社区,论坛,和网页:


📌kaggle (www.kaggle.com)


全球最权威的机器学习比赛,已被谷歌收购。赛题覆盖传统机器学习、NLP、图像处理等,而且都是很实际的问题,来自各行各业。kaggle 是数一数二完善的 ML 社区了,赛题开放的数据集就很有用,非常适合新手练手。对优秀的 kaggler 也提供工作机会。


📌github (www.github.com)


全球最大同性交友网站,适合搜项目,开源大社区,大家一起看星星,看 issue~


📌StackOverFlow (www.stackoverflow.com)


代码报错找它,代码不会敲找它!所有与代码相关的坑,基本都有人踩过啦😂


📌csdn (www.csdn.net)


最接地气的博客聚集地,最常看的网页之一,一般用来搜索细节知识点或者代码报错时


📌sklearn (scikit-learn.org/stable)


专业做机器学习 100 年!各算法各技巧的例子 code 应有尽有


📌medium (medium.com)


创办人是 Twitter 的创始人,推崇优质内容,国内很多 AI 公众大号的搬运都来自于这里,medium 里每个作者都有自己独特的见解,值得学习和开拓眼界,需要科学上网


📌towards data science (towardsdatascience.com)


与 medium 很像,需要科学上网


📌google AI blog (ai.googleblog.com)


谷歌的 AI 团队维护的博客,每天至少更新一篇技术博客。刚在上海开的谷歌开发者大会宣布将会免费开放机器学习课程,值得关注一下,毕竟是 AI 巨头


📌各种大神的技术博客/个人网站


有很多的网站,会不定期的更新在我的个人博客里


有口碑的 AI 公开课平台


首先说明我没有上课,也没有报班,属于个人学习习惯问题。但考虑到学习差异性,所以还是总结了口碑排名靠前的课程系列。前提,需要有一定数学基础,没有的可以顺便补一补。


📌coursera (www.coursera.org/browse)


📌吴恩达 (Andrew Ng) 机器学习


📌deeplearning.ai (www.deeplearning.ai)


📌fast.ai (www.fast.ai)


专注于深度学习。Fast.ai 的创始人就蛮有意思的,是横扫 kaggle 图像处理的高手,不摆架子,也不故弄玄虚。中心思想就是深度学习很简单,不要怕。fast.ai 有博客和社区。Jeremy 和 Rachel 鼓励撰写博客,构建项目,在会议中进行讨论等活动,以实力来代替传统证书的证明作用。


📌udacity (in.udacity.com)


有中文版,课程覆盖编程基础,机器学习,深度学习等。


📌网易云课堂


碎片时间


科技圈也是有潮流要赶的,等你入坑就知道。


追最新的论文,最新的算法,最新的比赛,以及 AI 圈的网红是哪些~有条件的开个 twitter,平时娱乐看看机器学习板块还是蛮有意思的,有很多自嘲的漫画~


推荐几个我超爱看的 AI 主题美剧


📌硅谷(强推!简直是我日常生活,太有共鸣了~下饭剧👌)


📌西部世界(看的时候不要学我一直在思考如何实现这个那个技术😥)


实用的小技巧


📍浏览器首推 chrome


📍当阅读英文网页呼吸困难时,右击选择翻成中文(简体)


考过雅思和 GMAT,曾经我也是一个热爱英文的孩子,如今跪倒在海量技术文档和文献里苟活


📍搜索问题一定用 google,如果没解决是你的问题不是 google 的锅😂


baidu???ummm...... 别为难我...... 很少用


📍学会提问很重要,搜索格式推荐


语言+问题,例如:python how to convert a list to a dataframe


直接复制错误信息,例如:ValueError: No variables to save...


请把所有的问题往上抛,网上查比问人快!总是问别人会引起关系破裂的~


📍学会顺藤摸瓜


当你读到一个非常不错的技术文档时,看完别急着关掉。这可能是一个个人网站,去观察菜单栏里有没有【About】选项。或者这也可能是一个优秀的社区,看看有没有【Home】选项,去看看 po 的其它的文章。


📍很多优秀网站都是英文,科学上网必不可少


📍学习费用不来自课程,可能来自于硬件要求,学生党要利用好学校资源


小结


虽然说了那么多,但还是要说请放弃海量资料!用多少,找多少就好了!(别把这句话当耳旁风🙄)


资料不在量多而在于内容是有质量保证的。很多课程或者公众号只管塞知识,你有疑问它也解答不了的时候,这样出来的效果不好,就像一个模型只管训练,却不验证,就是耍流氓。


如何选择编程语言/框架


首选英语!!!(咳咳,我认真的😀)


说到底,语言只是工具,不去盲目的追求任何一种技术。根据任务来选择语言,不一样的程序员选择不一样的编程语言。很多人最后不是把重点放在能力而是炫工具,那就有点走偏了。


据观察,在机器学习组里 R 和 Python 是使用率最高的两门语言,一般你哪个用的顺就用哪个,只要能达到效果就行,除非强制规定。


我使用之后的感受是,人生苦短,我用 python😎


用 python 建个模型到底多难?


算法任务大致分为两种,一种是普通算法工程师做的 调包、调参 ,另一种是高级算法工程师做的,可以自己创建一个算法或者能灵活修改别人的算法。


先说说建个模到底有多简单吧。


📌有优秀的算法封装框架


tensorflow / caffe / keras /...


📌Auto ML 是不可阻挡的一个方向


Auto ML(auto machine learning),自动机器学习。就是你只管丢进去数据,坐等跑出结果来就行了。前一阵子谷歌的 CloudML 炒的很火,愿景是让每个人都能建模,但毕竟这种服务是要钱的。所以我研究了下开源的 auto sklearn 框架的代码,发现了什么呢?建模到底有多简单呢?就,简单到 4 行代码就可能打败 10 年工作经验的建模师。


再说回来,如果你自己根本不知道自己在做什么,只能跑出来一个你不能负责的结果,就是很糟糕的,那还不是一个合格的算法工程师。你的模型必须像你亲生的那样。但是,只要你想,绝对能做到的!


学习 python 电脑上要装哪些东西


📌Anaconda


对,就是这么简单粗暴,装这个就 ok 了


学 python 的应该都会面临到底是 python2 还是 python3 的抉择吧。语言版本和环境真的很让人头疼,但是 Anaconda 惊艳到我了,就是可以自定义 python 环境,你可以左手 py2 右手 py3😜


推荐几个 python 的 IDE


📌Spyder


Anaconda 自带的IDE。界面排版与 Rstudio 和 Matlab 很相似。输入什么就输出什么结果,适合分析工作,我写小功能的时候很喜欢用。


📌Jupyter Notebook


Anaconda 自带的IDE,属于 web 界面的。当你程序跑在虚拟机,想调代码的时候适合用。


📌PyCharm


对于写项目的,或者代码走读的比较友好。当你需要写好多 python 文件互相 import 时,特别好用。


我的笔记本配置


(不考虑经济约束的请忽略这条)


牌子+型号:ThinkPad X1 Carbon







请到「今天看啥」查看全文