我叫王东,90后,和大家分享一下我的人工智能转型之路。
农学毕业,投身互联网做销售
机遇难求,养殖梦碎
我是土生土长的农村人,小时候经常和小鱼小虾打交道,上大学的时候就选择了农学专业,想着毕业之后回老家搞养殖种植。
大学期间,我看到了一些关于养殖龙虾、稻田套养的资料,就跟我父母商量,让他们承包一块稻田或者鱼塘,养殖龙虾。但当时我父母坚决不同意,就没有做成这个事情。
毕业之后,我想自己承包鱼塘搞养殖,但是没有资金,父母也不愿意支持我,所以最终还是没做成。
到了去年过年的时候,我们家那边很多人都已经开始在自己的稻田里面套养龙虾了。看到很多人做这个,我父母开始后悔为什么早没听我的。
可惜世上没有后悔药,总之我的农业梦想是暂时告一段落了。
果断决定,放弃读研
大学毕业之后,本来想直接工作,但是我的专业很少对口的岗位。大部分同专业同学都是去卖农药卖饲料之类的。
于是我选择了保送本专业读研。不过读了一年多一点,我就自己退学了。
在学校导师要求天天去实验室,但是去了实验室没有事情做。同学都是带着电脑去实验室,玩一天的手机电脑晚上回寝室。
我当时也不知道该学点什么,觉得这样读研很浪费时间,就退学了。
现在回头想想,当时对读研的事情认识得不太到位,不然的话现在的工资应该会高一点。
保险销售 & 银行客服
我研究生退学是在2016年的10月,出来之后先是在泰康人寿做了几个月的保险电话销售。
之所以选择一个和专业相差这么大的岗位,是因为我读过很多销售方面的书籍,也认识一些做销售的人,对销售工作很感兴趣,自己有心成为一个顶级的销售高手。
在泰康做了五个月,成绩不太理想。
之后又到银行当客服,具体工作是:信用卡的报账单到了,提醒客户还款日;客户欠款了,催他们还款;等等。
这两份工作都是在合肥的时候做的。
好友相邀,奔赴上海
我的一个大学同学在2016年8月去了上海,做人工智能、大数据的培训的招生顾问/课程顾问,其实就是销售。
他是学生物的,生物专业的本科毕业生也不太好找工作,所以他也转行了。
他在上海工作了一段时间之后,了解到我的工作状况不太好,就跟我说,可以考虑到上海这边做销售,比合肥容易赚钱一点。
在他的邀约下,我在2017年10月到了上海。
进阶互联网销售
到上海之后我做了两份销售的工作。
第一份工作是在宜信,通过电话方式推销贷款。这家公司办公区域二手烟很严重,而我对烟过敏,所以没做几个月就辞职了。
第二份工作是在一家教育机构做专升本的课程顾问。这份工作做得还可以,比我以往的销售业绩来好不少,每个月都能开很多单。
而以前在泰康人寿做电销,和在银行客服让客户办分期信用卡分期的时候,成交的单数都不多,工资也少得可怜。
这样,我在专升本课程顾问这个职位上工资还好,自我感觉有点满意。
转型之旅,向人工智能挺进
在2018年初的时候,我同学跟我说他想辞职了。因为他发现自己招进来的学员,零基础进来学大数据或者人工智能,培训完成后找工作,工资比他高了很多。他也想去做大数据技术岗位的工作。
2018年2月,我同学自己在他原本任销售的培训机构报名成了学员。到了2018年8月,他就找好了新工作,月薪16K!
我其实很喜欢做销售,梦想着有一天成为top sales,赚很多钱。但是,我也发现自己的销售工作做得并不好。
为此买了一些销售方面的书籍、课程学习,可是学完之后,并没有达到没有理想中的效果。应该是自己不适合做销售,于是,听到我同学的转行的事情后,我也决定转型了。
我听我同学说,人工智能(AI)还有大数据(Big Data)前景非常好,待遇也高,人才的需求量也大。
这时我就想,人生一定要善于抓住机会,看到可行机会一定要好好抓住,一旦错过就很难再挽回了。前些年,我错过了养龙虾的机会。不能再错过AI和Big Data的机会了!
于是,在接下来的时间里,我就一边上班做销售工作,一边自学相关课程。
整理基础,着手学习AI技能
制定学习计划
我问我同学:做人工智能,需要学什么课程?
他说:数据库要会一点;python也要会;数学基础要好;而且工作中多少会涉及到爬虫;还有就是数据分析、机器学习、深度学习都要会一些。
根据他的指导,我给自己制定了一个学习计划:
1. 数学基础:导数、微积分;简单的矩阵运算(比如说矩阵的转置,乘积等),矩阵的求导、矩阵转置的求导;概率统计知识,比如全概率,贝叶斯公式等。
2. Python编程:基础数据类型(字典、列表、集合之类);循环(while)、条件(if)结构;函数;os、datetime等常用模块;面向对象;会多线程、多进程能提高效率;会爬虫更好。
3. 数据分析:数据库;python做数据处理的pandas、numpy库;会matplotlib等绘图库更好。
4. 机器学习:线性回归、逻辑回归、KNN 、KMeans、决策树、GBDT、朴素贝叶斯,隐马尔可夫;以及深度学习。
原有基础
其实学任何知识,如果有一点相关的基础,学得就会较快一些。
我之前在大学学过C语言,虽然不太深入,但多少了解过。算是有编程基础。
而且,我的数学比较好的。大学数学我都没有听过课,然而高数、线性代数,还有概率论,考试都是在95分以上。数学基础自我感觉还可以。
我的英语也还可以。阅读英文资料都没有问题。
我相信拥有这些基础是可以应付人工智能学习的。
决定自学
我没有上辅导班,全部都是自学的。
为什么不报培训班呢?主要两个原因:
- 我没有那么多钱;
- 我听那个转行成功的同学讲了需要学习的内容,觉得自学可以搞定。
业余用功
因为白天还在上班做销售,所以学习都安排在晚上下班之后,和周六周日不加班的时候(一般周六要加班)。
第一步,我学了数据库。
总共花了两周的时间,只学了MySQL的增删改查和建表。因为听我同学说,数据库大都差不多的,先学个基础,工作中遇到不懂的再问、再搜索就可以了。
这些内容不太难,而且很多网上平台都有视频或者免费课,收费课程也很便宜。
第二步是Python编程。
也是在网上平台,找的课程。分为几个部分来学习:
最开始学基础的东西:数据类型,控制结构,函数,和面向对象等。
当时没有学太深入的东西,很多模块(比如OS模块),我学习的时候都不知道。那些模块是在工作之后,需要用时才学的。
之后,学了一点点爬虫。只看了爬虫中发送http请求的方法:get和post。
我自己在网上找到爬虫的样例代码,把它抄下来,自己做了一个非常非常小的爬虫,爬了一首歌。
那时候自我感觉还可以,居然把音乐给扒下来了(^_^)。但是进入公司之后才发现,当时掌握的实在是太浅太浅。
第三步是数据分析。
主要学了的numpy和pandas。这两个模块非常非常重要,特别是pandas,数据清洗、特征工程都要用得到。
学习它们。我花一个多月的时间。一边看视频课程,一边敲代码,完完全全的就是课上怎么说,我就怎么写。
pandas还有可视化相关的内容,不过我并没有学习这一块。
克服迷茫,硬啃机器学习
迷茫疲惫独自扛
在学习过程中,我感到挺累挺迷茫的。
转型的过程中会遇到很多问题,懒惰,每个人多少都会有一点。
独自摸索中,你不知道你选择的方向对不对;也不知道之前的工作要不要继续做下去,会不会取得很大的突破。这些都是未知的。
机器学习任务重
学习了Python和数据分析的基础之后,就开始机器学习的内容了。
这一块儿我学得不太好,最初是从最普通的最简单的线性回归和逻辑回归开始的:
首先是线性回归:线性回归的核心是最小二乘法,原理和推导过程当中,会用到一些数学方面的知识,比如说微分、矩阵,和矩阵求导,并不是太复杂。
实际的应用中,我们只需要把数据简单处理一下(有时候甚至可以不处理),再调用别人写好的库,就能够得出结果。网上有案例,对照着来尝试几次的话,就能够掌握。
其次是逻辑回归:主要用的是sigmoid函数,还有概率方面的知识,也并不是太复杂。
接着是决策树:决策树又分为分类树和回归树,两者原理不一样。决策树我掌握得不够好。
之后学了KMeans和KNN,都比较简单,前者学得还不错。
然后是GBDT(梯度提升决策树),只是稍微学了一点。
至于朴素贝叶斯,隐马尔可夫等模型,最初并没有学。我感觉太复杂了,学不来。
在这个过程中,我发现,数学知识会用到,但用到的都比较简单,不是非得掌握到很深入的程度不可。
训练营中战友多
2018年11月,因为已经下定决心转型了,我感觉需要更多的时间花在学习上面,于是就从销售岗位辞职了。
当时也比较巧,刚辞职正好看到一个机器学习训练营——李烨老师在GitChat平台的“21天入门机器学习训练营”,我就报了,系统地梳理了机器学习方面的知识。
在训练营里面,我把线性回归、逻辑回归、决策树、KNN、朴素贝叶斯、GBDT的原理,重新学习了一遍。
自己一个人学习,没有人督促,很容易就懒劲上来了;没有人跟你作比较,不知道自己学习的进度是快是慢;还有,也不知道花了这么多精力来学习,最终就是能不能转型成功。
通过参加训练营,每天和很多小伙伴一起学习,有助教监督,还有老师答疑,感觉动力足多了。我在训练营里打卡、互动都比较积极,结营的时候还成了优秀学员。
这样,我感觉自己可以去面试了。
建立自信,不为岗位描述所限
准备简历
我从网上下载了简历模板,还从我同学那边要了几个,参照之下自己写了份简历,在各大招聘网站上投了一下。总共大概投了五六份。
我当时没有考虑到的一点是面试时间,因为我是在12月投简历的。12月是招聘的淡季,很多企业已经不招人了,面试机会非常的少。
不过简历投出去之后,我还是获得了几个面试机会,下面慢慢讲。
不必拘泥于“岗位要求”
大家看到很多招聘AI技术职位的“岗位要求”都会写:要有本科以上的学历,金融、数学或者计算机方面的专业,还有些要2-5年不等的相关工作经验等……
虽然他们写的是这些,其实不满足要求的,也能够进去。
专业并不是很重要,经验也不是硬性规定。最关键的还是你会什么技能,有什么项目经验,能解决什么问题。
基本上只要在面试的时候,回答上来面试官的问题就可以了。别人邀请你去面试了,说明就有机会。
我本科是农学方面的大学,学校并不太好,安徽省内排名只能排在第五或者第六,不是985,也不是211。我也不是计算机、数学方面专业的。
我投了简历之后,在12月份招聘的淡季,还是有五家公司邀请我去面试。
这五家里,只有一家是我直接投的简历,有两家的HR直接联系我,还有两家是两个猎头联系我之后给安排的。
上阵临敌,多多面经分享给你
第一次面试
面试的第一家企业是在boss直聘上面投的简历,做垂直领域的电商平台。当时我是第一次过去面试,挺紧张的。
两个人一起面试我:一个是技术经理,另一个不太清楚是什么职位。这次只经历了一轮。
在面试的过程中,他们先问:pandas读取数据的时候,如果数据量非常的大,比如说有好几亿条的数据,应该怎么处理?
因为之前没有遇到过,也没有考虑过这个问题,我当时回答的比较白痴,我说:直接read,然后想取某些行的话就df.iloc,第一个参数写你要的那个行数的范围,第二个参数就是所有的列。
他们听完对视笑了一下,继续问我第二个问题:要预测接下来的一个月的销量或者一个季度的销量,该用什么方法?
我当时想了几分钟,最终我没有给出一个好的解决的方法。
然后他们又问:你会不会修改别人写好的库?
然后我就硬着头皮说:应该会。因为原理都是差不多。
他们还问:你上一份的工作做了什么事情?用到了什么工具?实现了什么结果?
这个我回答得很不好,因为我并没有实战经验,简历上面写的项目只是我在网上找的几个小项目,自己对着代码敲了一遍。
问了这几个问题,就让我走人了。
这是我的第一次面试,很失败。
第二次面试
第二家公司是一个猎头推荐的,这家公司承接其他企业(比如银行)的项目来做。这次经历了两轮面试。
第一轮就简单问了几句。
第二轮是一个技术人员,可能是主管级别。
他首先让我介绍项目经验,并没有追问太多。然后开始问技术问题。
他问:之前在训练模型的时候,用的数据集是多大的?
我跟他说:大约40兆。
他又问:你用的数据是多少维度?
因为我不知道,就随便说了一个,我说:十几维,12维左右。
他再问:12维的数据,有多少行?
我说:大概40万行。
他说:40万行,12维有40兆这么多吗?
我就说:是清洗了之后,然后才有40兆的——因为40万行十几维的话,数据量应该就应该不止40兆。
这个问题当时回答得并不是太好。
再然后,他让我介绍逻辑回归线性回归的区别。
面试前我听转型成功的那个同学说,面试时,一般会要求推导线性回归和逻辑回归,所以我就做了准备,但是没让我推导。
他又问:GBDT的弱分类器是什么?
因为我好像在网上看到过说,GBDT的弱分类器可以是决策树、线性回归,或者朴素贝叶斯之类的。然后我就把这些回答他了。
他就笑了,跟我说:西瓜书你没有看?
我说:我买了,但是没怎么看。
他说让我回去好好看看那个书。
我问他:GBDT的它的弱分类器到底是什么?
他说:就是决策树,没有其他的。
他还问了决策树分叉的原理。
我回答他有基尼系数,信息增益、信息增益率之类的。
他又问:朴素贝叶斯分为哪几类,有什么区别?
这个问题我也没有回答上来。
这轮面试就这样结束了,他让我在面试的房间里等。半个多小时之后,人事过来告诉我说面试没有通过。
他们觉得我有一定的基础,但是很多原理就是并不是太懂,如果要进公司来工作的话,可能需要一段时间的上手。而他们希望招到的人能够最快时间投入工作。
第二次面试,就这样以失败告终。
第三次面试
经过两次失败的面试,到第三家公司面试,我就相对有经验一些了。
他们问的问题有我在训练营和前两次面试中遇到过的,这些基本上我都答对了。
最后他们还问了一个问题:GBDT怎么看特征的重要性?
这个问题的答案我不知道。我直说不知道。
然后面试官告诉我:GBDT里面有参数,可以通过打印参数来看到各个特征的重要性。
他们问我会不会数据可视化。
我说:会一点,但并不是太熟。
他们又问了点别的问题,就让我回去了。第三次面试也以失败告终。
第四次面试,成功!
第四家公司的面试比之前简单得很多,问题量也是最少的,是我遇到的面试当中就是最轻松的一个。
面试官首先让我自我介绍,介绍完后就让我讲讲之前项目经验,然后问了几个非常简单的问题:
(1)线性回归和逻辑回归的区别?
(2)SVM的原理是什么?
(3)会不会爬虫?
(4)Python学了多久?
(5)Pandas的DataFrame有哪些方法?做数据处理、数据分析,常用到哪些方法?
我回答得自己比较满意。
最后面试官又问我上一份薪资是多少?
我说,上一份工作薪资10K,其实很心虚。因为,在合肥工作的时候,工资也就两三千,到上海后有时三五千,有时能拿到八九千。不过九千多只拿过一次,大部分时间拿的工资还是比较少的。
他说声知道了,就让我走了。
当天下午我就收到了offer!
给的薪资虽然比之前工作的薪资都高了不少,不过感觉相比同学的16K还是有点低。所以我想再面试几家看一下。
第五次面试
第五家是一个汽车企业,他们要给一个博士生找一个做数据挖掘的助手。
他们对学历和技能的要求都非常高,我没有通过。简单地问了几个问题,就直接走人了。
这样我就决定去第四家——拿到offer的那家公司上班了。
变身之后,如履薄冰新人期
新人上岗,惴惴不安
2019年初,我进入了现在的公司。
刚进公司非常忐忑,虽然自己会一点python,懂一点机器学习的原理,但是没有在公司真正实战过,到底不踏实。
进公司的前两天,没人给安排任务。
开始我以为需要自己找事做,就去问了我们主管,有没有什么事情要做,或者有没有需求文档之类的给我看一下。他说这两天什么都不用干。
到了第三天,他开始给我分配任务。
任务到手,一团乱麻
我接到的第一个任务是和一个老员工一起做爬虫。
关于爬虫,我只会用最简单的方式发get/post请求,参数都不知道怎么加。他们用的是scrapy框架,我都没听说过。
接到任务的第一天,我感觉自己啥都不会,非常非常非常地焦灼。
那个老员工给了我代码,我跑了一下,发现那个网站网页结构变化了,原来的脚本跑不成功。然后我就在那儿坐着纠结了一天。
我们经理就坐在我对面,我的表现他都看在眼中。他当着我的面打电话给人事,说:以后再招员工的时候,一定要仔细一点。
我就想他们会不会赶我走。
虚心求教,学会爬虫
当天晚上,我找那个老员工请教:爬虫到底怎么做?爬虫框架到底是怎么一回事?
老员工人很好,他跟我讲了50分钟。听他讲完我才发现,scrapy框架其实很简单,需要修改的基本上只有spider文件。我又马上从京东买了本书,第二天到。
第二天上午的时候,我试了一下头天晚上学的方法,一边就是回忆同事教我的知识,一边在网上查,捣鼓了一整天。
第三天我对着书,基本上能够搞定最简单的json类型的爬虫了。
json大家应该都知道, import json, json.loads( response.text ),就能把它解析为字典或者列表格式,它们是Python内置的数据类型,处理起来非常方便。
那些天,我每天早晨六点钟起床,看爬虫的视频课程。每天晚上自己加一两个小时的班,专门学习爬虫。
有一次爬虫需要用到正则表达式,当天下班之后,我就在网上找了相关的资料来学习,连续学习了三个晚上加三个早晨。
其实在应用的过程中,只要你能对照着网上的代码,自己敲代码,运行有结果了,就会感觉非常简单,容易掌握了。
这样,我用一个星期能完全搞定一个爬虫了。后来缩短到三天,再后来缩短到一天,再后来,简单的爬虫半天就行了。
职责更新,成为骨干
做了一个月爬虫之后,我开始做数据分析方面的工作。
数据分析,我个人感觉学得还可以。我们小组其他的人不怎么会数据分析,而我之前自学到的,在工作中都用上了,给同事们帮了很大忙。
于是,组里同事有数据分析不懂的地方都来找我。
初遭裁员,忐忑成为幸存者
贵人指点,态度为先
我刚入职的时候,问了一下我同学:刚进公司,有哪些需要注意的事情?
然后把第一天主动问主管要任务和文档的事情和同学说了一下。
我同学让我没事别瞎问,否则会显得我很业余。IT公司基本上不会有人没事找事做,而且也并不是每天都那么忙。
他还特地告诉我:如果你技术不是很好,那就每天晚上晚点走。这样即使事情做得不是太好,但主管、同事都会看在眼里,知道你努力了,至少比他们晚走很多。如果事情做得不好,下班还走得早,同事们就有话说了。
这两件事我都听了他的。从一开始,我就每天下班走得很晚,比我们主管、经理都晚,尽可能用多出来的时间熟悉业务,学需要用到的知识。
亲睹裁员,职场无情
很不巧,我进公司得第二个月(刚开始做数据分析不久),公司就开始大规模裁员了。
有一天下午,有个人——应该是别的部门的经理——跑到我对面找我们经理,拿了一个名单跟我们经理说:这些人都要裁掉。你看他们,都下班就走,跟实习生一样,直接裁掉不要了。
我当时很忐忑,以为上面会有我的名字。但是后来我才知道,被负责人找谈话得才会被裁,我没有被找谈话,最终留了下来。
我们小组的一个同事,比我早来一个月,被裁了。还有一些工作了一年多,两年的同事,也被裁了。整栋楼里,很多人都被裁了。
结果驱动,贡献为准
我们公司很大,各个部门都有裁员。被裁掉的,绝大部分都是下班走得比较早,或者平时工作中,效率比较低的那种。
效率低其实不一定不是技术不好,很多是技术能力很厉害的,但是不愿意干活。
我们小组被裁的那个同事就很厉害,Python编程、数据库、图像处理都会,尤其爬虫很精通。
同样的爬虫任务,基本上他半天或者一天就能搞定了,我要做两三天才行。
但是,那位同事即使半天就能做完的任务,他也要做一周。非要等到最后一天才跟主管说他做好了。
他是怕主管给他分配新的任务,他不想多做,一周就做一个任务,实际用时半天或一天,空余的时间用来学习别的东西。
他的技术比我好的太多,想法也很好,但是最终他被裁了,而我没有。
确保产出,成为优选
很幸运,我在历时一个多月的裁员中幸存了下来。究其原因:
- 一方面是因为自己主动加班,表现出了良好的态度;
- 另一方面是因为相对做事情的效率不错。
虽然我做事情的效率其实不高,但是我做完就会向主管汇报。无论是否再给我安排新任务,都让他知道我的进度。
所以我给他们的印象应该是刚入职是个菜鸟,但是经过两个月,进步不少,不完美,但是至少总能交付结果。
相反,被裁的同组同事即使做好了也不及时的跟主管说,他在主管看来,效率就不高了。而且他还踩点就走,不愿意加班。
独立求解,互帮互助
在工作中,遇到棘手的问题,我会先自己查,实在自己找不到答案,再问我们的那个老员工。
刚开始基本上都是我问他,但是后来他遇到不会的也会来找我讨论。组里其他同事遇到数据分析的问题也会来找我。
我觉得,后续即使再裁员,应该也不会裁掉我。即使真的裁了我,我现在的技能也足以找到新工作了。
规划未来,学无止境需磨砺
虽然我是以机器学习算法工程师的身份进入公司的,但是具体工作还没有涉及到机器学习。
现在,我会在比较空闲的时候,自己跑几个机器学习模型,练习一下。比如前几天刚跑了一个逻辑回归。
之前的机器学习理论都是自学的,不够深入。我准备在接下来的时间里先把机器学习学精通,然后再学其他的。
我个人是比较喜欢自然语言处理,把机器学习学精之后,我会再学自然语言处理。
数据库也要再深入学习。数据库非常重要,只会简单操作是不够的。
这些学完后,会再学Java和大数据开发方面的课程。可能会报班,也可能会通过从网上找视频课,买课程的方式来学。
目前的打算是这些。需要学的还有很多,学无止境。
心得体验:机遇需要自己去抓住
有两句话送给大家,是我根据自己的经历总结出来的:
- 第一,要善于抓住机会。 我以前想搞养殖的,却没成功,错过了非常好的机会。现在第二次的机会,决不能再错过了,所以我选择了转行人工智能。
- 第二,一定要找到适合自己的领域! 虽然每个人都可以通过学习进入自己不太擅长的领域,但是那样会很吃力。还是在自己擅长的领域发力,才能事半功倍。