前言
'36 岁'、'外贸行业'、'生物专业'、'普通本科毕业',这些标签仿佛都与 AI 算法工程师无缘,但就是这样集 No-Target 标签于一身的同学,仅用了半年时间就成功转型 AI 算法工程师。
在分享过程中,令大家惊讶的是,该同学其实很少提及薪资,虽然知道 AI 算法工程师薪资并不低,但在经验分享的过程中,他很少去谈及转型成功后的薪资。相反,他把目光放在了学习过程本身上,强调的是自身通过比赛、预习、复盘、讨论获得了哪些宝贵的经验和知识。
山高则同行者寡,也许,只要努力向上攀登,哪怕没能爬到山顶,也会比踌躇不前的人看到更多更远的风景。
个人背景介绍
首先介绍一下我自己,广东医科大学本科毕业,生物医学工程专业,发表论文是 0 篇,从事外贸行业 10 多年,年龄 36 岁。
36 岁对于做 IT 来说好像是比较老的了,所以先致谢一下带我入门的老师。首先要感谢带我入坑的导师,我当时为什么参加培训课程,也是因为我向你们一样有很多问题,而这些问题,都是导师给我解答的,他还把我需要的这些纸质版的书籍寄给我。同时也感谢班主任,他是非常专业的,然后在学习的前期、中期、后期都给了我非常多的鼓励。
因为有十几年没有学习过数学,也从来没有接触过编程,所以那时候感觉一听到要学数学,让人感觉很慌,导师一直给我打电话来给我鼓励,然后慢慢地就跟上老师脚步了。其次要感谢授课和助教老师,我问的非常多的问题,他们也非常耐心地给我解答。在就业的过程中,就业指导老师给了我非常多就业上的指导,包括简历的撰写、怎么投简历、投什么公司、怎么面试这些都给我了很多的一些支持和见解。
接下来就进入正式分享环节~
学习经验分享
刚才有好多同学都在问:如果是零基础的能不能学好?其实我觉得态度非常重要。大佬告诉我们人工智能需要三好,数学好、编程好和态度好。态度好就是要不断地学习,甚至要比机器学习还要快。如果我们数学基础不好,编程不好也要去学习,保持良好的心态,才能把人工智能学好了,所以大家不要去担心你是零基础或者是没有什么数学和编程经验,只有树立了良好的态度,才能继续编程和数学的学习。
接下来就按我的学习过程分别跟大家讲一讲在每个版块我是如何进行学习的。
Python 学习方法
// 环境安装
环境安装首选 Anaconda,就是基本上在 windows 下面都是一键安装,基本上什么都不用设置,一直点击下一步就可以完成了。安装之后会集成一些比较优秀的库,比如 Jupyter Notebook,Spyder,Numpy,Scipy,Matplotlib、Pandas 都是集成的,平时可能会用 Anaconda 来安装其他必要的环境,比如 Pytorch。
// IDE
IDE 的好处就是它可以把你的程序、代码、结果和图片放在一起,方便你去学习。在这里我们可以很方便地嵌入需要学习的数学知识或者数学公式。当然也还有其他优秀的 IDE 也是推荐的,比如说 VSCode、PyCharm、Spyder。在国内用的比较多的是 VSCode 和 PyCharm 这两个。其实没有绝对的是说哪个 IDE 好,哪个 IDE 不好,只要你觉得上手容易,不会觉得很困难,我觉得哪个 IDE 适合你就用哪个就可以了,基本上公司也不会规定你用哪个 IDE。
// Python 学习书籍推荐
Python 书籍就是小甲鱼的《零基础入门学习 Python》。这本书是领我入门的导师寄给我的纸质书籍,这本书非常好,讲的比较通俗易懂。学 Python 主要掌握它的语法,大家要最好掌握好 list、dict 这些等数据类型,书不用太多,一本就够了。这本书带领入门是绝对没有问题的。里面会有一些练习,建议尽量先自己做完,再去对比答案。代码需要大家多去写,不管对与错,都要先写,有错误再去改正。
数学学习方法分享
数学的学习主要就是高等数学上下册 + 概率论 + 线性代数,对于已经有了一些数学基础的同学,我们不一定是要按照高等数学→线性代数→统计学的模式去学习。我们可以先学习一下线性代数。为什么是学习线性代数呢?因为我们需要用到很多一些矩阵的运算,所以我们去多去先去了解一下线性代数的这本书。在有了 Python 的基础后,我们可以根据公式去编程,在加深对数学的理解同时也能促进编程能力的提升。
高等数学主要的是要学习,重点是学习导数,微分,泰勒公式,另外函数的极值问题、偏导数、方向导数和梯度也挺重要的,这里的梯度也就是我们在深度学习里面用来做反向传播的,所以说梯度也是也建议大家多留意一下。概率论是整个 AI 学习过程中都是会涉及到的,因为我们所谓的预测,实际上都是概率的支持。最主要的就是要去了解随机变量的数字特征,比方说数学期望、方差、矩、协方差矩阵。课上的时候也可以问老师有哪些比较重要的知识,老师都会给我们圈出来,我们可以多花心思在圈出来的这些知识,多下功夫去学习。在学了 Python 之后,可以结合数学的公式写一些代码,将它们可视化出来,这样有助于理解函数的一些性质。
机器学习方法
机器学习的书籍推荐两本书籍:第一本是李航老师的《统计学习方法》;第二本是周志华老师的《机器学习》,俗称西瓜书,因为里面有很多例子都是用西瓜来做例子的,这两本书 2 选 1 就可以了。
// 机器学习方法
之前我是直接自学,啃的是《统计学习方法》,里面公式很多,啃得自己都快崩溃了,那时候基本上就是抄书,每天就是在看那个公式还有推导,基本上三天就要用完一支笔。我当时学得有点崩溃,然后给班主任打电话说这个挺难的,我担心自己学不好。他一直安慰我,让我先不要着急去学习这个,等后期的老师上课的时候慢慢跟上就可以了。听了班主任的话以后我就把这个书放下了,老老实实先去学习数学以及 Python,然后等到后面老师上课的时候,经过老师的一些指点和课上的一些公式的推导,还有自己慢慢地也就掌握了这些知识。
机器学习这块的首要学习是要先理解什么叫监督学习、无监督学习、分类问题、回归问题,这是贯穿整个 AI 的学习过程,而且这些问题是比较简单的,所以一定要了解透彻。其次要从简单到难地去理解各种算法,比如 KNN、决策树、线性回归,逻辑回归等。在学习的过程中,如果大家有能力的,最好是去手推算法,比如说像决策树的一些算法的过程。经过手推之后,你会对这些算法有很深的印象,去理解这些算法是如何运作的,它有什么优点,还有什么缺点?理解之后,我们就可以利用 Python 把这些算法实现出来。在实现的过程中,通常我都会把算法的推导过程、说明,代码写进 Jupyter Notebook 里,这样方便以后去查找再继续学习。比如说之前可能有些没有学透,但是又想到了一些 idea,想返回去再查找学习,那么 Jupyter Notebook 能够比较方便找到原来哪些有问题,标注好以后就很容易再学好。
深度学习方法
// 深度学习书籍推荐
深度学习的书籍我推荐是 Ian Goodfellow,它有个名字叫花书,大家可以在网上里面都可以搜索得到的。今天给大家推荐的这些书籍,都有电子版提供。我只不过是自己比较喜欢纸质版的,购买了一些纸质的书籍。电子版的有个好处就是你可以随时随地都可以看,比如说你工作闲暇之余你都可以看,上下班的通勤时间你都可以看,很方便。
// 深度学习方法
深度学习它主要就是神经网络和卷积神经网络这两大块组成。你必须要了解神经网络它是怎么样运作的?现在我们用的神经网络可能用的比较少,但是也是还会有用到。卷积神经网络基本贯穿全部课程,所以你要了解卷积运算是如何运算的。有编程基础的同学可以去手写卷积运算的过程,然后要了解各种激活函数的使用。因为神经网络和卷积神经网络在不用激活函数的情况下,它都是线性函数。如果都是线性函数,它的泛化能力是不好的,加上了这些激活函数,可以改变它的非线性性,就可以增加它的泛化能力。
当然在这学习的过程中,你还要了解不同的网络结构,比如像我刚才说的自编码器、对抗生成网络这些结构。因为有一些是适用于专门领域的,所以这些结构只需要进行基本的了解,并不需要深入地把每一个结构都弄懂。在学习的过程中,我们要熟悉框架的 API,课堂上使用的是 TensorFlow,大家要太在意是用的哪个版本。大家只要关注底层的知识有没有学好,因为从 TensorFlow 到 Pytorch,我大概也是只花了一个星期的过程,现在基本上都是在使用 Pytorch,基本上也没有使用 TensorFlow,可能偶尔会写一点东西,但是比较少,基本上 99% 的用 Pytorch。经过学习我们可以复现一些经典论文使用的网络结构,比如说 VGG、ResNet、AlexNet 等等,你都可以去尝试去复现,当我们复现的过程中可以单单只是复现网络就可以了,不用实际的去训练,因为你只要能复现出网络,训练就很简单了。
转型、面试经验分享
经验与项目缺失问题 我在面试和转型的过程中被问到了很多问题,例如:
你做过什么项目? 项目是怎么样做的? 遇到什么问题? 遇到问题的解决方法是什么?
相信这些问题也是很多小伙伴会被问到的问题。对于转型的小伙伴,我想问大家两个问题:你为什么要转型?哪些公司需要你这种复合型人才?这两个问题也是我现在的老板当时面试时候问我的,我希望大家可以带着这些问题去学习,再深入了解自己想要的工作,转型就会更容易,更有针对性。
我的项目主要经验主要来自比赛。虽然有些比赛我只能提交一两次的结果,但是我起码能把比赛的提供的这些东西跑通了,能产出正确有效的结果。跑通以后再想想着怎么去优化这些结果。如果你连结果都跑不通,这个就很说不过去了。有一个比较好的是 Kaggle 这个比赛平台,每一个比赛都会提供 Notebook,大家都可以去下载,参考人家的比赛的一些经验,里面有很多大牛的分享。
课程项目经验分享
其实每一个课程,老师都会提供一些案例的。基本上老师提供的这些案例我都会由头到尾自己重新再去写一遍。有些直接不看老师代码,自己就直接写,当然你有一些编程基础之后你才可以去做这样的事情。我们人工智能入门的第一个例子是 MNIST 手写数字识别,这是我觉得大家必做的一个例子,这个例子我到现在可能已经做了几十遍,现在最好的成绩是 788 个可训练的参数,但是仍然还可以达到 98% 的准确率。
每次做 MNIST 手写数字识别,我都是带着不一样的 idea 去做实验的,有时候虽然结果不会很好,但是这些实验的过程是非常宝贵的学习资料。比如说 MNIST0-9 的数字识别是一个分类问题,你要去了解分类问题,有什么你需要去解决的,遇到问题,当然在这个过程中会产生很多问题,每次都会用 Notebook 记录下来,一到周末上课的时候我就会把这些问题发出来问老师。
有一次我记录下了 14 个问题,把它发出去问老师,老师也惊呆了,怎么一下子就有那么多问题了。学习的过程中肯定会有同学一起的,可以多参与讨论,即使见解不一样也没关系。讨论会使我们有更多的想法。在这个过程中还是多写代码。尽管老师给了参考代码,也要尽量自己多写,自己多写了,可以增加自己的代码量,之后遇到问题就可以自己去完成,而不用参考老师的一些代码了。
毕业设计项目及比赛积累 学习到后面会课程会有一个毕业设计,毕业设计的项目大家可以选择一个更有难度的项目或者比赛。建议大家去参加比赛,比赛有时候会给大家有很多的不一样的见识。有一些项目是非常好的,像之前其他小组做的一个项目,是通过微信小程序调用去做一些人工智能的识别,那个项目我觉得是非常好的。大家也可以去尝试,有什么好的项目也可以去做。为什么是建议比赛?因为现在很多比赛的项目都是他都是以实际问题而出发而去成立。然后参赛的平台选择可以选择 Kaggle、天池、DataFountain、FlyAI 等这些平台,里面有很多比赛,像 FlyAI 提供免费的 GPU 的,比如说你时效只有 10 分钟,但是你的 GPU 使用的时间可能不是 10 分钟,它是会等到你跑完你整个项目了,才会扣掉这个分数,扣掉时效的。所以大家可以拿练手的话,FlyAI 是很好的,直接在上面可以提交代码在他们的平台直接跑,当然也是会有奖金的,只是奖金比较少一点。
如果比赛能拿到好的名次,对你转换工作会有很大帮助的。最近我也是跟其他队员参加一个 AI+5G 的比赛,我们团队里面拿到第 7 名。面试官对这个比赛也问了比较多问题,如果你经历多的话,你可以参加多点比赛。参加比赛的时候团队协作是很重要的,团队之间要多沟通,要把项目的问题罗列出来,然后一个个去解决。当项目开展开来的时候,如果 Base line 跑通的话,就可以尝试不同的网络结构,怎么样调参数,然后看看结果如何,大家一起去讨论、解决、为什么会这样子?下一步要尝试的方向,我是什么方向?这样子就你有方向去跑这些网络或者去跑这些结果,就会对你的学习有比较大的帮助了。如果你们队伍之间觉得讨论解决不了问题,或者没有比较好的解决方案,你可以尝试去跟老师讨论,或者请教助教老师和其他队伍的成员,这样也有助于吸收更多的知识。我觉得在做项目的过程中,要明确目标是'以学习为主,名次为辅'。即使你比赛的名次不是很好,但是你不要灰心,看有多少问题,你都有哪些解决方法,这才是最重要的。
面试问题分享
面试高频问题 下面跟大家讲讲面试遇到的一些问题,这些应该都是人工智能的一些高频问题,我转型找工作的过程中也遇到了这些问题。我就在这里抛砖引玉给大家呃做一下参考。这些问题我就不给大家一个去深入的讲解了,因为在学习的人工智能学习的过程中,这些问题老师都会给大家讲解的。在最后这个问题,不管是老师之前给的案例还是作业项目。我们在做项目过程中遇到的问题,用的方法都可以把它记录下来,这是最珍贵的学习资料。因为在遇到问题去思考解决方法并实践的过程中,你学到的东西是非常多的。如果随便求助于人或者照抄,你可能学到的东西就不一样了。
面试经验总结 面试经验总结,我总结为三个'不过':
简历不要包装太过 项目经验不要写太过 遇到问题不会的,不用解释太过
有些人担心自己学历不过关,可能会把自己伪装成 985、211 学历,学历造假是最容易分辨的,不建议大家进行学历方面的包装。有些同学为了丰富自己的简历,会把他人的项目经验放进自己的简历里。其实如果将没有做过的项目写上去,面试官一问你遇到什么问题、怎么样去解决的?你肯定就懵了,因为你根本就不了解运作过程是怎么样子的,遇到什么问题。除非你自己做过这些项目,或者你有朋友做过项目,你参与其中去做过,你可以把它写下来并且一定要写详细一点。当然我们我们每个人都是有自身的局限性,不是全部东西都会的,所以有时候当面试官问到一些不会的问题,你不会的也不用解释太过。反正我有 8 个面试左右,然后基本上有很多问题我都不会,直接跟面试官就说不会,也不会尽量解释,毕竟人无完人。最后想跟大家说的是:一定要保持良好的心态,继续学习。毕竟机器都在学习,我们也要更加努力才行。
Q&A 问答
// Q:老师我是机械专业的,完全没学过编程,应该从哪儿开始? A:我们当时一起学习的也是有一个机械专业,你可以跟着老师的脚步,然后去学习。前面我也说了在没有打好数学和 Python 的基础前,我自学机器学习,结果人都要崩溃了。后面跟着课程循序渐进就自然步入正轨了。所以你也不要着急,跟着课程一步步来就好了。
// Q:老师,你如何做到边工作边学习边参加比赛的? A:这个问题问的很好~我确实是边工作边学习边参加比赛。学习的很多资料和课程,我把它放到手机里面,在上下班通勤的路上、中午休息的时候都用手机来看。比赛的话是等我有一定的基础了才去参加比赛的。基本上每天晚上大概 9:00 左右,我就会把代码写好,只要跑通了,就让电脑一直跑到早上起来,如果有结果了,我就提交这个结果。如果没有结果就让它一直跑。这样就可以把自己的时间规划好,就是利用起来,把一些琐碎的时间用起来。另外我晚上也是一直在学习,除了毕业设计那段时间可能学习到凌晨 1:00 左右,虽然其他时候我晚上十二点之前就必须睡觉,但基本上每天晚上都会抽时间去学习。
// Q:对边上班边转型有什么建议? A:首先先思考我上面说的关于转型的那两个问题,有了答案以后再转型。其次我不建议辞职在家学的,你应该把自己的时间规划好去学习,而不是为了学习把工作辞了→再学习→再工作。这种方法不一定对你学习有帮助,相反还会给自己带来很大压力。我虽然是边上班边学习,但我每天的学习时长是不定量的。只要我工作量不是很大,基本上每天都保持在学习的状态。当然还有一点很重要的,如果是边上班边学习,建议大家要抽点时间去锻炼身体的。如果身体跟不上的话,可能你没有那么大的积极性去学习。最后在学习的过程中,要善于利用好零碎时间,自己把握好节奏。
// Q:感觉大龄转型还是前景堪忧,即便技术跟年轻人还好些,但完全没法竞争。想到年龄这个坎,就怂得不行。 A:其实我觉得年龄这个坎,只要你心态不老的话,我觉得还是可以跟年轻人去拼的。因为其实现在很多年轻人都是可能没有那种劲头了,他们也拼不上去,所以我觉得不要太在意年龄,我也上年纪了。我老板有问过我这个问题,我认为我的心态不一定比他们老,大家一上班就可以感觉出来。
// Q:是不是要首先学 Python?对数学依赖度很高吗? A:如果你有就是说一些 C++ 或者 Java 编程经验的话,其实用这些编程也是可以的。当然是依赖于数学的,但是也不要被这个吓到了,我也十多年没有接触过数学了,但认真学都是很简单的。因为只要掌握数学基础知识就好了,而且不一定每一个都会用到,但你起码得知道它是怎么样操作的。
// Q:没有基础四五个月就可以学会,听着好多东西要学啊,而且都不是容易的 A:四五个月可以学会,听起来确实不容易,但要跟着老师的节奏去走。我可能有比较好的一个习惯,每一个课程之前我都会有都要预习,就是把老师这些给的例子都会跑一遍,一直要跑到通为止。如果跑不通我就把这个问题记下来,然后在课上我也会问老师的,老师都会很详细的给你给你解答的。我们课程这两个老师都很好,都会很耐心的详细的给大家解答,因为我觉得我的问题当时应该是最多的,每次课一上来基本上都是我在问老师。
// Q:应聘的时候,面试官考量,学历和比赛得分,更看重哪个?权重大约多少? A:对于我这边来说,我觉得学历和项目的经验各占 50% 吧。有一些面试官看你没什么经验,他就会马上跟你说,我们需要找一个比较有经验的,可能你不太适合,虽然你可能有一些比赛经验,但可能不太适合。我遇到的还有一个比较好的给我 offer 的,学历也不看,比赛也不看,他就看到我的拿到我简历,然后就给我打电话让我过去面试。面了大概半个小时,他就跟我说他们什么东西的,然后就聊了一下薪资的问题,接着就问我什么时候可以去上班了。当然如果学历越高肯定是越好的,但是 AI 要跟这个行业去结合,如果有确定的行业类型的话,有针对性的去转型就会比较好。其实像有一些大牛年薪百万应该都不是问题。
// Q:找工作的时候,企业知道您是培训出来的吗? A:其实你可以完全不写你是培训的,到时候就业老师会有指导的那些简历的。你学完之后会有就业老师会找你一对一的给你做详细的分析,还有简历的撰写和简历建议以及一些简历的模板都会给到你。我是没有写我去培训的,因为我不一定要说出来,其实核心放在员工当中就好。因为可能有一些培训的学生或者同学,时间比较少,没那么多心思去学习,所以可能真是学业不精,也没有参加过比较多的一些项目,那这种面试官肯定会有一些看法。我是周末上课的,集中学了四五个月。如果你背景比较好的,写上从事 IT 行业的这些培训也没有坏事,但是就是说不写也可以,不写的话就需要你把你会的这些项目写详细一点。
结语
希望这篇分享能对正在考虑转型或正在学习 AI 的朋友有所帮助。无论起点如何,保持持续学习的心态,利用好碎片时间,勇于实践,都能找到适合自己的发展道路。技术之路漫长,愿大家都能在山高路远中,看到属于自己的风景。


