AI(人工智能)為應(yīng)用程序開(kāi)發(fā)人員打開(kāi)了一個(gè)充滿可能性的世界。通過(guò)利用機(jī)器學(xué)習(xí)或深度學(xué)習(xí),您可以生成更好的用戶畫(huà)像、個(gè)性特征和適當(dāng)推薦,或者包含更智能的搜索、語(yǔ)音接口或智能輔助,或者以其他方式改進(jìn)您的應(yīng)用程序。您甚至可以構(gòu)建能看、會(huì)聽(tīng)并響應(yīng)的應(yīng)用程序。
你應(yīng)該學(xué)習(xí)哪種編程語(yǔ)言來(lái)探究AI的深度?當(dāng)然,您需要一種具有許多良好機(jī)器學(xué)習(xí)和深度學(xué)習(xí)庫(kù)的語(yǔ)言。它還應(yīng)具有良好的運(yùn)行時(shí)性能、良好的工具支持、大型??程序員社區(qū)以及健康的支持包生態(tài)系統(tǒng)。這仍然能留下很多好的選擇。
以下是我對(duì)人工智能開(kāi)發(fā)的五種最佳編程語(yǔ)言的選擇,以及三項(xiàng)榮譽(yù)提及。其中一些語(yǔ)言正在崛起,而其他語(yǔ)言似乎正在下滑。幾個(gè)月后回來(lái),沒(méi)準(zhǔn)你可能會(huì)發(fā)現(xiàn)這些排名發(fā)生了變化。
那么,應(yīng)該選擇哪種編程語(yǔ)言進(jìn)行機(jī)器學(xué)習(xí)或深度學(xué)習(xí)項(xiàng)目?給你推薦五種最佳的編程語(yǔ)言選擇。
一、AI編程首選
1.Python
排名第一的是Python。怎么可能是別的,真的嗎?雖然有一些關(guān)于Python的令人抓狂的事情——空格、Python 2.x和Python 3.x之間的重大分裂、五種不同的打包系統(tǒng),它們都將不是問(wèn)題——如果你正在進(jìn)行AI工作,你幾乎肯定會(huì)在某些時(shí)候使用Python。
Python中提供的庫(kù)在其他語(yǔ)言中幾乎是無(wú)與倫比的。NumPy已經(jīng)變得如此普遍,它幾乎是張量操作的標(biāo)準(zhǔn)API,而Pandas將R強(qiáng)大而靈活的數(shù)據(jù)幀帶入Python。對(duì)于自然語(yǔ)言處理(NLP),您擁有令人尊敬的NLTK和極其快速的SpaCy。對(duì)于機(jī)器學(xué)習(xí),有經(jīng)過(guò)實(shí)戰(zhàn)考驗(yàn)的Scikit-learn。當(dāng)涉及到深度學(xué)習(xí)時(shí),所有當(dāng)前的庫(kù)(TensorFlow,PyTorch,Chainer,Apache MXNet,Theano等)都是有效的Python優(yōu)先項(xiàng)目。
如果您正在閱讀關(guān)于arXiv的尖端深度學(xué)習(xí)研究,那么幾乎可以肯定您會(huì)在Python中找到源代碼。然后是Python生態(tài)系統(tǒng)的其他部分。雖然IPython已成為Jupyter Notebook,而不是以Python為中心,但您仍會(huì)發(fā)現(xiàn)大多數(shù)Jupyter Notebook用戶以及大多數(shù)在線共享的筆記本都使用Python。
沒(méi)法繞過(guò)它。Python是人工智能研究的最前沿語(yǔ)言,是你能找到最多的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)框架的語(yǔ)言,也是AI世界中幾乎所有人都會(huì)說(shuō)的。出于這些原因,Python是人工智能編程語(yǔ)言中的第一個(gè),盡管你的編碼作者每天至少會(huì)詛咒一次空白問(wèn)題。
2.Java和他的朋友
JVM家族系列語(yǔ)言(Java,Scala,Kotlin,Clojure等)也是AI應(yīng)用程序開(kāi)發(fā)的絕佳選擇。無(wú)論是自然語(yǔ)言處理(CoreNLP)、張量操作(ND4J)還是完整的GPU加速深度學(xué)習(xí)堆棧(DL4J),您都可以使用豐富的庫(kù)來(lái)管理所有部分。此外,您還可以輕松訪問(wèn)Apache Spark和Apache Hadoop等大數(shù)據(jù)平臺(tái)。
Java是大多數(shù)企業(yè)的通用語(yǔ)言,Java 8和Java 9中提供了新的語(yǔ)言結(jié)構(gòu),編寫(xiě)Java代碼并不是我們?cè)S多人記憶中的可憎體驗(yàn)。用Java編寫(xiě)AI應(yīng)用程序可能會(huì)讓人覺(jué)得無(wú)聊,但它可以完成工作-您可以使用所有現(xiàn)有的Java基礎(chǔ)架構(gòu)進(jìn)行開(kāi)發(fā)、部署和監(jiān)視。
3.C/C++
在開(kāi)發(fā)AI應(yīng)用程序時(shí),C/C++不太可能是您的首選,但如果您在嵌入式環(huán)境中工作,并且無(wú)法負(fù)擔(dān)Java虛擬機(jī)或Python解釋器的開(kāi)銷(xiāo),那么C/C++就是解決之道。當(dāng)你需要從系統(tǒng)中獲取最后一點(diǎn)性能時(shí),你需要回到可怕的指針世界。
值得慶幸的是,現(xiàn)代的C/C++寫(xiě)起來(lái)還是很愉快的(誠(chéng)實(shí)之言!)。具體方法你是有的選擇的——您可以深入了解堆棧底部,使用CUDA等庫(kù)來(lái)編寫(xiě)直接在GPU上運(yùn)行的代碼,也可以使用TensorFlow或Caffe來(lái)訪問(wèn)靈活的高級(jí)API。后者還允許您導(dǎo)入數(shù)據(jù)科學(xué)家可能使用Python構(gòu)建的模型,然后以C/C++提供的所有速度在生產(chǎn)中運(yùn)行它們。
請(qǐng)留意Rust在未來(lái)一年中在這個(gè)領(lǐng)域所做的事情。結(jié)合C/C++的速度與類(lèi)型和數(shù)據(jù)安全性,Rust是實(shí)現(xiàn)生產(chǎn)性能的絕佳選擇,而不會(huì)產(chǎn)生安全問(wèn)題。并且對(duì)Rust來(lái)說(shuō),TensorFlow綁定已經(jīng)可用了。
4.JavaScript
JavaScript?到底幾個(gè)意思?淡定,聽(tīng)我說(shuō)說(shuō)——Google最近發(fā)布了TensorFlow.js,這是一個(gè)WebGL加速庫(kù),允許您在Web瀏覽器中訓(xùn)練和運(yùn)行機(jī)器學(xué)習(xí)模型。它還包括Keras API以及加載和使用在常規(guī)TensorFlow中訓(xùn)練的模型的能力。這可能會(huì)吸引大量開(kāi)發(fā)人員涌入AI領(lǐng)域。雖然JavaScript目前沒(méi)有與此處列出的其他語(yǔ)言相同的機(jī)器學(xué)習(xí)庫(kù)訪問(wèn)權(quán)限,但很快開(kāi)發(fā)人員將在他們的網(wǎng)頁(yè)中添加神經(jīng)網(wǎng)絡(luò),與添加React組件或CSS屬性幾乎相同。真是即賦予權(quán)力有讓人震恐。
TensorFlow.js仍處于早期階段。目前它在瀏覽器中有用,但在Node.js中不起作用。它還沒(méi)有實(shí)現(xiàn)完整的TensorFlow API。但是,我預(yù)計(jì)這兩個(gè)問(wèn)題將在2018年底之前得到解決,此后不久JavaScript將對(duì)人工智能進(jìn)行入侵。
5.R
R進(jìn)入前五名的底部,并且趨勢(shì)向下。R是數(shù)據(jù)科學(xué)家喜愛(ài)的語(yǔ)言。但是,由于其以數(shù)據(jù)幀為中心的方法,其他程序員在第一次遇到R時(shí)會(huì)發(fā)現(xiàn)R有點(diǎn)混亂。如果你有一個(gè)專(zhuān)門(mén)的R開(kāi)發(fā)人員小組,那么使用與TensorFlow,Keras或H2O的集成進(jìn)行研究,原型設(shè)計(jì)和實(shí)驗(yàn)是有意義的,但由于性能和操作問(wèn)題,我不愿意推薦R用于生產(chǎn)用途。雖然您可以編寫(xiě)可以部署在生產(chǎn)服務(wù)器上的高性能R代碼,但是使用該R原型并使用Java或Python重新編寫(xiě)它幾乎肯定會(huì)更容易。
二、其它AI編程
當(dāng)然,Python,Java,C/C++,JavaScript和R并不是唯一可用于AI編程的語(yǔ)言。讓我們來(lái)看看其它三種編程語(yǔ)言,這些語(yǔ)言并沒(méi)有完全進(jìn)入我們的前五——二上升,一下降。
1.Lua
幾年前,Lua在人工智能領(lǐng)域處于領(lǐng)先地位。使用Torch框架,Lua是最流行的深度學(xué)習(xí)開(kāi)發(fā)語(yǔ)言之一,你仍然會(huì)在GitHub上遇到很多歷史深度學(xué)習(xí)工作,用Lua/Torch定義模型。我認(rèn)為,為了研究和查看人們以前的工作,熟悉Lua是個(gè)好主意。但隨著TensorFlow和PyTorch這樣的框架的到來(lái),Lua的使用已大幅減少。
2.Julia
Julia是一種高性能的編程語(yǔ)言,專(zhuān)注于數(shù)值計(jì)算,這使得它非常適合“數(shù)學(xué)繁重”的AI世界。雖然現(xiàn)在不是那種流行的語(yǔ)言選擇,但像TensorFlow.jl和Mocha(受Caffe影響很大)這樣的包裝器提供了良好的深度學(xué)習(xí)支持。如果你不介意那里還沒(méi)有一個(gè)龐大的生態(tài)系統(tǒng),但是希望從其專(zhuān)注于使高性能計(jì)算變得容易和迅速的過(guò)程中獲益,這是個(gè)不錯(cuò)的選擇。
3.Swift
正如我們要推出的那樣,LLVM編譯器和Swift編程語(yǔ)言的創(chuàng)建者Chris Lattner宣布推出Swift for TensorFlow,該項(xiàng)目承諾將Python提供的易用性與速度和靜態(tài)類(lèi)型檢查相結(jié)合的編譯型語(yǔ)言。作為獎(jiǎng)勵(lì),Swift for TensorFlow還允許您導(dǎo)入Python庫(kù)(如NumPy)并在Swift代碼中使用它們,就像使用任何其他庫(kù)一樣。
現(xiàn)在,Swift for Tensorflow目前處于開(kāi)發(fā)的早期階段,但是能夠編寫(xiě)現(xiàn)代編程結(jié)構(gòu)并獲得速度和安全性的編譯時(shí)保證,確實(shí)是一個(gè)誘人的前景。即使你還沒(méi)出去學(xué)習(xí)Swift,我也建議你留意這個(gè)項(xiàng)目。