C++,有些招聘Python?到底哪門程式語言更重要?

每日一發小視頻

人工智能,就是讓機器可以像人一樣思考問題。典型的場景有:圖像識別、自然語言處理、語音處理、動態物體跟蹤、可運動的機器人,等等。

智能,就是人類可以很容易作出判斷,但是卻根本描述不清楚為什麼是這樣。比方說,一張人臉,人類盯上不超過一秒鐘,然後幾乎不需要思考,就立刻認出這是誰。但是人類卻根本無法用文字作出該臉特徵的描述。讀文章,有“語感”,聽音樂,有“樂感”。為什麼某首樂曲聽上去悲傷?感覺,樂感,真的說不清楚悲傷的原因。開車,也是講“感覺”。只有學駕照的時候,教練才教很多公式,教很多特殊點(雨刷鉚釘,右邊玻璃的右下角等等)。AlphaGo為什麼是人工智能?對了,就是“棋感”。

而早期的深藍下國際象棋,勝過人類,就不能叫智能。因為它基本上是以窮舉為主,深藍的每一步操作都是精確可描述的,是“可知”的,是機器思維而不是人類思維。相反,AlphaGo就連開發者都搞不清楚這機器是怎麼運作的。它就是個“黑匣子”。它模擬的是人的“感覺”而不是一堆人類發明的精確圍棋算法公式。感覺是無法用語言描述的。

簡單算術運算也不是智能,因為人類列算式計算的每一步都是可精確描述的。同樣電子計算器在算術運算時的每一個步驟同樣也是如此(雖然它用的是二進制計算,數字電路,泰勒級數展開等與人類不太一樣的方法)。

人工智能要模擬人的“感覺”,就必須訓練,也可以叫做“學習”。比如讓它區分貓和狗,就給它幾萬張貓和狗的圖片,讓它自己去慢慢學習。在學習前,人類只需要告訴它某張圖是貓或是狗,其他信息一概不用多說。比如完全沒有必要提醒它有鬍子的就是貓。

從目前的技術來看,訓練是非常考驗技術和花費時間的。以致於大家一提到人工智能,就是以為在說機器訓練(機器學習)

訓練是個反覆迭代的過程,就是說需要不斷地探索,此路不通,就換一條路,非常艱辛。現實中,往往是不斷地調整神經網絡的參數,不斷地對比訓練結果。多數時候還要數據預處理,以及輔助傳統的機器學習、傳統圖像處理、模式識別等技術。

那麼,上述過程,誰最擅長?現在公認的就是Python

Python是解釋性語言而,弱類型,用起來很方便,開發效率大大高過C++、JAVA等語言,而且有很多現成的機器學習、深度學習、科學計算庫,這些都是它作為人工智能語言的優勢。AlphaGo的頂層代碼大部分是用的Python,AlphaGo的成功,也對Python起了很大的推動作用。

數據的訓練還可以細分為兩類。一是前期的算法探索和小樣本數據訓練,二是後期正式的大規模數據訓練。比如實驗的1萬個樣本,可能要訓練1個小時才能得到理想的網絡。而最終的100萬個樣本時,可能就需要100個小時。這已經很長了。這時候,C++的作用就體現出來了。可以用C++花很多的人力成本投入去優化算法。概括說來就是,前期用Python進行算法探索,待算法和相關參數確定,後期用C++重寫算法實現生產環境的真實的正式的訓練

訓練是人工智能的很難的一部分,但是絕對不是人工智能的全部。人工智能還包括前期的數據獲取、數據預處理和後期的實際應用

訓練得到的只是一個巨大的神經網絡,有了它以後就可以預測了。預測所需要花的時間遠遠短於訓練。比如訓練花100個小時,而用訓練好後的網絡預測可能只需要5秒。可別小看這5秒的短時間。我們仍然有必要優化,比如是否可以1秒就完成,0.1秒完成?試想,設計一個無人駕駛系統,那可是分秒必爭啊!稍微反應遲緩就可能釀成事故。

這時候,C++的作用又一次體現出來了

這還沒完。人工智能的載體可能會很精簡。比方說嵌入到人體,嵌入到汽車,這麼小的系統,不是Python的天下。還有機器人,是可以運動的,如何驅動機器動,這不還是C++的強項嘛。

另外,還涉及到前期的數據採集和預處理。比如圖像、音頻、視頻,需要實時感知,包括必要的預處理(比如灰度化、關鍵部位快速定位)。這就要用到音頻視頻的高效處理,數據通信,物聯網等技術。這不還是C++的強項嗎?

總之,在人工智能開發的整個過程中,Python主要處理算法模型部分,而具體的前期數據獲取和後期與外部設備部分的交互則可以用C++來實現

說個最誇張的例子。假如我們已知X要預測Y,Python做的工作就是找到Y=aX+b這測關係式,特別是a和b的具體數值最值錢。而除此之外的所有工作,從數據採集,軟件架構設計,數據庫設計與讀寫,後臺運作,分佈式處理一直到前端展示可能都是用的Python以外的技術(比如C++)來實現。Python的工作僅僅是得到a和b,僅此而已!

不過,從目前來看,人工智能最主要和最難的部分依然是由Python來實現的


犍為真人

早起人工智能概念還很模糊的時候,很多人也很不解,為什麼莫名其妙的,Python怎麼就成了開發人工智能的第一語言呢?

人工智能為什麼不用C++

事實上,用什麼編程語言跟人工智能完全沒有關係,只要你願意,用C++也沒有問題。至於為什麼Python成為了人工智能的編程語言,原因有很多,這裡簡單說一下。

01

谷歌的搜索引擎源自Page和Brin的博士論文,當時他們的程序就是用Python寫的,當日他們兩就決定讓谷歌投入做AI時,首選的語言就是Python。在收購DeepMind之後,谷歌開始發佈大量的論文,放出的代碼也基本上是基於Python的,所以自然而然……

02

這是由於Python的優點決定的,它具有多平臺兼容性,代碼簡潔、可讀性強,豐富的開源庫等等。

C++在人工智能方面毫無用處?

恰恰相反,C++在人工智能方面的用處很大。目前機器學習的底層框架和所以來的支持庫,幾乎都是在使用C++。只是相比之下,Python的需求量更大,並不代表C++就沒有市場了。

如果你寫的是底層的庫,那麼C語言是最佳的選擇,如果是代碼量巨大,且有大量底層庫支持,保證速度不至於慢到不能接受的程度,Python還是最佳的選擇。

為什麼招聘的需求不同?

再看一個例子,你就明白了。來自騰訊人工智能職位的招聘。

招聘崗位有:語言識別/合成研究員,機器學習研究員、自然語言處理研究員、計算機視覺研究員、語音識別開發工程師……

閱讀一下這些崗位要求,你會發現一條几乎通用:至少精通一種技術語言,包括但不限於Java、C/C++、C#、Python等。

另外,要麼就是要求你同時精通C++和Python。

結合上面對C++和Python的闡述,你應該知道為什麼有些企業會招聘C++,有些企業會招Python了吧。

編程語言,誰是核心?

不妨再舉個例子,下圖是TIOBE編程語言排行榜:

這個榜單被很多人解讀為“誰才是編程語言的老大”。這可能是最大的誤讀了,其實這個榜單更多的是反應各類編程語言的熱門程度,亦或是市場需求,僅此而已。

每種編程語言,都有他們的優勢和劣勢,他們可能因為市場的需求而有了冷熱之分。如果你非得分出誰才是最重要的編程語言,我只能告訴你:

“PHP是世界上最好的語言”

——摘自W3Cshool學員的回答


W3Cschool

這個問題我有答案,頂我上去。

因為這兩個崗位要乾的活完全不一樣。

第一個要求python和tensorflow說明整個工作主要在設計模型,訓練模型,最後可能的輸出形式是用模型離線算一批數據或者用GPU在服務器部署;所以不需要太多的C/C++工程能力。

第二個工作要求C/C++,特別有一條要在手機客戶端部署,這個要求就高很多了,不只是模型訓練,你還需要在手機上實現模型,手機上可沒有CUDA生態的GPU,主要是一些協處理器,沒法直接上tensorflow。所以此時,比較好的方案就是用C/C++來進行CPU編程實現模型。


工程學之美

其實人工智能可以用到很多種語言,不只是Python和C/C++,還有Java,以及lisp,prolog.不過目前來看,還是Python和C++用得更多。

而Python其實是人工智能的首選語言,而且想要入門Python比其他語言都會容易些。當然了,不是說C++在人工智能中就毫無用處了,而是相比Python,它更不適合用在人工智能上。為什麼?

看看它的缺點:1.遵循自上而下的方法,語言比較複雜;2.僅僅是更適合實現特定系統或者是算法核心/基礎。

而Python呢?優勢更多:1.開發速度明顯比C++更快;2.有各種各樣的庫和工具;3.它面向對象;4.它還支持算法測試。


小碼哥Code

這麼說吧,C++學精了,上手其他編程語言會簡單許多,有很多優勢,python主要是上手簡單,但是精通也不容易。程序語言也沒有哪個更重要,只有哪個更適合。人工智能的開發的核心庫一般都也是C++寫的,只是提供了python程序語言接口,因為它更便捷。在開發過程中遇到性能調優的問題時還是會繞回到C++的。


吳大爺的日常

舉個例子吧,以caffe為例,layer就是用c++寫的,底層用C++實現起來快,對於caffemodel來說,一般大家都會選擇用python接口去解析它,畢竟方便。所以python和c++我認為是必須具備的兩個技能吧


分享到:


相關文章: