吳恩達第一課第三周隨筆
2.1 雙層神經網絡
圖 1
圖 2
圖1是一個雙層網絡模型,實際上有三層,但是通常把輸入層給忽略掉 稱為輸入層
註意層了,圖1層有4個節點,圖2只要1個,
所以圖1 應該是一個(4,3)的矩陣,圖2的是一個(1,3)的矩陣
ps:堅持將前一層的特征的權重做成一列放入矩陣中,所以每一個都是(3,1)的列向量
以前一直都是使用,np.dot(.T,X),這裏也同樣也沿用這個設定
所以,所以 是一個(4,3)矩陣
,b是一個[4,1]的列向量,要生成矩陣節點在前
圖1的正向傳播算法:
A,Z的橫向表示第幾個樣本,豎向表示第幾個節點
2.2理解m個樣本向量化
重點在於np.dot這個函數,向量的點積運算
C=np.dot(A,B)
這是點積運算的定義(下面的W值得是)
W是一個(4,3)的矩陣,表示總共有 4行3個特征權重 組成的權重矩陣
X是一個(3,m)的矩陣,表示有m個樣本,每個樣本有3個特征
觀察z的計算形成,x的每一個特征與對應的權重相乘並累加
3個 x特征 權重相乘並累加成一個值,這個值就是
由於有4行這樣的權重值,每一行的權重值都與第i個樣本的3個特征相乘就形成了一個4為列向量如
最終W與X點積,形成一個(4,m)的矩陣。至於+b就是numpy的廣播功能了
註意b是一個(4,1)的列向量,每一個節點都有對應的b值 即
2.3 更多的激活函數
優點:平均值接近0,比起sigmod接近0.5的平均值,接近0,更易於下一層的計算
tanh各方面吊打sigmod,除了作為二分分類輸出層時,才會使用sigmod作為作為激活函數
缺點:兩個函數,都在Z很大的時候,梯度都接近0,這樣會拖慢學習速率。梯度下降與學習率以及梯度有關。
另外一個激活函數:relu函數 np.maximum(0,z), 比較0,和Z和大小,取大的
特點:
1. 在Z>0時,梯度永遠為1,
2. 在Z=0時,梯度為0,不過,你可以設置當Z=0時,梯度為多少
3. 缺點:當Z為負數時,順帶的也把梯度變成0了,不好使用梯度下降的方法
這個激活函數很強大,就是這麽強,當不知道選用什麽激活函數時,就選這個reluc函數(修正線性函數)
帶泄露的relu函數 :np.maximum(0.01Z,Z),他會在負值有一個平緩的線條,讓其也有梯度
為了表示清楚,選用的是0.1。 0.01是經驗總結出來的一個參數
建立神經網絡有一系列東西需要選擇,如隱藏單元個數,激活函數,初始化
這些東西全靠經驗選擇出的,選擇困難戶
2.4 非線性激活函數的必要性
如果去掉非線性激活函數,那麽你的輸出與輸入還是一個成線性關系,那麽你後面的無論有多少隱藏層,都會等價於只做了一個線性輸出。
在輸出層會有可能需要做線性變換,才會用到線性激活函數。
中間隱藏層,如果需要做一些伸縮變化,也會用到線性激活函數(這種情況很復雜)
2.5 激活函數的導數
註釋:
記住:a=tanh(z) a‘=1-a2
Relu函數以及帶泄露的Relu函數:記住在z=0處是沒有導數的,因為左右的偏導不相等,需要自己定義
2.6 神經網絡下的梯度下降
正反向傳播公式計算
正向請翻上面
假設這是一個二分分類的雙層神經網絡
註意點:
- 是一個列向量,在橫向累加,所以axis=1,為了確保累加之後不會出現一個秩為1的數組,所以調用keepdims=True
- 計算時,與是對應為相乘,不再是點積了
是一個(1,4)轉置之後是一個(4,1),是一個(1,m),點積之後變成(4,m)
是一個(4,m)矩陣,對應位相乘。這是從矩陣形狀來看
dZ_1的計算並不需要累加,且不需要累加到m,然後除以m
還剩下一個隨機初始化權重,留到明天學習
吳恩達第一課第三周隨筆