软件工程师如何转行做人工智能?
谢谢邀请!
软件工程师转行做人工智能是一个不错的选择,但是要根据自身的知识结构进行相应的准备。对于研发级软件工程师(研发级程序员)来说,转行做人工智能是相对比较容易的,因为研发级工程师往往都有扎实的算法基础。对于应用级软件工程师(应用级程序员)来说,转行做人工智能需要一个系统的准备(学习)过程。
人工智能目前的研究方向比较多,比如自然语言处理、机器学习以及计算机视觉都是不错的研究方向,下面就以机器学习为例,说一下作为应用级软件工程师来说,都应该做好哪些准备。
首先,需要系统的学习一下算法知识。机器学习的研发是以算法为核心进行展开的,所以要有一个扎实的算法基础。这个过程需要了解一些比较经典的算法设计过程,逐步培养起解决问题的思路。这部分的学习内容包括随机算法、堆排序算法、快排、计数排序、贪心算法、核算法、势能法、图算法、多线程算法、数论算法和近似算法等,在学习算法的过程中也会连带着把数据结构一并学习一下,因为算法和数据结构本就不分家。
其次,了解机器学习的实现步骤。机器学习的流程包括数据收集、数据整理、算法设计、算法实现、验证算法和应用算法,数据收集是机器学习的第一步,目前可以用于机器学习的公共数据集并不少,对于实验来说已经够用了。接下来就是了解常见的机器学习算法,目前比较常见的机器学习算法包括NB、k-mean、kNN、SVM、Apriori、EM、PageRank、CART等算法,对于有算法基础的人来说,这些算法的学习并不困难。
最后,选择一门编程语言来实现这些算法并对其进行验证。对于软件工程师来说,这个步骤还是相对比较轻松的,目前使用Python做机器学习的算法实现是一个比较常见的做法。
人工智能是我的主要研究方向之一,目前我也在带相关方向的研究生,我会陆续在头条写一些关于人工智能方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有人工智能方面的问题,也可以咨询我,谢谢!
说点实在的
先把微积分、概率论、线性代数捡起来。
选择一个方向,图像、语音、自然语言处理是最常见三大方向。千万别全学,你没那么多精力,能在一个方向的一个小分支做出成就都不错了。建议你别学自然语言处理,那是个大坑。
选择一个框架,建议pytorch,自带的例子多,编程就是正常软件编程的思维模式。别学tensorflow,那个程序结构思想就是硬件设计思想,你会很不习惯,很难受。也别像我一样看着TensorBoard界面好看就被吸引了。那个界面你用python的绘图库(比如matplotlib)自己也能画出来类似的。
理论结合实践,螺旋上升式的学习,理论和实践互相加深。先从小例子学起,哪里理论不够就去补哪里。千万别想着先把理论都学会了,一身武功学到炉火纯青再上战场。一头扎进理论里能把你淹死。光是《支持向量机》和《凸优化》能淹死大部分人。下面这本凸优化有716页,你怕不怕?其实没必要学这么深。
学得不错后,参加个比赛kaggle或国内的京东、阿里云的比赛。检验一下自己的水平。
如果不是非常感兴趣,没必要转行人工智能。人工智能的泡沫快破了,吹得太厉害了。
展开全部
说说我的个人经历
我亲身经历了从非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技能,也就是码农必备的技能,那就快点学起来,用起来。
和其它行业一样,码农要保持自己的职业竞争力,需要活到老,学到老。在软件技术这块,迭代周期别其它行业要快很多,就更需要坚持不断学习。
展开全部
有些答案实在看不下去了,来点干货
人工智能相关职位(各种叫法: 算法工程、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: 转的话,需要花些精力的。现在很多学校都开设了相关的学院、课程。再过两年,搞不好会是下一个“本科遍地走,大专多如狗”,这个风险和机遇是并存的。确定要转的话,撸起袖子,加油干吧,相信自己!
欢迎交流
展开全部
谢邀。这个问题我也沉思良久,因为我就是软件工程师,而且有时候真有点想转人工智能之类的想法。下面我分享一下自己的看法。
普通程序员,或者说是软件工程师,一般用Java语言的开发者比较多,这群人工作一两年的还在努力把增删改查的业务代码写好,工作三四年的,或许在优化和架构上努力。
但是这些都与人工智能没有太大关系,如果需要转人工智能,那么将从头开始,不过有编程基础在身上,上手难度比普通人小,但是需要在工作之余花费精力去自学Python学人工智能相关知识,并不是简单的事情。
最致命的一点就是,在数学和英语方面,都需要提升,尤其是数学,已经不仅仅是本科里的高数,线性代数之类的,还要学习研究生阶段的数学理论。英语至少也得达到六级水平,才能比较轻松的翻阅国外资料,毕竟人工智能这一块国外确实比较发达一些。
因此,软件工程师转人工智能,比想象中难,但是我相信有方向并为之坚持付出的,一定会有成就。
我是“极客宇文氏”,一个热心的程序员。
展开全部
软件开发工程师,如何转行到人工智能领域?首先你需要明白自己为什么要转行到人工智能,是觉得人工智能发展前景不错,还是觉得人工智能岗位工资高才转行过来?如果仅仅是因为这两点,那我劝你还是不要转行到人工智能。
人工智能领域说实话入门门槛很高,你不仅仅要和国内的名牌大学研究生、博士生竞争,同时你也要和国外那些厉害大学(比如常青藤)的海归同学竞争。你确定自己在和他们的竞争过程中,能脱颖而出吗?当然,转行到低级算法工程师很容易,但是每个同学都想往高处走,成为高级算法工程师会很难。个人如果没有几把刷子,真不建议你转到人工智能。
不过你如果真的非常喜欢算法,想要转行到人工智能,我相信你通过自己的努力,肯定能够实现你的目标,下面是我个人关于转行到人工智能的几点建议:
从基础的机器学习算法入手
从事人工智能领域,肯定要对机器学习算法要有一定基础。软件工程师平时更多的是从事工程类项目开发,所以在机器学习算法基础方面有一定的薄弱。你可以先从基础的机器学习算法概念入手,比如K-means、决策树、线性回归、随机梯度下降、支持向量机等算法。你可以从网上找相关算法的博客,或者直接看相关的书籍、教学视频。
机器学习算法入门书籍,我推荐李航的《统计学习》。这本书里面讲解的算法概念、公式一般都可以看懂,对于新手而言会比较友好。
机器学习教学视频方面,我推荐吴恩达的机器学习公开课。你可以去网易公开课上进行观看,观看的同时,你可以做好笔记,记录自己的感想以及不懂的地方,然后在听完课程后,可以去Google上找到自己不懂的问题,查看别人的观点,解法。
多参加机器学习算法比赛
算法最终需要应用到业务上,你在对机器学习算法有一定了解后,下一步我们需要通过实践来提高算法项目能力。由于你平时主要从事工程类项目开发,很少能够接触到算法相关的项目,此时你可以去参加一些机器学习算法比赛。
国内比较著名的有天池大数据竞赛、DataCasle,国外比较著名的有Kaggle。你可以选择自己感兴趣的比赛项目,最好能够找到一起参加算法比赛的小伙伴,这样在做比赛时,能够一起讨论,交流。这样更能提高你对算法方面的理解。最好,你如果能够拿到算法比赛得不错的名次,这将会帮助你更好地进入互联网大厂。
提升自己的阅读Paper的能力
多观看大牛的算法Paper,能够加深自己的算法理论理解。你可以去百度学术或者Google论文上面查找自己想要看的论文,然后下载下来仔细的观看。在看论文的同时,要去思考他们为什么要这样做,这样的做目的是什么,解决了什么问题。带着问题去看论文,这样你看完才能更好地理解大牛们的思想。
最后一点,做好自己的简历
既然要转行到人工智能,最后一步肯定要做好自己的简历。在做简历的时候,既要突出自己的算法能力,同时也要突出自己的工程能力,公司肯定希望招聘到的人什么都会,你的工程能力会在你面试算法岗位的时候是一个加分项。
在简历上写项目的时候,尽可能要描述的详细一点,要让面试官能够看懂你在做什么,而不是你在吹牛。要把自己做的,思考的,带来的业务结果都描述上去,同时要强调自己的算法方面的技能。这样,你拿到算法Offer的概率才会更大。
总结
总体来说,软件工程师在转行到人工智能领域之前,一定要想好自己为什么要转行到人工智能,如果只是为了钱景或者岗位的发展情景,那真的不建议你转行过来。
转行到人工智能的过程会很辛苦,没有坚定的目标肯定很难坚持。当然,如果你真的对算法很感兴趣,希望你能一直保持自己最初的目标,最后,祝你好运。
如果我的文章对你有帮助的话,希望你能够点赞转发或者关注我,你的一个小小的鼓励,就是我持续分享的动力,非常感谢。
展开全部
软件工程师如何转行做人工智能?
首先你需要明白自己为什么要转行到人工智能,是觉得人工智能发展前景不错,还是觉得人工智能岗位工资高才转行过来?如果仅仅是因为这两点,那我劝你还是不要转行到人工智能。
人工智能领域说实话入门门槛很高,你不仅仅要和国内的名牌大学研究生、博士生竞争,同时你也要和国外那些厉害大学(比如常青藤)的海归同学竞争。你确定自己在和他们的竞争过程中,能脱颖而出吗?当然,转行到低级算法工程师很容易,但是每个同学都想往高处走,成为高级算法工程师会很难。个人如果没有几把刷子,真不建议你转到人工智能。
不过你如果真的非常喜欢算法,想要转行到人工智能,我相信你通过自己的努力,肯定能够实现你的目标,下面是我个人关于转行到人工智能的几点建议:
从基础的机器学习算法入手
从事人工智能领域,肯定要对机器学习算法要有一定基础。软件工程师平时更多的是从事工程类项目开发,所以在机器学习算法基础方面有一定的薄弱。你可以先从基础的机器学习算法概念入手,比如K-means、决策树、线性回归、随机梯度下降、支持向量机等算法。你可以从网上找相关算法的博客,或者直接看相关的书籍、教学视频。
机器学习算法入门书籍,我推荐李航的《统计学习》,这本书里面讲解的算法概念、公式一般都可以看懂,对于新手而言会比较友好。
机器学习教学视频方面,我推荐吴恩达的机器学习公开课,你可以去网易公开课上进行观看,观看的同时,你可以做好笔记,记录自己的感想以及不懂的地方,然后在听完课程后,可以去Google上找到自己不懂的问题,查看别人的观点,解法。
多参加机器学习算法比赛
算法最终需要应用到业务上,你在对机器学习算法有一定了解后,下一步我们需要通过实践来提高算法项目能力。由于你平时主要从事工程类项目开发,很少能够接触到算法相关的项目,此时你可以去参加一些机器学习算法比赛。
国内比较著名的有天池大数据竞赛、DataCasle,国外比较著名的有Kaggle。你可以选择自己感兴趣的比赛项目,最好能够找到一起参加算法比赛的小伙伴,这样在做比赛时,能够一起讨论,交流。这样更能提高你对算法方面的理解。最好,你如果能够拿到算法比赛的不错的名次,这将会帮助你更好的进入互联网大厂。
提升自己的阅读Paper的能力
多观看大牛的算法Paper,能够加深自己的算法理论理解。你可以去百度学术或者Google论文上面查找自己想要看的论文,然后下载下来仔细的观看。在看论文的同时,要去思考他们为什么要这样做,这样的做目的是什么,解决了什么问题。带着问题去看论文,这样你看完才能更好的理解大牛们的思想。
最后一点,做好自己的简历
既然要转行到人工智能,最后一步肯定要做好自己的简历。在做简历的时候,既要突出自己的算法能力,同时也要突出自己的工程能力,公司肯定希望招聘到的人什么都会,你的工程能力会在你面试算法岗位的时候是一个加分项。
在简历上写项目的时候,尽可能要描述的详细一点,要让面试官能够看懂你在做什么,而不是你在吹牛。要把自己做的,思考的,带来的业务结果都描述上去,同时要强调自己的算法方面的技能。这样,你拿到算法Offer的概率才会更大。
总结
总体来说,软件工程师在转行到人工智能领域之前,一定要想好自己为什么要转行到人工智能,如果只是为了钱景或者岗位的发展情景,那真的不建议你转行过来。转行到人工智能的过程会很辛苦,没有坚定的目标肯定很难坚持。当然,如果你真的对算法很感兴趣,希望你能一致保持自己最初的目标,最后,祝你好运。
我是Lake,专注大数据技术、互联网科技见解、程序员经验分享,如果我的问答对你有帮助的话,希望你能够点赞转发或者关注我,你的一个小小的鼓励,就是我持续分享的动力,非常感谢。
展开全部
转人工智能,首先需要了解人工智能是什么,它涉及哪些知识领域?
人工智能,顾名思义,它是研究如何用机器模拟人类思维方式,从事类人活动的一门的科学,也是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新兴技术。它涉及计算机科学、机器人、语言识别、图像识别、自然语言处理、决策系统和专家系统等知识领域。除了涵盖自然科学,甚至还涵盖了哲学和心理学等社会科学,是真正的知识大融合,所以要从事该领域的研究和生产是一项极富挑战性的工作。
1、计算机科学领域
(1)编程语言:需要深入学习Python、Go等适用于复杂科学计算的、提供更多成熟算法处理模块的编程语言。
(2)矩阵运算和算法模拟:深入学习MATLAB。
(3)根据自己的研究或工作方向学习业界成熟的开发框架或开源库:例如图像识别(OpenCV等)、语言识别(Python语音识别库,百度、科大讯飞、捷通华声等语音识别库)、神经网络(DistBelief等)、机器学习(Google开发的TensorFlow等)。
(4)大数据处理、分布式计算、云计算:因为人工智能无法逾越的一个过程,就是对海量数据进行短时间的处理和决策,所以先得从现有比较成熟的技术入手学习和研究。
(5)其它。
2、算法
(1)提升自己的数学基础和计算能力,多看国内外顶级学术刊物上关于人工智能技术研究的学术文章。
(2)最好自己在理解算法的基础上,将其编程实现再加以验证。
3、数据统计、分析和整理
获得算法结果后,要善于分析这些数据的规律,从中获得有效信息。同时要善用一些统计分析工具。
4、关注该领域顶级研发机构或公司的最新产品或成果
虽然我们只能看到成果,而无法了解实现,但是从中学习到的东西也会使你避免走很多弯路。
5、心态
目前,人工智能的研究和实践如火如荼,但是应该摆正心态,做好打持久战的准备,短时期内很难将该领域的技术研究透彻,并完全推广应用。一句话,此路任重而道远,但却是人类社会科技发展的必经阶段。
展开全部
感谢阅读!
我是一名C 软件工程师,而且也在学习人工智能。分享一下我是怎样学习的。不一定适合你,仅供参考,不对的地方还望批评指正!
我研究生是研究模式识别方向,图像处理领域。学过《模式识别》《机器挖掘》等类似的课程,对我学习AI有一定的帮助,但是对于学习AI也有一定的难度。我的学习过程是这样的:
01 学习Python
Python的学习是转行人工智能的基础,这个是一定要学的。如果你是C 或者Java工程师,学python会非常快,因为都是面向对象的语言。基本一周就可以看机器学习的开源代码。学习编程语言对于程序员来说很easy了,这里不再多说。
可以简单的学习一些机器学习基本Python库,比如numpy,scikit-learn,Theano,Tensorflow,Caffe2等等。选择就是,用到再学!
02 从项目出发
机器学习分为:图像识别,语音识别,自然语言处理等方向,选择一个自己感兴趣的方向,然后找对应的项目。从项目出发并不是说从做项目开始,对于没有领域知识的程序员,写代码是很痛苦的。从项目出发的本意是:
不要从学习概率论,高等数学等基本理论开始。我第一阶段就是从这些基本理论开始,效果很不好。这些理论枯燥,没有针对性,没法理解这些理论跟AI到底是什么关系。因此,很容易放弃。
从项目开始:找个开源项目,比如GitHub上的开源项目OpenFace,去读源码,看人脸识别是如何做到的。读源码的时候一定会碰到各种机器学习的Python库,一些机器学习算法。以此为出发点,熟悉Python库的使用方法。碰到的机器学习算法这就是开始学习AI的切入点。
从项目开始的好处是,能将理论和实践相结合,比单纯学习理论更能理解理论的妙处!
03 学习碰到的理论
在项目中碰到的机器学习算法,要想清楚明白是怎么来的,就要去论文中追本溯原,学习算法的使用环境,算法实施过程,算法的数学推导。这个时候就是学习数学基础的时机,只学习对应的章节,用不到的暂时不用学。
学习算法,还借助一些介绍机器学习算法的基础,把算法彻底弄懂。系统学习基本算法基础,比如卷积人工神经网络,反向传导,线性回归,贝叶斯网络,支持向量机SVM,决策树等等。这也很有帮助!
04 一定要动手!
算法动手:
在学习理论知识,机器学习的算法时,都会碰到算法的实现过程。一般现在很多Python库已经提供了算法的实现,直接调用即可。但是如果自己有时间还是要实现一下算法,能加深理解。作为程序员都知道,只有在亲自动手的时候,才发现问题。
应用动手:
学习机器学习,一定要自己动手,真正用机器学习解决一个问题。但是现在机器学习对硬件要球较高,训练时间也很高。因此,我建议,无需用巨大的数据集,用非常小的即可,只要能解释过程即可。
05 坚持坚持再坚持!
对于上班族来说,时间很宝贵,所以要从996的时间之外挤出时间学习十分不容易,因此就要十分有毅力,有恒心。既然开始,就不能轻易放弃,要养成固定一个在一个固定时间点学习,比如每晚10点学习两小时,那就每晚都学,即使没状态哪怕看看以前的也要学。这样,固定的时间做固定的事,坚持下来概率较大!
做一名程序员不易,要转行的程序员更不易!任何时候,身体健康第一!且行且珍重!如果有需要的资料,可以私信我,希望能给你提供帮助!
展开全部
软件工程师转行做人工智能,可以参考先前Insight AI 发布的一篇题为《Transitioning from Software Engineering to Artificial Intelligence》的文章,其中提到一名软件工程师如果打算转行做人工智能,需要掌握这 5 项技能:统计学、机器学习理论、数据整理、调试/调节模型、软件工程。
坚实的统计学基础是为了更好的理解机器学习。
机器学习理论可以深入理解构建函数模型并且与团队其他人员对机器有效沟通。
而数据整理对于应用人工智能的重要性就如同你的模型的成功与你的数据的质量(和数量)高度相关一般。
调试/调节模型对一些不收敛或者包含与调试代码非常不同的过程但是给出合理结果的机器学习算法进行调试非常重要。
软件工程技巧可以在许多应用型机器的学习中使用。
但是应用人工智能领域变化的特别快,最好的学习方式是动手实践并且真正尝试构建一个完整方案解决实际的问题。