[ 人工智能 ]簡介下現代AI

154 回覆
180 Like 4 Dislike
2017-11-30 09:14:41
留名
想研究另類AI application
覺得廿年內會另一個shift 離開AI
2017-11-30 11:50:42
卷積神經網路
終於都去到現代AI其中一個最重要的算法,卷積神經網路(Convolution Neural Network, CNN)

CNN主要應用場景係影像處理,對應於人類既視覺系統。相應聽覺同記憶系統就會用RNN呢種DL算法。

係講CNN前,介紹返電腦視覺中最出名的OpenCV,相信唔少Engine出身既朋友都有玩過呢個toolkit

https://opencv.org/

其實我自己主力都唔係打OpenCV而係其他3D影像處理library,不過OpenCV作為2D影像處理既頂尖軟件,集成左大量實用既影像算法同應用例字,有python有c++有java, ios android都support,作為影像算法入門係非常之好用既平台

點解要拎OpenCV出來講?因為OpenCV絕大部分算法都係人為設計一d影像特徵(features),有時加上SVM等機械學習算法,去做影像運算。係呢個過程中,電腦影像工程師主要工作就係搵出呢d features



當然,人腦既力量係有限的,所似呢種方法做出來的圖像分析,效果其實唔多好。好多人都知ANN係有效既圖像處理方法,但係ANN之前講左有好大侷限性,所以效果都唔比呢d人為feature extraction method分析要好

去到1989年,終於有人propose左CNN既最經典架構 -- LeNet



LeNet作為CNN最先驅設計,網路深度一開始只有5層(LeNet-5),後來再有改良的7層LeNet-7。詳細既設計會之後再講,當時5層既CNN已經取得非常不錯既成果。但係受限於電腦運算力, CNN發展仍然好大限制。

GPU的引入
時間轉到去2005年,大家果陣仲係用緊Pentium 4定Core 2 Duo的時代,PC經已普及,但應該唔多人屋企部機係有獨立GPU的。

係呢個時候3D 遊戲既發展帶動左GPU市場,同時有人諗,可唔可以用GPU去做平行運算?於是就有左通用GPU(GPGPU) 算法的paper出現左

GPU係乜東西?其實係就一個電腦元件集成左好多運算單元既一個平行計算器,單核時脈比CPU低好多,但係數量就多CPU幾百倍,拎來做計數就最岩啦

平行運算一直都唔係容易入手既編程方法來,現代GPU編程會用到一重叫做核(Kernel)既概念,一個GPU運算單元就負責一個Kernel的運算。由於不同的運算單元運算能力都係極之接近,呢d我地叫同質性運算(Homogeneous Computing),係平行運算出算係比較容易處理而且高效既算法。當出最出名一定係Nvidia既CUDA



***關於GPU Kernel運算,正式名應該叫thread/block, Kernel係電腦有另一個意思係指軟硬件接合介面,不過講CNN,用樓上既概念去講Kernel會好d

大家記得2007年iphone發佈嗎?大數據時代到來, GPU運算硬件ready, 只欠東風, 去到2012年,AlexNet發佈,證明左CNN係GPU上的運用有效性, Machine Learning自此進入新時代

CNN is a black box


一如ANN既目的,我地用CNN最初都只係想整一個Classifier, 去分唔同既圖像代表既意義,但係如果我地轉少少張相,成個ANN既network可能已經成個走左樣



CNN提出左我地唔好著重圖像既整體,專注係不同既小區域去搵image feature,然後記住呢d feature,之後無論咩圖入來,我地都可以按feature既特性去分呢張圖究竟係咩東西



呢個諗法同人眼睇世界既模式好接近。其實我地既眼睛每次只可以focus係好細既區域入面,只係我地對眼係咁移動加大腦補完先會有全個畫面都係清晰既假像



呢一個睇小部分區域既過程係電腦入面叫卷積Convolution
2017-11-30 12:02:39
卷積層
呢樣野好簡單咁講,即係兩個矩陣element by element-wise地相乘


Convolution單元叫kernel,一般最細用3*3, 極大部份係單數邊長, 1*1係特殊情況下會使用,3*3以上可以reduce返去n層3*3的convolution kernel,而且運算量會更低


呢張gif應該可以好易俾大家去知convolution 係點計

CNN要做既,就係記住呢d kernel既形狀,同埋試多d不同形狀既kernel

所以做完一個m*n既圖像, 會有3*3*k咁樣既matrix出返來,k就係我地設計network既每層測試既kernel數量。kernel愈多,運算愈準,但有機會overfit,而且時間亦都愈長。k又有d人叫深度,產生出來的3*3*k kernel matrix,可以再被視為一張大圖,不停再進行convolution/ pooling/ inner product等圖像運算

池化層
池化(pooling)係convolutiona既一個特類,之前無講咩係步長(stride),其實就係解kernel係圖像中每次行既距離



pooling目標係縮細kernel image既大細,令運算量下降,做法同convolution layer差唔多,但唔係做相乘,而係拎最大值(max pooling)/平均值(average pooling)

最常用係max pooling法,原因係運算量低而且已知有效 (CNN is black box, don't ask why, just try)



全連接層/Softmax層
即係傳統既ANN架構,通常去到CNN結構尾部先會用到, 全名fully connected layer (FC layer), 又即係inner product layer




樓上vectorization同fully connection數學上同inner product係一致的


最後好似ANN咁,做返Softmax計classifier的probability,做量化估計,加上loss layer就可以做SGD反向訓練

訓練好既network就可以拎來做prediction啦


之後會講下幾個經典CNN例子俾大家了解多d
2017-11-30 12:34:02


留名支持學術討論
樓主個Post好高質

其實Turing Test同Chinese Room Argument想講嘅嘢唔係咁簡單

Turing test個Setting 係:
你坐係一間房入面, 另外一樣你唔知係咩嘅嘢坐咗係另外一間房入面
你係睇唔到對面做緊啲咩
唯一可以溝通嘅就係你問佢問題
佢會答返你一啲嘢
如果經過一段時間嘅對答
你分得出佢同你唔一樣
咁對面嘅物種就同你唔一樣
但係如果你完全分唔出有咩分別
咁姐係話
你同對面嘅物種係冇分別

套用返係人工智能層面上
如果你分唔出佢係人工智能
咁你亦都冇辦法證明你唔係人工智能
因為事實上你同人工智能冇分別


但係Chinese Room Argument反駁嘅地方係指
你之所以識中文
係因為你本身識中文
但係人工智能好似識中文
係因為其實佢只係根住本手冊對譯回覆
事實上人工智能本身並唔識得中文

Chinese Room Argument其實係某程度上係想嘗試區分人同人工智能嘅分別
就係人係有意識 (consciousness)

咁但係Chinese Room Argument其實有不足嘅地方
就係事實上如果你唔打開間房
你係永遠都唔會知道人工智能本身並唔識得中文
咁但係你唔打開間房就唔會知道人工智能本身並唔識得中文
咁你又點證明你本身識得中文

意思姐係話
既然你打開個腦都唔會證明到你係本身識得中文
你又點證明你本身識得中文
而且
你又點證明你本身係有意識(consciousness)呢?


之後我會嘗試幫樓主解釋ANN嘅原理
樓主加油

利申: Psychology year 4

呢個係好fundamental的問題

既然智慧可以被製造,人類的智能係咪又係被製造出來?

break down到細胞同分子層面,我地日常行為都係由生物/化學/物理過程支配,一條蟲都有同樣機制,要去到幾複雜的結構程度先可以算係有智能?

好多年前人以為智能係人類獨有,但而家我地智好多動物都有,只係人類更高智能

如果人腦活動能夠被數學化,咁仲存唔存在自由意志?係現行ANN機制下,你一但訓練好個network,佢就唔會再改變輸出結果,我地嘅意識究竟係當中有咩主導作用?

當然可以加入隨機過程令網路輸出有變化,但係電腦係唔存在真正隨機,帶來更大的問題係,如果我地嘅自主意識包含隨機成分,咁宇宙係咪存在真正隨機就好大影響

呢個問題諗左好耐,再推廣上去居然係有無做物主呢d哲學問題,所以我先係咁上網搵d 真正嘅AI 資料睇,睇睇下要去去搵d哲學朋友研究


ANN嘅Machine Learning Method其實係演化自人類嘅Learning behavior
人類之所以有習慣會學識一樣新嘢, 其實都係因為其他人同佢做緊Conditioning (Reinforcement and Punishment), 而人係冇其他人幫佢嘅時候, 同樣會用邏輯推論(inductive and deductive reasoning) 黎幫我地Shape個Behavior出黎, 所以ANN唔單只係模擬緊人類點樣思考, 而且係一定程度上證明緊其實人係冇Free will (自由意志)

所以我地Psychology入面都分開咗兩派學說, 一派係Functionalism, 認為如果果樣嘢可以做到我地同樣做到嘅嘢, 唔理佢點樣做出黎 (而事實上亦冇人會知道) 咁姐係果樣嘢同我地冇分別

另一派就認為人係有Consciousness 所以先有Sub Conscious 同埋 Unconscious

利申: Functionalism
2017-11-30 13:41:48
LeNet



呢個係第一個propose的CNN結構,好簡單,基本上係conv -> pool -> conv -> pool -> fc ->fc -> softmax 既組合

conv kernel 都係5*5既大小,不過後來發現, 2層3*3其實就等於5*5既kernel,

3*3*2 = 18個connection
5*5 = 25 個connection

咁樣,3*3既convolution kernel就變成左最基礎的unit

AlexNet


呢個係第一個用左GPU加速的CNN結構,主要目的係想證明,CNN利用左GPU後,可以係有限既訓練時間內,得出令人滿意既結果

但係由於alexnet仍然好大舊,當時既單張GPU (2012年),好似仲係GTX 980的年代,個internal memory仲係唔夠放入曬成個network, 折衷既法係convolution層將張相斬半,後來再組合返。但呢個唔係一個好的practice, 係多GPU運算出唔同既toolkit 開發商都投入左唔少心力先做到多卡平衡運算

GoogleNet, VGG, ResNet
network結構唔再詳講了,畢竟而家日日都有新network propose,不過都有幾個出名的CNN 結構介紹返


GoogleNet, 2014年imagenet比賽冠軍,主要係想demonstrate大幅度增加network深度係可行的

GoogleNet 主要組件(block)係Inception架構,基本上都係AlexNet的變化形


2014年同期有個好出名的network叫VGG,大量利用convolution,基本上都係幾個conv先pool一次, 一直去到得返1*1*kernel depth的形狀


去到舊年,有人提出layer同layer間可以有捷徑,保留返一d因為subsampling而損失的image features,呢d 捷徑正名叫殘差(Residual),所以就叫residual neural network



利用殘差特性,gradient vanish problem有效解決,ANN深度最多達到152層,之前最多都係行到30層左右


ResNet 的組成元件,原理就係VGG加分支

而ResNet係而家image classification最有效既network之一
2017-11-30 22:32:00
應用場景
講左咁耐ANN, 其實係圖像上除左分類,仲有D咩可以應用?

1. Semantic Segmentation 圖像分割
https://i.stack.imgur.com/mPFUo.jpg

2. Image Registration 圖像配準


3. Feature Extraction 提徵點提取


4. 3D Reconstruction 三維重建


5. Depth Sensing 深度測量


每過幾日就有新既paper release, CNN係圖像處理方面既表現,仍然有好大既發揮空間
2017-11-30 22:37:43
樓主好撚勁,我剩係識matlab分析樣個D皮毛野
2017-11-30 23:22:48
CNN既介紹到此為止,原本都想講埋RNN同LSTM(主要For有時間性既sequence,例如聲音,股票)

不過似乎太過深入講技術野,如果真係有興趣既朋友,親身落手打係最好既學習方法

Machine Learning入門
其實每一隻programming language都有自己既machine learning toolkit,當中python既package特別優秀

硬件
CPU: intel/amd都ok,如果用到Intel 的Math Kernel Library (MKL),用返intel會好d,不過有其他更好的linear algebra library,例如OpenBLAS同AtlasBLAS, 所以作為Ryzen fan我係推薦AMD多一d

GPU:

一定要用Nvidia卡,因為大部分package都係針對CUDA做左加速,以我所知所有大型server center都係用Nvida卡計DL, 個人建議入門都要買1060, 有錢就買1080ti, Titian Xp memory多1GB,但性價比低太多,又唔易買,所以都係望下就算

OS:

Windows, Linux, OSX都得,但記得太部份library都只係linux上有GPU acceleration, 係windows上需要用python 3先用到GPU, 呢樣野我個人係唔多鐘意的,同埋效能唔太好, OSX更加唔使講, 你根本裝唔到GPU入去,所以拎來打code就算, training你SSH返去linux server計啦

Linux Distro以ubuntu為最佳,唔好學軟件台d人用arch centos,你玩死你自己only,網上non-debian base既library build support係極少, ubuntu 以14同16兩個version最多人support
2017-11-30 23:23:00
軟件
如果你選擇以python作為入門,我強烈建議裝anaconda,集成左好多常用既python library,唔使逐隻裝,個人建議python 2.7會好d,不過3.6一般用都唔係大問題,但去到C++ embedding果陣3.6會出好多問題,唔打到咁深入既人唔使理, 留意返windows上面要用gpu加速好多都要用到python 3.6,主要係c++ compiler對parallelization處理的問題
https://anaconda.org/

IDE 我最鐘意用sublime text,如果你裝左python,按F7就可以run起段code
https://www.sublimetext.com/

現行最出名既machine learning toolkit有以下幾隻:
1. Tensorflow

(Python with C++ API, ios同android食到個save左既network)
Google出品,出名難用,原來Theano既developer都去曬TF條team, 做clustering computation 效率非常高,但單機效能唔多好。強大在於document超級多,使用者亦都超級多,所以你有問題好多時都會有solution, 而且有tensor board俾你用browser mon住個training進度,唔使自己寫,仲有TPU support(如果你申請到)。想向難度挑戰/通用型machine learning toolkit,請揀tensorflow

2. Torch

(原自Lua, 有Python 版, ios同android食到個save左既network)
Facebook出品,強烈建議使用,根本就係有GPU support的numpy來,非常之人性化。對於clustering computation, torch有nn.parallel package,雖然仍然開發中,但係已經有好多人揀左pytorch作為開發平台,因為實在太易上手

C++ api我知有人寫緊,不過現階段真係唔好expect太多, 由於pytorch係1月發佈,doucmentation仍然不足

3. Caffe

(Python with C++ API, ios同android食到個save左既network)
Berkeley出品,而家針對mobile平台開發左caffe2, 後來個developer俾Facebook請左,而家caffe同pytorch network係可以用converter轉換的, 如果你好keen on 圖像開發,caffe係一個好的選擇, caffe 2更好,但我只係linux 成功build到, windows得caffe 1代由Microsoft d 人出馬先改到build得到,如果你好想係windows上面玩machine learning, pytorch會更好

4. Keras

(Python, R)
封裝左的tensorflow,唔建議用,新手玩下就好,得D fundamental function,你想加減野難過登天, 聽講拎來做RNN非常之不錯

5. Scikit-Learn

(Python)
最出名的machine learning package (deep learning以外), 如果你要做clustering, SVM, regression, 呢個package會好岩你

6. dlib

(C++,有python接口)
以C++為本的的library,如果你要封裝你既software係local度run,又想係windows上面行,呢個有好多pre-built左既model,非常之易上手

7. 其他
仲有MXnet, microsoft的CNTK,我自己無乜點用到,如果你真係要用到咁深入先再睇吧

==========================================================
對AI既初步介紹到此結束,如果你真係對AI有興趣,記得要有住一分好奇心,同埋面對失敗唔好放棄,因為我淨係compile樓上堆library都失敗過不下50次

大家有咩對AI,不論係hardware software 算法定係點樣入手還是哲學野都可以繼續討論下
2017-11-30 23:26:21
好勁,留名。
2017-11-30 23:30:54
TensorFlow 1.4 已經直接加入左Keras,用Keras係好事,之後再慢慢上TensorFlow

當然用PyTorch都好好
2017-11-30 23:49:24
TensorFlow 1.4 已經直接加入左Keras,用Keras係好事,之後再慢慢上TensorFlow

當然用PyTorch都好好

keras入門ok,認真學AI就一定要轉走
2017-11-30 23:49:29
btw,唔太明kernel點define、有咩用。
2017-12-01 01:11:56
最有興趣諗下ml解決到咩商業問題,可以有咩product idea發展
2017-12-01 02:19:33
最緊玩緊GAN, 呢個貼應該係本地第一個有心用廣東話教既ml post, 大大力支持
2017-12-01 09:36:59
想實戰可以上kaggle
2017-12-01 09:39:14
大學讀緊垃圾 支持
2017-12-01 11:11:15
btw,唔太明kernel點define、有咩用。

https://devblogs.nvidia.com/parallelforall/easy-introduction-cuda-c-and-c/

呢樣野真係要落場打GPU kernel先解釋到

不論N記定A記都係用kernel function作為GPU運算單元

係C/C++ side要做device memory allocation同memory transfer from host (CPU ram) to device (GPU ram),呢個過程我地叫畫田

畫完田之後我地要話俾GPU知每個田入面既每個小區點樣運作,呢個運作就叫kernel



呢個kernel既運作同convolution既kernel係極為相似,所以CNN先可以有效地利用GPU提速,nvidia有個特殊library計NN叫cudnn, 呢樣野係特別針對convolution同pooling減少memeory使用/同等memeory提速

對於GPU device code,本質上係C來的,但kernel code要特別地去compile成GPU專用library先可以計到數

呢個亦係點解而家d GPU ram可以爆炸性供加既原因,你一個network拆兩張卡計再合成效率其實唔夠單張卡計咁好,呢樣野alexnet果陣都有講過
2017-12-01 11:12:20
最有興趣諗下ml解決到咩商業問題,可以有咩product idea發展

ML淨係clustering同SVM都夠解決好多商業問題

product你自己諗,我淨係可以講咩area都可以用ML去幫你手
2017-12-01 18:08:06
識好多concept野, 但tensorflow認真難用
而家就好似學左好多內功
冇武功咁
都唔知做咩春.....
2017-12-01 18:22:08
做image classification黎講,有時如果training data唔夠
用SVM個performance會唔會好過Neural Net?
因為Neural Net咁大堆parameters如果太少data既話會overfit
利申: 淨係識好皮毛

我以前會叫你用SVM,而家建議用淺層但新D的CNN
2017-12-01 18:22:30
識好多concept野, 但tensorflow認真難用
而家就好似學左好多內功
冇武功咁
都唔知做咩春.....

pytorch
2017-12-01 18:26:06
識好多concept野, 但tensorflow認真難用
而家就好似學左好多內功
冇武功咁
都唔知做咩春.....

pytorch

感覺tensorflow強大D

橫掂都係
2017-12-01 18:58:50
識好多concept野, 但tensorflow認真難用
而家就好似學左好多內功
冇武功咁
都唔知做咩春.....

pytorch

感覺tensorflow強大D

橫掂都係

你玩得掂TF先得架

唔好聽到google個名就覺得好勁(雖然真係好勁),但真係elephant in a room

pytorch一出就好多人用,因為佢夠簡潔效率又高,development時間都係成本黎架
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞