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

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2021.01.14

谢谢邀请!

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

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

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

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

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

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

说点实在的

学得不错后,参加个比赛kaggle或国内的京东、阿里云的比赛。检验一下自己的水平。

如果不是非常感兴趣,没必要转行人工智能。人工智能的泡沫快破了,吹得太厉害了。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注意:本文中的算法,指的是MachineLearning领域的算法(比如决策数,xgb,svm,rnn,cnn),非ComputerScience领域里的算法(比如quicksort),不要搞混

欢迎交流

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

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

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

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

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

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

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

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

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

多参加机器学习算法比赛

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

提升自己的阅读Paper的能力

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

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

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

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

总结

总体来说,软件工程师在转行到人工智能领域之前,一定要想好自己为什么要转行到人工智能,如果只是为了钱景或者岗位的发展情景,那真的不建议你转行过来。

转行到人工智能的过程会很辛苦,没有坚定的目标肯定很难坚持。当然,如果你真的对算法很感兴趣,希望你能一直保持自己最初的目标,最后,祝你好运。

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

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

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

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

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

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

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

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

1、计算机科学领域

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

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

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

(5)其它。

2、算法

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

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

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

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

5、心态

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

感谢阅读!

我研究生是研究模式识别方向,图像处理领域。学过《模式识别》《机器挖掘》等类似的课程,对我学习AI有一定的帮助,但是对于学习AI也有一定的难度。我的学习过程是这样的:

Python的学习是转行人工智能的基础,这个是一定要学的。如果你是C或者Java工程师,学python会非常快,因为都是面向对象的语言。基本一周就可以看机器学习的开源代码。学习编程语言对于程序员来说很easy了,这里不再多说。

可以简单的学习一些机器学习基本Python库,比如numpy,scikit-learn,Theano,Tensorflow,Caffe2等等。选择就是,用到再学!

机器学习分为:图像识别,语音识别,自然语言处理等方向,选择一个自己感兴趣的方向,然后找对应的项目。从项目出发并不是说从做项目开始,对于没有领域知识的程序员,写代码是很痛苦的。从项目出发的本意是:

不要从学习概率论,高等数学等基本理论开始。我第一阶段就是从这些基本理论开始,效果很不好。这些理论枯燥,没有针对性,没法理解这些理论跟AI到底是什么关系。因此,很容易放弃。

从项目开始:找个开源项目,比如GitHub上的开源项目OpenFace,去读源码,看人脸识别是如何做到的。读源码的时候一定会碰到各种机器学习的Python库,一些机器学习算法。以此为出发点,熟悉Python库的使用方法。碰到的机器学习算法这就是开始学习AI的切入点。

从项目开始的好处是,能将理论和实践相结合,比单纯学习理论更能理解理论的妙处!

在项目中碰到的机器学习算法,要想清楚明白是怎么来的,就要去论文中追本溯原,学习算法的使用环境,算法实施过程,算法的数学推导。这个时候就是学习数学基础的时机,只学习对应的章节,用不到的暂时不用学。

学习算法,还借助一些介绍机器学习算法的基础,把算法彻底弄懂。系统学习基本算法基础,比如卷积人工神经网络,反向传导,线性回归,贝叶斯网络,支持向量机SVM,决策树等等。这也很有帮助!

算法动手:

应用动手:

做一名程序员不易,要转行的程序员更不易!任何时候,身体健康第一!且行且珍重!如果有需要的资料,可以私信我,希望能给你提供帮助!

坚实的统计学基础是为了更好的理解机器学习。

机器学习理论可以深入理解构建函数模型并且与团队其他人员对机器有效沟通。

调试/调节模型对一些不收敛或者包含与调试代码非常不同的过程但是给出合理结果的机器学习算法进行调试非常重要。

软件工程技巧可以在许多应用型机器的学习中使用。

但是应用人工智能领域变化的特别快,最好的学习方式是动手实践并且真正尝试构建一个完整方案解决实际的问题。

THE END
1.算法笔记(三)算法学习技巧总结 算法是一门数学科学院,想要学号算法即该算法是为了要解决什么问题,需要静下心来谢谢代码,与不写代码的人区别是效率比他妈呢提高了很多,算法学习还需要举一反三你,这样我们才能狗的更好。https://www.code456.com/article/3598351.html
2.编程思维训练:培养解决问题的能力### 四、案例分享:编程思维如何改变生活- **案例一:教育领域的革新**:教育科技公司利用编程思维开发智能教学系统,根据学生的学习进度和能力提供个性化的学习路径,显著提高学习效率。- **案例二:城市管理智能化**:通过大数据分析和算法优化,城市管理者能够更精准地预测交通流量、优化资源配置,提升城市运行效率。https://baijiahao.baidu.com/s?id=1818508481138583292&wfr=spider&for=pc
3.小白必看永久提升代码/算法能力的6个编程习惯(推荐阅读)编程和算法能力是当代工程师的核心竞争力之一。想要快速提升自己的编程和算法能力,却苦于没有合适的方法?别担心,今天我将与你分享6个高效编程习惯,让你轻松提升编程和算法能力! 大家好,我是Erik,一名211大三的计算机学生,曾经获得过一些不错的奖项(具体可以看我主页),希望带更多的同学一起学习ACM/算法/蓝桥杯,快https://blog.csdn.net/qq_29495615/article/details/136628093
4.如何提升数据结构方面的算法能力数据结构知识和算法知识是我们实际解决解决问题的基元,如何提高算法能力就涉及如何将数据结构和算法应用于特定的场景,以及在实际使用中该如何选择对应算法。 算法的精髓在于分析和比较,要想清楚在什么时候,为什么使用这个算法。 比如说平衡搜索树,我们为什么要平衡呢?因为平衡可以减小树的最大深度,从而减小搜索时的最坏时http://m.hqyj.com/emb/Column/20209920.html
5.谈如何提高小学中高年级学生计算能力如何有效地提高学生的计算能力呢?尤其我长年任教中高年级数学,提高学生的计算能力一直是我数学教学中的困惑。通过对此课题的实践研究,我找到了一些提高学生计算能力的捷径,有以下肤浅的认识: 一、课堂上加强学生对算法和算理的掌握 要使学生会算,首先必须使学生明确怎样算,也就是加强法则及算理的理解。《新课程标准https://www.jycfd.cn/html/album/93/2020/06-15/211324378-17605.html
6.如何通过刷题提高算法能力归思君如何通过刷题提高算法能力 第一步:明确题目的意思 第二步:列出所有可能的解法,寻找最优解 第三步:实操,写代码,并优化 第四步:反馈并测试解法 提醒:要理解代码的思路后再开始背写,而不是一边看题解,一边敲代码。这不是程序员,这是打字员!https://www.cnblogs.com/EthanWong/p/12465697.html
7.AppStore上的“Leaflet算法分析:算法复杂度、算法性能等。 数据结构与算法分析是计算机科学的基础,是所有计算机程序的基础。掌握数据结构与算法分析可以使程序员更加高效地编写程序,提高程序的质量和性能。 【题解】 精选了具有代表性的算法题,使用Swift语言实现相关的数据结构与算法分析 https://apps.apple.com/cn/app/id1420814118
8.小学一年级数学加法教案(集锦15篇)(3) 客观地说,学生的各种算法之间是有差距的,甚至个别算法是不符合教学要求的。因此,在提倡算法多样,允许学生选择算法的同时,要引导他们优化算法,提高思维水平和计算能力。优化算法不应是教师否定学生原来的算法,告诉他们怎样想、怎样算。如果这样优化,学生仍然是被动地机械接受学习,甚至挫伤学习积极性。优化算法的主体https://www.unjs.com/jiaoan/shuxue/xiaoxue/20230105150016_6213970.html
9.三年级数学两位数加两位数教案2、在平等的,民主的,富有情趣的自主探索与合作交流中,发展学生的数学思维能力,提高学生解决简单的实际问题能力。 3、体验数学与生活的紧密联系,增强学数学的乐趣。 重点难点 重点:主动探索出两位数加两位数的计算方法。 难点:合理地运用算法灵活的进行计算。 https://mip.jy135.com/jiaoan/1172502.html
10.两三位数除以一位数笔算教案17篇(全文)2.经历探索三位数除以一位数除法的笔算的过程,明确算理,掌握算法,提高知识迁移类推能力和运算能力。 3.能利用所学的知识提出并解决简单的实际问题,感受数学与生活的联系,体验学数学、用数学的乐趣。 【教学重难点】让学生能正确计算三位数除以一位数的笔算,明确算理,掌握算法。【教学准备】多媒体课件 【教学过程】 https://www.99xueshu.com/w/filecnngr3nl.html
11.从集成学习到GBDT与随机森林(这一点具有bagging的思想,降低单个学习器的拟合能力,提高方法的泛化能力。) 由此可见,梯度提升方法和决策树学习算法可以互相取长补短,是一对完美的搭档。 2.4.3怎么降低单棵决策树的复杂度? 抑制单颗决策树的复杂度的方法有很多: 限制树的最大深度、限制叶子节点的最少样本数量、限制节点分裂时的最少样本数量 https://www.jianshu.com/p/a72539acafe5
12.一年级数学《100以内数的认识》教学设计(精选10篇)【设计意图:因为有了前面的教学铺垫,这一环节更重要的是训练学生自己的表达与交流能力,同时注重对算法多样化的渗透,引导学生选择又对对快的方法。】 三、巩固提高 (一)基本练习。 1、P48的“做一做”第1题:做好后,请个别学生说出方法,提示:利用加减法的关系,可以算得又对又快。 https://www.ruiwen.com/jiaoxuesheji/2672061.html
13.主任崔士鑫:用主流价值导向驾驭“算法”,全面提高舆论引导能力习近平总书记在中央政治局第十二次集体学习时明确要求,“探索将人工智能运用在新闻采集、生产、分发、接受、反馈中,用主流价值导向驾驭‘算法’,全面提高舆论引导能力”。这为我们在全媒体时代,充分利用好大数据、云计算、人工智能等新技术,推动主流媒体向数字化、网络化、智能化发展,实现单向式传播向互动式、服务式、https://www.thepaper.cn/newsDetail_forward_4645624
14.BiRealNet:通过改进表示能力和训练算法提高1目的是提升二值化卷积神经网络(1-bit CNN)的精度。虽然 1-bit CNN 压缩程度高,但是其当前在大数据集(如 ImageNet )上的分类精度与对应的实值 CNN 相比有较大的精度下降。本文提出的 Bi-Real-Net用 shortcut 传递网络中已有的实数值,从而提高二值化网络的表达能力,并且改进了现有的 1-bit CNN 训练方法。https://cloud.tencent.com/developer/article/1752296
15.如何培养小学生的数学计算能力有些数学计算试题具有明显的形式和数字构造特征,这些特征正是我们施展简便算法的大好机会,通过一定数量的简算练习,不但提高了学生的观察能力和分析能力,逐步强化了学生数学计算的技巧和快捷性,而且还给学生带来了快乐的精神享受,这对激发学生学习数学兴趣大有裨益。 https://www.oh100.com/a/201705/540755.html
16.算法教学中的思考(精选十篇)在教学过程中, 教师允许学生选择自己喜欢的算法这没有错, 但我认为这还不够, 教师还应不断提示学生:“你还能用别的方法算吗?”促使学生在坚持选择自己喜欢算法的同时, 还能关注其他同学提出的算法, 从而提高计算的灵活与思维的变通性。当然, 这里还涉及一个关于目标层次的要求, 即对一些思维敏捷、学习能力较强https://www.360wenmi.com/f/cnkeyi2rg0gf.html
17.算法工程师职业规划总之,作为一名算法工程师,职业规划是非常重要的。你需要定义自己的职业目标,提高技能水平,积累项目经验,建立良好的职业关系,持续学习和成长,提高沟通能力,寻找职业发展机会。通过这些措施,你将成为一名成功的算法工程师,并取得职业生涯中的巨大成功。 【特别提示】 https://www.xycareer.com/knowledge/8907.html
18.因果推断助力业务增长最新实践演讲介绍:图事后可解释性常因无法解决分布外泛化问题(OOD)而被诟病。针对此,本报告提出了:①一种基于对抗鲁棒性的抗 OOD 评估指标;②一种提高算法抗 OOD 能力的网络-数据联合解释范式。上述指标和范式可以极大地缓解 OOD 问题所带来的性能下降和应用限制。 https://hub.baai.ac.cn/view/31538
19.培养低年级学生计算能力的策略研究总之,培养低年级学生的计算能力不仅对提高教师的教学质量和学生的学习成绩都具有举足轻重的作用。这就要求要掌握算法,也要持之以恒,更要培养良好的学习习惯,加强口算能力的培养。但对于提高学生的计算能力来说,短时间的训练纵然有效,但要让学生真正提高计算能力,还是应该依靠长期的积累与训练。https://www.qxnrb.com/ipaper/qxnrb/html/2023-05/22/content_7786.htm