來聊
最適合開發人工智慧的三種程式語言
卓俊宏 (1948) 2017-11-03 11:20:30 週五
未來人工智慧非常重要,每個領域都需要人工智慧的深度學習和應用。網路上許多人也分享適合開發人工智慧的程式語言。但這些建議對很多初學者來說太多了,最後光花在認識和學習語言、找相關函式庫、找範例教學、找資源...就失去掉對人工智慧的原有熱忱了,怎麼再去深入人工智慧的核心價值呢?因此筆者建議三種互相關聯,可直接用在人工智慧的程式語言,把這三種語言學好,學專,學熟,就能打片天下!
要分三種層次:一種是從機器、元件、算法、服務的核心層次。二種是GUI、網路與遠端操控的層次。三是因應風向與流行,人在屋簷下,不得不學。AI不只是背後的算法,前端可以和人互動的畫面和統計分析也是重點。其餘語言(AIML, Lisp, Prolog, Go, Matlab...)當然可以嘗試嘗試,其中,筆者感興趣的是Go語言,因它同時具有直譯式語言與專案編譯(compile)成binary檔案,再去部署(Deploy)的特性。但如果沒有產品開發或特殊專案需求,最後只可能演變成短暫學習,而不是終身開發應用與技能。

一、C/C++(核心演算法)
用C/C++去開發 初期感覺比較辛苦,但熟悉後會發現這語言非常穩定、快速。除了編譯成機器語言效率非常高之外,寫法也是重點。C/C++ 可以讓一位高手靈活地去運用機器硬體資源。因此目前世界上,幾乎所有作業系統和重要函式庫(Libraries)資源都是用C/C++語言來開發的。這些優勢統合在一起,最後造就出一個雖然古老但是卻讓資深工程師愛不釋手的語言。反觀是剛入門的工程師,心都亂了,經常選錯語言。

很多人以為現在硬體速度夠快,程式語言不需太快。因此疊床架屋 用virtual machine架一層,只是聽說它好寫或者能跨作業系統平台。但卻忽略了我們開發人工智慧,並不該把重點放在跨平台,而是未來可能會在某機器人(嵌入式系統)身上執行,是一種軟硬整合的工作。我們不會在一機器人身上安裝多種作業系統,基本上這不應該是我們的目的。

此外也不要認為硬體速度夠快,軟體就可以不在乎。必須要謹記 在頻繁的機器學習、偵測與辨識過程,目前的速度永遠不夠快,記憶體永遠會不足。否則為何要研發更快的量子電腦?此外還有原始檔受保護,既有資源豐富,學到深處有助理解計算機架構等等好處。因此謹慎使用硬體資源的C/C++是筆者認為首選的人工智慧開發語言。

最後,選擇C/C++也可以在non os(沒有作業系統)的嵌入式機器上妥尚、精巧且有效率的執行。其物件導向的支持,和硬體縝密整合,和最快的效能,造就只要您熟稔C/C++語言,就幾乎可以通吃各種大小專案軟硬體開發工作。



二、php7+  nginx + Javascript, Html5, SVG, WebGL (網頁前後端)
投入AI開發工作 不希望在GUI和遠端控制部份花太多時間,因此我們希望前端可以有和研究人員互動的畫面和統計分析報表。隨時可以手動進入糾正缺失,或切換參數。以下這張圖就是用php 程式產出的。穩定,令人放心。
螢幕快照 2018-08-16 下午4.27.39.png

透過網路,我們可以進行一對多或多對多的監看、控制與管理。這時,此類語言就非常重要。前者C/C++開發的算法元件可以轉變成 php 的元件。如此,效能、畫面、網路、跨作業系統等都可以達到。PC、筆電、手機等都可以操作。

php是3p(perl, python, php)之一,很適合當獨立進階的shell script 或CLI(Command-line interface)。可用來管理電腦、網路和資料庫,也適合寫後端web程式,因此值得學習。原本我推薦nodejs ,因為他和前端的 javascript 一樣,學一種語言可以用在兩個地方CP 值較高。但最後還是選擇php。主因有四:
  1. php比node.js 更優,就不需要額外浪費時間在學node.js。https://thinkmobiles.com/blog/php-vs-nodejs/ 
  2. 運用在實際工作和生活中,除了物聯網專案有用到node.js外,其他幾乎都使用php,因此初學者除非找工作,否則不需額外增加負擔。
  3. 把web server 交給 nginx ,專心應付 php,這樣整體系統的方便性和穩定性會比使用node.js來得好。
  4. php 的資源和手冊很完整。

三、Python(人工智慧常用語言)
php是3p(perl, python, php)之二,目前在筆者電腦安裝的Python是 3.7版,要學是因為幾乎所有常見的深度學習框架都用Python去操控,許多範例也都使用 Python,大概只有Torch框架腳本語言用Lua,沒人用PHP或Perl。因此為了熟悉這些框架,不得不學。大部分的深度學習核心都是用C/C++開發的,很多框架會再透過C的API讓其他語言透過 FFI (foreign function interface)去呼叫。目前官方支援度最好的高階語言還是Python,但其他語言如Javascript, C++, Java, Go, Swift等語言也有部分支援。如果有人想用後端網頁的PHP語言來操作,可用 FFI 外掛去實作。
Figure_2.png

深度學習最重要的是目的,知道目的才知道要準備什麼資料,然後再選擇最適合的演算法,進入學習與調教,因此若要成為AI 優秀專家:
一、網路上下載原始碼來研究。
二、找個主題來實作。
三、到一間人工智慧的公司開發產品,產品要能夠在市面上看得到,至少滿三年。
四、去參加國際大賽,最好能得到前三名回來。

初學者好好把一種程式語言學專後再學另外一種,能花一兩年時間實際開發出系統是正確的學法。否則東學西學,什麼系統都沒實作,真正問題都不會遇到,最後還是門外漢一個。以上是筆者的觀點,如果您有不同想法,都歡迎提出。

1.2 143078
2018-03-21 15:58:10 週三
樓主也可以參考以下效能評比:

目前 go 語言效能很驚人,與其學 python 不如學 go。但 c 還是最酷!!

https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=gcc
1.3
2018-03-21 17:12:42 週三
多謝整理分享!
1.4 jotw168
2018-03-28 22:38:27 週三
C/C++真的是不褪流行的精典語言,不論是對硬體的控制或繪圖,都可達到最佳的效率,穩定度也很好,但要夠專精才能駕衘它,學好C/C++要再學其他語言,也都變得簡單了,值得力推。
1.6 卓俊宏
2019-01-31 23:52:13 週四
1C+1P+1Web 都要成為基本語言!
c/c++, python, web 語言
1.6 jaumin.chen
2018-08-17 07:06:22 週五
“最適合開發人工智慧的程式語言”這個題目,本身就蠻有趣的。^^人工智慧的程式開發,現在的解釋相當廣義,自駕車、電腦視覺、NLP、爬蟲等等,都可視為相關領域。應用面不同,實作上所需也不太一樣吧!

AI領域一直有很多新的論文及演算法出來,有些框架用C和C++來開發給大家運用,最主要的是效能考量。在github和kaggle競賽可以看到不少code與作法的分享,實作上常看到用Python來開發。程式語言進入門壏較低一些(和C或JAVA比),而可以參考的資訊又非常多,蠻適合快速的把想法實作出來。資料科學的應用上,常常花的時間是在建Model和調參數,還有嘗試不同的演算法的效果,和傳統認知寫非常多行的Code的"寫程式",似乎又有些不一樣。

我還是沒有回應你的問題,其實個人是覺得看你想做什麼耶!自己用的熟,寫出來的Code聽話,都很好。:P

1.7 卓俊宏
2018-08-23 08:52:08 週四
以下連結有 php 用到的三個framewrok Laravel vs. CodeIgniter vs. Phalcon 比較,雖然Laravel 人氣旺,但要看你的用途。筆者認為多保留一些彈性,和高效能是重要的,就會選擇 CodeIgniter 和 Phalcon。