為什么要使用神經網絡
在筆記三中,曾提到非線性擬合的問題。當時是通過構造特征向量,即由兩個或以上的變量構造一個新的變量,增加\(\theta\)的維度,以擬合出更細膩的曲線。下面是課件中類似的例子:
可以看到,隨着變量即數據集的維度增加,這種做法將會導致“維度災難”,越來越不可行。就上述例子,以100維的數據集為例,二次項的構造復雜度是\(O(n^2)\),實際是5000;三次項復雜度是\(O(n^3)\),實際達到17000;當構造一百次項時,復雜度可能已經超出計算機所能處理的范圍了。即使我們可以使用正則使假設函數簡化,但正則化的過程也需要大量的數據集和大量的時間,同樣不大可行。
NG的例子舉到這里就戛然而止,后面就引入神經網絡(Neuron Network)了。就我個人來說,把本章的視頻看完后,隱約感覺到,神經網絡的思想和之前提到的構造特征向量有相似之處,同時避免了維度災難。如下:
上圖是課件后面的部分。NG在這里根據各個層的特點進行分類:Layer1是輸入層,Layer2是隱藏層,Layer3是輸出層。對神經網絡而言,輸入層和輸出層各只有一個,隱藏層根據實際情況可以有多個。看上去,每一個隱藏層都與上一層的輸入量有關,同時根據各連接線的權值不同,實質上也是利用原有特征向量構造了新的特征向量。當然,這只是個人很主觀的感覺。
神經網絡組成
上面已經說到了,神經網絡一般可以分成三個層次:輸入層、隱藏層和輸出層。對比着生物學上的神經系統,神經網絡是由多個神經單元組成的。神經單元,即多個節點指向下一層的單節點這一結構,就是之前學過的多元對率回歸所使用的結構。因而,我們可以把神經網絡看成許多個神經單元的組合體。
上圖的神經單元中,我們發現在原有的特征值上添加了\(x_0\),這個值叫做“偏正量(bias unit)”。事實上神經網絡的每一層都有這個偏正量。
前向傳播算法
前向傳播,直觀上理解,就是從左向右賦權值,一層一層地構造隱藏層。對於每一層節點,它只能獲取前一層節點的信息。
需要注意的是,最后構造出來的特征向量維度是這樣的:\(S(\theta^{(j)})=s_{j+1}\times(s_j+1)\),其中j表示所在隱藏層的層數。最后得出的假設函數如下:
神經網絡的例子
邏輯運算
在本例中,使用sigmoid函數的特殊性質,構造了上面三個基本的邏輯門:與門、或門和非門。理論上,這三個邏輯門可以通過復雜組合表示所有數學邏輯。同樣的,可以使用這些神經單元的組合來構造“或非門”的神經網絡。
多分類問題
先前提及的都是二元分類問題,現實中的分類問題往往是多元的。之前我們的做法是通過分割,將多元問題化解為多個二元問題.在神經網絡中,我們可以通過多個節點的輸出組合,來區分類型的不同。