第一週 深度學習概論
1.1 歡迎來到深度學習工程師微專業
將會學到什麼?
此順序的課程(專業)
- 1.神經網絡和深度學習
- 2.改進的深層神經網絡:超參數整定,正則化和優化
- 3.構建你的機器學習項目
- 4.卷積神經網絡
- 5.自然語言處理:建立序列模型
1.2 什麼是神經網絡?
什麼是神經網絡
它是一個強大的學習算法,靈感來自大腦的工作原理。
例子1-單神經網絡
給定房地產市場上房屋大小的數據,你需要擬合一個函數來預測它們的價格。這是一個線性迴歸問題,因爲價格作爲尺寸的函數是一個連續的產出。
我們知道價格永遠不會是負的,所以我們創建一個稱爲修正線性單位(Relu)的函數,它從零開始。
輸入是房屋的尺寸(x)
輸出是價格(y)
“神經元”使用了Relu激活函數(blue line)。
第二週 神經網絡基礎
2.1 二分分類
神經網絡的計算過程可以分爲前向傳播和反向傳播。
logistic迴歸是一個用於二分分類的算法。
在計算機中,一張圖片可以以RGB矩陣的形式存儲。
可以定義一個特徵向量x。
x=[255,231,42,22,...,255,134,202,22,...,255,134,93,22]T
x=[R...G...B]T
以表示這張圖片。
nx=64∗64∗3=12288,來表示輸入特徵向量x的維度。
符號約定:
- (x,y):表示一個單獨的樣本
- x是nx維的特徵向量
- y的值爲0或者1
- 訓練集由m個訓練樣本構成,(x(1),y(1))表示樣本1的輸入輸出。(x(2),y(2))表示樣本2的輸入輸出。(x(m),y(m))表示樣本m的輸入輸出。
- m表示訓練的樣本數
- mtrain表示訓練樣本數,mtest表示測試樣本數。
- 定義一個X表示訓練集x(1),x(2),...x(m)
X=⎣⎢⎢⎢⎢⎡∣∣x(1)∣∣∣∣x(2)∣∣...∣∣x(m)∣∣⎦⎥⎥⎥⎥⎤
X∈Rnx∗m,X.shape=(nx,m)
- 定義一個Y表示訓練集y(1),y(2),...y(m)
Y=[y(1)y(2)...y(m)]
Y∈R1∗m,Y.shape=(1,m)
2.2 logistic迴歸
Logistic Regression
logistic迴歸是一種用於有監督學習問題的學習算法,當輸出y爲0或1時。logistic迴歸的目標是使預測值與訓練數據之間的誤差最小。
例子:貓or不是貓
給定由特徵向量x表示的圖像,該算法將評估一隻貓出現在圖像中的概率。
Given x, y^=P(y=1∣x), where 0≤y^≤1
logistic迴歸中使用的參數是:
- 輸入特徵向量:x∈Rnx,其中nx是特徵數
- 訓練標籤:y∈0,1
- 權重:w∈Rnx,其中nx是單個樣本的特徵數
- 閾值:b∈R
- 輸出:y^=σ(wTx+b),y^爲預測值。
- sigmoid函數:s=σ(wTx+b)=σ(z)=1+e−z1
(wTx+b)是線性函數(ax+b),但由於我們在[0,1]之間尋找一個概率約束,所以使用了sigmoid函數。如上圖所示,函數在[0,1]之間有界。
從圖上觀察:
- 如果z無窮大,σ(z)=1
- 如果z很小或者負無窮數,σ(z)=0
- 如果z=0,σ(z)=0.5
2.3 logistic迴歸損失函數
邏輯迴歸:成本函數
爲了訓練參數w和b,我們需要定義一個成本函數。
簡要回顧:
y^(i)=σ(wTx(i)+b), where σ(z(i))=1+e−z(i)1
x(i)是第i個訓練樣本
Given {(x(1),y(1)),...,(x(m),y(m))},我們希望y^(1)≈y(i)
損失函數
損失函數測量預測值(y^(i))和期望輸出(y(i))之間的差異。
換句話說,loss函數計算單個訓練示例的損失值。
不好的損失函數:
L(y^(i),y(i))=21(y^(i)−y(i))2
好的損失函數
L(y^(i),y(i))=−(y(i)log(y^(i))+(1−y(i))log(1−y^(i)))
- if y^=1: L(y^(i),y(i))=−log(y^(i)) where log(y^(i)) and y^(i) should be closed to 1.
- if y^=0: L(y^(i),y(i))=−log(1−y^(i)) where log(1−y^(i)) and y^(i) should be closed to 0.
總之原則是使得損失函數最小。
那麼當y=1時,要使得損失函數最小,那麼y^必定會接近於1,所以會選擇下面的損失函數。
當y=0時,要使得損失函數最小,那麼y^必定會接近於0,所以會選擇下面的損失函數。
成本函數
成本函數是整個訓練集損失函數的平均值。
我們要找到使總體成本函數最小的參數w和b。
J(w,b)=m1i=1∑mL(y^(i),y(i))=−m1i=1∑m[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]
2.4 梯度下降法
通過梯度下降發法找到w, b,使得J(w,b)最小。
重複
w:=w−αdwdJ(w,b)
b:=b−αdbdJ(w,b)
2.5 導數
f(a)=3a,f′(a)=3。
2.6 更多導數的例子
f(a)=a2, f′(a)=2a
f(a)=a3, f′(a)=3a2
2.7 計算圖
J(a,b,c)=3(a+bc)
令
⎩⎪⎨⎪⎧uvJ===bca+u3v
2.8 計算圖的導數計算
導數的鏈式法則
dvdJ=3
dadJ=dvdJdadv
dadv=1
通常在代碼中使用da表示dadv。
2.9 logistic迴歸中的梯度下降法
L(y^(i),y(i))=−(y(i)log(y^(i))+(1−y(i))log(1−y^(i)))
L(a,y)=−(yloga+(1−y)log(1−a))
L(a,y)=−yloga−(1−y)log(1−a)
求導
da
da=dadL(a,y)=−y∗aln21−(1−y)(1−a)ln21∗(−1)
=−aln2y+(1−a)(ln2)1−y
=ln21(−ay+1−a1−y)
da/dz
sigmoid函數:
a=σ(wTx+b)=σ(z)=1+e−z1
求導
dzda=(1+e−z)21′(1+e−z)−1(1+e−z)′
=(1+e−z)2−(−z)′(e−z)
=(1+e−z)2e−z
a=1+e−z1
1−a=1+e−z1+e−z−1+e−z1
=1+e−ze−z
a(1−a)=(1+e−z)2e−z
所以
dzda=a(1−a)
dz
dz=dzdL
=dzdL(a,y)
=dadL∗dzda
=(−ay+1−a1−y)∗a(1−a)
=a−y
dw1dL=dw1=x1∗dz
dw2dL=dw2=x2∗dz
db=dz
總結
⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧dadzdw1dw2db=====(−ay+1−a1−y)a−yx1dzx2dzdz
梯度下降
⎩⎪⎨⎪⎧w1w2b:=:=:=w1−αdw1w2−αdw2b−αdb
2.10 m個樣本的梯度下降
J(w,b)=m1i=1∑mL(y^(i),y(i))=−m1i=1∑m[y(i)log(y^(i))+(1−y(i))log(1−y^(i))]
2.11 向量化
使用Numpy
的內置函數而不是for 循環去做做向量的點積。
2.12 向量化的更多例子
略
第三週
3.1 神經網絡概覽
使用(1)、(2)、(3)…(n)代表樣本1、2、3…n的數據。
使用[1]、[2]、[3]…[n]代表單個神經網絡,1、2、3…n層的數據。
3.2 神經網絡表示
w.shape=(4, 3)
w.shape=(4, 3)
x.shape = (3, 1)
3.3 計算神經網絡的輸出
z1[1]表示神經網絡第1層的的第一個節點的z。
3.8 激活函數的導數
if g(z)=1+e−z1:
g′(z)=1+e−z1
=dzdg(z)
=(1+e−z)21′(1+e−z)−1(1+e−z)′
=(1+e−z)2−(−z)′(e−z)
=(1+e−z)2e−z
=1+e−z1(1−1+e−z1)
=g(z)(1−g(z))
or
=a(1−a)
if g(z)=tanh(z):
=ez+e−zez−e−z
g′(z)=1−(1−tanh(z))2
=1−g(z)2
=1−a2
if g(z)=max(0,z):
g′(z)={01if z<0if z≥0
if g(z)=max(0.01z,z):
g′(z)={0.011if z<0if z≥0
激活函數的導數總結
名稱 |
公式 |
導數 |
Sigmoid |
a=g(z)=1+e−z1 |
a(a−1) |
Tanh |
a=g(z)=ez+e−zez−e−z |
1−a2 |
ReLU |
a=g(z)=max(0,z) |
g′(z)={01if z<0if z≥0 |
Leaky ReLU |
a=g(z)=max(0.01z,z) |
g′(z)={0.011if z<0if z≥0 |
W.shape = ()
dz.shape=(1, 1)
a.shape=(n1, 1)
a.T.shape=(1, n1)
dz*a.T.shape=(1, n1)