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要求比較高,動不動就是研究生畢業的,當然,薪水也特別高。如果你是小本,並且年齡大了,你就必須要有轉行失敗的心理準備,如果在本公司裡面涉及一些人工智能方面的東東,那最好了,儘量去靠近吧。


分享到:


相關文章: