切換
舊版
前往
大廳
主題

Deep Learning Note (Topic_1)

Hiteku | 2019-10-05 19:36:09 | 巴幣 4 | 人氣 380


序論

1-3
深度學習:輸入特徵,輸出結果。
常見的應用:廣告、圖搜、語音轉文字、翻譯。
結構化資料:丟X得Y、廣告。
非結構化資料:圖像(CNN)、音頻(RNN)。
1-4
流行原因:社會的數字化、大量資料的誕生。

介紹

2-2 邏輯回歸
※與線性回歸找與資料接近的一條線不同,邏輯回歸是找能將資料分隔的一條線
這是一個處理二分問題的方法。


接下來要訓練參數W和B,您需要定義一個成本函數。

2-4 成本函數


損失函數僅適用於單個訓練集。成本函數為m個資料量的損失函數之平均。
因此訓練時會尋找參數w和b,以最小化編寫總體成本函數J。

2-6 梯度下降
要找到合適的參數w與b,先將其初始化成某個值。(零或隨機初始化)
隨後不停迭代至最接近目標點。
※如果實值函數J(x)在點w處可微且有定義,那麼函數J(x)在w點沿著梯度相反的方向-J(w)下降最快。

舉w來說,尋找最接近需要不斷更新參數。
因此我們定義:
其中α為學習率。

2-7、2-8 導數簡介
函數的導數表示函數的斜率,函數的斜率在函數的不同點上可以不同。
只有直線的斜率是相同的。

2-11 計算導數(一個樣本的梯度下降)


2-12 計算導數(m個樣本的梯度下降)
過程無異。只多要加m次,最後再除m平均,結果一致。

2-14 向量化(一個樣本)
編寫神經網路迴圈越少越好,使用numpy向量化會更有效率。
非向量化 向量化

2-17 向量化(m個樣本)
與一個大同小異,不過多個無法完全避免使用迴圈。

2-19、2-20 Python向量介紹
盡量不要使用 a = np.random.randn(5) 有產生bug的可能
要用請明確訂出行列 a = np.random.randn(5, 1)

3-1 神經網路

3-3 神經網路計算(一個樣本)
左邊與先前一樣的計算,只是這要重複很多次。
▲ 用向量化來表示這一個過程,寫成矩陣形式。


輸入x:Hidden Layer 回歸計算是上兩行;Output Layer 回歸計算是下兩行。

3-4、3-5 神經網路計算(多個樣本向量化)
要向量化我們先把訓練集x寫成矩陣的形式,也就是把小向量x堆疊到矩陣各列,構成X矩陣。對於z和a也做同樣的事情,變成Z和A矩陣。


▲ 用向量化來表示多個樣本的矩陣運算。

3-7、3-9 激勵函數
※tanhx是雙曲正切函數,相比於σ函數,它介於-1到1之間,平均值為0。而σ函數的平均值為0.5。
在此之前激勵函數都是使用σ(z(x)),現在改使用g(z(x))(tanh(z(x)))。

因為tanhx的平均值為0,所以幾乎任何場景下,它的結果都比σ函數好。但若是在輸出的預測值ŷ,我們希望輸出的預測值介於0和1之間,因此使用σ函數。

不過這兩個函數皆有一個缺點,當z極大或極小時,z的變化量趨近於0,這在於我們求梯度的時候效果非常糟糕,會拖慢學習進度。

還有一個ReLU函數,為的就是應對這個問題,通常我們都會使用ReLU函數作為神經網絡的激勵函數。缺點就是如果z是負數,導數為0。在實踐中使用ReLU函數,相比於tanh函數與σ函數,因為它沒有斜率趨近於0的時候,學習效率會高很多。


3-8 為什麼需要非線性激勵函數?
不引入非線性性,則永遠只能在線性性裡面打轉,沒有意義。

3-10 神經網絡的梯度下降
左邊是正向運算;右邊是逆向運算。
右邊有一句 np.sum(dz, axis=1, keepdims=True)...
其中axis=1表示的是要水平相加求和,keepdims=True表示保證輸出的是矩陣。


其中g'(z)表示的是Hidden Layer激勵函數的導數。

3-12 反向運算推倒

3-13 隨機初始化
當您更改神經網絡時,隨機初始化權重很重要。
對於邏輯回歸,可以將權重初始化為零。
但是對於將參數的權重初始化為全零然後應用梯度下降的神經網絡,它將無法正常工作。
因為在訓練的每一次迭代後,你的兩個隱藏單元仍在計算完全相同的函數。
在訓練期間需要破壞所謂的對稱性

    

若W^[1]較大,則得到的z^[1]也較大,對於如σ或tanh等斜率隨輸入值增加而快速衰減的激勵函數,輸入值很大,則其對應的斜率會很小,梯度下降的速度會很慢,學習也會很慢。
使用一個較小的縮放係數令W具有較小的初始值,可以保證初始學習速度不會過慢。

偏置參數b不存在對稱問題,不需要對稱性破壞(Symmetric Breaking)而能初始化為0。

4-4 深度神經網路

單個樣本正向運算第l   層:
多個樣本正向運算第l   層:
不過無法向量化整個 L 層網路的計算,需逐層計算各層的激勵值,作為下一層的輸入。

4-6 構造區塊
通常會暫存Z^[l]的結果,直接用於後續的逆向傳播。
進行逆向傳播時,輸入為da^[l]及暫存的Z^[l];輸出為da^[l−1]及參數的梯度dW^[l]、db^[l]。
以上圖為基礎,神經網路抽象圖如下。


4-7 傳播運算
【正向】單/多個樣本
輸入:a^[l−1]
輸出:a^[l]、暫存z^[l]
【逆向】單/多個樣本
輸入:da^[l]、z^[l]
輸出:da^[l−1]、dW^[l]、db^[l]

若損失函數如下,則輸出如下下:

4-9 參數與超級參數
訓練神經網絡時涉及到的參數除了模型本身的參數 W 與 b,還有其他一些參數,如學習率 α、迭代次數、隱藏層數量 L、隱藏單元數量 n^[l]、激勵函數等,這些參數並不直接作用於預測,但它們會在一定程度上控制或影響學習過程和結果,這些稱為超級參數(Hyperparameter)

除了上面提到的,在訓練神經網絡的過程中涉及的超級參數還有很多,比如動量(Momentum)項、小批次大小(Minibatch Size)、正規化(Regularization)形式等等。

由於涉及到眾多的超級參數,通常很難在一開始就找到最佳的選擇,往往需要嘗試各種選擇和取值,進行比較。應用機器學習是一個非常依賴經驗的過程,比如對某個超級參數的取值有了一個猜想,那麼接下來就要把它實現出來,進行實驗,根據實驗結果對超參數進行必要的調整,再進行實現···如此循環。

另一方面,即便找到了較好的超級參數,隨著外界條件的變化,比如計算環境的變化,原有的超級參數不再適用於新的環境,無法達到原來的性能。所以通常每隔一段時間,比如幾個月或幾年,需要重新嘗試各種不同的超級參數,檢查是否有新的更好的參數選擇。


※部分4-*圖片與內容取自nex3z's blog
※教材為Andrew Ng的Deep Learning課程。
※擷取至 topic1 week1-4。

送禮物贊助創作者 !
0
留言

創作回應

蔥蔥
頭好痛[e18]
2019-10-07 10:49:00
雷羊羊
2019-10-08 20:18:24

更多創作