1. 程式人生 > >乾貨|吳恩達Coursera課程教你學習神經網路!

乾貨|吳恩達Coursera課程教你學習神經網路!

640?wx_fmt=gif&wxfrom=5&wx_lazy=1


吳恩達Coursera機器學習課程系列筆記講解

640.png?wxfrom=5&wx_lazy=1

Neural Networks: Representation

1 Motivation

之前講的Linear regression和Logistric regression都是線性分類器(linear classification),因為它們都只能用一條線來分類。

然而很多情況下,我們的分界線不見得是一條簡單的曲線,可能就是一條彎來彎去的曲線,所以我們需要一個非線性分類器來劃分這個資料集。

我們可以使用如下的式子去假設這個非線性模型:640?wx_fmt=png&wxfrom=5&wx_lazy=1但是如果特徵很多很多,比如說一幅影象,我們用每一個畫素去表示一個特徵的話,這個計算量將是無比巨大的,所以更普及的一個方法是使用神經網路(Neural Networks)。

神經網路,顧名思義,就是模仿了人類大腦的構造了,一層一層的進行計算,最後得出一個結果。

每一層對上一層的資料進行一個抽象得出一系列的決策,然後下一層在對這一層得出的決策再進行一個抽象的到更高層次的決策,就這樣一層一層下去,直到最後一層的出一個終極決策,輸出結果。

我們的大腦中使用“神經元(neuron)”去感知,去連線其他的神經。

640?wx_fmt=png

類比一下,在神經網路中也是如此,我們在每一層中,弄幾個神經元來感知(=計算),然後講決策傳個下一層的神經元……以此類推直至最後一個輸出層的神經元。

640?wx_fmt=png

2 Model Representation

首先看一下一個神經元是怎麼工作的:

640?wx_fmt=png

然後再來看由多個這樣的神經元組成的簡單的三層神經網路是怎麼樣工作的:

640?wx_fmt=png

下面,我們把這一系列的計算公式展開來,然後再合併成colume vector相乘的格式,最後再合併成matrix相乘的形式。sigmoid函式用σ(z)來表示。

640?wx_fmt=png

以上便是一個三層的神經網路的工作流程,再複雜的也是這樣一層一層計算的。

這裡最容易弄混淆的就是轉換成矩陣的這一步了。有一個比較好的檢驗矩陣表示是否正確的方法,就是去check一下矩陣相乘之後的維度,如果相乘的時候維度對不上,嘗試轉置一下。

另外在這門課程中,我們的向量都是column vector,即豎的向量;矩陣都是row represented matrix,即以一行為資料。

3 Multiclass Classification

上一週的課程中已經講過如何使用“one-to-rest/all”的方法來進行多分類問題了,就是k個二分類器把屬於這一類的分別挑出來。

這樣的話,需要分別訓練k個二分類器。接下來,我們使用神經網路進行多分類,只要訓練一個分類器即可。說是一個分類器,其實是k個分類器的集合器,我們把k個分類器分別放在了隱藏層的k個神經元中。

然後這k個神經元自然會輸出k個結果,將這些結果使用softmax函式轉換成概率,然後取概率最大的那一個類別即可。

細節圖如下:

640?wx_fmt=png

其中的softmax函式是為了讓這幾個分類器的結果具有可比性而引入了一個函式,它將把這些結果轉換成“同一分佈”的概率,即這k個概率總和為1。下面式子中的z是一個K維向量:

640?wx_fmt=png

比如接下來我們需要通過神經網路去識別一幅影象。

我們將影象中的每一個畫素作為一個特徵,輸入到如上的多分類神經網路中去,並且告訴神經網路,這幅圖是什麼,然後讓它自己去比較預測結果和正確結果,使用back propagation的方法去糾正錯誤,學習畫素與類別之間關係。如此一來,輸入一幅全新的影象後,這個神經網路就可以知道類別什麼了。

640?wx_fmt=png

和上面的細節圖一樣,W用來表示隱藏層的3個神經元即3個二分類器(cat分類器、dog分類器、ship分類器),最後3個分類器輸出三個類的概率(cat score、dog score、ship score),結果dog的概率最大,但是正確的類別是cat,所以需要神經網路去比較預測結果和正確結果,然後使用back propagation的方法去糾正錯誤,下一次將會講到,如何比較結果,如何糾正錯誤。