目錄:程序員
1、 AI 的定義及學術上的AI概念算法
2、機器學習:基於統計學方法的AI編程
3、幾個神經網絡的基本概念微信
4、老鼠的屁股:卷積神經網絡網絡
1、AI的定義及學術上的AI概念數據結構
AI,即人工智能,是當前技術大熱門,必定有不少同窗想學,可是又以爲高深莫測,不知從何下手,不要緊,本文會讓你們迅速入門。架構
首先明確下AI的定義,不少人抱怨AI已經變成了一種營銷語言,是個筐,什麼都往裏裝,而實際上彷佛也是這樣……AI原本就是個很寬泛的概念,年輕人可能沒見過下面這種東西:機器學習
(圖1:人工智能是個筐,洗衣機也往裏裝)函數
二十年前的AI洗衣機!上面會有一個大大的Fuzzy Logic標籤和按鈕,這個標籤彰顯了洗衣機的尊貴身份,按下這個按鈕則會有一些不可描述的事情發生!實際上這種洗衣機在洗衣服以前只是作了下面這些工做:微服務
(圖2:人工智能洗衣機的 " 智能 " 之處)
什麼?這種只要幾個傳感器和幾個If-Else語句、絕大多數程序員都能輕鬆搞定的事情,也算是AI嗎?固然算,這是AI中的一種,被稱爲模糊控制,真正的學術概念,真的不是洗衣機廠在吹牛,那麼學術上的AI概念是什麼呢?
(圖3:什麼是人工智能)
簡單的說,AI就是任何可讓機器模擬人類行爲的技術,像上文中能夠自主決定洗衣時間的洗衣機,使用的就是AI中的模糊控制技術,屬於AI技術中最爲簡單的一種,更爲複雜的還有知識表示與推理、模式識別、遺傳算法等,上述這些都是相對比較傳統的AI。
當前大熱機器學習技術是AI相當重要的子集,與模糊控制、知識表示與推理這類基於顯式預置規則的技術不一樣,機器學習是基於統計學方法的,是利用統計學方法從已有的經驗數據中獲取規律並改進機器行爲的AI技術。
機器學習雖然在近幾年才變得熱門,可是其算法本質上並非什麼新東西,好比貝葉斯分類器早已廣發應用於垃圾郵件攔截至少有十餘年之久。有一大類使用多層神經網絡的機器學習技術被稱爲深度學習,這裏深度的含義便是多層,多層中的可能是個相對概念,根據算法的不一樣,多是三五層,也多是上百層。
這裏提到了不少新概念和算法,可能有人會比較暈,別急,本文和咱們公衆號的其餘文章與課程將會對其進行解釋。
深度學習也是種很是古老的技術,比模糊邏輯的洗衣機還要老,可是以前一直受算力的限制而沒法發揮其技術潛力,一次稍微複雜些的深度學習實驗會進行百萬億次甚至百億億次的浮點運算,當年即便是最頂級的人工智能專家也苦於沒法找到具有此等算力實驗環境而只能讓才華停留在空想。
近年來因爲GPU性能的大幅提升和GPU集羣技術的普及,具有這種算力的硬件成本大幅降低,極大的促進了深度學習技術的發展,而如今公有云也會提供GPU服務,花個電影票的價錢就能體驗一次深度學習過程,舊時王謝堂前都難有的燕,嘩啦啦的飛入尋常碼農家。
讀到這裏有人可能會問,爲何是GPU推進了深度學習的發展,CPU不行嗎?簡單的說,深度學習須要大量的神經網絡運算,這些運算中的絕大部分是矩陣的加法和乘法,運算自己並不複雜,只是運算量特別大,從運算複雜度上看,CPU作這種運算屬於牛刀殺雞,可是從運算量上看,雞太多了,區區幾把牛刀,即CPU的幾個核,累死也殺不完。
而GPU生來就是作圖像處理的,圖像的數據結構就是矩陣,圖像處理主要就是作矩陣的加法和乘法。即GPU專一於矩陣運算,而沒必要像CPU那樣支持多種運算、數據結構和控制邏輯,這就讓GPU的核比CPU的核簡單的多,因此兩千塊的CPU最多也就六個核,而兩千塊的GPU則有幾百個核,高端GPU有幾千個核。雖然GPU的每一個核在功能和性能上都遠不如CPU,可是核的數量是CPU的成百上千倍,因此在作矩陣運算這個單項上,GPU的性能是CPU的十幾倍,甚至上百倍。
AI是個很大的技術範疇,當前大熱的機器學習是基於統計學方法的AI,而深度學習是機器學習中的最新大熱門,當紅炸子雞。
或者能夠說,AI這個概念在不一樣的時代背景下有着不一樣的含義,好比二十年前談家電的時候AI就是模糊控制,今天咱們在IT圈裏說AI通常指的就是機器學習。那麼問題又來了,機器學習能用來作什麼呢?
簡單的說,解決一切沒法用顯式預置規則解決的問題,例以下圖
(圖4:機器學習的適用場景)
有人說了,我列一組規則,知足這些規則的圖像,就是樹,好比:
有一個圓柱形的物體支撐着一個扇形物體;
圓柱形物體是深褐色或者相似的顏色,扇形物體是綠色或者黃色;
……
這樣貌似可行,但是再想一想,這也多是根棒棒糖。有人又說了,那我再繼續加規則,但是問題是,不能一直這樣的舉反例、加規則的循環下去,具體到工程實現中,就是不可能讓一個程序員一直在一旁待命,遇到反例就改程序,更糟糕是這些規則之間還可能會存在衝突,規則多了就很難理清。
這時機器學習就有了用武之地了,讓機器學習程序讀取一些樹的圖片,程序就會自動提取這些圖片的特徵,讀取的圖片越多,提取的特徵就越精確,這些圖片就是訓練數據,只要訓練數據的質量足夠好,訓練次數足夠多,這個程序識別樹的精確度就會很是高,甚至比人還高。再回想一下人類識別樹的過程,人類思惟歷來都不是經過一系列的規則來識別樹的,而是小時候看過一些樹的照片和實物後,「莫名其妙的」就知道什麼是樹了,這個過程其實是和機器學習很是類似的。
然而可怕的是,經過這樣的學習過程,機器學習程序不光能夠識別樹,還能夠進一步識別哪些是蘋果樹、哪些是桃樹、哪些是荔枝樹,以致於黑楊、糖楓、鐵杉、赤松等成百上千種你從沒見過的品種,完勝絕大多數人類選手。
因此李開復老師曾經說過:「若是人能夠在5秒鐘內對工做須要的思考和決策作出相對應的決定,那麼這項工做就有很是大的可能被AI所有或部分取代。」更可怕的是,機器學習程序是能夠7×24不停的學習和工做的,因此在能夠預見的將來,在此類任務上除少數專家以外(這些專家爲機器學習程序提供訓練數據),絕大多數人類必將完敗。甚至最後連這些專家都不是AI的對手,由於AI能夠集結衆多專家的智慧,就像Alpha Go下圍棋同樣。
因此不要糾結AI會不會打敗人類了,就像沒人會糾結本身算算術不如計算器同樣,這些無聊的事情都留給機器去作好了。
談到這裏,又想到一個題外話,不少人說機器學習是不懂因果、沒有邏輯的,這是機器學習的侷限,也是人類的優點。
要回答這個問題,首先要明確的是因果和邏輯是兩碼事,「若是明天下雨,我就不去公司了」和「若是兩條直線都和第三條直線平行,這兩條直線也互相平行」是兩碼事,前者和雨大小、早上起來心情如何、會不會忽然改變主意、領導會不會忽然發飆等一系列因素有關,用機器學習處理這類問題確實比較困難;然後者在歐幾里得幾何體系下是必然成立的,處理這類問題只要傳統的AI就能夠了。
還有一個比較有爭議的事實是:人腦本質上是不具有邏輯的。人腦本質上是一個選擇系統,當咱們自認爲本身是在進行邏輯思考時,其實大腦會同時涌現出不少個想法,而後選擇出一個符合邏輯的,這也是爲何大部分人在進行邏輯思考時必須集中精力,其實是大腦在當心翼翼的作選擇。
你經歷的邏輯訓練越充分,這種選擇過程就越天然,即更大程度的在潛意識中完成,微觀上講就是增強了對應神經元之間的突觸強度,這和機器學習程序的訓練過程很是相似。從另外一個角度講,就是人類是善於概括而不善於演繹的,而機器學習作的也是概括而不是演繹。若是有同窗對這個話題感興趣,能夠讀下一本名叫《第二天然》的老書,以前不少年買不到,最近恰好再版,你們能夠買來看看。
扯得有點遠,讓咱們言歸正傳。爲何咱們要如此關注機器學習呢?
(圖5:眼下必須高度關注機器學習,尤爲是深度學習)
卷積神經網絡之父Yann LeCun,中文名楊樂村(誤)說這是一種全新的編程方式,叫Differentiable Programming。我曾經寫過一篇關於聲明式編程的文章,Differentiable Programming和聲明式編程有些類似之處:你只需準備好輸入數據和指望的輸出數據做爲訓練數據,神經網絡就會自動構造出中間的過程。更有意思的是,訓練好的機器學習模型是能夠芯片化的,相比於通用型的CPU,這種芯片能夠大大下降晶體管數量和能耗,並提升運行效率。
(圖6:基本概念1)
神經元:簡單的說就是一個一次函數y=wx+b,其中w被稱爲權重,即weight,b被稱爲誤差,即bias,x和y便是神經元的輸入和輸出。就是這麼簡單。記得以前有人開玩笑說我在二維平面上畫一條直線,這個就是AI了。設想若是你把一盒圍棋撒到了地板上,而後讓你判斷一下可否在地板上畫一條直線把黑子和白子分開,若是能請畫出這條直線,如今讓你用程序來完成此事,這固然是AI!
神經網絡:即多個神經元的輸入和輸出對接。
(圖7:基本概念2)
深度神經網絡:即多個神經網絡對接。
常見的深度神經網絡有卷積神經網絡CNN和遞歸神經網絡RNN。
接下來簡單的解釋一下什麼是卷積神經網絡,遞歸神經網絡咱們暫且不談。因爲本次是最最基本的入門課,因此只給同窗們一個感性上的理解,至於深刻理解,那可複雜了,楊樂村但是研究了半輩子的!感興趣的同窗能夠繼續關注咱們的公衆號。
首先解釋下什麼是卷積,看下維基百科的定義,估計你會頭大,因此仍是趕忙回來看咱們的課。其實很簡單:
(圖9:什麼是卷積)
就是兩個矩陣的對應位置相乘再求和。大矩陣就是神經網絡要處理的數據,好比一幅樹的圖片,小矩陣被稱爲卷積核,神經網絡對圖片的處理過程就是用卷積核在大矩陣上一步步的移動並相乘、求和,這麼作的目的是什麼呢?答案也很簡單,卷積核其實是個篩子,上述過程實際上就是對大矩陣進行掃描和特徵篩選的過程。
說到這裏,可能有同窗會問,如今我知道卷積是什麼了,那捲積神經網絡裏的神經元和神經網絡又在哪裏呢?
答案是,卷積核其實就是神經元。前面說神經元就是一次函數,那實際上是神經元最基本的形式,實際應用中這種相乘和相加關係大可能是用矩陣來表示的,好比卷積核和被處理矩陣每一個對應位置的相乘都是一個一次函數(這裏作了些簡化,忽略了相加),總體上表示爲矩陣的相乘和相加,也就是前文中說的GPU最擅長的事情。而一堆卷積核的「互動」和其後的一些處理過程,就構成了神經網絡。
咱們繼續以圖片識別爲例解釋卷積神經網絡的工做過程,至於其餘類型的工做,只要輸入數據能夠用矩陣描述,過程和圖片識別很是相似。
(圖10:卷積的做用)
上圖的卷積核是個老鼠屁股,這裏使用的是灰度圖片,因此老鼠屁股被表示爲一個具備圖片像素灰度值的小矩陣,若是是彩色圖片那就是分別描述三原色深度的三個小矩陣,而老鼠被表示爲一個具備像素灰度值的大矩陣,彩色圖片同理。
如今讓卷積核在老鼠圖片上逐個像素的移動、相乘、求和,忽然得出了一個很大的數,即發現了一個老鼠屁股!這裏的「很大」其實是指卷積運算的結果超過了一個激活函數的閾值,超過了這個閾值就發出警報:「叮咚,發現老鼠屁股!」,沒超過就默不作聲。接下來再想象一下咱們有老鼠耳朵卷積核、老鼠眼睛卷積核、老鼠鬍鬚卷積核、老鼠尾巴卷積核等一大堆卷積核,分別用這些卷積核掃描圖片,若是卷積運算的結果都超過了閾值,就能夠說這副圖片具有老鼠的各類特徵,即這副圖片的內容在很大的可能性上是一隻老鼠。
如今同窗們應該明白卷積的做用了吧!上面這些老鼠圖片也不知道最初源自何處,真是很是形象的說明了問題,在此對原做者深表感謝。
再回到前面那個「如何識別一棵樹」的問題,若是用卷積神經網絡來解決這個問題,實際上就是用經過訓練數據提取樹的特徵的過程,主要工做就是求得描述這些特徵的卷積核,而後再用這些卷積核去掃描訓練數據以外的圖片,就能夠判斷出圖片的內容是否是一棵樹了。固然,這時的卷積核就不像前面那個簡筆畫裏那麼簡單了。這時卷積核的數量會很是多,樣子也會很古怪,像一個個曝光過分的照片的碎片同樣。
那麼這些卷積核是如何得出的呢?這就要深刻到神經網絡的訓練過程之中了,受篇幅所限,本文沒法展開講解,若有同窗想深刻了解這個過程,敬請關注咱們公衆號的後續文章。
關於做者:宋瀟男,現任普元雲計算架構師,曾在華爲負責雲計算產品與解決方案的規劃和管理工做。曾負責國家電網第一代雲資源管理平臺以及中國銀聯基於OpenStack的金融雲的技術方案、架構設計和技術原型工做。
關於EAWorld:微服務,DevOps,數據治理,移動架構原創 技術分享,長按二維碼關注