人工神經網路到底能幹什麼?到底在幹什麼?
小編說:本文向對多層感知器了解不多的讀者介紹了人工神經網路的基本知識,並深入介紹了激活函數與偏值。
McCulloch-Pitts 神經元模型
早在1943 年,神經科學家和控制論專家Warren McCulloch 與邏輯學家Walter Pitts就基於數學和閾值邏輯演算法創造了一種神經網路計算模型。其中最基本的組成成分是神經元(Neuron)模型,即上述定義中的「簡單單元」(Neuron 也可以被稱為Unit)。在生物學所定義的神經網路中(如圖1所示),每個神經元與其他神經元相連,並且當某個神經元處於興奮狀態時,它就會向其他相連的神經元傳輸化學物質,這些化學物質會改變與之相連的神經元的電位,當某個神經元的電位超過一個閾值後,此神經元即被激活並開始向其他神經元發送化學物質。Warren McCulloch 和Walter Pitts 將上述生物學中所描述的神經網路抽象為一個簡單的線性模型(如圖2所示),這就是一直沿用至今的「McCulloch-Pitts 神經元模型」,或簡稱為「MP 模型」。
在MP 模型中,某個神經元接收到來自n 個其他神經元傳遞過來的輸入信號(好比生物學中定義的神經元傳輸的化學物質),這些輸入信號通過帶權重的連接進行傳遞,某個神經元接收到的總輸入值將與它的閾值進行比較,然後通過「激活函數」(亦稱響應函數)處理以產生此神經元的輸出。如果把許多個這樣的神經元按照一定的層次結構連接起來,就可以得到相對複雜的多層人工神經網路。
圖1生物學所定義的神經網路
圖2 McCulloch-Pitts 神經元模型
事實上,從數學建模和計算機科學的角度來看,人工神經網路是認知科學家對生物神經網路所做的一個類比闡釋,並不是真正地模擬了生物神經網路。人工神經網路可以被視為一個包含了許多參數的數學模型,而這個數學模型是由若干個函數相互嵌套代入而得到的。
圖2 中的神經元可以表示為
其中xi 是來自第i 個神經元的輸入,y 是輸出;w 是加權參數(連接權重),b 為偏值(Bias)(某些文獻中偏值也被稱為閾值,為了與Threshold 閾值區分,本書統一使用偏值);f 表示激活函數(Activation function)。有效的人工神經網路學習的架構和演算法大多有相應的數學證明作為支撐。
注意,神經元的運算可以用矩陣乘法來實現,x 是維度為[1,n] 的一個橫向量,W是維度為[n,1] 的豎向量,b 為一個值,矩陣運算為y = f(x *W + b)。在TensorFlow中,這個神經元的運算就是以矩陣乘法實現的。我們拓展一下,若輸出5 個神經元且輸入的x 有100 個值,則輸出y 有5 個值,W 的維度為[100,5],而b 的維度為[1, 5]。
人工神經網路到底能幹什麼?到底在幹什麼
經典人工神經網路本質上是解決兩大類問題:1)分類(Classification);2)回歸(Regression)。當然現在還有圖像分割、數據生成等問題,但經典機器學習中已經討論過,把圖像分割歸為分類問題,把數據生成歸為回歸問題。分類是給不同的數據劃定分界,如人臉識別,輸入x 是人臉照片,輸出y 是人的ID 號,這個值是一個整數。回歸問題要解決的是數據擬合,如人臉年齡預測,輸入x 同樣是人臉照片但輸出y 是人的年齡,這個值是一個連續浮點數。
需要注意的是,廣義上來說,數據可以是有標籤(Labeled)或者無標籤的(Unlabeled),這對應了經典機器學習中的有監督學習(Supervised Learning)和無監督學習(Unsupervised Learning)。在機器學習中,對於無標籤的數據進行分類往往被稱作聚類(Clustering)。在實際應用中,垃圾電子郵件自動標註是一個非常經典的分類問題實例,股票漲跌的預期則可看作一個回歸問題。在實際應用中,有標籤的數據往往比較難以獲得(或者是會花比較高的代價才能獲取,如人工標記),但是對有標籤的數據進行有監督學習相對容易。總而言之,無監督學習相對較難,但是無標籤的數據相對容易獲取。
在「大數據」支持和電腦硬體(如圖形處理器GPU)的計算能力不斷提高下,人工神經網路和深度學習在分類和回歸問題上都取得了空前的成效。可是我們討論了眾多概念,比如網路、單元、連接、權重、偏值、激活函數,知道了人工神經網路可以解決分類(聚類)和回歸問題,但是具體怎麼使用人工神經網路呢?
讓我們回到這個方程:y = f(x_W +b),以一個最簡單的分類問題為例子(聚類和回歸問題可以舉一反三,請讀者自己思考):如果有1 萬封已經標記好的電子郵件,每一封郵件只可能被標記為垃圾郵件(SPAM)或者非垃圾郵件(HAM),即輸出y = 0或者y = 1,換句話說,這是一個二元分類問題。我們的輸入xi 和經典機器學習中定義的並無差別,可以是從具體每封電子郵件中提取的關鍵字,或者是提取的其他特徵量。我們往往通過對數據的特徵提取和預處理(例如歸一化與標準化)構建統一格式的特徵向量作為輸入。值得注意的是,在現有的很多深度學習演算法中,特徵提取往往被直接融合到了模型訓練過程中,並不會單獨實現(但是數據的歸一化與標準化往往不可或缺,甚至會最終決定深度學習模型的成敗)。在給定預設好的激活函數(Activationfunction)和偏值(Bias)的情況下,我們有了一個訓練集(xi,yi),比如第158 號郵件有「on sale」、「省錢」等字眼並且被標記為垃圾郵件,我們通過前向傳播和初始化的加權參數由xi 得到y′i,並且和真實的yi 進行比較,然後通過反向傳播對加權參數進行更新。我們實際上最終需要學習到的是一組最優的「加權參數」。當一封新的郵件,比如第1 萬零1 封郵件被輸入的時候,通過已經獲取的最優的「加權參數」,就可以自動判別其屬於垃圾郵件或非垃圾郵件。當我們有一個很複雜結構的深層網路的時候,同樣的原理也可以適用,只不過每一層的網路的輸出被當作了下一層網路的輸入。
另外,值得深思的是,真實人類的大腦(生物學上的神經網路)是這麼工作的嗎?
我們注意到人工神經網路的工作往往需要大量的訓練數據,而且往往需要大量相對平衡的數據,比如我們需要人工神經網路去識別「貓」和「狗」的圖片,我們需要大量的有標記的數據,而且最好是同時分別有大量的「貓」和「狗」的圖片,而不是其中一樣占絕大多數。這和人類的認知和識別過程是具有天壤之別的,當一個幼兒識別「貓」和「狗」的圖片時,往往只需要很少的訓練圖片,幼兒就可以完成準確率比較高的識別。另外給幼兒看相對較多的「貓」的圖片後,往往其對僅有的「狗」的特徵也會有很深刻的理解,進而準確識別。這將是未來人工神經網路或深度學習研究人員應該深入去理解的方向,即如何使用有限的少量數據和大量無標記的數據得到準確、有效、穩定的分類和回歸預測。
什麼是激活函數?什麼是偏值
通過上述學習,我們理解了基本的人工神經網路架構,但是還有兩個概念需要進一步說明:激活函數(Activation function)和偏值(Bias)。
顯然,階躍函數(如圖3所示)是理想的激活函數。階躍函數將輸入值映射為輸出「0」或者「1」,其中「0」對應於神經元抑制,「1」對應於神經元興奮。然而,在實際應用中,階躍函數是不連續且不光滑的。因此,實際常用邏輯函數(Sigmoid 函數)作為激活函數。典型的Sigmoid 函數如圖2.3 所示,它把可能在較大範圍內變化的輸入值擠壓到(0,1)的輸出值範圍內,因此有時也稱為「擠壓函數」(可以把此激活函數的作用想像為:將線性的輸入「擠壓」入一個擁有良好特性的非線性方程)。
為什麼要非線性?簡而言之,激活函數給神經元引入了非線性因素,使得神經網路可以任意逼近任何非線性函數,這樣人工神經網路就可以應用到眾多的非線性模型中,使得其表現力更加豐富。
圖3 左圖:階躍函數;右圖:Sigmoid 函數
那什麼是偏值呢?具體來說,偏值控制了激活函數的「左向平移」和「右向平移」。
比如對於標準的Sigmoid 函數(如圖2.3 所示),僅在輸入x≥0 的情況下才輸出1 > y≥0.5,在輸入x y > 0。而若我們想要實現在輸入x ≥1 的情況下輸出1 > y ≥0.5,在輸入x y > 0,這時無論怎樣去改變加權參數,都只能改變Sigmoid 函數的形狀(或者說是陡峭程度),拐點始終在x = 0,無法滿足訓練集的要求。但是當加上偏值後,整個Sigmoid 函數就可以被左右平移,問題就迎刃而解了。
注意,現在主流的激活函數是ReLU 而不是Sigmoid,假設函數為y = f(x),則當x 0 時y = x。Sigmoid 函數的缺點是在反向傳播(Backpropagation)訓練網路時,由於在輸出接近0 或1 時斜率極小,所以當網路很深時,在反向傳播過程中輸出層的損失誤差很難向輸入層方向傳遞,導致接近輸入層的參數很難被更新,大大影響效果,我們稱之為梯度彌散(Gradient Vanish)問題。而ReLU 函數解決了這個問題,首先當x > 0,y 是線性的,所以斜率恆為1,不會因為網路深度而出現梯度彌散問題。另外,實踐中發現,當x
此外常用的函數還有Tanh、Leaky ReLU 等。Tanh 函數和Sigmoid 函數類似,不過輸出範圍變成了(-1, 1);Leaky ReLU 是為了解決ReLU 不能輸出負數而設計的,可以讓訓練更加穩定。關於它們的具體細節會在《深度學習:一起玩轉TensorLayer》一書中進行講解。
GIF
※不止AboutFace4!交互設計領域你不能錯過的5本好書推薦
TAG:博文視點Broadview |