Part 1(三)淺層神經網路

2021-08-15 01:10:38 字數 2057 閱讀 1976

接下來我們將學習如何實現乙個神經網路

我們輸入x和引數w,b,計算出z,然後得到a(同時輸出y hat),最後可以計算損失函式l。

可以把很多sigmoid單元堆疊成乙個神經網路。

方括號是表示第幾層的資料,輸入層是第0層,不把輸入層看作標準層,因此下圖是兩層的

上標表示第幾層,下標表示該層中的第幾個元素,(z1…z4對應了隱藏層中的4個不同的元素,共同組成了第一層的z[1])。

中間的圓圈包含了兩個步驟,第一步計算出第一層 z的值(需要用到第一層的w值和第一層的b值),然後計算出第一層的a;接下來將第一層的a作為第二層的輸入,接著用第二層的w和b,計算出第二層的a;以此類推。

然後嘗試將這個過程向量化,首先我們將m個樣本堆疊成乙個矩陣,然後我們需要計算的是下圖右邊藍色字部分的那幾條公式(z[1]是m個列向量堆疊成的,如下)。對於a[1],豎著掃下來,第一列上的是第乙個樣本的第1到n個隱藏單元(其實也對應著不同的特徵),橫著掃每行是第1到m的樣本。

第一行,是計算1,2,3樣本的z[1],為了方講述,我們將b變成0。

w[1]是一列向量,計算出w[1]*x(i)我們會得到一些列向量,當w[1]x我們會得到 w[1]x(i)合併起來的乙個矩陣,得到z[1]。

目前為止,我們用的啟用函式都是sigmoid啟用函式,其實還有很多函式效果很好的,我們來看看其他函式:

比如g(z),g(z)可以是非線性函式,不一定是sigmoid函式(between 0 and 1)。有其他函式做的比sigmoid函式好,比如tanh函式(-1 to 1),tanh函式幾乎比sigmoid函式都好用,乙個例外是輸出層,如果y是0或1(做二分類問題時),y hat介於0-1更加合理,這是可以在輸出層用sigmoid函式,然後不同層的啟用函式可以不一樣。

然而,對於sigmoid和tanh函式都有乙個缺點,就是但z非常大或者非常小的時候,這個函式的倒數或者斜率就會很小接近於0,會拖慢梯度下降的速度。

然後乙個比較受歡迎的工具是,修正線性單元(relu),公式是a=max(0,z),所以只要z是正數,導數就是1,z為負數導數為0。 如果你不確定隱藏層用什麼啟用函式,你可以選擇用relu,實際用應用也很多。

relu還有另乙個版本,叫做帶洩露的relu函式,就是當z是負數的時候是一條緩慢的斜線,實際上這個理論上來說會比relu好,但是實際中並沒有那麼多人應用。

如果我們去掉啟用函式就相當於在做線性函式計算,會有下面的形式,輸出的結果只是將輸入的資料再組合然後輸出,所以如果沒有啟用函式,無論你的神經網路有多少層,都只是一直在計算線性啟用函式,所以不如直接去掉所有的隱藏層。如果你輸出的y是乙個實數,那麼用線性函式去算是可以的,所以唯一能用線性啟用函式的通常就是輸出層。

一般權重會設比較小的數,如0.01,但是不用0

淺層神經網路 2

搭建乙個神經網路時,你可以選擇隱藏層中或者輸出層中使用什麼啟用函式 actuation function 到目前為止,我們一直使用的是sigmoid函式,但其他函式效果會更好。在實際訓練中,有個函式表現總是比sigmoid好,叫tanh 雙曲正切函式 它的輸出是 1,1 從數學上,它其實是sigmo...

神經網路和深度學習 淺層神經網路

乙個淺層神經網路示意圖 如圖所示,表示乙個單隱層的網路結構。這裡主要需要注意的是,層與層之間引數矩陣的規格大小 隱藏層和輸出層之間 由上面我們可以總結出,在神經網路中,我們以相鄰兩層為觀測物件,前面一層作為輸入,後面一層作為輸出,兩層之間的w引數矩陣大小為 n out,nin b引數矩陣大小為 n ...

神經網路學習(十)淺層BP神經網路總結

系列部落格是博主學習神經網路中相關的筆記和一些個人理解,僅為作者記錄筆記之用,不免有很多細節不對之處。我的這一階段目標是在學習完淺層bp神經網路的相關知識時,可以將手寫字的識別率達到98 在前面的幾次實驗中,mnist手寫字的識別率始終未達到98 以上,這樣的結果是有些讓人沮喪的。今天進過艱苦奮鬥,...