說起人工智能,都知道有很多算法。今天就挨個盤點一下,看完您可能覺得,AI,其實也就那么回事。
先簡單聊聊人工智能的歷史,可能遠比我們想象的要早。公元前4世紀,亞里士多德就在《工具論》中提出三段論,借助于一個共同項把兩個真言判斷聯(lián)系起來,從而得出結論。這里注意關鍵字:判斷、結論。
而真正開始用機器做判斷的,是從英國數(shù)學家圖靈開始。
二戰(zhàn)時盟軍一堆破譯專家無法破解德國納粹的機器碼電文,直到圖靈在苦思冥想后得出一個驚世駭俗的結論:只有機器才能打敗機器。于是第一臺模仿計算機器應運而生,成功破譯了電文,大大縮短了德國失敗時間。在1950年,圖靈發(fā)表了《計算機器與智能》,明確提出了“機器能思維”的觀點,并且提出了著名的“圖靈測試”,用來衡量機器智能。
1956年,首次采用AI(Artificial Intelligence)術語,人工智能誕生。
隨后各種邏輯理論、處理語言、通用程序、專家系統(tǒng)涌出,AI達到第一次高潮。
蓬勃發(fā)展后,很快就遇到了瓶頸,美國說語音識別比登月還難,英國說人工智能是騙局。AI陷入低谷。
直到神經(jīng)網(wǎng)絡的出現(xiàn)。
1987年,首屆人工神經(jīng)網(wǎng)絡學術大會舉行,成立了國際神經(jīng)網(wǎng)絡協(xié)會,掀起了AI的第二次高潮。
以后雖說AI再次陷入低谷,但是每次都隨著神經(jīng)網(wǎng)絡算法的優(yōu)化和計算能力的提升而繼續(xù)蓬勃發(fā)展,無論是戰(zhàn)勝國際象棋世界冠軍的“深藍”,還是在問答中擊敗人類的“沃森”,或者戰(zhàn)勝世界圍棋冠軍的“Alpha Go”,無一不是基于神經(jīng)網(wǎng)絡算法。
這么神奇的神經(jīng)網(wǎng)絡,到底是什么?
簡單說,對人腦結構進行模擬的人工神經(jīng)網(wǎng)絡。事實證明,只有人腦才能打敗人腦。為了模擬生物神經(jīng)的功能,首先以生物神經(jīng)元抽象出一種人工神經(jīng)元。模型是這樣的:
其中,x為神經(jīng)元k從外界接受的多個輸入信號,w為神經(jīng)元k從刺激到輸出間的傳遞權值, u為神經(jīng)元將輸入與權值的組合后的輸出。b為偏置量。
用一對方程描述上述的神經(jīng)元:
線性組合器的輸出為:
神經(jīng)元的輸出為:
看到這估計讀者要困了,說人話,就是加權求和計算后分類。熟悉流程管理的童鞋,尤其是被CMM/CMMI虐過的,要叫了,這不就是DAR(決策流程)嗎?是的,沒錯。我們都知道離散數(shù)學是諸多科學的基礎,而其英文Discrete Mathematics,又叫Decision Mathematics,就是用來量化分類的。記得前面讓注意的關鍵字嗎?判斷,結論。根據(jù)輸入,和相應的權值,得出結論。
權值怎么定呢?DAR可以根據(jù)經(jīng)驗,AI怎么辦呢?
機器學習。根據(jù)現(xiàn)有輸入和結論,機器自動學出權值。訓練機器,其實,跟馬戲團訓練老虎一個原理。
訓練師靠投喂鼓勵老虎,AI靠反饋,也就是要介紹的第一個算法:BP(back propogation)神經(jīng)網(wǎng)絡,是一種按照誤差逆向傳播算法訓練的前饋神經(jīng)網(wǎng)絡。通過在輸入和輸出之間增加若干隱藏層,來增加判斷能力。在AI的實際應用中,絕大部分都采用BP及其變化形式。它也是前向網(wǎng)絡的核心部分,體現(xiàn)了神經(jīng)網(wǎng)絡的精華。計算也相對簡單,主要是矩陣運算。BP主要應用于模式識別、分類、數(shù)據(jù)壓縮、函數(shù)逼近等。DNN(Depth深度神經(jīng)網(wǎng)絡)基于BP,或者,至少有一層隱藏層的BP。
在BP神經(jīng)網(wǎng)絡中,所有輸入信號之間是沒有關系的,一維的,沒有時間前后之分。那么問題來了,如果輸入數(shù)據(jù)是和時間有關的呢?比如根據(jù)過去每月銷量預測未來某月銷量?比如股價預測?
RNN(Recurrent神經(jīng)網(wǎng)絡)在時序數(shù)據(jù)上有著優(yōu)異的表現(xiàn)。具體模型算法以后細表,簡單說就是通過循環(huán),實現(xiàn)對時間序列的信息提取,也就是時間特征,然后把特征值作為輸入送入全連接網(wǎng)絡,也就是BP,實現(xiàn)預測。RNN就是循環(huán)核 BP。
在RNN基礎上優(yōu)化的常用算法有LSTM(Long Short Term Memory)神經(jīng)網(wǎng)絡,具有記憶長短期信息的能力,解決長期依賴問題;DRNN,深層循環(huán)神經(jīng)網(wǎng)絡。
繼續(xù)回到BP,如果輸入數(shù)據(jù)過多,比如圖形識別,除了學習效率降低之外,識別能力也會隨之降低,因為太多的輸入,太多的權值,最后可能陷入某種分布陷阱。為了解決問題,CNN(Convolutional卷積神經(jīng)網(wǎng)絡)出現(xiàn)了。網(wǎng)絡流行語,卷,不知道跟這個有沒有關系。CNN結構有3層:卷積層(Convolutional Layer),池化層(Max Pooling Layer),全連接層,還是BP。卷積層把大數(shù)據(jù)分成小塊,找出小塊特征,然后從左至右從上到下一點一點的卷,得出一個新的特征矩陣。新的特征矩陣非常大,要通過池化層做向下采樣,池化,顧名思義,像篩子,大的留下,小的舍棄,就像當年蘇聯(lián)處理中國雞蛋水果一樣。經(jīng)過池化,主要特征保留,數(shù)據(jù)量大大減小,可以送入BP做預測了。CNN的改進算法有R-CNN,fastRCNN,fasterRCNN等。
CNN基于二維數(shù)據(jù),GCN(Graph圖卷積神經(jīng)網(wǎng)絡)基于圖數(shù)據(jù),算法看著嚇人,原理和CNN差不多,不過,這一點估計有些童鞋不認可。
再次回到BP,如果輸入數(shù)據(jù)沒有時間關系,但是有空間關系呢?比如說想知道送什么禮物給女朋友合適,問問身邊的朋友都送的啥,然后選他們送得最多的,估計get laid概率高些。用數(shù)學描述,就是鄰近樣本特征相同,KNN(K-NearestNeighbor)神經(jīng)網(wǎng)絡算法,通過少量鄰近樣本特征做預測,提高效率和識別度。
還有諸多神經(jīng)網(wǎng)絡算法,基本上是以上四種算法的改進或者組合。下面用一張圖來表示他們的關系:
看到這里,是不是覺得很簡單,手癢想立即跑一個算法啊。搭建環(huán)境其實很簡單,有Python就夠了。也不需要太強的機器,不過如果數(shù)據(jù)多算法復雜的話最好還是用GPU來跑,也就是通過NVIDIA的顯卡。
以上只是個人膚淺的理解,諸多不對之處,還望指出,一定更正。在學習AI過程中得到過很多幫助,在此表示感謝。
如果覺得文章有用,希望能深入交流,或者有錯誤想指教,歡迎下方留言,謝謝。
蒹葭蒼蒼,白露為霜。所謂伊人,在水一方。溯洄從之,道阻且長。溯游從之,宛在水中央。
聯(lián)系客服