吴恩达DeepLearningCourse1-神经网络和深度学习
計劃在9月4日(截止日期)之前完成DeepLearning的所有課程學習。每個課程對應一篇博客,根據學習進度隨時更新。
參考課程
文章目錄
- (一)深度學習概論
- 結構化數據和非結構化數據
- 提高效果的方法
- (二)神經網絡基礎
- 二分分類
- Logistic回歸
- 梯度下降法
- 計算圖、計算圖的導數計算
- Logistic回歸中的梯度下降法
- 向量化
- Python廣播
- (三)淺層神經網絡
- 計算神經網絡的輸出
- 多樣本向量化
- 激活函數
- 隨機初始化
- (四)深層神經網絡
- 深層網絡中的前向傳播
- 深層網絡中的反向傳播
- 核對矩陣的維數、深層神經網絡的基本單元
- 超參數
(一)深度學習概論
結構化數據和非結構化數據
結構化數據是已經清楚定義并組織的數據,如數據庫。
非結構化數據不具有結構化特征,如圖片、音頻等。
提高效果的方法
-訓練更大的神經網絡
-投入更大規模的標記數據
(二)神經網絡基礎
二分分類
舉例:識別輸入圖像x中有/沒有貓,返回y(有為1,無為0)
圖片在計算機中的存儲形式
使用向量x存儲矩陣中的三組數據,組織成nx1的向量,并將每個向量作為一列組織成整體輸入X(一種約定),輸出Y則為1xm的向量。
Logistic回歸
在二分分類問題中,得到的結果是輸入符合要求的期望,因此需要介于0和1之間。采用σ函數滿足該限制。
Loss Function:考察單個樣本數據和實際結果的接近程度。選擇該形式是因為其直觀上是凸函數,有唯一極小值,避免非凸函數的多個極值情況,便于求解。
Cost Function:考察樣本總體對實際結果的擬合效果。
梯度下降法
初始化w和b,每次選擇梯度最大的方向前進,或者停在最終結果處,由于成本函數是凸函數,所以存在唯一極小值。
其中,α代表學習率,即前進步長。
計算圖、計算圖的導數計算
導數計算采用鏈式法則從右向左進行,即dJ/da = (dJ/du)*(du/da)
單個訓練樣本時同理操作。
Logistic回歸中的梯度下降法
對代價函數的每個累加項對應求導即可得到偏導值。
圖中的J,dw1,dw2,db是累加項,所以最終要除以m。而zi,ai,dzi對應每個訓練樣本的值。求累加值增量時,采用4中的鏈式法則的思想。
向量化
向量化避免了在程序中顯式使用for循環,有效減少運行時間。
例子中的操作方法:
import numpy
a = numpy.random.rand(1000000)
b = numpy.random.rand(1000000)
c= numpy.dot(a, b)
該操作比for循環計算并累加效率高得多。所以每次需要for循環時,查看numpy中是否有可調用的內置函數,避免使用for循環。
根據以上例子,我理解的向量化是用向量的形式,組織每輪循環中得到的結果,利用numpy內置函數高效地計算出矩陣相乘的結果。
逆向傳播時通過向量化消除了兩層的for循環,即在一次步進中沒有循環。但如果想要多次迭代,還需在外層添加計數循環。
Python廣播
在矩陣元素的運算(區別于矩陣乘法)中,將規模較小的矩陣(其實是向量)進行若干次復制后,再對對應位置的元素進行運算。
使用assert保證矩陣是預期的形狀,如assert(a.shape==(3, 4))。調用reshape方法可以將矩陣保持期望形狀,如a = a.reshape(3, 3)。
(三)淺層神經網絡
計算神經網絡的輸出
以只有一個隱層的神經網絡為例。直觀上,多層的神經網絡是多個單層神經網絡的堆疊。
其中的每個節點都經過z = wTx + b, σ(z)的計算,如圖所示。
對0層到1層的計算進行向量化,根據如下公式:
多樣本向量化
將輸入樣本按列排列,進行向量化操作。此時對應A[i],在垂直方向,這個垂直索引對應于神經網絡中的不同節點。例如節點位于矩陣的最左上角對應于激活單元,它是位于第一個訓練樣本上的第一個隱藏單元。它的下一個值對應于第二個隱藏單元的激活值。當水平掃描,將從第一個訓練示例中從第一個隱藏的單元到第二個訓練樣本,第三個訓練樣本……
激活函數
通常tanh的表現優于sigmoid函數。但有例外情況:在二分類的問題中,對于輸出層,因為y的值是 0 或 1,所以想讓輸出的數值介于 0 和 1 之間,而不是在-1 和+1 之間。所以需要使用 sigmoid 激活函數。
對于上面的例子,可以在隱層使用tanh,輸出層使用sigmoid。
ReLU函數是最常用的。
如果不使用激活函數,那么多層的神經網絡本質上仍然是一層,此時的隱藏層是多余的。為了構建多層神經網絡,必須引入非線性的激活函數。
隨機初始化
將各層的w初始化為0,會導致正向傳播時的結果相同,從而導致反向傳播時的結果也相同,無法起到訓練的作用。
為此,應該把w的各個元素初始化為非0的較小的數。因為使用sigmoid或tanh激活函數時,若z過大或過小,會導致斜率趨近于0,降低運行效率。
b初始為0不會產生負面影響。
(四)深層神經網絡
深層網絡中的前向傳播
有一個隱藏層的神經網絡,就是一個兩層神經網絡。
當計算神經網絡的層數時,不算輸入層,只算隱藏層和輸出層。
前向傳播可以歸納為多次迭代:
𝑧[𝑙] = 𝑤[𝑙]𝑎[𝑙?1] + 𝑏[𝑙],
𝑎[𝑙] = 𝑔[𝑙](𝑧[𝑙])。
向量化實現過程可以寫成:
𝑍[𝑙] = 𝑊[𝑙]𝑎[𝑙?1] + 𝑏[𝑙],
𝐴[𝑙] = 𝑔[𝑙](𝑍[𝑙]) (𝐴[0] = 𝑋)
深層網絡中的反向傳播
反向傳播的步驟可以寫成:
(1)𝑑𝑧[𝑙] = 𝑑𝑎[𝑙]? 𝑔[𝑙]′(𝑧[𝑙])
(2)𝑑𝑤[𝑙] = 𝑑𝑧[𝑙]? 𝑎[𝑙?1]
(3)𝑑𝑏[𝑙] = 𝑑𝑧[𝑙]
(4)𝑑𝑎[𝑙?1] = 𝑤[𝑙]𝑇? 𝑑𝑧[𝑙]
(5)𝑑𝑧[𝑙] = 𝑤[𝑙+1]𝑇𝑑𝑧[𝑙+1]? 𝑔[𝑙]′(𝑧[𝑙])
式子(5)由式子(4)帶入式子(1)得到,前四個式子就可實現反向函數。
向量化實現過程可以寫成:
(6)𝑑𝑍[𝑙] = 𝑑𝐴[𝑙]? 𝑔[𝑙]′(𝑍[𝑙])
(7)𝑑𝑊[𝑙] =1/𝑚(𝑑𝑍[𝑙]? 𝐴[𝑙?1]𝑇)
(8)𝑑𝑏[𝑙] =1/𝑚(𝑛𝑝. 𝑠𝑢𝑚(𝑑𝑧[𝑙], 𝑎𝑥𝑖𝑠 = 1, 𝑘𝑒𝑒𝑝𝑑𝑖𝑚𝑠 = 𝑇𝑟𝑢𝑒))
(9)𝑑𝐴[𝑙?1] = 𝑊[𝑙]𝑇. 𝑑𝑍[𝑙]
核對矩陣的維數、深層神經網絡的基本單元
建議:使用assert確保矩陣維數符合預期。debug時復現各個矩陣維數。
超參數
指能控制參數的參數。如學習率、迭代次數、層數、每層神經元數等。
可以通過嘗試的方法確定超參數的選擇。
總結
以上是生活随笔為你收集整理的吴恩达DeepLearningCourse1-神经网络和深度学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 豌豆芽的功效与作用、禁忌和食用方法
- 下一篇: 山药皮的功效与作用、禁忌和食用方法