吴恩达 深度学习
第一章
數據規模驅動了深度學習的發展
圖中的數據指的是帶有標簽的數據
除了數據規模,還有計算能力的提升和算法的創新(sigmoid,RElu)
第二章 LR實現
2.1 識別貓咪
2.2 邏輯回歸(Logistic Regression, LR)
輸入x,得到概率值y
由于y需要在[0, 1],如果簡單地進行線性回歸處理,wT + b有時候會大于一或為負數
為避免上述情況,所以將wT + b輸入sigmoid函數中,將其對應到[0, 1]
3. 關于w和b的符號約定
2.3 LR cost function
Loss(error) function 單個訓練樣本上的表現
一般不用L(y^,y)=12(y^?y)2\mathscr{L}(\hat{y}, y)=\frac{1}{2}(\hat{y}-y)^{2}L(y^?,y)=21?(y^??y)2這樣的算是函數
因為在梯度下降時,這種損失函數很容易產生很多局部最優解
L(y^,y)=?(ylog?y^+(1?y)log?(1?y^))\mathscr{L}(\hat{y}, y)=-(y \log \hat{y}+(1-y) \log (1-\hat{y}))L(y^?,y)=?(ylogy^?+(1?y)log(1?y^?))是一個較好的損失函數(logloss)
注意y^\hat{y}y^?也是屬于零一之間
Cost function 全體訓練樣本上的表現
梯度下降
logloss是一個convex function(凸函數)可以找到局部最優解
使用梯度下降計算局部最優解
2.4 LR中單個樣本的梯度下降
2.5 m個樣本的梯度下降
分別對m個樣本的w1,w2,b求偏導,取均值
采用向量化(vectorization)的數據形式來代替顯式for循環可以保證處理數據的效率
2.6 向量化(vectorization)
向量化編程和非向量化編程的對比
向量化編程速度是非向量化編程的近480倍
所以盡量避免使用for循環
一些其他向量化的例子
2.7 向量化LR
2.8 向量化LR的梯度輸出
2.9 python中的廣播
Exapmle1
注意 * 和np.dot()是不一樣的,np.dot()才是平時說的矩陣相乘,乘號只是對應位置上相乘
Exapmle2
總結
第三章 神經網絡
3.1 約定表達
3.2 激活函數
a=tanh(z)a = tanh(z)a=tanh(z)
a=tanh?(z)=ez?e?zez+e?za=\tanh (z)=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}}a=tanh(z)=ez+e?zez?e?z?
因為tanh可以讓輸出的均值更接近零,從而讓下一層的學習更加方便。所以tanh通常能得到比sigmoid更好的學習效果
除了二分類的輸出用sigmoid,其他情況一般使用tanh更好
激活函數上的上標表示在第幾層
sigmoid和tanh的缺點
當z很大或很小時,激活函數的斜率趨于0,從而會導致模型無法收斂
RElU a=max(0,z)a = max(0, z)a=max(0,z)
ReLU雖然在原點不可微,但在實際使用中很少會有z = 0求導的情況,或者可以在z = 0時給導數賦值1或是0
LEAKY ReLU a=max(0.01z,z)a = max(0.01z, z)a=max(0.01z,z)
一般用ReLU而很少使用tanh或者sigmoid,因為ReLU不會因為z過大或過小而影響學習速率
3.3 為什么神經網絡需要非線性的激活函數
因為沒有經過非線性的激活函數處理,從輸入到輸出無論有多少隱藏層,只不過是把輸入重新組合了一遍
最后化簡實際和一層隱藏層的效果是一樣的,那么多個隱藏層就沒有意義
除了輸出層,其他層一般都是使用非線性的激活函數
3.4 正向傳播與反向傳播
3.5 隨機初始化
同一層的神經元存在對稱性,如果將同一層的所有神經元的參數都初始化為零,則訓練后該層所有神經元都是相同的
所以需要隨機初始化
通常將參數初始化為較小的值,因為如果初始化的參數較大,得到的z也較大。在使用sigmoid或者tanh時對應激活函數的梯度就會很小。
第四章 深層神經網絡
4.1 需要用到的符號
4.2 前向和反向傳播
反向傳播的單個樣本和m個樣本的向量形式
三層神經網絡示意圖
4.3 各矩陣的維數
結論:w[l] = (n[l], n[l-1])
b[l] = (n[l], 1)
n為隱藏單元數
輸入x,輸出z都是列向量,圖中x1和x2組成一個向量,多個輸出是進列左右擴展
m個樣本的向量形式
在第二維上進行擴展
4.4 參數和超參數
參數(模型學習):w, b
超參數(人為調節): 學習率α,迭代次數iterations,隱藏層L,隱藏單元數n[1], n[2], 激活函數的選擇
4.5 Building your Deep Neural Network - Step by Step
initialize_parameters_deep(layer_dims)
返回一個含有2 * L個參數的字典
linear_forward(A, W, b)
進行線性計算Z = np.dot(W, A) + b,得到Z
將三個參數(當前層的W,b以及上一層傳進來的A)放入cache中
返回Z和cache
linear_activation_forward(A_prev, W, b, activation)
調用linear_forward(A, W, b) 得到Z和cache
將Z放入激活函數中,得到A和cache,cache是輸入Z
將linear_forward得到的linear_cache(包含preA,W,b)和激活函數返回的activation_cache(Z)放入一個元組cache中
返回經過激活函數得到的A和cahce
前向傳播model
由L - 1層relu和1層sigmoid構成
先經過一個L層的for循環,通過linear_activation_forward(A_prev, W, b, activation = ‘relu’)得到A和cache。A用于下一層的輸入,cache保存在caches中。
最后經過sigmoid激活函數,得到最終的輸出結果AL和cache,同樣將cache加入caches中。
計算損失函數
用logloss計算AL和Y的損失
反向傳播
linear_backward(dZ, cache)
利用激活函數反向傳過來的dZ和cache中的A_pre, W, b計算dW, db, dA
linear_activation_backward(dA, cache, activation)
先從sigmoid_backward或是relu_backward將后一層的dA轉換為dZ
在調用linear_backward(dZ, cache)計算得到dW, db, dA
對logloss求導帶入AL和Y的到dAL
在將dAL傳入linear_activation_backward(dA, cache, activation = ‘sigmoid’)中得到dW, db, dA
將當前層算得的dW, db, dA存入字典grads中
再通過L - 1次for進行反向傳播,重復調用linear_activation_backward(dA, cache, activation = ‘relu’),并保存計算得到的梯度在grads中
用L層for通過保存的grads來更新parameters中的參數
第五章
5. 1 數據劃分
5.2 偏差和方差(bias and variance)
偏差是預測值和標簽值的偏差,過大則欠擬合
方差是預測值的方差,過大則過擬合
在訓練模型時
5.3 正則化
在損失函數J后加上L2范數
b可以省略,因為w是一個高維的參數向量,足以表達高偏差問題
在損失函數J后加上L1范數
L2比L1更常用
L2范數在多個參數下變成Frobenius范數,即矩陣各個位置的數的平方之和
將加上L2范數的損失函數J對參數W求導得到dW,在用dW更新W時,相當于對原有的W乘了一個(1 - αλ / m)再減去原有梯度下降的部分
相當于減小了原有參數W的權重,從而降低過擬合
5.4 為什么正則化可以減小過擬合
如果λ足夠大,模型為了減小損失J,就會把W設置的很小,接近0
如果將很多W都設置為接近0,那么相當于這些神經元對輸出值的影響會很小,從而消除了部分神經元對輸出值的影響。
由此簡化了神經網絡的結構,使得模型從高方差(variance)向高偏差轉移(bias)。但存在一個中間值使得模型處于“just right”的狀態。
副作用
如果λ設置的很大,那么W會很小,使得Z = WA + b也會很小
但在一些激活函數中,如tanh。Z在0附近的區間幾乎是線性的。我們知道如果網絡中的變換都是線性的,整個網絡也會呈線性,那么會非常不適合復雜模型的構建。
5.5 dropout正則化
對于每一層,隨機舍棄一部分神經元,最后的到一個精簡的神經網絡用于訓練。對多個樣本進行多次舍棄,多次訓練。
Inverted dropout(目前最常用)
先隨機生成一個和輸出A形狀相同的0-1矩陣D,再將A與D的的各個元素相乘
從而達到舍棄部分結果的目的
假設僅保留keep-prob=0.8的參數,那么矩陣A在與矩陣D相乘后,各個元素都要除以keep-prob=0.8
因為要保持A的期望值不變,否則在測試階段平均值會變得越來越復雜(因為測試階段不需要進行dropout,這樣可以保持訓練和測試時輸出結果的一致性)
dropout和L2正則化都有壓縮權重的作用,dropout是舍棄部分權重參數.L2是壓縮整個W
使用dropout的缺點是很難去檢查梯度下降的過程
其他正則化方法 - Adam爆內存直接沒了…沒保存
第七章
7.1 常見需要調整的超參數
α > β,hidden units,mini-batch size>layers,learing rate delay
例:為α選擇適合的值
假如要在0.0001~1之間選取一個學習率,使用均勻分布那么在0.0001-0.1之間的概率是10%,0.1-1之間的概率是90%,這顯然是不合理的
更合理的選擇方法如下圖:
在指數函數上選擇
例:為β選擇適合的值
用上述方法在指數級別上選擇1-β
7.2 Batch Normalization
和歸一化輸入類似,將訓練時的中間參數A進行歸一化后在輸入下一層
一般不是歸一化A,而是Z。因為一般先進行BN,在傳入激活函數
但是有時不希望歸一化處理的Z的均值和方差為0和1,因為這樣會不利于一些激活函數的處理
所以引入兩個新的變量γ和β
總之,目的是使得各層的所有隱藏單元的輸出Z都有固定的均值和方差
具體流程
注意每一次的γ和β可以不一樣
總結
- 上一篇: JavaScript函数思维导图
- 下一篇: iOS开发——AVPlayer自定义播放