認識神經網絡:卷積,歸一化,優化和語料

引言

一個基於神經網絡模型的視覺模型中,卷積歸一化層是最爲耗時的兩種layer。卷積數據計算密集類型,今年來大量的優化主要集中在各種設備上的卷積加速。
歸一化層通過計算一個批量中的均值與方差來進行特徵歸一化。衆多實踐證明,它利於優化且使得深度網絡易於收斂。批統計的隨機不確定性也作爲一個有利於泛化的正則化項。BN 已經成爲了許多頂級計算機視覺算法的基礎。添加歸一化層作爲提高算法性能的很好的一種策略,但由於像BN遭受數據同步延時的問題,現在逐漸被一些新的normalization方式所替代。

卷積

認識卷積

卷積定義

h(x)=f(x)g(x)=+f(t)g(xt)dth(x) = f(x)*g(x) = \int_{ - \infty }^{ + \infty } {f(t)g(x - t)dt}

f(t)f(t)先不動, g(t)g(-t)相當於g(t)g(t)函數的圖像沿y軸(t=0)做了一次翻轉。g(xt)g(x-t)相當於g(t)g(-t)的整個圖像沿着t軸進行了平移,向右平移了x個單位。他們相乘之後圍起來的面積就是h(x)h(x)

離散卷積的定義

h(x)=f(x)g(x)=τ=+f(τ)g(xτ)h(x) = f(x)*g(x) = \sum_{\tau = -\infty}^{+\infty}f(\tau)g(x-\tau)

其實,深度學習中的卷積對應於數學中的cross correlation. 從卷積的定義來看,我們當前在深度學習中訓練的卷積核是翻轉之後的卷積核

下面是一些介紹卷積的文章和常見卷積類型統計表:

Convolution Name 參考文獻 典型代表 附錄
Convolution AlexNet, VGG
1x1 Network in Network GoogLeNet, Inception (1). Dimensionality reduction for efficient computations;
(2).Efficient low dimensional embedding, or feature pooling;
(3). Applying nonlinearity again after convolution
Dilated convolution Multi-Scale Context Aggregation by Dilated Convolutions 語義分割 support exponentially expanding receptive fields without losing resolution or coverage. Upsampling/poolinglayer(e.g. bilinear interpolation) is deterministic. (a.k.a. not learnable);
內部數據結構丟失, 空間層級化信息丟失;
小物體信息無法重建 (假設有四個pooling layer則任何小於24=162^4=16pixel的物體信息將理論上無法重建。)
如何理解空洞卷積
Group Convolution Deep Roots:Improving CNN Efficiency with Hierarchical Filter Groups MobileNet, ResNeXt
Pointwise grouped convolution ShuffleNet
Depthwise separable convolution Xception: Deep Learning with Depthwise Separable Convolutions Xception MobileNet是典型的代表,通過該卷積,大大降低了計算複雜度和模型大小。也是現在落地產品中移動端常用的操作。
Deconvolutions Deconvolution and Checkerboard Artifacts DSSD Deconvolution也是一種常用的上採樣方式,在物體分割和多尺度檢測都可用到
Flattened convolutions Flattened convolutional neural networks for feedforward acceleration computation costs due to the significant reduction of learning parameters.

卷積的實現

計算卷積的方法有很多種,常見的有以下幾種方法:

  • 滑窗:這種方法是最直觀最簡單的方法。但是,該方法不容易實現大規模加速,因此,通常情況下不採用這種方法 (但是也不是絕對不會用,在一些特定的條件下該方法反而是最高效的.)
  • im2col: 目前幾乎所有的主流計算框架包括[Caffe]1, MXNet等都實現了該方法。該方法把整個卷積過程轉化成了GEMM過程,而GEMM在各種BLAS庫中都是被極致優化的,一般來說,速度較快.
  • FFT: 傅里葉變換和快速傅里葉變化是在經典圖像處理裏面經常使用的計算方法,但是,在 ConvNet 中通常不採用,主要是因爲在 ConvNet 中的卷積模板通常都比較小,例如3×3 等,這種情況下,FFT 的時間開銷反而更大.
  • [Winograd]2: Winograd 是存在已久最近被重新發現的方法,在大部分場景中,Winograd 方法都顯示和較大的優勢,目前cudnn中計算卷積就使用了該方法.

計算複雜度分析

  • 假設輸入I=RC0H0W0I = R^{C_0H_0W_0}, 卷積核大小爲kk, 輸出O=RC1H1W1O = R^{C_1H_1W_1}
    則卷積過程的計算量爲:

(k2C0H1W1)C1(k^2C_0*H_1W_1)*C_1

使用Depthwise separable convolution卷積的計算量爲:

(k2H1W1C0+C0C1H1W1)(k^2*H_1W_1*C_0 + C_0C_1*H_1W_1)

那麼計算量之比爲

(k2H1W1C0+C0C1H1W1)(k2C0H1W1)C1=1C1+1k21k2 \frac{(k^2*H_1W_1*C_0 + C_0C_1*H_1W_1)}{(k^2C_0*H_1W_1)*C_1} =\frac{1}{C_1} + \frac{1}{k^2} \approx \frac{1}{k^2}

一般情況下,k2<<C1k^2 << C_1, 所以當k=3k=3的時候,計算量之比約爲原來的19\frac{1}{9}.

  • 假設input的H0=W0H_0 = W_0,用ww表示,kk是卷積核的大小,pp表示填充的大小,ss表示stride步長

o=wk+2ps+1o = \frac{w - k + 2p}{s} + 1

Normalization

不同normalize的方法
每個子圖表示一個feature map張量,以NN爲批處理軸,CC爲通道軸,(H,W)(H,W)作爲空間軸。其中藍色區域內的像素使用相同的均值和方差進行歸一化,並通過聚合計算獲得這些像素的值。從示意圖中可以看出,GN沒有在N維度方向上進行拓展,因此batch size之間是獨立的,GPU並行化容易得多。

  • batchNorm是在batch上,對NHW做歸一化,對小batchsize效果不好;
  • layerNorm在通道方向上,對CHW歸一化,主要對RNN作用明顯;
  • instanceNorm在圖像像素上,對HW做歸一化,用在風格化遷移;
  • GroupNorm將channel分組,然後再做歸一化;
  • SwitchableNorm是將BN、LN、IN結合,賦予權重,讓網絡自己去學習歸一化層應該使用什麼方法。

Batch Normalization

需要比較大的Batch Size,需要更強的計算硬件的支持。

A small batch leads to inaccurate estimation of the batch statistics, and reducing BN’s batch size increases the model error dramatically

尤其是在某些需要高精度輸入的任務中,BN有很大侷限性。同時,BN的實現是在Batch size之間進行的,需要大量的數據交換。

batch normalization存在以下缺點:

  • 對batchsize的大小比較敏感,由於每次計算均值和方差是在一個batch上,所以如果batchsize太小,則計算的均值、方差不足以代表整個數據分佈;
  • BN實際使用時需要計算並且保存某一層神經網絡batch的均值和方差等統計信息,對於對一個固定深度的前向神經網絡(DNN,CNN)使用BN,很方便;但對於RNN來說,sequence的長度是不一致的,換句話說RNN的深度不是固定的,不同的time-step需要保存不同的statics特徵,可能存在一個特殊sequence比其他sequence長很多,這樣training時,計算很麻煩。(參考於https://blog.csdn.net/lqfarmer/article/details/71439314)

Layer Normalizaiton

LN中同層神經元輸入擁有相同的均值和方差,不同的輸入樣本有不同的均值和方差;
BN中則針對不同神經元輸入計算均值和方差,同一個batch中的輸入擁有相同的均值和方差。

所以,LN不依賴於batch的大小和輸入sequence的深度,因此可以用於batchsize爲1和RNN中對邊長的輸入sequence的normalize操作。

Instance Normalization

BN注重對每個batch進行歸一化,保證數據分佈一致,因爲判別模型中結果取決於數據整體分佈。

但是圖像風格化中,生成結果主要依賴於某個圖像實例,所以對整個batch歸一化不適合圖像風格化中,因而對HW做歸一化。可以加速模型收斂,並且保持每個圖像實例之間的獨立。

Group Normalization

GN does not exploit the batch dimension, and its
computation is independent of batch sizes.

在這裏插入圖片描述
從實驗結果中可以看出在訓練集合上GN的valid error低於BN,但是測試結果上遜色一些。這個
可能是因爲BN的均值和方差計算的時候,通過*隨機批量抽樣(stochastic batch sampling)*引入了不確定性因素,這有助於模型參數正則化。
而這種不確定性在GN方法中是缺失的,這個將來可能通過使用不同的正則化算法進行改進。

LRN(Local Response Normalization)

動機

在神經深武學有一個概念叫做側抑制(lateral inhibitio),指的是被激活的神經元抑制相鄰的神經元。
歸一化的目的就是“抑制”,局部響應歸一化就是借鑑側抑制的思想來實現局部抑制,尤其是當我們使用ReLU
的時候,這種側抑制很管用。

好處

有利於增加泛化能力,做了平滑處理,識別率提高1~2%

參考文獻

優化

梯度下降法(Gradient Descent)

梯度下降法是最早最簡單,也是最爲常用的最優化方法。梯度下降法實現簡單,當目標函數是凸函數時,梯度下降法的解是全局解。
一般情況下,其解不保證是全局最優解,梯度下降法的速度也未必是最快的。梯度下降法的優化思想是用當前位置負梯度方向作爲搜索方向,
因爲該方向爲當前位置的最快下降方向,所以也被稱爲是"最速下降法"。最速下降法越接近目標值,步長越小,前進越慢。
梯度下降法的搜索迭代示意圖如下圖所示:
在這裏插入圖片描述
梯度下降法的缺點:

  • 靠近極小值時收斂速度減慢,如下圖所示;
  • 直線搜索時可能會產生一些問題;
  • 可能會“之字形”地下降。

在這裏插入圖片描述

參考文獻

其他參考文獻

深度學習教程

CS231n: Convolutional Neural Networks for Visual Recognition.

計算平臺

  1. arm平臺
  2. linux上編譯arm交叉編譯鏈
  3. How to Build a GCC Cross-Compiler

常用數據集合

https://www.analyticsvidhya.com/blog/2018/03/comprehensive-collection-deep-learning-datasets/
這裏我們列出了一組高質量的數據集,研究這些數據集將使你成爲一個更好的數據科學家。
我們可以使用這些數據集來學習各種深度學習技術,也可以使用它們來磨練您的技能,理解如何識別和構造每個問題,考慮獨特的應用場景!

圖像類

dataset名稱 大小 State-of-Art 描述
MNIST 50MB Dynamic Routing Between Capsules 手寫數字識別,包含60000個訓練數據及10000個測試數據,可分爲10類
MSCOCO ~25G Mask RCNN COCO is a large-scale and rich for object detection, segmentation and captioning dataset. 330K images, 1.5 million object instances, 80 object categories, 5 captions per image, 250,000 people with key points
ImageNet 150GB ResNeXt ImageNet is a dataset of images that are organized according to the WordNet hierarchy. WordNet contains approximately 100,000 phrases and ImageNet has provided around 1000 images on average to illustrate each phrase. Number of Records: Total number of images: ~1,500,000; each with multiple bounding boxes and respective class labels
Open Image Dataset 500GB ResNet 一個包含近900萬個圖像URL的數據集。 這些圖像擁有數千個類別及邊框進行了註釋。 該數據集包含9,011219張圖像的訓練集,41,260張圖像的驗證集以及125,436張圖像的測試集。
VisualQA 25GB Tips and Tricks for Visual Question Answering: Learnings from the 2017 Challenge 圖像的問答系統數據集 265,016 images, at least 3 questions per image, 10 ground truth answers per question
The Street View House Numbers(SVHN) 2.5GB Distributional Smoothing With Virtual Adversarial Training 門牌號數據集,可用來做物體檢測與識別
CIFAR-10 170MB ShakeDrop regularization 圖像識別數據集,包含 50000張訓練數據,10000張測試數據,可分爲10類
Fashion-MNIST 30MB Random Erasing Data Augmentation 包含60000訓練樣本和10000測試樣本的用於服飾識別的數據集,可分爲10類。

自然語言處理類

dataset名稱 大小 State-of-Art 描述
IMDB 影評數據 80MB Learning Structured Text Representations 可以實現對情感的分類,除了訓練集和測試集示例之外,還有更多未標記的數據。原始文本和預處理的數據也包括在內。25,000 highly polar movie reviews for training, and 25,000 for testing
Twenty Newsgroups 20MB Very Deep Convolutional Networks for Text Classification 包含20類新聞的文章信息,內類包含1000條數據
Sentiment140 80MB Assessing State-of-the-Art Sentiment Models on State-of-the-Art Sentiment Datasets 1,60,000 tweets,用於情感分析的數據集
WordNet 10MB Wordnets: State of the Art and Perspectives 117,000 synsets is linked to other synsets by means of a small number of “conceptual relations.
Yelp點評數據集 2.66GB JSON文件,2.9GB SQL文件,7.5GB圖片數據 Attentive Convolution 包括470萬條用戶評價,15多萬條商戶信息,20萬張圖片,12個大都市。此外,還涵蓋110萬用戶的100萬條tips,超過120萬條商家屬性(如營業時間、是否有停車場、是否可預訂和環境等信息),隨着時間推移在每家商戶簽到的總用戶數。
維基百科語料庫(英語) 20MB Breaking The Softmax Bottelneck: A High-Rank RNN language Model 包含4400000篇文章 及19億單詞,可用來做語言建模
博客作者身份語料庫 300MB Character-level and Multi-channel Convolutional Neural Networks for Large-scale Authorship Attribution 從blogger.com收集到的19,320名博主的博客,其中博主的信息包括博主的ID、性別、年齡、行業及星座
各種語言的機器翻譯數據集 15GB Attention Is All You Need 包含英-漢、英-法、英-捷克、英語- 愛沙尼亞、英 - 芬蘭、英-德、英 - 哈薩克、英 - 俄、英 - 土耳其之間互譯的數據集

語音類

dataset名稱 大小 State-of-Art 描述
Free Spoken Digit Dataset 10MB Raw Waveform-based Audio Classification Using Sample-level CNN Architectures 數字語音識別數據集,包含3個人的聲音,每個數字說50遍,共1500條數據
Free Music Archive (FMA) 1000GB Learning to Recognize Musical Genre from Audio 可以用於對音樂進行分析的數據集,數據集中包含歌曲名稱、音樂類型、曲目計數等信息。
Ballroom 14GB A Multi-Model Approach To Beat Tracking Considering Heterogeneous Music Styles 舞廳舞曲數據集,可對舞曲風格進行識別。
Million Song Dataset 280GB Preliminary Study on a Recommender System for the Million Songs Dataset Challenge Echo Nest提供的一百萬首歌曲的特徵數據.該數據集不包含任何音頻,但是可以使用他們提供的代碼下載音頻
LibriSpeech 60GB Letter-Based Speech Recognition with Gated ConvNets 包含1000小時採樣頻率爲16Hz的英語語音數據及所對應的文本,可用作語音識別
VoxCeleb 150MB VoxCeleb: a large-scale speaker identification dataset]() 大型的說話人識別數據集。 它包含約1,200名來自YouTube視頻的約10萬個話語。 數據在性別是平衡的(男性佔55%)。說話人跨越不同的口音,職業和年齡。 可用來對說話者的身份進行識別。

Analytics Vidhya實踐問題

  • Twitter情緒分析
    • 描述:識別是否包含種族歧視及性別歧視的推文。
    • 大小:3MB
    • 31,962 tweets
  • 印度演員的年齡識別數據集
    • 描述:根據人的面部屬性,識別人的年齡的數據集。
    • 大小:48MB
    • 19,906 images in the training set and 6636 in the test set
  • 城市聲音分類數據集
    • 描述:該數據集包含來自10個類的城市聲音的8732個標記的聲音片段,每個片段時間小於4秒。
    • 大小:訓練數據集3GB,訓練數據集2GB。
    • 8732 labeled sound excerpts (<=4s) of urban sounds from 10 classes

more dataset


  1. https://github.com/BVLC/caffe/blob/master/src/caffe/util/im2col.cpp ↩︎

  2. https://arxiv.org/abs/1509.09308v2 ↩︎

發佈了44 篇原創文章 · 獲贊 17 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章