03.02 软件工程师如何转行做人工智能?

wobushinv


前言

我是一名软件开发人员,对于人工智能技术,我和大多数软件工程师一样,都带着好奇心,想一探究竟啥是人工智能,如何学习人工智能技术。以下是我在学习人工智能技术的一些经历,分享给大家。


学什么?

学习一门技术,首先我的习惯是从广度上去认识一个事物,然后选定一个小领域去着手实践。同理,对于人工智能技术,我也是一样。在人工智能中,机器学习是人工智能实现的一种方式。而在机器学习中,其实是众多算法的一个集合。每种算法都有其特定的应用领域,但其总的运行流行大体都是相同。

作为一个门外汉的我,如果对于每一个算法都学习,那么,无疑会耗费很多的时间和精力。于是我的选择是,选择了神经网络来进行学习。至于为何选择神经网络,很大程度上其火热程度而影响的。

如何学?

锁定了学习的目标之后,接下来,我就开始思考如何学习这样新东西呢?经过一番研究后,得知学习神经网络,既需要数学知识,也需要Python编程知识,还需要知道有关神经网络的知识。

数学知识的作用就是,能让你从根本上明白每种算法背后的原理。因为每种算法背后依赖的就是数学知识,所以懂得了数学知识,你也就明白算法背后的原理。但是,数学知识对于大学都不怎么认真读书的我,如何克服呢?如果一次性把神经网络的所涉及的数学知识,比如微积分,线性代数等都拿来啃一遍,想想都可怕,哈哈,而且学习效果也不一定好。因此,针对数学这块的补习规划是遇到相关数学知识时才去补习,事实证明这种补习效果还能让自己满意。


接下来就是思考如何学习Python的问题。因为我不是从事Python相关的开发工作,所以Python的学习成了我的又一道门槛。为了快速上手这门语言,找了好几本资料。后来直到遇到这本书籍《Python编程:从入门到实践》。本书通俗易懂,理论实践兼具,值得新手入门学习。


有了数学和Python有了着落后,还是不知道怎么把两者结合在一起来实现神经网络。因为不清楚神经网络是个什么新生事物。所以有必要继续查找有关神经网络的书籍来读一读。找来找去,关于神经网络的书籍大多过于理论且罗列一大堆数学符号,让人不知所措。终于皇天不负有心人,找到了《Python神经网络编程》这本书,书籍循序渐进,从最基础的数学知识讲起,并在后半部分配有实践,非常有必要推荐给大家读一读。

经过以上三个步骤的基本补习后,我想大家一定可以手动自己实现一个神经网络模型了,至此也算入门了人工智能技术的门槛了,至少知道其运作的原理。如果想要继续深造,可以选择掌握一门框架或继续研究其他算法模型,然后用你学习到的人工智能技术去上手一个有关人工智能的项目,以此加深你对这门技术的认知。

总结

以上就是我学习有关人工智能技术的一点点经历和建议,希望能对大家有帮助。如果喜欢我的文章,欢迎关注转发!


关注我,不定期分享好玩科技知识,一起体会探索科技的那份独有思考和乐趣。


drinkingcode


说说我的个人经历

我亲身经历了从非AI软件开发到AI的转变。

我一直对AI感兴趣,也知道这是技术发展的一个大趋势。所以在2016年以前,陆陆续续地关注一些AI博客,断断续续地学习,但一直没有系统学习过。

在2016年,因为工作的变动,就开始系统地学习了AI。买了一些AI的书来读,在coursera在线学习网站上,参加了业界有名的Andrew Ng(吴恩达)的《机器学习》课程。

这是我是在2016年5月份获得的《机器学习》结业证书。

《机器学习》结业,只是入门。而AI分成好几个领域,比如图像识别、NLP等等,每一门的水都挺深。我选择进入NLP,因为其它领域都被大公司吃完了,而NLP相对不太成熟,小公司更有机会。

我学习了NLP的实用技术,并用来做产品。后来还是因为AI更是大公司的菜,加上其它的一些事情,就转向聚焦在区块链上了。

所以,我觉得我有资格来回答这个问题。

对于软件工程师,这种转变,不叫转行,而叫学习新技能。

首先,还是需要有扎实的数学知识

对于很多软件工程师,数学知识平时用得少,软件功能都是调用这个库、那个API来实现的。这在AI之前,在很多公司还算是合格的,毕竟能完成工作。

但到AI领域后,你就会发现没有数学知识,碰到一些问题就懵了,很吃亏,效率会很低。

我的《微积分》是很多年钱学的,早就丢掉了。到了AI领域,发现有很多微积分内容,又得捡回来。

你至少需要准备这些数学知识:

  • 线性代数。将会碰到有很多向量和矩阵,所有计算的基础,重要性不言而喻


  • 概率与统计

  • 微积分

其次,系统地参加人工智能的通用课程

刚开始入门,要推荐吴恩达的《机器学习》,这是一堂有名的课,评分高达4.9分。

这门课程难度为中等偏低,每期都有习题练习,习题需要一般的编程能力,全部通过才能获得结业证书。

https://www.coursera.org/learn/machine-learning

然后再深入一点,就是目前业界广泛使用的神经网络中的深度学习。

深度学习在Coursera上,是有一个专项课程。专项课程是几个相关课程的集合。深度学习专项内部包含了4个课程。如果有条件,最好把所有的课程学一遍:

https://www.coursera.org/specializations/deep-learning

如果没时间学完专项,那么其中的《神经网络和深度学习》是必学的:

https://www.coursera.org/learn/neural-networks-deep-learning?specialization=deep-learning

再次,根据具体的业务领域,选择适合的框架和语言,边学边做

到了这一步,你就要开始实战了。

这里要看你从事的领域的需求,学习更具体的算法。比如公司搞图像识别,那CNN必须要精通;如果是NLP,要学word2vec、RNN等。

然后选择编程语言和AI框架。

如果公司没有硬性要求语言和框架。在语言方面,而你是新手,或者编程经验不多,最好就直接用Python;对于老手,存在存量绑架,也因为对某语言用得熟练,那要选择支持你的编程语言的框架。

一般来说,选择谷歌的TensorFlow更好,公司有技术实力保障,对语言支持能力强,连JavaScript都支持。

给码农的话

最后,对于软件工程师,再过几年,AI将是所有公司所必备一项能力,那么的AI技能,也就是码农必备的技能,那就快点学起来,用起来。

和其它行业一样,码农要保持自己的职业竞争力,需要活到老,学到老。在软件技术这块,迭代周期别其它行业要快很多,就更需要坚持不断学习。


电商和区块链


我作为一名程序开发人员,从我的角度来回答一下这个问题。学习计算机的都知道,我们计算机专业是一个大类,涉猎的范围很广,我在大学本科期间学习的网络安全专业,那会人工智能还没有兴起,在课程学习计划中却有《人工智能》这门课程,因为不是专业主课当时学的什么现在已经记不得了。后来读了研究生,专业改为计算机应用技术,跟着导师开始研究人工智能,当时主要的研究方向为机器学习算法,再细分就是计算机视觉。三年学习,最深刻的体会就是人工智能真的很强大,还有就是人工智能对计算机、数学基础的要求比较高。毕业之后自认为在人工智能上没有学到家,选择了程序开发(说的好听点就是软件)的工作。身边也有同学,毕业之后从事人工智能方向,据说比较辛苦。还有发际线退后的相对快一点(开个玩笑)。

言归正传,如果有计算机基础从开发转换角色到人工智能需要掌握以下三个技能:

数学

要想学好人工智能,必须有扎实的数学基本功,特别是统计学的基础。概率论、线性代数、数值计算,这是信手拈来的基本功。因为人工智能算法中涉及到大量且复杂的统计,数不尽的公式计算(想想还有点头大)。在进入人工智能领域之前,建议先把数学、概率论、线性代数、离散数学等大学课程再过一遍。

算法

IT从业者都知道算法乃是程序之魂,人工智能也有很多算法,人工神经网络,支持向量机,遗传算法等等算法。算法很多,涉及的领域也很多,人工智能基本的算法的理解是基本要求,是的我说的是理解,知其所以然。这样才能在别人算法的启发下发散自己的思维,继而改进算法,提高算法性能。但是,这是一个潜移默化而且充满困难的过程。读研的时候,就是不停的去研究别人的算法,绞尽脑汁去做改进,然后写论文。

编程

既然是软件工程师,那必然懂开发语言了。在人工智能实验中,用到比较多的语言是MATLAB、Python。我个人是Java出身,从大学的时候就开始学习Java,读研的时候因为实验要求开始学习MATLAB和Python。

我不是人工智能的从业者,只是研究生期间学过人工智能。对想转人工智能的IT从业者提出一点个人的建议。

如果您有不同的看法,欢迎您来评论交流!


苏北小马锅


软件工程师如何转行做人工智能?

首先你需要明白自己为什么要转行到人工智能,是觉得人工智能发展前景不错,还是觉得人工智能岗位工资高才转行过来?如果仅仅是因为这两点,那我劝你还是不要转行到人工智能。

人工智能领域说实话入门门槛很高,你不仅仅要和国内的名牌大学研究生、博士生竞争,同时你也要和国外那些厉害大学(比如常青藤)的海归同学竞争。你确定自己在和他们的竞争过程中,能脱颖而出吗?当然,转行到低级算法工程师很容易,但是每个同学都想往高处走,成为高级算法工程师会很难。个人如果没有几把刷子,真不建议你转到人工智能。

不过你如果真的非常喜欢算法,想要转行到人工智能,我相信你通过自己的努力,肯定能够实现你的目标,下面是我个人关于转行到人工智能的几点建议:

从基础的机器学习算法入手


从事人工智能领域,肯定要对机器学习算法要有一定基础。软件工程师平时更多的是从事工程类项目开发,所以在机器学习算法基础方面有一定的薄弱。你可以先从基础的机器学习算法概念入手,比如K-means、决策树、线性回归、随机梯度下降、支持向量机等算法。你可以从网上找相关算法的博客,或者直接看相关的书籍、教学视频。

机器学习算法入门书籍,我推荐李航的《统计学习》,这本书里面讲解的算法概念、公式一般都可以看懂,对于新手而言会比较友好。


机器学习教学视频方面,我推荐吴恩达的机器学习公开课,你可以去网易公开课上进行观看,观看的同时,你可以做好笔记,记录自己的感想以及不懂的地方,然后在听完课程后,可以去Google上找到自己不懂的问题,查看别人的观点,解法。

多参加机器学习算法比赛


算法最终需要应用到业务上,你在对机器学习算法有一定了解后,下一步我们需要通过实践来提高算法项目能力。由于你平时主要从事工程类项目开发,很少能够接触到算法相关的项目,此时你可以去参加一些机器学习算法比赛。

国内比较著名的有天池大数据竞赛、DataCasle,国外比较著名的有Kaggle。你可以选择自己感兴趣的比赛项目,最好能够找到一起参加算法比赛的小伙伴,这样在做比赛时,能够一起讨论,交流。这样更能提高你对算法方面的理解。最好,你如果能够拿到算法比赛的不错的名次,这将会帮助你更好的进入互联网大厂。

提升自己的阅读Paper的能力

多观看大牛的算法Paper,能够加深自己的算法理论理解。你可以去百度学术或者Google论文上面查找自己想要看的论文,然后下载下来仔细的观看。在看论文的同时,要去思考他们为什么要这样做,这样的做目的是什么,解决了什么问题。带着问题去看论文,这样你看完才能更好的理解大牛们的思想。

最后一点,做好自己的简历

既然要转行到人工智能,最后一步肯定要做好自己的简历。在做简历的时候,既要突出自己的算法能力,同时也要突出自己的工程能力,公司肯定希望招聘到的人什么都会,你的工程能力会在你面试算法岗位的时候是一个加分项。

在简历上写项目的时候,尽可能要描述的详细一点,要让面试官能够看懂你在做什么,而不是你在吹牛。要把自己做的,思考的,带来的业务结果都描述上去,同时要强调自己的算法方面的技能。这样,你拿到算法Offer的概率才会更大。

总结

总体来说,软件工程师在转行到人工智能领域之前,一定要想好自己为什么要转行到人工智能,如果只是为了钱景或者岗位的发展情景,那真的不建议你转行过来。转行到人工智能的过程会很辛苦,没有坚定的目标肯定很难坚持。当然,如果你真的对算法很感兴趣,希望你能一致保持自己最初的目标,最后,祝你好运。

我是Lake,专注大数据技术、互联网科技见解、程序员经验分享,如果我的问答对你有帮助的话,希望你能够点赞转发或者关注我,你的一个小小的鼓励,就是我持续分享的动力,非常感谢。

Lake说科技


软件工程师转行做人工智能是一个不错的选择,但是要根据自身的知识结构进行相应的准备。对于研发级软件工程师(研发级程序员)来说,转行做人工智能是相对比较容易的,因为研发级工程师往往都有扎实的算法基础。对于应用级软件工程师(应用级程序员)来说,转行做人工智能需要一个系统的准备(学习)过程。

人工智能目前的研究方向比较多,比如自然语言处理、机器学习以及计算机视觉都是不错的研究方向,下面就以机器学习为例,说一下作为应用级软件工程师来说,都应该做好哪些准备。

首先,需要系统的学习一下算法知识。机器学习的研发是以算法为核心进行展开的,所以要有一个扎实的算法基础。这个过程需要了解一些比较经典的算法设计过程,逐步培养起解决问题的思路。这部分的学习内容包括随机算法、堆排序算法、快排、计数排序、贪心算法、核算法、势能法、图算法、多线程算法、数论算法和近似算法等,在学习算法的过程中也会连带着把数据结构一并学习一下,因为算法和数据结构本就不分家。

其次,了解机器学习的实现步骤。机器学习的流程包括数据收集、数据整理、算法设计、算法实现、验证算法和应用算法,数据收集是机器学习的第一步,目前可以用于机器学习的公共数据集并不少,对于实验来说已经够用了。接下来就是了解常见的机器学习算法,目前比较常见的机器学习算法包括NB、k-mean、kNN、SVM、Apriori、EM、PageRank、CART等算法,对于有算法基础的人来说,这些算法的学习并不困难。

最后,选择一门编程语言来实现这些算法并对其进行验证。对于软件工程师来说,这个步骤还是相对比较轻松的,目前使用Python做机器学习的算法实现是一个比较常见的做法。

人工智能是我的主要研究方向之一,目前我也在带相关方向的研究生,我会陆续在头条写一些关于人工智能方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有人工智能方面的问题,也可以咨询我,谢谢!


IT人刘俊明


普通程序员,或者说是软件工程师,一般用Java语言的开发者比较多,这群人工作一两年的还在努力把增删改查的业务代码写好,工作三四年的,或许在优化和架构上努力。

但是这些都与人工智能没有太大关系,如果需要转人工智能,那么将从头开始,不过有编程基础在身上,上手难度比普通人小,但是需要在工作之余花费精力去自学Python学人工智能相关知识,并不是简单的事情。



最致命的一点就是,在数学和英语方面,都需要提升,尤其是数学,已经不仅仅是本科里的高数,线性代数之类的,还要学习研究生阶段的数学理论。英语至少也得达到六级水平,才能比较轻松的翻阅国外资料,毕竟人工智能这一块国外确实比较发达一些。

因此,软件工程师转人工智能,比想象中难,但是我相信有方向并为之坚持付出的,一定会有成就。

我是“极客宇文氏”,一个热心的程序员。


极客宇文氏


有些答案实在看不下去了,来点干货


人工智能相关职位(各种叫法: 算法工程、NLP工程师, CV算法研发工程师,数据科学家,推荐算法工程师,机器学习工程师、人工智能工程师等)的要求基本如下:

  • 职位关键词:算法层面为机器学习,深度学习,NLP, CV, 强化学习等,大数据层面: Hadoop, Hive, Spark等

  • 实践:有实践经验 (转行的话,建议打比赛)

  • 理论:在NIPS, CVPR, ICML等顶会上发表过论文 (这个对于转行的人,短期内基本不可能,除非你是天才)


围绕着上面的职位要求,下面是可操作的建议:

  • 夯实理论基础: 机器学习、深度学习先入门(坑)吧。coursera上很多课,Andrew Ng的课算是基础的, fast.ai上的课也可以看看。硬着头皮看吧,很多人从入门到放弃,能过这道坎,才有可能转行。

  • 积累实践经验: 有一定的理论之后, 上Kaggle(或国内一些公司组织的比赛)练手,积累经验教训。很多比赛都是业界公司项目的真正需要,和真正项目算法层面没什么区别。最好能拿个奖,既能拿奖金,后续面试也是亮点。(话说这个奖金不是那么好拿的,打比赛是很累的,和工程不太一样,工程是体力活,加班加点基本是能做出来的,算法加班不一定能出成绩,心累)。
  • 没事多和身边的搞算法的同事聊聊天、喝喝酒。过来人比你一个人摸索要快很多。

不建议参加培训机构,除非你钱多。人工智能是个很笼统、宽泛的概念,被吵得很热,很多机构打着大数据、人工智能的噱头来培训,什么人才缺口百万,什么年薪百万。参加这种培训的人,面试的时候,肯定会心虚,没有真正的项目实践。与其参加培训,不如省下钱来加块GPU。MIT, Stanford名校各种公开课程,没必要参加国内这些课程。


注意: 本文中的算法,指的是Machine Learning领域的算法(比如决策数, xgb, svm, rnn, cnn),非Computer Science领域里的算法(比如quick sort),不要搞混


PS: 转的话,需要花些精力的。现在很多学校都开设了相关的学院、课程。再过两年,搞不好会是下一个“本科遍地走,大专多如狗”,这个风险和机遇是并存的。确定要转的话,撸起袖子,加油干吧,相信自己!


欢迎交流


平凡科技


转人工智能,首先需要了解人工智能是什么,它涉及哪些知识领域?

人工智能,顾名思义,它是研究如何用机器模拟人类思维方式,从事类人活动的一门的科学,也是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新兴技术。它涉及计算机科学、机器人、语言识别、图像识别、自然语言处理、决策系统和专家系统等知识领域。除了涵盖自然科学,甚至还涵盖了哲学和心理学等社会科学,是真正的知识大融合,所以要从事该领域的研究和生产是一项极富挑战性的工作。

个人见解,转行需要注意以下几个方面:

1、计算机科学领域

(1)编程语言:需要深入学习Python、Go等适用于复杂科学计算的、提供更多成熟算法处理模块的编程语言。

(2)矩阵运算和算法模拟:深入学习MATLAB。

(3)根据自己的研究或工作方向学习业界成熟的开发框架或开源库:例如图像识别(OpenCV等)、语言识别(Python语音识别库,百度、科大讯飞、捷通华声等语音识别库)、神经网络(DistBelief等)、机器学习(Google开发的TensorFlow等)。

(4)大数据处理、分布式计算、云计算:因为人工智能无法逾越的一个过程,就是对海量数据进行短时间的处理和决策,所以先得从现有比较成熟的技术入手学习和研究。

(5)其它。

2、算法

(1)提升自己的数学基础和计算能力,多看国内外顶级学术刊物上关于人工智能技术研究的学术文章。

(2)最好自己在理解算法的基础上,将其编程实现再加以验证。

3、数据统计、分析和整理

获得算法结果后,要善于分析这些数据的规律,从中获得有效信息。同时要善用一些统计分析工具。

4、关注该领域顶级研发机构或公司的最新产品或成果

虽然我们只能看到成果,而无法了解实现,但是从中学习到的东西也会使你避免走很多弯路。

5、心态

目前,人工智能的研究和实践如火如荼,但是应该摆正心态,做好打持久战的准备,短时期内很难将该领域的技术研究透彻,并完全推广应用。一句话,此路任重而道远,但却是人类社会科技发展的必经阶段。


AT牧星人


看不起下去了,来说两句,要找资料他自己不会吗?这里成培训班了吗?我认为题主应该考虑转行的可行性。

恕我直言,你很可能转不了。可能哈,因为不了解题主。

为什么呢?

题主,不知道你做什么工作的,——软件工程师的范围可大了,假设你是一名Java程序员,工作是Web开发编码,写层面的逻辑,因为底层已经有框架了嘛。底层算法什么的,几乎写不着,当然,写逻辑也是写算法,无可厚非;或者你做架构、运维,部署开源软件,分析故障,打命令的嘛;甚至你是做大数据开发的。

但这些工作,统统和AI无关。

AI内部充斥着数学概念、公式,代码可以先放一边,代码嘛,3岁-80岁学学就会了。但AI和逻辑编码是完全不同的。AI似乎和《周易》算卦有异曲同工之妙,比如都会通过大量经验积累来预测未来,当然,不限于预测。

意思就是说,要从0开始,从头再来,之前的软件开发经验的积累充其量有助于你拷贝代码。

转行不现实,做好当下。当然,有志者事竟成,可以努力实现新梦想。


Manoeuvre


1、培训课程,因为有开发经验,所以,不建议现场学习,直接网上花一点钱买课程学习,现在学习的网站很多,比如北风,慕课网,51cto,如下截图是我在51cto买的课程:

2、学习,主要补充python,数学算法等等;

3、选择好方向,机器学习已经有了十分广泛的应用,例如:数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA序列测序、语音和手写识别、战略游戏和机器人运用等;还有深度学习,神经网络等等

4、多模拟训练,要搜集自己喜欢行业的一些数据,对数据进行准备,然后选择模型,进行训练,对模型评估,当然,具体每一个步骤需要你去实行

5、准备介入AI行业,这个对于程序员来说有点困难,因为市场行情对AI要求比较高,动不动就是研究生毕业的,当然,薪水也特别高。如果你是小本,并且年龄大了,你就必须要有转行失败的心理准备,如果在本公司里面涉及一些人工智能方面的东东,那最好了,尽量去靠近吧。


分享到:


相關文章: