【职场建议】开发转算法,我们应该如何准备(过来人的肺腑之言)
? ? ?隨著近幾年AI和算法崗位越來(lái)越熱門(mén),很多開(kāi)發(fā)者都選擇從開(kāi)發(fā)崗向算法崗轉(zhuǎn)型,但是由于大家對(duì)算法崗并不是很熟悉,并且自身對(duì)算法崗所需要的技術(shù)技能也不是很了解,因此,在轉(zhuǎn)型過(guò)程中困難重重,我早在6年前也是一名Android開(kāi)發(fā)工程師,那么今天我就來(lái)結(jié)合自身經(jīng)驗(yàn)以及周邊同學(xué)的經(jīng)驗(yàn),來(lái)和大家聊聊如何從開(kāi)發(fā)崗向算法崗轉(zhuǎn)型。
開(kāi)發(fā)轉(zhuǎn)算法的優(yōu)勢(shì)
首先,我們先來(lái)說(shuō)一說(shuō)什么是開(kāi)發(fā)崗,以及開(kāi)發(fā)崗轉(zhuǎn)型算法崗的優(yōu)勢(shì)在哪里。其實(shí),軟件開(kāi)發(fā)工程師對(duì)于整個(gè)IT行業(yè)來(lái)講是一個(gè)不可或缺的崗位,也是一個(gè)相對(duì)比較綜合性的崗位。因?yàn)?#xff0c;對(duì)于現(xiàn)階段的軟件開(kāi)發(fā)工程師來(lái)講,不僅要掌握各種編程語(yǔ)言,還要了解數(shù)據(jù)庫(kù)、大數(shù)據(jù)以及很多工程化的問(wèn)題,甚至對(duì)于與AI相關(guān)的工程化問(wèn)題在某些公司也要有所涉及,因此,在我看來(lái),軟件開(kāi)發(fā)工程師是一個(gè)相對(duì)比較綜合的崗位,實(shí)際上,這也正是開(kāi)發(fā)崗轉(zhuǎn)行算法崗的優(yōu)勢(shì)所在。
很多人認(rèn)為,算法崗就是搞模型、算法以及與AI相關(guān)的東西,首先我要說(shuō)明的是,這個(gè)觀點(diǎn)是錯(cuò)誤的,至少針對(duì)于大部分公司來(lái)講,這個(gè)觀點(diǎn)是有一定的偏差的。在企業(yè)中,任何算法都是以上線為導(dǎo)向的,而所有產(chǎn)品的上線,幾乎都跑不掉QPS這個(gè)指標(biāo),簡(jiǎn)單來(lái)說(shuō)就是每秒的并發(fā)量,就拿我們公司舉例,為了使項(xiàng)目能夠在線上正常的運(yùn)轉(zhuǎn),一般QPS至少要求單機(jī)在2000以上,然后再橫向多級(jí)擴(kuò)展,使得提升整體并發(fā)量。對(duì)于算法工程師來(lái)講,要想把并發(fā)量提高,所要解決的問(wèn)題并不僅僅就是模型和算法的開(kāi)發(fā)和優(yōu)化,往往,我們還需要給其他業(yè)務(wù)平臺(tái)提供相應(yīng)的組建和接口,至少,我們需要把我們的模型進(jìn)行一定的打包,使外面的業(yè)務(wù)能夠調(diào)用。而這個(gè)打包的過(guò)程,一般會(huì)涉及到服務(wù)器的部署、接口的開(kāi)發(fā)和調(diào)用、并發(fā)和工程化等一系列的問(wèn)題,而這些往往就是開(kāi)發(fā)工程師所擅長(zhǎng)的,這也是開(kāi)發(fā)轉(zhuǎn)型算法的最大優(yōu)勢(shì)。
除了上面這種純模型的算法崗之外,還有一種算法崗就是與業(yè)務(wù)強(qiáng)相關(guān)的,最直觀的就是就是推薦算法工程師和一些NLP工程師。我們就拿推薦算法工程師來(lái)舉例,大家都知道,任何推薦的業(yè)務(wù)都是作用于產(chǎn)品之上的,在目前互聯(lián)網(wǎng)技術(shù)中,這些產(chǎn)品一般都會(huì)被存入到大數(shù)據(jù)倉(cāng)庫(kù)中,當(dāng)我們做推薦系統(tǒng)的時(shí)候,還需要考慮到數(shù)據(jù)的實(shí)時(shí)性,因此,對(duì)于一個(gè)合格的推薦算法工程師來(lái)講,不僅要對(duì)推薦算法本身有著足夠的了解,還必須對(duì)推薦算法所涉及到的周邊知識(shí)和技術(shù)比較熟悉才可以,例如,當(dāng)我們需要做實(shí)時(shí)推薦系統(tǒng)的時(shí)候,我們需要去了解kafka和flink等相關(guān)技術(shù),當(dāng)我們需要快速的存取時(shí),可能還需要對(duì)redis等內(nèi)存數(shù)據(jù)庫(kù)做一定的了解,如果要是想要對(duì)redis進(jìn)行數(shù)據(jù)落地,可能還需要了解一些pika等相關(guān)的知識(shí)。我們可以發(fā)現(xiàn),這些內(nèi)容都是推薦算法工程師要做的,但是卻和各種工程方面的內(nèi)容有著非常緊密的聯(lián)系,因此,對(duì)于這種以業(yè)務(wù)為導(dǎo)向的算法工程師來(lái)講,除了關(guān)注業(yè)務(wù)本身以外,還需要關(guān)注工程內(nèi)容,而這也是一名軟件開(kāi)發(fā)工程師所擅長(zhǎng)的。
上面的幾個(gè)例子,實(shí)際上都可以很好的說(shuō)明,算法工程師與開(kāi)發(fā)工程師實(shí)際上是有非常緊密的聯(lián)系的,因此,首先我們需要肯定的是,算法工程師轉(zhuǎn)型到AI工程師是可行的。但是具體要怎么做呢?
實(shí)際上,算法工程師與開(kāi)發(fā)工程師的本質(zhì)差別還是在對(duì)算法的研究上,而這個(gè)算法的研究實(shí)際上是一個(gè)非常廣義的內(nèi)容,而我們這里所講的算法工程師,一般可以理解為與AI相關(guān)的算法工程師。一個(gè)AI算法工程師,主要需要包含以下三種能力,這也是開(kāi)發(fā)在轉(zhuǎn)型算法工程師的時(shí)候的必修課。
框架的學(xué)習(xí)
目前AI領(lǐng)域的算法工程師一般都要求對(duì)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)框架有著比較深入的理解,因此,學(xué)習(xí)相關(guān)框架是算法工程師必須要面對(duì)的一個(gè)坎。
在AI領(lǐng)域中,算法工程師常用的框架一般有TensorFlow、Pytorch和Keras。幾乎在所有算法工程師招聘的需求中,都要求具備以上者三個(gè)深度學(xué)習(xí)框架中的一個(gè)或多個(gè)的能力。實(shí)際上,很多人在轉(zhuǎn)型算法之初,看到很多深度學(xué)習(xí)的框架都喜歡打退堂鼓,但實(shí)際上,我們?cè)趯W(xué)習(xí)任何一種框架的時(shí)候,基本上方法都是一樣的,深度學(xué)習(xí)也不例外。
在學(xué)習(xí)深度學(xué)習(xí)相關(guān)框架之前,建議先了解一些深度學(xué)習(xí)的相關(guān)概念和機(jī)器學(xué)習(xí)的相關(guān)概念,然后先把官網(wǎng)的一些教程拿過(guò)來(lái)練練手。對(duì)于一個(gè)有其他語(yǔ)言開(kāi)發(fā)經(jīng)驗(yàn)的同學(xué)來(lái)說(shuō),我建議大家邊練手邊看基礎(chǔ),而不是先把深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的所有概念都看一遍然后再去系統(tǒng)的學(xué)框架,然后再練手,這樣的話首先時(shí)間會(huì)很長(zhǎng),其次,實(shí)際上到最后你會(huì)發(fā)現(xiàn)很多東西你都記不住。
在我看來(lái),最好的學(xué)習(xí)方法是:
1、花2周的時(shí)間來(lái)看一下機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的基本概念和模型,如果有配套的代碼就跟著敲;
2、去系統(tǒng)的學(xué)習(xí)TensorFlow或者pytorch框架中的一種,去一些wiki類網(wǎng)站上學(xué)習(xí),只需要了解怎么用,以及常用的函數(shù)即可;
3、去找一些簡(jiǎn)單模型的實(shí)現(xiàn),比如TensorFlow版本的textcnn模型、pytorch版本的RNN模型和LSTM模型等的實(shí)現(xiàn),研究這些模型如何使用深度學(xué)習(xí)框架實(shí)現(xiàn);
4、去GitHub找?guī)讉€(gè)相對(duì)比較完整的且不是很大的項(xiàng)目,然后去看他是怎么實(shí)現(xiàn)的,在這里如果NLP的話,推薦文本分類、智能客服類的項(xiàng)目,如果是CV的話,建議看一些圖像分類的簡(jiǎn)單項(xiàng)目;
5、然后重復(fù)第4步,一直保持良好的代碼能力,熟能生巧;
數(shù)學(xué)基礎(chǔ)
數(shù)學(xué)可以說(shuō)是算法工程師的必修課,開(kāi)發(fā)的功底決定你走的有多廣,而數(shù)學(xué)功底則決定你做的有多深。
在我們研讀論文的時(shí)候,經(jīng)常會(huì)遇到很多非常繁雜的數(shù)學(xué)公式,對(duì)于一些只是想了解這個(gè)模型,或者用這篇論文里面的模型的人來(lái)說(shuō),對(duì)數(shù)學(xué)的要求其實(shí)并不是很重要。但是當(dāng)你的需求從用變成改的話,那么數(shù)學(xué)則變得格外的重要了。
很多時(shí)候,我們通過(guò)論文里面的公式可以了解整體的推導(dǎo)過(guò)程,并對(duì)里面很多參數(shù)的定義有了更深入的理解。一般來(lái)講,對(duì)于那些需要出研究成果的同學(xué),就需要把這里面的每一個(gè)細(xì)節(jié)研究的非常細(xì),需要去推導(dǎo)里面的各種邏輯關(guān)系和數(shù)學(xué)公式,甚至通過(guò)自己動(dòng)手優(yōu)化,來(lái)提高模型的性能,而這些實(shí)際上都是需要數(shù)學(xué)基礎(chǔ)的。
在AI算法領(lǐng)域中,我們常用的數(shù)學(xué)主要是線性代數(shù)、概率論和高等數(shù)學(xué)。
AI算法中的大部分算法都是跟矩陣相關(guān),而線性代數(shù)實(shí)際上就是一門(mén)專門(mén)針對(duì)于矩陣進(jìn)行研究的學(xué)科,因此,學(xué)好線性代數(shù)有助于后面在做深度學(xué)習(xí)關(guān)于矩陣和張量部分的內(nèi)容的深入研究;概率論對(duì)于深度學(xué)習(xí)來(lái)講,也是一個(gè)必不可少的內(nèi)容,在深度學(xué)習(xí)里,充斥著各種與概率論相關(guān)的算法,例如最常見(jiàn)的就是樸素貝葉斯算法;高等數(shù)學(xué)則一般運(yùn)用于數(shù)學(xué)的推導(dǎo)中,各種積分推導(dǎo)都要用到高等數(shù)學(xué)的知識(shí),最常見(jiàn)的就是BP算法。
另外,在這里我想跟大家安利一本書(shū),就是《具體數(shù)學(xué)》這本書(shū),這本書(shū)的話,實(shí)際上就是對(duì)計(jì)算機(jī)中常用的數(shù)學(xué)有了比較深入的總結(jié),當(dāng)然,看這本書(shū)的難度也是非常大的。
論文閱讀和代碼復(fù)現(xiàn)能力
可以說(shuō),閱讀論文是算法工程師的必修課,算法工程師與開(kāi)發(fā)工程師最大的區(qū)別是,算法工程師需要通過(guò)對(duì)大量的論文進(jìn)行復(fù)現(xiàn),從而確定最終的擬選用模型,然后再加以改進(jìn)或直接使用,而對(duì)于論文的復(fù)現(xiàn),一般我們就需要能夠看得懂論文。
舉個(gè)例子來(lái)說(shuō),我們的時(shí)間前段時(shí)間在做圖像超分辨率這個(gè)領(lǐng)域的內(nèi)容,那么我們所做的第一步就是去找最近兩三年內(nèi)在頂會(huì)上的比較優(yōu)秀的超分辨率相關(guān)的論文,然后再去GitHub上找到論文所對(duì)應(yīng)的官方代碼來(lái)驗(yàn)證我們的想法,但是有的時(shí)候,我們可能需要去指定特定的開(kāi)發(fā)框架(例如TensorFlow),而開(kāi)源的代碼中卻沒(méi)有這種框架的代碼,只有pytorch版本的代碼,這個(gè)時(shí)候我們就必須要自己使用TensorFlow進(jìn)行手動(dòng)實(shí)現(xiàn),這時(shí),我們就需要把論文讀懂,才可以更好的復(fù)現(xiàn)代碼。
因此,論文閱讀能力是開(kāi)發(fā)轉(zhuǎn)算法過(guò)程中必須要準(zhǔn)備的點(diǎn),在這里,英語(yǔ)是必不可少的環(huán)節(jié)。一般我們可以通過(guò)以下幾個(gè)步驟來(lái)準(zhǔn)備:
1、找一篇相對(duì)簡(jiǎn)單的論文(例如文本分類方向的),然后試著去讀懂它(主要是網(wǎng)絡(luò)結(jié)構(gòu)部分)
2、找到論文的相關(guān)復(fù)現(xiàn)代碼,并讀懂它;
3、試著自己用其他框架來(lái)復(fù)現(xiàn)它;
4、重復(fù)上述1~3步驟
算法式思維
開(kāi)發(fā)和算法的同學(xué)其實(shí)在邏輯思維上會(huì)有比較大的不同。對(duì)于開(kāi)發(fā)的同學(xué)來(lái)講,主要是以解決問(wèn)題為出發(fā)點(diǎn),而對(duì)于算法的同學(xué)來(lái)講,一般解決問(wèn)題的方式會(huì)有很多,但是必須要選擇一條既快又好的路,這是算法工程師需要具備的能力,對(duì)于這一點(diǎn)其實(shí)也是在轉(zhuǎn)型過(guò)程中需要長(zhǎng)期積累的過(guò)程。
算法的同學(xué)一般會(huì)碰到兩種問(wèn)題,第一種就是已經(jīng)有了代碼,要去優(yōu)化它。例如,現(xiàn)在我們?cè)谧鐾扑]系統(tǒng)時(shí)經(jīng)常會(huì)使用到一種算法叫協(xié)同過(guò)濾,如果說(shuō)基于item的協(xié)同過(guò)濾,用正常的協(xié)同過(guò)濾算法當(dāng)數(shù)據(jù)量增大的時(shí)候,就會(huì)導(dǎo)致內(nèi)存爆掉,實(shí)際上我們可以通過(guò)優(yōu)化協(xié)同過(guò)濾中的對(duì)稱矩陣,來(lái)降低時(shí)間復(fù)雜度和空間復(fù)雜度,從而解決這一問(wèn)題,而這種解決問(wèn)題的能力,實(shí)際上就是算法工程師必須要具備的能力和思維,說(shuō)白了,就是找到代碼中可以優(yōu)化的點(diǎn),然后進(jìn)行優(yōu)化,從而達(dá)到最終的目的。很多從開(kāi)發(fā)轉(zhuǎn)型過(guò)來(lái)的同學(xué),在這個(gè)方面經(jīng)常會(huì)吃虧,因?yàn)楹芏鄷r(shí)候,就是用傳統(tǒng)的開(kāi)發(fā)的思路來(lái)解決問(wèn)題,不會(huì)去注重里面的時(shí)間復(fù)雜度和空間復(fù)雜度,因此,這一點(diǎn)是要著重注意的。
第二種情況就是,我們還沒(méi)有代碼,但是有一個(gè)需求讓實(shí)現(xiàn)。例如我們?cè)谧鰣D像超分辨的時(shí)候,網(wǎng)上一般都是針對(duì)于三通道大圖像的超分辨率模型,但是如果業(yè)務(wù)中需要的是4通道的小分辨率的圖像進(jìn)行超分,我們需要怎么去做,才能夠解決這個(gè)問(wèn)題。作為開(kāi)發(fā)的同學(xué),一般的做法就是找到一個(gè)類似的解決方案,然后套上去,不斷的嘗試,從而解決問(wèn)題;但是到了算法崗,實(shí)際上就會(huì)有另外的一種思路,那就是,我先研究相關(guān)的論文,然后去把論文進(jìn)行復(fù)現(xiàn),然后再看看哪些點(diǎn)的改進(jìn)可以用在自己的需求上,然后再把自己的數(shù)據(jù)套進(jìn)去,并做模型更改的嘗試,從而完成整個(gè)的需求。這種情況,實(shí)際上也是開(kāi)發(fā)工程師在轉(zhuǎn)型算法工程師中經(jīng)常會(huì)遇到的問(wèn)題。
因此,算法式的思維對(duì)于開(kāi)發(fā)轉(zhuǎn)算法來(lái)講,是格外重要的。
?
開(kāi)發(fā)轉(zhuǎn)算法,說(shuō)容易也容易,說(shuō)難也難。上面是我所總結(jié)的幾個(gè)點(diǎn),希望通過(guò)我的總結(jié),能夠幫助大家,也歡迎大家在下面的留言區(qū)留言。
最后,祝大家轉(zhuǎn)型成功!
END往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯AI基礎(chǔ)下載(pdf更新到25集)機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):https://t.zsxq.com/yFQV7am本站qq群1003271085,加入微信群請(qǐng)掃碼喜歡文章,點(diǎn)個(gè)在看總結(jié)
以上是生活随笔為你收集整理的【职场建议】开发转算法,我们应该如何准备(过来人的肺腑之言)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常见算法的python实现(Github
- 下一篇: 【Python基础】Python3十大经