轉(zhuǎn)載
陳昭明先生大作
前言
這一波人工智慧(Articial Intelligence,AI)風(fēng)潮方興未艾,產(chǎn)學(xué)研界發(fā)表不少的具體研發(fā)成果,例如AlphaGo、機(jī)器人、無(wú)人駕駛自動(dòng)車、ChatBot、人臉辨識(shí)、語(yǔ)音辨識(shí)...等,加上各種媒體新聞不斷吹捧,搞的好像不懂AI的資訊人,就快要失業(yè)了,于是,狂買了近二十本的相關(guān)書籍,準(zhǔn)備好好的努力一下,一窺 AI 奧秘,剛好藉由鐵人賽督促自己,記錄過(guò)程并將心得與同好分享,也希望能獲得各位先進(jìn)的指教。
AI的演進(jìn)
人工智慧其實(shí)已經(jīng)歷了三波熱潮,如下圖,前兩波都功敗垂成,只留下一些美麗的愿景。

圖. AI 的三波熱潮, 資料來(lái)源:http://www.testleo.com/blog/archives/6121 。
為什么這一波會(huì)成功? 主要有幾個(gè)動(dòng)力:
- 資料增加與整理:拜網(wǎng)際網(wǎng)絡(luò)之賜,資料以指數(shù)的速度大量的增加,又因大型網(wǎng)絡(luò)公司的掘起,他們投注許多的人力與資金,標(biāo)注(Labelling)訓(xùn)練資料,用于改善自身的核心業(yè)務(wù) -- 社群媒體(social media),并開(kāi)放給一般研究者使用,例如 image.net就擁有超過(guò)近1400萬(wàn)張標(biāo)注的圖片,作為影像辨識(shí)的訓(xùn)練/測(cè)試資料集。另外,手機(jī)的盛行讓企業(yè)輕易蒐集大量的用戶行為資料,物聯(lián)網(wǎng)(IoT)的風(fēng)潮也會(huì)產(chǎn)生大量的感測(cè)器資料,這些都將成為 『機(jī)器學(xué)習(xí)』(Machine Learning) 的養(yǎng)分。
- 硬體的發(fā)展:依摩爾定律的經(jīng)驗(yàn)法則,積體電路上可容納電晶體的數(shù)量每隔24(或 18) 個(gè)月便會(huì)增加一倍,以及強(qiáng)大的云端運(yùn)算/資料中心、還有專為AI設(shè)計(jì)的CPU/GPU/FPGA/晶片,在在都顯著提升伺服器端及用戶端設(shè)備的運(yùn)算速度。
- 演算法:各種演算法推陳出新,配合GPU算術(shù)運(yùn)算的優(yōu)勢(shì)及分散式計(jì)算的實(shí)現(xiàn),利用數(shù)學(xué)/統(tǒng)計(jì)理論,計(jì)算大量資料,形朔各種模型,應(yīng)用在影像、語(yǔ)音、文字辨識(shí)、處理與回應(yīng)上,使機(jī)器具備人腦一般的智慧。
種種的因素擘劃出美麗的未來(lái)愿景,還是海市蜃樓? 且看未來(lái)發(fā)展。

圖. 第三波AI的動(dòng)能,資料來(lái)源: 人工智能,請(qǐng)準(zhǔn)備迎接冬天
機(jī)器學(xué)習(xí)(Machine Learning)
這一波AI的主軸就是『機(jī)器學(xué)習(xí)』(Machine Learning),強(qiáng)調(diào)讓『機(jī)器自我學(xué)習(xí)』,藉由資訊的蒐集與演算法的改進(jìn),讓機(jī)器可以吸收知識(shí),自我學(xué)習(xí),并根據(jù)學(xué)習(xí)的成果(即預(yù)測(cè)的準(zhǔn)確性)修正與反饋,不斷提升機(jī)器的智慧。這種解決問(wèn)題的方法與傳統(tǒng)的系統(tǒng)開(kāi)發(fā)想法有所不同,Machine Learning 不只靠演算法解決問(wèn)題,也靠不斷累積的資料,將之轉(zhuǎn)化為『知識(shí)』,深植于模型內(nèi),請(qǐng)參考下圖說(shuō)明:

圖. 傳統(tǒng)程式開(kāi)發(fā)方式 vs. Machine Learning 解決問(wèn)題方式
神經(jīng)網(wǎng)路(Neural Network)
Machine Learning 目前偏向大量使用統(tǒng)計(jì)理論作為建立模型的基礎(chǔ),尤其是 Data Mining 方法,包括『決策樹(shù)』(Decision Tree)、迴歸分析(Regression)、支援向量機(jī)(SVM)、聚類分析(Clustering)、貝氏分類演算法(Naive Bayes classifier)...等,但目前最夯的是『神經(jīng)網(wǎng)路』(Neural Network),它主要是模仿生物的神經(jīng)系統(tǒng),透過(guò)層層連接的『神經(jīng)元』(Neuron),建立傳導(dǎo)的模型,以推論輸入(Input)到輸出(Output)的過(guò)程。

圖. 神經(jīng)系統(tǒng),圖片來(lái)源:李宏毅 一天搞懂深度學(xué)習(xí)
實(shí)作環(huán)境(Implementation)
現(xiàn)在網(wǎng)路大廠紛紛推出『神經(jīng)網(wǎng)路』(Neural Network)的框架(Framework),而且大都是Open Source(佛心來(lái)也),以支援Python語(yǔ)言為主流,安裝方便,入門的門檻也很低,只要寫個(gè)十幾行的程式,就能辨識(shí)阿拉伯?dāng)?shù)字,乍看一下,好像依樣畫葫蘆,就可以寫出個(gè)應(yīng)用系統(tǒng)了,但是每一個(gè)演算法都有很多的假設(shè)與適用范圍限制,可以直接套用,解決問(wèn)題的機(jī)率其實(shí)很低,因此,還是要了解其原理,進(jìn)而知道其假設(shè)、限制及可變通的方式(至少調(diào)調(diào)參數(shù)吧!),才能真正解決問(wèn)題,若把烏龜辨識(shí)為槍枝,那就窘了。
這個(gè)系列的發(fā)文,會(huì)以 Google TensorFlow 的框架為基礎(chǔ),採(cǎi)用架構(gòu)在它上面的Keras為程式開(kāi)發(fā)主軸,它同時(shí)也支援其他框架,如 CNTK、Theano,這類的程式(Keras、TFLearn) 稱為 Meta Framework,是學(xué)習(xí) Neural Network 很好的學(xué)習(xí)工具。
發(fā)文內(nèi)容
由于 Machine Learning 技術(shù)主要是建構(gòu)在統(tǒng)計(jì)及數(shù)學(xué)的基礎(chǔ)上,再加上眾多演算法(Algorithms) ,對(duì)于從事應(yīng)用系統(tǒng)開(kāi)發(fā)多年的我而言,要在短時(shí)間內(nèi)打通任督二脈,甚至能動(dòng)手開(kāi)發(fā),實(shí)在很艱辛,雖然在校學(xué)統(tǒng)計(jì)6年(從來(lái)沒(méi)應(yīng)用過(guò),所以也忘得差不多了),又開(kāi)發(fā)系統(tǒng)多年,在自學(xué)過(guò)程中,仍然頻頻卡關(guān),腦袋打結(jié),雖然如此,還是在過(guò)程中有很大的收穫,因此,為降低讀者的學(xué)習(xí)障礙,撰文以『輕鬆/快樂(lè)學(xué)習(xí)』為出發(fā)點(diǎn),用圖說(shuō)故事,希望有助于釐清各個(gè)演算法觀念、原理與實(shí)作。
系列發(fā)文將包括以下內(nèi)容:
- Neural Network 的概念與原理
- 開(kāi)發(fā)環(huán)境建置
- 各類范例程式說(shuō)明
- 各種演算法(Algorithms):CNN、RNN、LSTM 等。
- 各式應(yīng)用:Style Transfer、Image Captioning ...等。
觀念會(huì)盡量以圖說(shuō)明,原理會(huì)牽涉統(tǒng)計(jì),但不會(huì)有數(shù)學(xué)推導(dǎo)(因?yàn)槲乙膊粫?huì)),實(shí)作會(huì)以Python/Keras程式撰寫,讀者可以各取所需,不必吃滿漢全餐。
由于鐵人賽時(shí)間緊迫,一邊讀書、一邊看/寫程式、一邊撰文,發(fā)文內(nèi)容如有謬誤,還請(qǐng)各位先進(jìn)不吝指正,也請(qǐng)各位不要期望過(guò)高,畢竟小弟也是剛?cè)腴T而已。