1. 程式人生 > >深度學習 (三)Convolutional Neural Network

深度學習 (三)Convolutional Neural Network

What is Deep Learning

       認識任何事物之前最好了解這一事物在我們的知識認知體系中所處的位置,這樣有助於將其歸納到自己的認知體系中,產生聯絡並編製成類似於知識圖譜樣的結構,不用記住也不好忘記。
       從大的方面說深度學習也屬於機器學習這個分支科學中的一個學習方法,而其自身起源卻是受人類生物神經系統結構的啟發,從神經元細胞(樹突、軸突)之間如何起作用的模仿,每個神經元是一個線性函式表示,無數個線性單元組合在一起構成了線性函式集合,通過線性函式來逼近任何複雜的函式,即把資料通過逼近出來的複雜函式來表達資料更高階、更抽象的一面。
       例如DNN、CNN是分別受生物機理中的神經元結構、視覺原理啟發二來,且目前已經有成熟的網路結構,拿DNN來說 一般用三層input layer、hidden layer、outlayer,hideen layer 數量以及節點數量可以調整,各層node採用full connection方式連線,理論網路層次越深可以模擬和解決問題的能力越強,感覺“深度“體現在這裡 深不可測 越深則越強,所以命名為深度學習,然後在實際工作中隨著網路變深,權重引數會非常多不容易優化更新 網路也會過擬合,因此太深的網路是不實用的,CNN可以大大減少DNN引數。
       2016年google AlphaGo 在打敗世界頂級圍棋手李世石,背後的學習網路即利用了CNN網路,下面讓我們來看看CNN結構。

大腦視覺原理

       1958年,David和Torsten Wiesel在研究瞳孔區域與大腦皮層神經元的對應關係時發現,生物體的大腦存在一個深度結構,他們在實驗貓的頭骨上開了一個3mm的小洞,向洞裡插入電極,測量神經元的活躍程度,然後在實驗貓前展現各種亮度的物品,並且改變物體放置的位置和角度,這樣實驗貓感受到不同型別、不同強弱的刺激,這個實驗的目的是為了證明一個假設。位於後腦皮層的不同神經元 與瞳孔所受刺激之間存在某種對應關係。一旦瞳孔受到某種刺激,後腦皮層的某一部分神經元就會活躍,他們經過反覆實驗發現:可是皮層是分級的,這一生理的發現首先促進了生物機理的研究進展 其次極大崔進了人工智慧領域的發展,因此1981年他們獲得了諾貝爾獎,大腦皮層如下:
在這裡插入圖片描述

       畫素Pixel資訊通過視網膜傳輸到大腦枕葉區,從低階的V1區提取邊緣edges特徵,再到V2區的形狀再到V4更高階區,也就是整個目標model,高層次的特徵是低層次特徵的組合,從底層到高層的特徵表示越來越抽象,抽象層次越高越有利於解釋,如下圖所示:
在這裡插入圖片描述
       人們一直想尋找一種演算法來模擬人類大腦的認知機理,有時候在想人類為何對於研究這個方向或者其它方向這麼熱衷呢,技術一直在不斷變革更新中,科學技術是第一生產力,這篇文章我們介紹的CNN演算法即模擬大腦識別處理資訊的過程來識別影象或文字的。

CNN模仿大腦視覺

為何出來CNN?

       在上一文中我們已經介紹了BP網路,那為什麼又出來了CNN呢,其實在每種不同的網路結構都有自己擅長和不擅長的,DNN的劣勢在於隨著網路的加深、神經元的增多,會發生過擬合以及模型難以訓練不能求出來結果,所以呢DNN常用來處理一些分類任務 圖片畫素一般都非常大不好處理,CNN解決了DNN權重引數過多不好訓練的問題,我們經常拿它來處理圖片分類、圖片識別等任務,並且目前已經有很多成熟的CNN結構來完成這一任務。

在這裡插入圖片描述
       左上圖拿了一個10001000畫素的圖片為例,如果是DNN輸入層需要106次方個節點,全連線的話隱藏層也是106方,那麼乘一起權重個數為10^12次方,引數數量一億以上的引數;計算右圖引數個數,原圖上每一個1010的畫素趨於對應於一個filter,相當於縮小了100倍,那麼有1萬個映射出來的節點,引數再乘以10*10 ,即100萬個引數權重 ,同億級別的相比已經提升了很多,如果再多幾個卷積引數將會更少。

Activation functions

為什麼引入啟用函式

       萬物發生皆有因,想一下DNN網路如果沒有啟用函式的作用僅僅是權重和特徵的線性組合,那即使特徵再多發生的也是線性變換,線性變換的表達能力是有限制的,不能夠表述複雜的事物,另一方面也是模擬神經元細胞電位變化即達到某一閾值即產生電位衝動,這一過程不是線性的,所以呢,在數學中找了一些符合這一特性的函式來作為閾值函式、啟用函式來達到這一目的,讓我們來看一下常用的啟用函式。
先來看一下他們的公式以及函式圖形,都很簡單如下:

在這裡插入圖片描述

  • sigmoid(x)
           從上篇瞭解到當自變數絕對值大於4時,因變數會等於0,也就是說導數也會為0 ,導數即梯度消失了,也可稱為梯度彌散,像煙霧一樣消失的人海中,這就和神經網路一些結構衝突,如DNN、CNN原理都是對損失的鏈式求導傳播來逐漸更新權重,假如沒有了梯度豈不網路就用不了了麼,因而在深度網路裡面很少用它。
    另一個問題是它並不是以0為中心的函式,為什麼以0為中心要好呢?更容易優化?
  • tanh(x) Hyperbolic tangent
           從圖上可以看出來tanh函式比sigmoid優秀的地方在於它的中心是0,是0中心的函式,但也存在問題依然存在梯度消失問題,還可以繼續優化更好的函式,下面我們來看ReLu線性修正單元
  • max(0,x) Rectified linear units
           max(0,x)函式當x>0時永遠有導數不會導致梯度消失問題,其實還是存在一個問題的x<0時它的梯度還是為0,雖然大大解決了梯度問題,還是會導致梯度為0 導致部分神經元失去原有的作用,繼續往下優化,我們可以優化x<0那麼部分影象,替換掉
    卷積層和池化層如反向傳遞導數
  • max(0.1x,x) Leaky ReLu
           這個啟用函式優化了ReLu的x<0部分,添加了一個fine-tune 微笑變化,這一啟用函式目前廣泛應用於各種深度網路中

       除此之外,啟用函式可以根據我們的需要自己靈活調整其結構,以達到解決我們實際問題的目的。

Network Structure

Input layer

       輸入層比較簡單,我們會利用工具庫載入圖片並將其轉化為數字矩陣,通常是在RGB三個顏色通道的數字矩陣然後再加工一些特徵處理步驟既可以作為輸出輸出結果,今天我要處理的圖片大小為32*32小圖片要好處理一些,最後會將結果輸出到第二層。

Convolutional layer

在這裡插入圖片描述
       在上圖中左邊是一個32323的圖片,32*32表示的是畫素長、高,3表示RGB通道,中間對映的那個小長方形即receptive field 中文也成為感受野或劃窗,這個劃窗從左上角依次向右反覆滑動一直覆蓋左圖,每次滑動幾個畫素即步長stride,有時如果想把邊緣的特徵數字也充分記住,就需要在最外圈補0,0不會對卷積產生影響無所謂,右邊縮小的區域那個長方體中的小圓即卷積神經元也叫作filter或kerner卷積核,長方體的左右長度叫做深度depth上圖為5 同filter的個數一樣多。
下面我們以一幅圖看一下計算過程:

在這裡插入圖片描述
       如上圖我們先來看看能獲取啥資訊,receptive field 為 33,zero-padding 為 1 補了一圈0,卷積核依次和感受野內的畫素值做計算,圖中計算出來為-8,這裡其實經常含有啟用函式有時不表達出來。
       receptive field:感受野的原理是通過在人的眼睛看外面世界的時候某些視覺細胞只關心一些區域性資訊並不用關心全域性是啥的原理,讓每個神經元只感受一小片區域性區域的畫素,而不需要關心全部,這樣可以減少感受野倍數的引數個數,例如本來10^12次方權重,經過感受野對映變為了10 ^8,縮小了100倍,即使如此引數還是非常多。
       shared parameters:即每個卷積核或濾波器在卷積圖片計算過程中他們的引數權重一直是不變的(在當前層)可以想象無論多少個神經元節點都不會改變,如此原圖會通過過濾器映射出來一層新的畫素值,這些畫素值仍然可以表示成一個圖片展示出來,這層畫素值叫做feature map(特徵對映),當劃窗為1
1 步長也為1時 共享引數這時只有一個 如果也為1,那麼可以想象特徵對映和原圖會是一模一樣的,在上面10*10的感受野,權值從10^次方降低到了100個 非常可觀,可以說權值共享是卷積網路裡面的一個優秀地方,如果沒有權值共享機制那麼卷積網路將會沒有實用價值。

為什麼這麼計算能產生效果?

       為什麼進行共享引數這種可以大大減少引數的方式會好用,也是不是特別理解,直觀理解是它們每一個特徵map都會只提取了某一類特徵,比如顏色、紋理,由很多個featrue map才能提取出來一幅圖儘可能多的特徵,再繼續抽象才能精度識別一幅圖,也就是從原圖提取出來要素越多越容易識別,有沒有其他更好的方式我們也可以試一試。

Activation function

       啟用函式這裡如果選擇ReLu啟用函式的話,那麼值將為0,同理我們將算出第一卷積層裡面各個畫素值,雖然引數降低了很多但是還是不好訓練,還可以繼續池化操作減少引數

Pooling layer

常用的兩種下采樣方式為取最大值或者求平均值方式,如下圖:
在這裡插入圖片描述
計算方式比較簡單看上圖就會明白,但重點是理解為什麼這麼採用會有效呢。
聽到下采樣時,難免會有疑問,為什麼下采樣?好處?方法?其它取樣嗎?
如果對應的圖片裡面可以理解下采樣是將影象縮放縮小了,那麼如何縮小呢 方法眾多如求劃窗均值、求最大值、求平均值等等,以前是4個值求均值後變為了1個值,我們的原則是啥呢,我感覺儘量要儲存下來原圖的圖片包含的資訊,不能丟失資訊,丟失太多結果自然不準確了,是不是4個權重值降低為了1個,說明有降低緯度效果,維度低了產生過擬合的風險自然降低,所以下采樣既能避免過擬合也能減小計算量,不僅僅在圖片領域其它領域也是常用的降維方法之一。

Full connection layer

卷積取的是區域性特徵,全連線就是把以前的區域性特徵重新通過權值矩陣組裝成完整的圖,因為用到了所有的區域性特徵,所以叫全連線。
為什麼最後一層要全連線層呢?

經典網路

經過這麼多年我們已經積累了一些優化後的經典,網路在這裡列一下後面再詳細說。
LeNet、AlexNet、GoogleNet、VGGNet、RestNet、DenseNet等結構

隨筆思考

網際網路時代的核心競爭力
       最近新聞又再紛紛報道董明珠與雷軍5年前的賭約,真是豪情壯志一句話就是10個億,小米是依靠網際網路技術結合傳統物品發展的一個優質公司,格力大家想必更不陌生,從小聽著格力廣告長大的,一個大家覺得靠譜、信得過的企業,一說買家電、買空調就選格力,質量有保障售後也不錯,格力能保持這麼多年穩定盈利和其它有自身核心競爭力關係很大,它自己造電器有其它廠商不具備的能力,所以其它企業不容易超過它。
       小米是靠網際網路思維很多部件從其它好公司購買,它的手機也好、智慧硬體也好都融入了網際網路新技術,感覺它是以高配置手機來吸引廣大客戶,有了客戶就有了未來的市場,等有了客戶再推廣其它智慧硬體等產品,逐漸形成了IOT領域佼佼者,現在有些意識到為什麼各個大企業無論電視、電腦、汽車等各方面都在結合AI,像著人工智慧方面發展,如果任何一家企業成功那都將是業績會成指數增長,潛力空間巨大。
       在這個大資料高速化的資訊時代並不是自己獨立打拼、獨立造輪子就能成功的,在公司要多幫助別人換句話說也要多請別人幫忙,將會提高很多效率,因為資訊化使得商品還是資訊變化更新都加快了,我們要跟上時代的速度,用網際網路思維考慮問題。