1. 程式人生 > >深度學習 -- 神經網路 3

深度學習 -- 神經網路 3

上一講介紹了2層神經網路,下面擴充套件開來,介紹通用L層神經網路

深層神經網路

構建神經網路的幾個重要步驟通過更加直觀的示意圖來表示,如下:

image.png-317.2kB

這就是深度神經網路的內部實現原理,通過多次迭代訓練後,最終得到一個模型,然後用此模型進行預測

在實現該網路之前,首先了解下面幾個重要的符號

  • Superscript [l][l] denotes a quantity associated with the lthl^{th} layer.
    • Example: a[L]a^{[L]} is the LthL^{th} layer activation. W[L]W^{[L]} and b[L]b^{[L]} are the LthL^{th} layer parameters.
  • Superscript (i)(i) denotes a quantity associated with the ithi^{th} example.
    • Example: x(i)x^{(i)} is the ithi^{th} training example.
  • Lowerscript ii denotes the ithi^{th} entry of a vector.
    • Example: ai[l]a^{[l]}_i denotes the ithi^{th} entry of the lthl^{th} layer’s activations).

1. 網路結構

image.png-67.2kB

深度學習 – 神經網路1中,我們的例項是判斷一張圖片是否為貓,當時的準確率為70%,那麼接下來我們繼續以此為例,用多層神經網路來提高它的準確率

輸入層:輸入單元數nxn_x = 12288 隱藏層:總層數為L,第ll層的隱藏單元數為n[l]n^{[l]},啟用函式採用ReLU 輸出層:輸出單元數nyn_y = 1,啟用函式仍然採用sigmoid

引數維度如下表所示:

**Layer ** **Shape of W** **Shape of b** **Activation** **Shape of Activation**
**Layer 1** $(n^{[1]},12288)$ $(n^{[1]},1)$ $Z^{[1]} = W^{[1]} X + b^{[1]} $ $(n^{[1]},209)$
**Layer 2** $(n^{[2]}, n^{[1]})$ $(n^{[2]},1)$ $Z^{[2]} = W^{[2]} A^{[1]} + b^{[2]}$ $(n^{[2]}, 209)$
$\vdots$ $\vdots$ $\vdots$ $\vdots$ $\vdots$
**Layer L-1** $(n^{[L-1]}, n^{[L-2]})$ $(n^{[L-1]}, 1)$ $Z^{[L-1]} = W^{[L-1]} A^{[L-2]} + b^{[L-1]}$ $(n^{[L-1]}, 209)$
**Layer L** $(n^{[L]}, n^{[L-1]})$ $(n^{[L]}, 1)$ $Z^{[L]} = W^{[L]} A^{[L-1]} + b^{[L]}$ $(n^{[L]}, 209)$

2. 實現過程

2.1 初始化引數

image.png-43kB 由於現在是L層,每層都有一套引數W[l]W^{[l]}b[l]b^{[l]},那麼我們就需要一個更加通用的函式,使得它能夠支援不同層數和不同的單元數,而層數和單元數都能夠簡單的通過引數來設定。initialize_parameters_deep(layer_dims),比如layer_dims = [5, 4, 3, 1],那麼就表示該神經網路一共4層(不包括輸入層),每層的單元數分別為5,4,3,1

關於這些引數初始化為多少合適,這個在後面的課程 改善神經網路 中再詳細介紹,在這裡引數W仍然為標準正態分佈隨機數*0.01,b為0

2.2 前向傳播

image.png-100.6kB 之前講過,一個隱藏單元實現兩個基本功能:線性部分和啟用部分。

線性部分很簡單,直接採用下面的公式:Z[l]=W[l]A[l1]+b[l]Z^{[l]} = W^{[l]}A^{[l-1]} +b^{[l]} 其中,輸入層表示為 A[0]=XA^{[0]} = X 該公式適用於神經網路的任何一層和任意數量的樣本。

啟用部分,也就是啟用函式的部分,這裡我們在隱藏層全部採用ReLU,輸出層採用sigmoid。A[l]=g(Z[l])=g(W[l]A[l1]+b[l])A^{[l]} = g(Z^{[l]}) = g(W^{[l]}A^{[l-1]} +b^{[l]}) 在這裡啟用函式 “g” 可以是sigmoid()或者relu()。

這裡需要注意的就是在隱藏層,啟用函式都為ReLU,實現上只是一個迴圈即可,但是對於最後一層的輸出層,它不在迴圈中,而是要單獨處理,因為它這裡採用的啟用函式式sigmoid。

2.3 計算cost

在這裡使用的cost函式J是交叉熵: 1mi=1m(y(i)log(a[L](i))+(1y(i))log(1a[L](i)))-\frac{1}{m} \sum\limits_{i = 1}^{m} (y^{(i)}\log\left(a^{[L] (i)}\right) + (1-y^{(i)})\log\left(1- a^{[L](i)}\right)) 這裡需要注意的就是在計算時要保持維度正確,對於該例,最終的J應該是一個1 x m的向量

2.4 反向傳播

image.png-106.5kB

反向傳播的目標就是得到損失函式LL對於每一層引數W和b的導數–>dW[l]dW^{[l]}, db[l]db^{[l]}

dW[l]=LW[l]=LA[L]A[L]Z[L]Z[L]A[L1]A[l]Z[l]Z[l]W[l] dW^{[l]} = \frac{\partial \mathcal{L} }{\partial W^{[l]}} = \frac{\partial \mathcal{L}} {\partial A^{[L]} } \frac{\partial A^{[L]} } {\partial Z^{[L]} } \frac{\partial Z^{[L]} } {\partial A^{[L-1]} } \cdots \frac{\partial A^{[l]} } {\partial Z^{[l]} } \frac{\partial Z^{[l]} } {\partial W^{[l]} }

image.png-30kB

計算過程如下:(通過正向傳播的公式:Z[l]=W[l]A[l1]+b[l]Z^{[l]} = W^{[l]} A^{[l-1]} + b^{[l]},可以推匯出第ll層引數的導數):

dW[l]=LW[l]=1mdZ[l]A[l1]T dW^{[l]} = \frac{\partial \mathcal{L} }{\partial W^{[l]}} = \frac{1}{m} dZ^{[l]} A^{[l-1] T} db[l]=Lb[l]=1mi=1mdZ[l](i) db^{[l]} = \frac{\partial \mathcal{L} }{\partial b^{[l]}} = \frac{1}{m} \sum_{i = 1}^{m} dZ^{[l](i)} dA[l1]=LA[l1]=W[l]TdZ[l] dA^{[l-1]} = \frac{\partial \mathcal{L} }{\partial A^{[l-1]}} = W^{[l] T} dZ^{[l]} 注意W[l]W^{[l]}dW[l]dW^{[l]}

相關推薦

深度學習 -- 神經網路 3

上一講介紹了2層神經網路,下面擴充套件開來,介紹通用L層神經網路 深層神經網路 構建神經網路的幾個重要步驟通過更加直觀的示意圖來表示,如下: 這就是深度神經網路的內部實現原理,通過多次迭代訓練後,最終得到一個模型,然後用此模型進行預測 在實現該網路之前,首

深度學習神經網路論文們可能會誤導人的地方

可好可差的特點,強調它作為優點時候的特性。比如手機重,就說有質感;輕了,就說輕盈不累手。再比如引數量少了,強調這樣可以避免過擬合,並且不用調整太多的引數,訓練會變快;引數量大了,就強調這個模型引數足夠多,也就有強大的能力來提取資料集中的特徵,萬能逼近,超引數多了說人可以掌控模型。讓人誤以為

深度學習 --- 神經網路學習原理(學習規則)

    從今天開始進入深度學習領域,深度學習我在前兩年的理論學習過程中,體會頗深,其中主要有兩個演算法CNN和RNN,但是本人喜歡追本溯源,喜歡刨根問題。最重要的是每個演算法並不是拍腦袋想出來的,是根據當時的研究程序和研究環境有關,因此想要深入理解深度學習的精髓,我們需要去了

深度學習神經網路訓練調參技巧

本文主要介紹8種實現細節的技巧或tricks:資料增廣、影象預處理、網路初始化、訓練過程中的技巧、啟用函式的選擇、不同正則化方法、來自於資料的洞察、整合多個深度網路的方法原文如下:http://blog.csdn.net/u013709270/article/details/70949304。

【讀書1】【2017】MATLAB與深度學習——神經網路(1)

本章講解了單層神經網路的學習規則。 This chapter explains the learning rulesfor a single-layer neural network. 第3章討論了多層神經網路的學習規則。 The learning rules

【讀書1】【2017】MATLAB與深度學習——神經網路分層(4)

圖2-9 該示例神經網路等價於單層神經網路This example neuralnetwork is equivalent to a single layer neural network 請記住,當隱藏節點具有線性啟用函式時,隱藏層實際上是無效的。 Keep

[深度學習] 神經網路中的啟用函式(Activation function)

20180930 在研究調整FCN模型的時候,對啟用函式做更深入地選擇,記錄學習內容 啟用函式(Activation Function),就是在人工神經網路的神經元上執行的函式,負責將神經元的輸入對映到輸出端。 線性啟用函式:最簡單的linear fun

深度學習——神經網路

一:神經網路介紹  傳統神經網路結構比較簡單,訓練時隨機初始化輸入引數,並開啟迴圈計算輸出結果,與實際結果進行比較從而得到損失函式,並更新變數使損失函式結果值極小,當達到誤差閾值時即可停止迴圈。 神經網路的訓練目的是希望能夠學習到一個模型,實現輸出一個期望的目標值。學習的方式是在外

吳恩達神經網路深度學習——神經網路基礎習題1

python numpy 基礎 1.使用iPython Notebooks 2.使用numpy 函式 and numpy矩陣或向量操作 3.理解"broadcasting" 4.向量化程式碼 用numpy建立一個基礎函式 sigmoid 函式 math庫

吳恩達神經網路深度學習——神經網路基礎習題2

神經網路思維的邏輯迴歸 1.初始化引數 2.計算代價函式及其導數 3.使用梯度下降 判斷影象上是否有貓 影象預處理 問題敘述 你得到了一個數據集(“data.h5”),包含: -標記為cat ( y = 1 )或非cat ( y = 0 )的m個訓練集 -標

深度學習 神經網路 中文 入門 書籍 課程 推薦 (附 免費 下載 連結)

現如今,人工智慧/深度學習/Deep Learning 異常火爆,可惜是網路上絕大部分推薦的入門書籍/課程都是英文的,本來數學基礎就不行,又是英文資料著實讓人頭疼。這裡咪博士向大家推薦 2 份非常不錯的中文入門資料。是的,只有 2 份!好東西不在於多,而在於精。 一、臺灣大

Coursera-吳恩達-深度學習-神經網路深度學習-week1-測驗

本文章內容: Coursera吳恩達深度學習課程,第一課神經網路和深度學習Neural Networks and Deep Learning, 第一週:深度學習引言(Introduction to Deep Learning) 部分的測驗,題目及答案截圖。 正確:ABC

深度學習神經網路量化

主要問題 DNN(Deep Neural Networks)的冗餘性決定了引數個數不會對網路的精度造成影響。此外,SGD(Stochastic Gradient Descent)所需要的精度僅為6~8bit,因此合理的量化網路也可保證精度的情況下減小模型的儲存

深度學習-神經網路 BP 演算法推導過程

BP 演算法推導過程 一.FP過程(前向-計算預測值) 定義sigmoid啟用函式 import numpy as np def sigmoid(z): return 1.0 / (1 + np.exp(-z)) 輸入層值和 標籤結果 l = [5.0, 10.0] y = [0.01,

【讀書1】【2017】MATLAB與深度學習——神經網路分層(1)

圖2-3 節點分層結構示意圖A layered structure ofnodes 圖2-3中的方形節點組稱為輸入層。 The group of square nodes in Figure 2-3 iscalled the input layer. 輸入層的

Spark MLlib Deep Learning Neural Net(深度學習-神經網路)1.2

Spark MLlib Deep Learning Neural Net(深度學習-神經網路)1.2 第一章Neural Net(神經網路) 2基礎及原始碼解析 2.1 Neu

[深度學習]神經網路的理解(MLP RBF RBM DBN DBM CNN 整理學習

開篇語 文章整理自向世明老師的PPT,圍繞神經網路發展歷史,前饋網路(單層感知器,多層感知器,徑向基函式網路RBF),反饋網路(Hopfield網路,聯想儲存網路,SOM,Boltzman及受限的玻爾茲曼機RBM,DBN,CNN)三部分進行講述,給人一個神經網路的整體認識。 發展歷史 單層感知器

深度學習神經網路純C語言基礎版【轉】

/* 深度學習神經網路V1.0 made by xyt 2015/7/23 使用語言:C 本程式構建多層矩陣形神經網路多輸入單輸出 學習策略:隨機梯度下降 啟用函式:sigmoid 使用前必須用srand((unsigned)time(NULL))取隨

深度學習神經網路中正則化的使用

目錄 前言 如果訓練資料集不夠大,由於深度學習模型具有非常大的靈活性和容量,以至於過度擬合可能是一個嚴重的問題,為了解決這個問題,引入了正則化的這個方法。要在神經網路中加入正則化,除了在啟用層中加入正則函式,應該dropout也是可以起到正則的效果

深度學習——神經網路中的activation

A:如果不用啟用函式(其實相當於啟用函式是f(x) = x),在這種情況下你每一層輸出都是上層輸入的線性函式,很容易驗證,無論你神經網路有多少層,輸出都是輸入的線性組合,與沒有隱藏層效果相當,這種情況就是最原始的感知機(Perceptron)了。引入非線性函式作為啟用函式,這樣深層神經網路就有意義了(不再是輸