機器不學習:窺探CNN經典模型——他山之玉 可以攻石

機器不學習 www.jqbxx.com : 深度聚合機器學習、深度學習算法及技術實戰

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

上一篇文章介紹了CNN的基礎知識以及它的優勢,今天這篇文章主要來看一看一些著名的卷積神經網絡的結構特點,以便我們對CNN有更加直觀地認識。

一、LeNet-5

論文:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf

這個可以說是CNN的開山之作,由Yann LeCun在1998年提出,可以實現對手寫數字、字母的識別。結構如下:

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

圖中的 subsampling,即“亞採樣”,就是我們前面說的pooling,因為pooling其實就是對原圖像進行採樣的一個過程。它總共7層,分別有2個CONV層,2個POOL層,3個FC層。當然,它的輸入規模很小,是32×32大小的單通道圖片。

我們可以用下面的式子,來表示上面的網絡結構:

Input(32×32)-->CONV(6 filters)-->AvgPOOL-->CONV(16 filters)-->AvgPOOL-->FC(120)-->FC(84)-->FC(10)

細節沒什麼好說的。後面我們可以試著用TensorFlow或者Keras來複現一下。

二、AlexNet

論文:http://vision.stanford.edu/teaching/cs231b_spring1415/slides/alexnet_tugce_kyunghee.pdf

AlexNet於2012年由Alex Krizhevsky, Ilya Sutskever 和 Geoffrey Hinton等人提出,並在2012 ILSVRC (ImageNet Large-Scale Visual Recognition Challenge)中取得了最佳的成績。這也是第一次CNN取得這麼好的成績,並且把第二名遠遠地甩在了後面,因此震驚了整個領域,從此CNNs才開始被大眾所熟知。

這裡簡單地說一下這個ILSVRC,它是一個ImageNet發起的挑戰,是計算機視覺領域的奧運會。全世界的團隊帶著他們的模型來對ImageNet中的數以千萬的共1000個類別的圖片進行分類、定位、識別。這個是一個相當有難度的工作,1000個類別啊。

那我們來看看這個AlexNet的結構把:

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

圖片來源:https://www.learnopencv.com/understanding-alexnet/

輸入的圖片是256×256,然後進行隨機的裁剪得到227×227大小,然後輸入進網絡中。可見,這個輸入比LeNet的要大得多,這種大小,在當年已經是圖片的主流大小了。

AlexNet共有8層,其中5個CONV層和3個FC層,這裡沒有算上POOL層,因為嚴格意義上它不算層,因為沒有可訓練的參數。

關於AlexNet有如下要點:

  1. 用ImageNet的1500萬張來自2萬2千個類別的圖片進行訓練,在兩個GTX 580 GPU上訓練了5,6天;使用ReLU激活函數,而之前的神經網絡,包括LeNet,都是使用sigmoid或者tanh激活函數,AlexNet證明了ReLU函數在效率效果上更佳,速度提高很多倍;使用了很多的數據擴增技術(Dada Augmentation),比如圖片反轉、剪切、平移等等,來擴充訓練集,使得訓練的模型魯棒性更強;第一次使用dropout正則化技術;使用mini-batch SGD(也成隨機梯度下降)來加快訓練。

總之,AlexNet讓人們認識到CNN的強大和巨大的潛能,併為之後的研究提供了很多有用的經驗和技術。

三、VGG Net

論文:https://arxiv.org/pdf/1409.1556.pdf

這個網絡於2014年被牛津大學的Karen Simonyan 和Andrew Zisserman提出,主要特點是 “簡潔,深度”。 深, 是因為VGG有19層,遠遠超過了它的前輩; 而簡潔,則是在於它的結構上,一律採用stride為1的3×3filter,以及stride為2的2×2MaxPooling。所以雖然深,但是結構大家一眼就可以記住。

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

這個圖來自於VGG的論文,每一列是他們研究的不同的結構,我們直接看E的那個結構,不難發現,若干個CONV疊加,然後配一個MaxPooling,再若干個CONV,再加一個MaxPooling,最後三個FC。而且,每個MaxPooling之後,CONV的filter的個數都翻倍,分別是64,128,256,512,結構十分規則有規律。

VGG刷新了CNN的深度,其簡明的結構更是讓人印象深刻。

四、Inception Net(GoogleNet)

論文:https://www.cs.unc.edu/~wliu/papers/GoogLeNet.pdf

看了前面的網絡結構之後,我們會發現,他們越來越深,filter越來越多,參數越來越多。 似乎提高CNN的表現的方法就是堆疊更多的CONV、POOL層排成一列(我們稱之為sequential model,熟悉keras的同學應該知道)就行了。確實那個時候大家都在想方設法增加網絡的層數,讓我們的CNN更加龐大。

但我們也應該清楚,一味地增加層數、增加通道數(filters越多,輸出圖像的通道數就越多),會讓我們的計算量急劇增加,模型變得過於複雜,從而更容易過擬合,這樣反而會讓模型的性能下降。

Inception Net不再是使用Sequential model,在結構上有了重大創新。

在sequential model中,所有操作,無論是CONV還是POOL,都是排成一些序列。但是Google他們就想,為什麼不可以同時進行各種操作呢?於是論文的作者有一個大膽的想法,假如我們有3個CONV和一個MaxPOOL,何不讓它們平行地運算,然後再整合在一起?:

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

這樣做有一個問題,就是,整合在一起之後,channels這個維度會過大。

於是作者想出了一個好辦法,那就是使用filter為1×1的CONV來進行降維:

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

前面學過了卷積的操作,我們知道,一個1×1的filter去卷積,圖像的長和寬都不會變化,同時,輸出圖像的channels數等於filters的個數,所以對於圖中的192個channels的圖像,我們用32個filter,就可以把維度降低到32維。

於是,我們可以利用1×1CONV的這個特點,來改造上面的整合過程:

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

可見,通過使用1×1CONV,輸出的通道數大大減少,這樣,整個模型的參數也會大大減少。

上面這個部分,稱為“Inception Module”,而Inception Network,就是由一個個的inception module組成的:

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

圖片來源:https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html

通過inception module,GoogleNet成功地把CNN的層數增加到了超過100層!(如果把一個module當做一層的話,則是22層)。

這個GoogleNet就牛逼了,名副其實地“深”,而且參數的數量也比我們前面介紹的AlexNet要少很多倍!所以訓練出的模型不僅效果好,而且更快。

五、ResNet (殘差網絡)

論文:https://arxiv.org/pdf/1512.03385.pdf

最後要介紹的就是ResNet,於2015年由微軟亞洲研究院的學者們提出。

前面講了,CNN面臨的一個問題就是,隨著層數的增加,CNN的效果會遇到瓶頸,甚至會不增反降。這往往是梯度爆炸或者梯度消失引起的。

ResNet就是為了解決這個問題而提出的,因而幫助我們訓練更深的網絡。 它引入了一個 residual block(殘差塊):

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

這個圖來自原論文。 可以很直觀地看出,這個殘差塊把某一層的激活值,直接一把抓到了後面的某一層之前 ,這個過程稱之為“skip connection(跳躍連接)”。 這個做法,相當於把前面的信息提取出來,加入到當前的計算中,論文作者認為,這樣的做法,可以 使神經網絡更容易優化。事實上卻是是這樣。

通過這種residual block,他們成功地搭建了一個擁有 152層的CNN!深不見底! 我從論文中截取網絡的一部分如下:

機器不學習:窺探CNN經典模型——他山之玉 可以攻石

關於具體的細節以及為什麼residual block有效,可以查閱原論文或者網上的其他教程。

轉自:https://www.zhihu.com/people/guo-bi-yang-78/posts


分享到:


相關文章: