課程名稱 | 零基礎入門深度學習python
授課講師 | 孫高峯 百度深度學習技術平臺部資深研發工程師web
授課時間 | 每週2、週四晚20:00-21:00算法
編輯整理 | 孫高峯網絡
內容來源 | 百度飛槳深度學習集訓營架構
出品平臺 | 百度飛槳函數
下載安裝命令 ## CPU版本安裝命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle ## GPU版本安裝命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
01 導讀學習
本課程是百度官方開設的零基礎入門深度學習課程,主要面向沒有深度學習技術基礎或者基礎薄弱的同窗,幫助你們在深度學習領域實現從0到1+的跨越。從本課程中,你將學習到:url
-
深度學習基礎知識spa
-
numpy實現神經網絡構建和梯度降低算法.net
-
計算機視覺領域主要方向的原理、實踐
-
天然語言處理領域主要方向的原理、實踐
-
個性化推薦算法的原理、實踐
本週爲開講第三週,百度深度學習技術平臺部資深研發工程師孫高峯,開始講解深度學習在計算機視覺方向實踐應用。今天爲你們帶來的是卷積神經網絡基礎之池化和Relu。
02 池化(Pooling)
池化是使用某一位置的相鄰輸出的整體統計特徵代替網絡在該位置的輸出,其好處是當輸入數據作出少許平移時,通過池化函數後的大多數輸出還能保持不變。好比:當識別一張圖像是不是人臉時,咱們須要知道人臉左邊有一隻眼睛,右邊也有一隻眼睛,而不須要知道眼睛的精確位置,這時候經過約化某一片區域的像素點來獲得整體統計特徵會顯得頗有用。因爲池化以後特徵圖會變得更小,若是後面鏈接的是全鏈接層,能有效的減少神經元的個數,節省存儲空間並提升計算效率。如 圖10 所示,將一個的區域池化成一個像素點。一般有兩種方法,平均池化和最大池化。
圖10:池化
-
如圖10(a):平均池化。這裏使用大小爲的池化窗口,每次移動的步長也爲2,對池化窗口內的元素數值取平均,獲得相應的輸出特徵圖的像素值。
-
如圖10(b):最大池化。對池化窗口覆蓋區域內的元素取最大值,獲得輸出特徵圖的像素值。當池化窗口在圖片上滑動時,會獲得整張輸出特徵圖。池化窗口的大小稱爲池化大小,用表示。在卷積神經網絡中用的比較多的是窗口大小爲,步長也爲2的池化。
與卷積核相似,池化窗口在圖片上滑動時,每次移動的步長稱爲步幅,當寬和高方向的移動大小不同時,分別用和表示。也能夠對須要進行池化的圖片進行填充,填充方式與卷積相似,假設在第一行以前填充行,在最後一行後面填充行。在第一列以前填充列,在最後一列以後填充列,則池化層的輸出特徵圖大小爲:
在卷積神經網絡中,一般使用大小的池化窗口,步幅也使用2,填充爲0,則輸出特徵圖的尺寸爲:
經過這種方式的池化,輸出特徵圖的高和寬都減半,但通道數不會改變。
03 ReLU激活函數
前面介紹的網絡結構中,廣泛使用Sigmoid函數作激活函數。在神經網絡發展的早期,Sigmoid函數用的比較多,而目前用的較多的激活函數是ReLU。這是由於Sigmoid函數在反向傳播過程當中,容易形成梯度的衰減。讓咱們仔細觀察Sigmoid函數的形式,就能發現這一問題。
Sigmoid激活函數定義以下:
ReLU激活函數的定義以下:
下面的程序畫出了Sigmoid和ReLU函數的曲線圖:
# ReLU和Sigmoid激活函數示意圖import numpy as npimport matplotlib.pyplot as pltimport matplotlib.patches as patchesplt.figure(figsize=(10, 5))# 建立數據xx = np.arange(-10, 10, 0.1)# 計算Sigmoid函數s = 1.0 / (1 + np.exp(0. - x))# 計算ReLU函數y = np.clip(x, a_min=0., a_max=None)###################################### 如下部分爲畫圖代碼f = plt.subplot(121)plt.plot(x, s, color='r')currentAxis=plt.gca()plt.text(-9.0, 0.9, r'$y=Sigmoid(x)$', fontsize=13)currentAxis.xaxis.set_label_text('x', fontsize=15)currentAxis.yaxis.set_label_text('y', fontsize=15)f = plt.subplot(122)plt.plot(x, y, color='g')plt.text(-3.0, 9, r'$y=ReLU(x)$', fontsize=13)currentAxis=plt.gca()currentAxis.xaxis.set_label_text('x', fontsize=15)currentAxis.yaxis.set_label_text('y', fontsize=15)plt.show()
- 梯度消失現象
在神經網絡裏面,將通過反向傳播以後,梯度值衰減到接近於零的現象稱做梯度消失現象。
從上面的函數曲線能夠看出,當x爲較大的正數的時候,Sigmoid函數數值很是接近於1,函數曲線變得很平滑,在這些區域Sigmoid函數的導數接近於零。當x爲較小的負數的時候,Sigmoid函數值很是接近於0,函數曲線也很平滑,在這些區域Sigmoid函數的導數也接近於0。只有當x的取值在0附近時,Sigmoid函數的導數才比較大。能夠對Sigmoid函數求導數,結果以下所示:
從上面的式子能夠看出,Sigmoid函數的導數最大值爲。前向傳播時,;而在反向傳播過程當中,x的梯度等於y的梯度乘以Sigmoid函數的導數,以下所示:
使得x的梯度數值最大也不會超過y的梯度的。
因爲最開始是將神經網絡的參數隨機初始化的,x頗有可能取值在數值很大或者很小的區域,這些地方均可能形成Sigmoid函數的導數接近於0,致使x的梯度接近於0;即便x取值在接近於0的地方,按上面的分析,通過Sigmoid函數反向傳播以後,x的梯度不超過y的梯度的,若是有多層網絡使用了Sigmoid激活函數,則比較靠前的那些層梯度將衰減到很是小的值。
ReLU函數則不一樣,雖然在的地方,ReLU函數的導數爲0。可是在的地方,ReLU函數的導數爲1,可以將y的梯度完整的傳遞給x,而不會引發梯度消失。
04 總結
本文重點展開講解了卷積神經網絡裏面的經常使用模塊,如池化和Relu。在後期課程中,將繼續爲你們帶來內容更豐富的課程,幫助學員快速掌握深度學習方法。
【如何學習】
-
如何觀看配套視頻?如何代碼實踐?
視頻+代碼已經發布在AI Studio實踐平臺上,視頻支持PC端/手機端同步觀看,也鼓勵你們親手體驗運行代碼哦。掃碼或者打開如下連接:
https://aistudio.baidu.com/aistudio/course/introduce/888
-
學習過程當中,有疑問怎麼辦?
加入深度學習集訓營QQ羣:726887660,班主任與飛槳研發會在羣裏進行答疑與學習資料發放。
-
如何學習更多內容?
百度飛槳將經過飛槳深度學習集訓營的形式,繼續更新《零基礎入門深度學習》課程,由百度深度學習高級研發工程師親自授課,每週2、每週四8:00-9:00不見不散,採用直播+錄播+實踐+答疑的形式,歡迎關注~
請搜索AI Studio,點擊課程-百度架構師手把手教深度學習,或者點擊https://aistudio.baidu.com/aistudio/course/introduce/888收看。
下載安裝命令 ## CPU版本安裝命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle ## GPU版本安裝命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
>> 訪問 PaddlePaddle 官網,瞭解更多相關內容。