作者:宇信教育 祝森
眼下最熱門的ICT技術,人工智能絕對可以排在前列。
2016年谷歌Alpha Go與圍棋世界冠軍李世石上演"世紀人機大戰",將人工智能(AI)的關注度推到了前所未有的高度,到如今隨處可見的刷臉支付、AI音箱、掃地機器人,以及各大頂級公司都在投入的無人駕駛研究,背后都有人工智能技術在做支撐。預計2025年,全球企業對AI的采用率將達86%。AI的崛起將深刻改變企業的業務模式和價值創造模式。
人工智能的底層模型是"神經網絡"(neural network)。許多復雜的應用(比如模式識別、自動控制)和高級模型(比如深度學習)都基于它。學習人工智能,一定是從它開始。
人為什么能夠思考?原因在于人體的神經網絡,其中思考的基礎是神經元,如果能夠"人造神經元"(artificial neuron),就能組成人工神經網絡,模擬思考。一直以來,科學家都希望模擬人的大腦,造出可以思考的機器。上個世紀六十年代,科學家提出了最早的"人造神經元"模型,叫做"感知器"(perceptron),直到今天還在用。
人工神經網絡,簡稱神經網絡(Artificial Neural Network,ANN):是由人工神經元互連組成的網絡,它是從微觀結構和功能上對人腦的抽象、簡化,是模擬人類智能的一條重要途徑,反映了人腦功能的若干基本特征,如并行信息處理、學習、聯想、模式分類、記憶等。
如圖,我們可以初步理解神經網絡模型是一個包含輸入,輸出與計算功能的模型。輸入可以類比為神經元的樹突,輸出可以類比為神經元的軸突,計算則可以類比為細胞核。
作為AI技術的底層技術,為什么神經網絡的提出已久,但近幾年才大放光芒?這是因為神經網絡等算法需要巨大算力來支撐。在2016年的那場人機大戰中,谷歌DeepMind公司共消耗了1202顆CPU和176顆GPU的計算資源,Alpha Go的浮點運算能力是1998年IBM深藍戰勝象棋冠軍時的3萬倍之多,所以當前超高的運算能力是支撐AI技術發展的重要推手。
人工智能目前最成熟的應用方向之一是圖像識別,它是實現如何讓機器理解圖像中的內容的AI技術,而其中神經網絡對圖像識別技術發展起到了突出的作用。
接下來我們通過一個簡單的例子來更好的理解神經網絡。
當一張圖片輸入到電腦中,它通常是一種三維數組的形式,第一維度我們通常稱為Height,第二維度我們稱為Width,這兩個維度構即圖像被計算機分割采樣的尺寸,也就是通常所說的分辨率(如一張分辨率為1920*1080的圖像,表示這幅圖像是由1920*1080個點組成),第三維度稱為Channel也就是通道,通常以RGB作為通道,表示圖像每個劃分的點的色彩,也就是他們分別在紅,綠、藍三原色域上的取值,如下圖:
我們的任務是,搜集大量相關的照片(即有些圖片是貓,有些不是貓,比如是小狗),并對已知照片的結果做標記(這個動作也叫打標簽):是貓的圖片記做1,不是貓的記做0,如下圖。
讓計算機識別已有標簽圖片的信息,建立一套識別模式,再用這套識別模式判斷新輸入的圖片是不是貓,這就是一個簡單的圖像識別問題。
到此我們可以將上述任務轉化為:對一批三維數組進行層層計算、轉換、壓縮,最終輸出每個三維數組是0或1的過程,而神經網絡就是完成這個過程的計算模型之一,也是目前比較出色的。
一個典型的神經網絡模型包含有輸入、輸出,以及中間代表計算功能的隱藏層,如下圖,圖中各個層級之間的關系用箭頭線表示,稱為"連接",每一個連接都代表計算過程中的一個權重與偏差,也就是模型的參數。
結合上圖我們繼續概括下神經網絡算法進行圖像識別的過程:每個圖像對應的三維數組在計算機中被處理成數字矩陣,也就是特征矩陣,也可以看成是一系列的向量(矩陣的每一行或每列可以看成一個向量),這里簡化為只有三個向量X1,X2,X3作為輸入特征,它們們被當作神經網絡的輸入層。輸入層后面是隱藏層,由一個個神經元構成,它們代表著獲取的信息。最后一層是輸出層,一般是用來產生預測值的,此任務中輸出的是一個0或者1。其中每個"連接"是通過樣本特征矩陣和權重矩陣進行矩陣相乘,然后加上偏差形成的,并且也是下一層的輸入。
此時我們可以進一步總結上述任務:一個圖片是否是貓的識別問題,其實就是訓練一個好的神經網絡,訓練的意思就是讓權重和偏差的值不斷調整到最佳,以使得整個網絡的預測效果最好。
接下來我們來說明神經網絡算法是如何讓計算機訓練出"一套"好的權重和偏差的。首先我們來了解下神經網絡中神經元是如何形成的。
我們用X代表輸入層,也就是x1、x2、x3構成的特征矩陣,用W代表權重矩陣,用b代表偏差,前面講過我們通過樣本特征矩陣和權重矩陣進行矩陣相乘WX,然后加上偏差b(參數值)形成每一個"連接", 用z代表矩陣相乘加上偏差的結果,即z=WX+b,這樣的線性組合結果只能劃分線性關系,而現實世界轉化來的分類問題大多是非線性的。因此神經網絡中引入激活函數的概念,實現對非線性問題的劃分,這樣極大的擴充了神經網絡的分類能力。
我們展示一個常用的激活函數:sigmoid函數,如下圖表示的是sigmoid函數對輸入變量X在[-6,6]區間上的映射。
激活函數基本上都是非線性的,如果沒有激活函數會發生什么呢?
線性組合z=WX+b其實就是在多維空間(X有多少個特征,多維空間就是多少維)里切一刀,如下圖,我們無法通過線性切割把二維空間不同的兩類標識分開,引入激活函數就相當于將z=WX+b再進行一次非線性轉化,形成一個曲線,把這個多維空間里的樣本點進行分割。
實際中的神經網絡的每一個神經元都是由線性函數和激活函數構成。如下圖。
我們再用σ代表激活函數,α帶表了經過激活函數處理的矩陣,則每一個神經元的形成過程可以表示為下圖:
神經網絡的訓練過程就是一個個神經元形成的過程。
我們把隱藏層比較多(大于2)的神經網絡叫做深度神經網絡(Deep Neural Network,DNN),深度學習,就是使用深度神經網絡架構的機器學習方法。通常來說隱藏層越多,我們分類的效果就越好(但計算量也更大)。如下圖表示隱藏層越多,形成的非線性劃分效果越精準。
最后我們來揭示計算機是如何訓練一個個神經元的,也就是確定神經元的權重W和偏差b值的過程。初始化時隨機指定一些w和b的值,不斷讀取打過標簽的圖像輸入模型,就可以對w和b進行校正。
隨機初始化一般不會有多好的表現,我們需要選擇一個損失函數L,它表示當前每一次迭代計算中目標輸出與實際輸出之間的誤差,是關于W和b作為的函數,也是評價模型訓練好壞的標準。
自然地,損失函數的值越小表面該模型的效果越好,所以神經網絡的訓練過程,就轉化為的求解該損失函數L的一組解(W和b),使其達一個比較小的值的過程,而這一組得出的解就是最終的神經網絡的參數值W和偏差b。找到了神經網絡中的全部參數w和b,也就形成了一個明確的神經網絡模型。
那么怎樣求得損失函數的最小值以及其對應的w和b呢?這其實是一個解方程組的過程,計算機通常是如何求解方程的呢?核心思想是迭代,當前主流的迭代方法是梯度下降。
梯度下降方法的主要思想:想象你在一個山峰上,在不考慮其他因素的情況下,你要如何行走才能最快的下到山腳?當然是選擇最陡峭的地方,這也是梯度下降法的核心思想:它通過每次在當前最陡峭的方向向下"邁"一步,來逐漸到達山腳。
數學上,梯度指向函數增長最快的方向,可以通過對損失函數求導獲得。這個最陡峭的方向,就是梯度向量的負方向。
損失函數對應的所有取值結果可以看成一個多維空間中的"山體表面"(也就是有權重W和b作為自變量與輸出結果一起構成的多維空間曲面),讓損失函數沿著負梯度的方向進行搜索,不斷迭代更新參數,最終使得損失函數最小化。
如上圖所示,那么現在模型的訓練問題就變為:明確自己現在的位置(可能是任意位置),然后求梯度,然后沿著與梯度相反的方向去走,一步一步下降直到接近最小值,最終找到這個曲面上的最小值,同時就找到了對應曲面最小值的位置坐標(也就是w和b的值),也就獲得了整個神經網絡的全部參數,這樣一個神經網絡就訓練完成,接下來我們可以輸入新的圖片,通過這個神經網絡來輸出結果0或1,即圖片是否是貓這樣一個識別問題了。
如上就是給大家介紹的神經網絡的基本知識,包括神經網絡的定義,關鍵概念和形成過程,希望大家能夠共同進步,體會人工智能的奧妙。
作者簡介
祝森,華為授權培訓合作伙伴宇信教育講師,具有豐富的教學和項目經驗,曾開發人臉識別、物體檢測、大數據電商平臺等項目,對人工智能,智能計算,鯤鵬,大數據技術有較深的理解。