iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 1
5

寫了十幾天,今天總算鼓起勇氣參戰了。

前言

這一波人工智慧(Articial Intelligence,AI)風潮方興未艾,產學研界發表不少的具體研發成果,例如AlphaGo、機器人、無人駕駛自動車、ChatBot、人臉辨識、語音辨識...等,加上各種媒體新聞不斷吹捧,搞的好像不懂AI的資訊人,就快要失業了,於是,狂買了近二十本的相關書籍,準備好好的努力一下,一窺 AI 奧秘,剛好藉由鐵人賽督促自己,記錄過程並將心得與同好分享,也希望能獲得各位先進的指教。

AI的演進

人工智慧其實已經歷了三波熱潮,如下圖,前兩波都功敗垂成,只留下一些美麗的願景。
https://ithelp.ithome.com.tw/upload/images/20171203/20001976jRyViM2bZ6.png
圖. AI 的三波熱潮, 資料來源:http://www.testleo.com/blog/archives/6121

為什麼這一波會成功? 主要有幾個動力:

  1. 資料增加與整理:拜網際網路之賜,資料以指數的速度大量的增加,又因大型網路公司的崛起,他們投注許多的人力與資金,標註(Labelling)訓練資料,用於改善自身的核心業務 -- 社群媒體(social media),並開放給一般研究者使用,例如 image.net就擁有超過近1400萬張標註的圖片,作為影像辨識的訓練/測試資料集。另外,手機的盛行讓企業輕易蒐集大量的用戶行為資料,物聯網(IoT)的風潮也會產生大量的感測器資料,這些都將成為 『機器學習』(Machine Learning) 的養分。
  2. 硬體的發展:依摩爾定律的經驗法則,積體電路上可容納電晶體的數量每隔24(或 18) 個月便會增加一倍,以及強大的雲端運算/資料中心、還有專為AI設計的CPU/GPU/FPGA/晶片,在在都顯著提升伺服器端及用戶端設備的運算速度。
  3. 演算法:各種演算法推陳出新,配合GPU算術運算的優勢及分散式計算的實現,利用數學/統計理論,計算大量資料,形朔各種模型,應用在影像、語音、文字辨識、處理與回應上,使機器具備人腦一般的智慧。

種種的因素擘劃出美麗的未來願景,還是海市蜃樓? 且看未來發展。
https://ithelp.ithome.com.tw/upload/images/20171203/20001976WRjNtAwjYC.png
圖. 第三波AI的動能,資料來源: 人工智能,請準備迎接冬天

機器學習(Machine Learning)

這一波AI的主軸就是『機器學習』(Machine Learning),強調讓『機器自我學習』,藉由資訊的蒐集與演算法的改進,讓機器可以吸收知識,自我學習,並根據學習的成果(即預測的準確性)修正與反饋,不斷提升機器的智慧。這種解決問題的方法與傳統的系統開發想法有所不同,Machine Learning 不只靠演算法解決問題,也靠不斷累積的資料,將之轉化為『知識』,深植於模型內,請參考下圖說明:
https://ithelp.ithome.com.tw/upload/images/20171203/20001976Ex7VWaHqY8.png
圖. 傳統程式開發方式 vs. Machine Learning 解決問題方式

神經網路(Neural Network)

Machine Learning 目前偏向大量使用統計理論作為建立模型的基礎,尤其是 Data Mining 方法,包括『決策樹』(Decision Tree)、迴歸分析(Regression)、支援向量機(SVM)、聚類分析(Clustering)、貝氏分類演匴法(Naive Bayes classifier)...等,但目前最夯的是『神經網路』(Neural Network),它主要是模仿生物的神經系統,透過層層連接的『神經元』(Neuron),建立傳導的模型,以推論輸入(Input)到輸出(Output)的過程。
https://ithelp.ithome.com.tw/upload/images/20171204/20001976i848ghLLuT.png
圖. 神經系統,圖片來源:李宏毅 一天搞懂深度學習

實作環境(Implementation)

現在網路大廠紛紛推出『神經網路』(Neural Network)的框架(Framework),而且大都是Open Source(佛心來也),以支援Python語言為主流,安裝方便,入門的門檻也很低,只要寫個十幾行的程式,就能辨識阿拉伯數字,乍看一下,好像依樣畫葫蘆,就可以寫出個應用系統了,但是每一個演算法都有很多的假設與適用範圍限制,可以直接套用,解決問題的機率其實很低,因此,還是要了解其原理,進而知道其假設、限制及可變通的方式(至少調調參數吧!),才能真正解決問題,若把烏龜辨識為槍枝,那就窘了。

這個系列的發文,會以 Google TensorFlow 的框架為基礎,採用架構在它上面的Keras為程式開發主軸,它同時也支援其他框架,如 CNTK、Theano,這類的程式(Keras、TFLearn) 稱為 Meta Framework,是學習 Neural Network 很好的學習工具。

發文內容

由於 Machine Learning 技術主要是建構在統計及數學的基礎上,再加上眾多演算法(Algorithms) ,對於從事應用系統開發多年的我而言,要在短時間內打通任督二脈,甚至能動手開發,實在很艱辛,雖然在校學統計6年(從來沒應用過,所以也忘得差不多了),又開發系統多年,在自學過程中,仍然頻頻卡關,腦袋打結,雖然如此,還是在過程中有很大的收穫,因此,為降低讀者的學習障礙,撰文以『輕鬆/快樂學習』為出發點,用圖說故事,希望有助於釐清各個演算法觀念、原理與實作。

系列發文將包括以下內容:

  1. Neural Network 的概念與原理
  2. 開發環境建置
  3. 各類範例程式說明
  4. 各種演算法(Algorithms):CNN、RNN、LSTM 等。
  5. 各式應用:Style Transfer、Image Captioning ...等。

觀念會盡量以圖說明,原理會牽涉統計,但不會有數學推導(因為我也不會),實作會以Python/Keras程式撰寫,讀者可以各取所需,不必吃滿漢全餐。

由於鐵人賽時間緊迫,一邊讀書、一邊看/寫程式、一邊撰文,發文內容如有謬誤,還請各位先進不吝指正,也請各位不要期望過高,畢竟小弟也是剛入門而已。


下一篇
Day 02:撰寫第一支 Neural Network 程式 -- 阿拉伯數字辨識
系列文
以100張圖理解 Neural Network -- 觀念與實踐31

1 則留言

1
kofman
iT邦新手 5 級 ‧ 2018-06-16 10:08:48

蠻詳細的 一起學習

我要留言

立即登入留言