1. 程式人生 > >deeplearning.ai 神經網絡和深度學習 week4 聽課筆記

deeplearning.ai 神經網絡和深度學習 week4 聽課筆記

循環 檢測器 最簡 網絡檢測 ear 映射 句子 nbsp 等等

1. 計算深度神經網絡的時候,盡量向量化數據,不要用for循環。唯一用for循環的地方是依次在每一層做計算。

2. 最常用的檢查代碼是否有錯的方法是檢查算法中矩陣的維度。

正向傳播:

對於單個樣本,第i層網絡 z[i] = W[i]a[i-1] + b[i]

a[i] = f[i](z[i])。

其中,z[i]是n[i]*1,W[i]是n[i]*n[i-1],a[i-1]是n[i-1]*1,b[i]是n[i]*1。

對於向量化後的所有樣本,第i層網絡 Z[i]

= W[i]A[i-1] + b[i]

A[i] = f[i](Z[i])。

其中,Z[i]是n[i]*m,W[i]是n[i]*n[i-1],A[i-1]是n[i-1]*m,b[i]是n[i]*1,python運算過程中會把b[i]broadcasting成n[i]*m,m是訓練集樣本數量。

反向傳播:

對於單個樣本,第i層網絡 dz[i] = da[i]*f[i]‘(z[i]),*是對應元素相乘。

dw[i]

=dz[i]a[i-1]

db[i]=dz[i]

da[i-1]=W[i]Tdz[i]

對於向量化後的所有樣本,第i層網絡 dZ[i] = dA[i]*f[i]‘(Z[i]),*是對應元素相乘。

dW[i]=1/m*dZ[i]A[i-1]T

db[i]=1/m*np.sum(dZ[i]

, axis=1, keepdims=True)

dA[i-1]=W[i]TdZ[i]

3. 深度神經網絡的直觀解釋:比如做人臉檢測的時候,可以把淺層的神經網絡當成是邊緣檢測器,不同的神經元檢測不同方向的邊緣在圖片的位置。中層的神經網絡是把第一層提取出的不同位置的不同方向的邊緣特征組合成面部的不同部分,比如有的是眼睛,有的是鼻子。深層的神經網絡把這些部分放在一起組合成不同的人臉。對於語音識別,也是類似,淺層的神經網絡檢測低層次的波形特征,比如音調高低,白噪聲還是噝噝的聲音,中層的神經網絡可以把波形特征組合成音位(phoneme),識別基本的聲音單元,深層的神經網絡可以把識別單詞,再深層次的神經網絡可以識別句子。

另外一種深度神經網絡有效性的解釋來源於電路理論,如果使用樹形一層層堆疊簡單的操作,那麽最終實現復雜功能需要的元器件數量是O(logn),而如果只允許使用淺層網絡,則需要O(2n)的元器件。

NG說還有一個原因讓深度神經網絡很迷人是名字取得好。。。。。。“深度”!一聽就很酷炫。但帶來的問題是人會很按照字面意思鉆牛角尖非要用很深的網絡,但實際上,NG自己在思考問題的時候,還是從最簡單的模型比如Logistic回歸入手,然後試試一兩個隱藏層,把隱藏層的層數當成超參數一樣去調試。

4. NG說即使他做機器學習很多年了,但是依舊經常搞不明白為什麽算法就可以工作,會很驚訝結果這麽好。實際算法的復雜性來源於數據,而不是寫的代碼。

5. 超參數:學習率,梯度下降循環的次數,隱藏層數量,每一層隱藏神經元的數量,激活函數的類型。其他超參數包括:momentum,mini batch的大小,正則化參數的形式,等等。

深度學習領域非常基於經驗,基於經驗的意思就是不斷試參數直到合適。。。針對不同的模型最優的超參數值是不同的,所以必須針對具體問題多試,甚至針對相同的問題,超參數的最優值也會變化,比如廣告點擊率,所以即使模型建好了跑通了,也要隔一段時間嘗試一下新的超參數。

6. NG覺得深度學習和人類大腦相關性不大,因為大腦神經元的機制比神經網絡算法復雜的多的多的多。深度學習的確是一種很好的方法來找到輸入和輸出之間復雜映射關系。

deeplearning.ai 神經網絡和深度學習 week4 聽課筆記