1. 程式人生 > >Andrew Ng 深度學習筆記-01-week3-課程

Andrew Ng 深度學習筆記-01-week3-課程

weight leak andrew ng random 有一個 function 分享圖片 範圍 hid

一、專業詞匯

a hidden layer of the neural network 神經網絡的隱藏層

a single hidden layer 單隱藏神經網絡

activation function 激活函數

the linear activation function 線性激活函數

the identity activation function 恒等激活函數

rectified linear unit 修正線性單元ReLU

the leaky ReLU 帶泄露的ReLU

number of hidden units 隱藏單元數

initialize the weights 初始化權重

w prime w‘

a sub gradient of the activation function g(Z) 激活函數g(z)的次梯度

gradient descent working 梯度下降算法

initialize the weights 初始化權重

completely symmetric 完全對稱

partial derivative terms 偏導項

二、編程技巧

()表示是第幾個樣本

[ ] 表示是處於第幾層(layer)

第一層的a[1]用於第二層的輸入:

技術分享圖片

np.sum(dZ^[2],axis=1,keepdims=true):keepdims=true 開啟,保證不會輸出那些秩為1的數組

logistic 回歸,可以將權重初始化為0;但將神經網絡的各參數數組全部初始化為0,再使用梯度下降算法,將完全無效:

下面情況會導致兩個(多個)隱藏單元計算一樣的函數,不管進行多少次梯度下降,導致多個隱藏單元在此並沒有真正的意義:

技術分享圖片

而我們需要的是通過不同的隱藏單元,去計算不同的函數,所以需要隨機初始化所有參數:

通常將權重矩陣初始化成非常小的隨機值(非常小的原因是將Z的值避開非常平緩的地方,不讓其值過大或者過小,使的梯度下降更快,學習的更快):

當訓練的神經網絡很深時,可能要選擇0.01以外的數

W^[1]=np.random.randn((2,2))*0.01

技術分享圖片

三、思維

在神經網絡中,需要多次計算,反復計算z和a的值,最後計算loss函數

一個神經網絡包括:輸入層(input layer)表示第0層、隱藏層(hidden layer)有多個節點、 輸出層(output layer)只有一個節點,輸出預測值y^,一般不把輸入層看作一個標準的層,隱藏層和輸出層是帶有參數的,隱藏層中包含w^[1] b^[1],輸出層包含w^[2] b^[2],

在有監督學習中,可以看到輸入和輸出,在訓練集中,看不到中間節點的真正數值

用a^[0]表示輸入、a代表activations(激活),意味著網絡中不同層的值會傳遞給後面的層,即 輸入層將x的值傳遞給隱藏層,隱藏層同樣也會產生activations,將其記做a^[1],這裏的a^[1]代表的是多維向量,在下面的例子中:

w^[1]是4*3的矩陣,4表示隱藏層中有4個節點,3表示有3個輸入

b^[1]是4*1的矩陣

w^[2]是1*4的矩陣,1表示這一層有一個輸出,4表示隱藏層中有4個節點

詳細解釋:

技術分享圖片

將四個等式向量化:

技術分享圖片

進一步得到:(在已知的單個訓練樣本中,計算神經網絡的預測值)

技術分享圖片

將不同訓練樣本向量化:

技術分享圖片

將雙下標的進行橫向堆疊:

針對A[1]:

豎向掃描對應的不同的隱藏單元(不同的輸入特征):

第一行第一個元素代表 第一個訓練樣本對應的第一個隱藏單元的激活函數

第二行第一個元素代表 第一個訓練樣本對應的第二個隱藏單元的激活函數

第三行第一個元素代表 第一個訓練樣本對應的第三個隱藏單元的激活函數

.............

橫向掃描對應不同的訓練樣本:

第一行第二個元素代表 第二個訓練樣本對應的第一個隱藏單元的激活函數

第一行第m個元素代表 第m個訓練樣本對應的第一個隱藏單元的激活函數

.............

左邊即為在單個訓練樣本中實現正向傳播算法:

技術分享圖片

對幾個樣本進行正向傳播計算:

為簡化,將b的值設置為0

技術分享圖片

技術分享圖片

對於不同種類的激活函數的選擇,大部分可以嘗試使用ReLU,但是具體的什麽函數更加適合,可以在我們的保留交叉驗證數據集和開發集上跑一跑,看看哪個參數效果更好,就用哪個:

非線性的激活函數有:

sigmoid:

技術分享圖片

tanh():

技術分享圖片

tanh()的範圍是-1到1,所以通過它得到的最終的結果的平均值更接近0,達到更佳的數據中心化的效果

在後續的例子中,除非結果是非0即1的二元分類的輸出層的時候,輸出層會選擇sigmoid作為激活函數,其他情況一般不會選擇sigmoid

每一層(layer)的激活函數可以不同,用[]上標加以區分

當z的值特別大或者特別小的時候,圖像的斜率會接近於0,這樣會拖慢梯度下降算法,更常用的是ReLU(默認的時候使用,或者不確定隱藏層用什麽的時候使用),使用ReLU的好處在於:對於很多z空間,激活函數的導數、斜率和0相差很遠,在實踐中使用ReLU能使我們的神經網絡的學習速度更快

ReLU:

技術分享圖片

the leaky ReLU:

技術分享圖片

為何一定要用非線性函數:假如用線性函數,則最後的a^[2]只是把輸入的線性組合再次輸出,假如第一個隱藏層都用線性激活函數,輸出層用sigmoid,整個模型的復雜度和沒有任何隱藏層的標準邏輯logistic回歸是一樣的。即線性隱層沒有任何意義。

只有輸出結果是一個實數的時候(比如房價),最後的輸出層可以使用線性激活函數,隱藏層裏面必須使用非線性激活函數

技術分享圖片

激活函數的導數:

sigmoid:

技術分享圖片

tanh() :

技術分享圖片

ReLU::

技術分享圖片

leaky ReLU:

等於0跟著誰是無關緊要的:

技術分享圖片

神經網絡梯度下降:

技術分享圖片

神經網絡的正向傳播與反向傳播:

技術分享圖片

Andrew Ng 深度學習筆記-01-week3-課程