1. 程式人生 > >神經網路(三):神經網路

神經網路(三):神經網路

一、 神經元到神經網路

在之前的文章中(《神經網路(一)》《神經網路(二)》),我們討論瞭如何為神經元搭建模型。雖然搭建模型的過程並不複雜,但得到的神經元模型也沒有太多的新意,比如使用sigmoid函式作為啟用函式,則得到的神經元模型就是邏輯迴歸。

在人體中,單個神經元能做的事情非常有限,但多個神經元相互交織在一起就組成了人類強大的神經系統。這啟發我們需要將多個神經元模型聯結起來組成複雜的神經網路,而這正是這篇文章討論的重點。

二、 圖形表示

將多個神經元聯結起來最簡單且最直觀的方法就是將它們首尾相接形成一個沒有環的網路(acyclic graph),在這個網路中,一個神經元的輸出是另一個神經元的輸入。這種型別的神經網路在學術上被稱為人工神經網路(Artificial Neural Networks,ANN)

1,它的模型拓撲結構如圖1所示。

在神經網路中,神經元是按層(layer)組織的。每一層包含若干個神經元,層內部的神經元是相互獨立的,也就是說它們之間並不相連;但相鄰的兩層之間是全連線的(fully-connected),也就是說任意兩個神經元都是直接相連的(當然前提是這兩個神經元分別來自相鄰的兩層)。

神經網路中不同的層按功能分為3類,分別是輸入層(input layer)、隱藏層(hidden layer)以及輸出層(output layer)。

  1. 神經網路裡只有一個輸入層,其中的元素在圖中標記1裡用黑色的點表示:一個黑點表示一個模型的輸入,也就是訓練資料裡的一個自變數,若訓練資料有個特徵,則輸入層裡一定有相應的個點。在模型中,輸入層對資料不做任何處理,只負責將資訊傳遞給後面的隱藏層(若網路裡沒有隱藏層,則將資訊直接傳遞給輸出層,這時候,神經網路其實就是邏輯迴歸)。

  2. 神經網路可以有多個隱藏層,比如圖1中就有兩個隱藏層。隱藏層裡的元素就是之前討論的神經元模型(更具體一點,它們都是sigmoid神經元),因此在圖中標記1裡用圓圈表示。值得注意的是,一個圓圈包含了線性模型以及啟用函式。在多層感知器裡,隱藏層的作用是傳輸並分析資料。

  3. 神經網路裡只有一個輸出層。輸出層裡的元素與隱藏層裡的不同,它只包含線性模型,因此在圖中標記1裡用方塊表示。雖然輸出層的名字裡有“輸出”二字,但它並不是模型的最終輸出,與《神經網路(二)》中的邏輯迴歸類似,輸出層的結果經過softmax函式處理後,才能得到最終的模型結果(如果該神經網路解決的是分類問題)。

圖1

正如上面討論的,不同層裡的元素是不一樣的,但對於神經網路領域,大家約定俗成地都用圓圈來表示它們,也將它們統稱為神經元(雖然這樣很容易給初學者造成誤解),並將最後一步的softmax函式省略掉,如圖1中標記2所示。

  1. 圖1中的標記1和標記2表示的同樣的神經網路,其中標記2中的圖示在神經網路領域是通用的,因此在之後的章節中我們將沿用這樣的記號。

  2. 對於神經網路,通常會以它所擁有的層數來命名,但這時輸入層是不計算在內的,比如圖1中的模型被稱為3-層神經網路(3-layer neural networks)。當然這樣的命名並不能唯一地標識一個神經網路,比如將圖1中的隱藏層1增加到10個神經元,得到的仍然是一個3-層神經網路。

三、 數學基礎

神經網路在圖形上的表示是比較直觀的,但它所代表的數學公式卻是極其複雜的。為了更深入地理解神經網路,下面將討論圖形背後的數學基礎。

為了討論方便,我們來看一個非常簡單的2-層神經網路(假設這個神經網路用於解決分類問題),如圖2所示。

圖2

這個網路的輸入層有兩個圓圈,表示模型所用的兩個自變數,分別用x1,x2x_1, x_2表示。

隱藏層裡的圓圈表示神經元模型,它包含兩個部分:線性模型和啟用函式。

  1. 對於第ll層(從左到右編號)裡的第mm個神經元(從上到下編號),用記號imli^l_m表示相應的線性模型輸出(圓圈輸入的第一層加工),用記號omlo_m^l表示啟用函式的輸出(也是圓圈的輸出)。由於這個神經網路裡都是sigmoid神經元,因此兩者之間的關係如公式(1)所示。

(1)oml=11+eimlo^l_m = \frac{1}{1 + e^{-i^l_m}}\tag{1}

  1. 圖中圓圈之間的箭頭表示線性模型中的權重(這是神經網路的一部分模型引數),用記號wm,nlw_{m, n}^l表示從第l1l - 1層裡第mm個圓圈到第ll層裡第nn個圓圈的箭頭,比如圖2中的w1,21w_{1, 2}^1w3,12w_{3, 1}^2。值得注意的是,為了書寫方便,我們將輸入層記為第0層。

  2. 除了權重之外,線性模型裡還有一個截距項(這是神經網路的另一部分模型引數),用記號bmlb_m^l表示第ll層裡第mm個圓圈所對應的截距。結合上面的記號,圓圈裡線性模型的輸出公式如下。值得注意的是,om0o_m^0表示輸入層裡第mm個自變數,也就是圖中的xmx_m

(2)inl=mwm,nloml1+bnli_n^l = \sum_m w_{m, n}^lo_m^{l - 1} + b_n^l\tag{2}

輸出層的圓圈只表示線性模型,雖然圓圈裡並沒有啟用函式,但為了書寫簡單,依然用記號om2o_m^2表示圖2裡輸出層圓圈的輸出。

  1. 與隱藏層有所不同,在輸出層裡,我們有iml=omli_m^l = o_m^limli_m^l的計算公式與隱藏層中的一模一樣,在此不再贅述)。

  2. 針對分類問題,相應的損失函式如公式(3)所示。其中σ\sigma《神經網路(二)》中討論過的softmax函式;Zi=(o12,o22)iZ_i = (o_1^2, o_2^2)_i表示針對第ii個數據的神經網路輸出;θi\theta_i表示的第ii個數據的類別,如果是類別0,則θi=(1,0)\theta_i = (1, 0),否則θi=(0,1)\theta_i = (0, 1)

(3)L=iLi=iθilnσ(Zi)TL = \sum_i L_i = -\sum_i\theta_i\ln\sigma(Z_i)^T\tag{3}

將上面的討論總結一下,神經網路的模型引數分為兩類:一類是線性模型的權重wm,nlw_{m, n}^l,在圖2中,一共有3×2+2×3=123 \times 2 + 2 \times 3 = 12個這樣的引數;一類是線性模型的截距項bmlb_m^l,在圖2中,一共有5個這樣的引數。由此可見,神經網路的模型引數是很多的,而且與其他模型有所區別的是,它的模型引數是明顯分層的。也就是說,從數學上來看,神經網路的模型引數是前後依賴的。這使得神經網路的訓練變得十分複雜,需要使用比較特殊的演算法來(反向傳播演算法)估算模型引數。這部分內容將在之後的文章中仔細討論。

四、廣告時間

李國傑院士和韓家煒教授在讀過此書後,親自為其作序,歡迎大家購買。

另外,與之相關的免費視訊課程請關注這個連結

  1. 在有些文獻中,這樣的神經網路又被稱為多層感知器(Multi-Layer Perceptron,MLP) ↩︎