神經網路表述
1.非線性假設
我們之前學的,無論是線性迴歸還是邏輯迴歸都有這樣一個缺點,即:當特徵太多時,計算的負荷會非常大。
下面是一個例子:

如果n是原始特徵的個數,事實上二次項的個數大約是(n2)/2!三次項個數大約是n3!
因此要包含所有的二次項,不是很好實現,而且由於項數過多,最後的結果很可能是過擬合的,也存在運算量過大的問題。
因此當初始特徵個數n個數很大時,將高階多項式項數包括到特徵裡,會使特徵空間急劇膨脹,當特徵個數n很大時,建立非線性分類器並不是好做法。
對很多實際機器學習問題,特徵個數n是很大的!
假設我們希望訓練一個模型來識別視覺物件(例如識別一張圖片上是否是一輛汽車),我們怎樣才能這麼做呢?一種方法是我們利用很多汽車的圖片和很多非汽車的圖片,然後利用這些圖片上一個個畫素的值(飽和度或亮度)來作為特徵。
假如我們只選用灰度圖片,每個畫素則只有一個值(而非 RGB值),我們可以選取圖片上的兩個不同位置上的兩個畫素,然後訓練一個邏輯迴歸演算法利用這兩個畫素的值來判斷圖片上是否是汽車:

引入非線性假設的必要性:
從學習演算法的訓練樣本中,找到一些汽車圖片和一些非汽車圖片,從圖片中選擇一組畫素點位,畫素點1的位置和畫素點2的位置。在座標系中標出這幅汽車的位置,車的位置取決於畫素點1和畫素點2的強度,用同樣的方法處理其他圖片。
我們需要一個非線性假設來儘量分開這兩類樣本,這裡特徵空間的維數是多少?假設我們用50*50畫素的圖片,特徵向量的元素數量N = 2500,特徵向量X就是包含了所有畫素強度的列表,所有畫素點的亮度。對於典型的計算機圖片表示方法,如果儲存的是每個畫素點的灰度值,那麼每個元素的值應該在0到255之間,因此這個問題中,n = 2500,但是這只是使用灰度圖片的情況,如果我們用的是RGB彩色影象,每個畫素點包含紅、綠、藍三個值,那麼n = 7500,因此,如果我們需要通過包含所有的二次項特徵來學習得到非線性假設,那麼這就是式子中的所有條件:xi * xj,由於有2500畫素,總共就有約300萬個特徵。對於每個樣本都要找到並表示所有這300萬個特徵,計算成本就太高了。
普通的邏輯迴歸模型,不能有效地處理這麼多的特徵,這時候我們需要神經網路。
2.神經元和大腦
神經網路最初產生的目的是製造能模擬大腦的機器,而它能解決不同的機器學習問題,不只因為它受到生物學的啟發。
可以用它們做什麼?不僅包括將其應用到現代的機器學習問題上,而且包括對製造真正的智慧機器這一偉大的人工智慧夢想感興趣的人!
再次興起的原因是神經網路的計算量較大,計算機的速度變快才足以執行大規模的神經網路。

大腦什麼都可以做五花八門各種各樣的事?怎麼模仿它?
能不能假設大腦做這些不同事情的方法不需要上千個不同的程式去實現,相反的,大腦處理的方法,只需要一個學習演算法就可以了?
神經重接實驗:

其引申出的理念就是:
如果有一塊腦組織可以處理光,聲或者觸覺訊號,那麼也許存在一種學習演算法,可以同時處理視覺、聽覺和觸覺,而不是執行上千個不同的程式或上千個演算法。我們要找出的就是近似的實際的大腦學習演算法,然後實現它,讓大腦自己學習如何處理這些不同型別的資料。
我們幾乎可以把任何一種感測器接到大腦的幾乎任何一個部位,大腦就會學會處理它。




如果我們能找到大腦的學習演算法,然後再計算機上執行,大腦學習演算法或者與之相近的演算法,我們也許就會向人工智慧之夢邁進,製造出真正的智慧機器做出的最好的嘗試。
對現代機器學習問題,神經網路是最先進的一種演算法。
3.模型表示
為了構建神經網路模型,我們需要首先思考大腦中的神經網路是怎樣的?每一個神經元都可以被認為是一個處理單元/神經核(processing unit/Nucleus),它含有許多輸入/樹突(input/Dendrite),並且有一個輸出/軸突(output/Axon)。神經網路是大量神經元相互連結並通過電脈衝來交流的一個網路。

下面是一組神經元的示意圖,神經元利用微弱的電流進行溝通。這些弱電流也稱作動作電位,其實就是一些微弱的電流。所以如果神經元想要傳遞一個訊息,它就會就通過它的軸突,傳送一段微弱電流給其他神經元,這就是軸突。
這裡是一條連線到輸入神經,或者連線另一個神經元樹突的神經,接下來這個神經元接收這條訊息,做一些計算,它有可能會反過來將在軸突上的自己的訊息傳給其他神經元。這就是所有人類思考的模型:我們的神經元把自己的收到的訊息進行計算,並向其他神經元傳遞訊息。這也是我們的感覺和肌肉運轉的原理。如果你想活動一塊肌肉,就會觸發一個神經元給你的肌肉傳送脈衝,並引起你的肌肉收縮。如果一些感官:比如說眼睛想要給大腦傳遞一個訊息,那麼它就像這樣傳送電脈衝給大腦的。

神經網路模型建立在很多神經元之上,每一個神經元又是一個個學習模型。這些神經元(也叫啟用單元,activation unit)採納一些特徵作為輸出,並且根據本身的模型提供一個輸出。下圖是一個以邏輯迴歸模型作為自身學習模型的神經元示例,在神經網路中,引數又可被成為權重(weight)。

以上是單神經元,神經網路其實是一組神經元連線在一起的集合。
網路中的第一層被稱為輸入層,因為我們在這一層輸入特徵。
最後一層被稱為輸出層,因為這一層的神經元輸出假設的最終計算結果。
中間第二層被稱為隱藏層,隱藏層的值在訓練集中是看不到的,一個神經網路中可能不僅有一個隱藏層。
我們設計出了類似於神經元的神經網路,效果如下:

神經網路模型是許多邏輯單元按照不同層級組織起來的網路,每一層的輸出變數都是下一層的輸入變數。下圖為一個3層的神經網路,第一層成為輸入層(Input Layer),最後一層稱為輸出層(Output Layer),中間一層成為隱藏層(Hidden Layers)。我們為每一層都增加一個偏差單位(bias unit):

下面引入一些標記法來幫助描述模型: 代表第
層的第
個啟用單元。
代表從第
層對映到第
層時的權重的矩陣,例如
代表從第一層對映到第二層的權重的矩陣。其尺寸為:以第
層的啟用單元數量為行數,以第
層的啟用單元數加一為列數的矩陣。例如:上圖所示的神經網路中
的尺寸為 3*4。
對於上圖所示的模型,啟用單元和輸出分別表達為:

上面進行的討論中只是將特徵矩陣中的一行(一個訓練例項)餵給了神經網路,我們需要將整個訓練集都餵給我們的神經網路演算法來學習模型。
我們可以知道:每一個 都是由上一層所有的
和每一個
所對應的決定的。
(我們把這樣從左到右的演算法稱為前向傳播演算法( FORWARD PROPAGATION ))
把 ,
,
分別用矩陣表示:

我們可以得到 。
4.模型表示2

這個神經網路所做的事就像是邏輯迴歸,但是它不是使用原本的x1,x2,x3作為特徵,而是用a1,a2,a3作為新的特徵,同時特徵項a1,a2,a3也是學習得到的函式輸入值,由輸入層到隱藏層的對映,是由另一個函式決定的,這個函式由其他引數決定。
因此在神經網路中,它沒有用輸入特徵x1,x2,x3來訓練邏輯迴歸,而是自己訓練邏輯迴歸的a1,a2,a3,可以想象,根據為θ1選擇不同的引數,有時可以學習到很有趣和複雜的特徵,就可以得到一個更好的假設函式,比用原始輸入得到的假設更好。你也可以選擇多項式x1,x2,x3等作為輸入項,但這個演算法可以嘗試快速學習任意的特徵項,把這西a1,a2,a3作為特徵輸入到最後的單元,這部分實際上是邏輯迴歸演算法。
為了更好了瞭解Neuron Networks的工作原理,我們先把左半部分遮住:

右半部分其實就是以 , 按照Logistic Regression的方式輸出
:

其實神經網路就像是logistic regression,只不過我們把logistic regression中的輸入向量 變成了中間層的
, 即:
我們可以把
看成更為高階的特徵值,也就是
的進化體,並且它們是由
與
決定的,因為是梯度下降的,所以
是變化的,並且變得越來越厲害,所以這些更高階的特徵值遠比僅僅將
次方厲害,也能更好的預測新資料。 這就是神經網路相比於邏輯迴歸和線性迴歸的優勢。



5.特徵和直觀理解1
為什麼神經網路可以用來學習複雜的非線性假設模型?
我們可以用這樣的一個神經網路表示AND 函式:

其中 我們的輸出函式
即為:
我們知道 的影象是:

所以我們有:
所以我們的:
這就是AND函式。
接下來再介紹一個OR函式:

OR與AND整體一樣,區別只在於的取值不同。
6.樣本和直觀理解II
二元邏輯運算子(BINARY LOGICAL OPERATORS)當輸入特徵為布林值(0或1)時,我們可以用一個單一的啟用層可以作為二元邏輯運算子,為了表示不同的運算子,我們只需要選擇不同的權重即可。
下圖的神經元(三個權重分別為-30,20,20)可以被視為作用同於邏輯與(AND):

下圖的神經元(三個權重分別為-10,20,20)可以被視為作用等同於邏輯或(OR):

下圖的神經元(兩個權重分別為 10,-20)可以被視為作用等同於邏輯非(NOT):

我們可以利用神經元來組合成更為複雜的神經網路以實現更復雜的運算。例如我們要實現XNOR 功能(輸入的兩個值必須一樣,均為1或均為0),即 首先構造一個能表達
部分的神經元:

然後將表示 AND 的神經元和表示 的神經元以及表示 OR 的神經元進行組合:

我們就得到了一個能實現 運算子功能的神經網路。
按這種方法我們可以逐漸構造出越來越複雜的函式,也能得到更加厲害的特徵值。
這就是神經網路的厲害之處。
7.多元分類
解決多類別分類問題,因為我們可能需要去區分不止一個類別。

多類別分類演算法的實現方法本質上是一對多法的拓展,輸出變成了四維向量,用第一個輸出單元來判斷圖中是否有一個行人,再用第二個輸出單元判斷圖中是否有一輛汽車,...摩托車...貨車...就像是邏輯迴歸中的一對多法,有四個邏輯分類器,它們每一個都要識別圖中的物體是否是四種物體中的一種。
重新排版後:

神經網路演算法的輸出結果為四種可能情形之一:
