吳恩達深度學習筆記(23)-深層前向傳播和去bug核對維度

深層網絡中的前向傳播(Forward propagation in a Deep Network)

跟往常一樣,我們先來看對其中一個訓練樣本x如何應用前向傳播,之後討論向量化的版本。

第一層需要計算z^([1])=w^([1]) x+b^([1]),a^([1])=g^([1]) (z^([1]))(x可以看做a^([0]))

第二層需要計算z^([2])=w^([2]) a^([1])+b^([2]),a^([2])=g^([2]) (z^([2]))

以此類推,

第四層為z^([4])=w^([4]) a^([3])+b^([4]),a^([4])=g^([4]) (z^([4]))

前向傳播可以歸納為多次迭代z^([l])=w^([l]) a^([l-1])+b^([l]),a^([l])=g^([l]) (z^([l]))。

吳恩達深度學習筆記(23)-深層前向傳播和去bug核對維度

向量化實現過程可以寫成:

Z^([l])=W^([l]) a^([l-1])+b^([l]),A^([l])=g^([l]) (Z^([l])) (A^([0])=X)

這裡只能用一個顯式for循環,l從1到L,然後一層接著一層去計算。

核對矩陣的維數(Getting your matrix dimensions right)

當實現深度神經網絡的時候,其中一個我常用的檢查代碼是否有錯的方法就是拿出一張紙過一遍算法中矩陣的維數。這是避免代碼產生BUG,所做的其中一件非常重要的工作。

w的維度是(下一層的維數,前一層的維數),即w^([l]): (n^([l]),n^([l-1]));

b的維度是(下一層的維數,1),即:

b^([l]) : (n^([l]),1);

z^([l]),a^([l]): (n^([l]),1);

〖dw〗^([l])和w^([l])維度相同,〖db〗^([l])和b^([l])維度相同,且w和b向量化維度不變,但z,a以及x的維度會向量化後發生變化。

吳恩達深度學習筆記(23)-深層前向傳播和去bug核對維度

向量化後:

Z^([l])可以看成由每一個單獨的Z^([l])疊加而得到,Z^([l])=(z^([l][1]),z^([l][2]),z^([l][3]),…,z^([l][m])),

m為訓練集大小,所以Z^([l])的維度不再是(n^([l]),1),而是(n^([l]),m)。

A^([l]):(n^([l]),m),A^([0])=X=(n^([l]),m)

吳恩達深度學習筆記(23)-深層前向傳播和去bug核對維度

在你做深度神經網絡的反向傳播時,一定要確認所有的矩陣維數是前後一致的,可以大大提高代碼通過率。


分享到:


相關文章: