ETH官方钱包

切換
舊版
前往
大廳
主題

Deep Learning Note (Topic_1)

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


序論

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

介紹

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


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

2-4 成本函數(shù)


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

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

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

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

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


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

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

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

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

3-1 神經網(wǎng)路

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


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

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


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

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

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

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

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


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

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


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

3-12 反向運算推倒

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

    

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

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

4-4 深度神經網(wǎng)路

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

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


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

若損失函數(shù)如下,則輸出如下下:

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

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

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

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


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

送禮物贊助創(chuàng)作者 !
0
留言

創(chuàng)作回應

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

更多創(chuàng)作