入门 | 一文看懂卷积神经网络
本文選自Medium,主要介紹了神經(jīng)網(wǎng)絡(luò)中的卷積神經(jīng)網(wǎng)絡(luò),適合初學(xué)者閱讀。
概述
深度學(xué)習(xí)和人工智能是 2016 年的熱詞;2017 年,這兩個(gè)詞愈發(fā)火熱,但也更加容易混淆。我們將深入深度學(xué)習(xí)的核心,也就是神經(jīng)網(wǎng)絡(luò)。大多數(shù)神經(jīng)網(wǎng)絡(luò)的變體是難以理解的,并且它們的底層結(jié)構(gòu)組件使得它們?cè)诶碚撋虾蛨D形上是一樣的。
下圖展示了最流行的神經(jīng)網(wǎng)絡(luò)變體,可參考這篇博客 (http://www.asimovinstitute.org/neural-network-zoo/)。
本文介紹卷積神經(jīng)網(wǎng)絡(luò)(CNN)。在開始之前,我們首先了解一下感知機(jī)。神經(jīng)網(wǎng)絡(luò)是一些被稱作感知機(jī)的單元的集合,感知機(jī)是二元線性分類器。
如上圖所示,輸入 x1 和 x2 分別和各自的權(quán)重 w1 和 w2 相乘、求和,所以函數(shù) f=x1*w1+x2*w2+b(偏置項(xiàng),可以選擇性地添加)。函數(shù) f 可以是任意的運(yùn)算,但是對(duì)于感知機(jī)而言通常是求和。函數(shù) f 隨后會(huì)通過一個(gè)激活函數(shù)來評(píng)估,該激活函數(shù)能夠?qū)崿F(xiàn)期望分類。Sigmoid 函數(shù)是用于二元分類的最常見的激活函數(shù)。如果您想進(jìn)一步了解感知機(jī),推薦閱讀這篇文章(https://appliedgo.net/perceptron/)。
如果我們把多個(gè)輸入堆疊在一起,并且使用函數(shù) f 將其與位于另一層的多個(gè)堆疊在一起的單元連接在一起,這就形成了多個(gè)全連接的感知機(jī),這些單元(隱藏層)的輸出成為最后一個(gè)單元的輸入,再通過函數(shù) f 和激活函數(shù)得到最終的分類。如下圖所示,這個(gè)就是最簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)。
神經(jīng)網(wǎng)絡(luò)有一個(gè)獨(dú)特的能力,被稱作「泛逼近函數(shù)」(Universal Approximation function),所以神經(jīng)網(wǎng)絡(luò)的拓?fù)浜徒Y(jié)構(gòu)變體是很多樣化的。這本身就是一個(gè)很大的話題,Michael Nielsen 在文章中做了詳細(xì)的描述(http://neuralnetworksanddeeplearning.com/chap4.html)。讀完這個(gè)我們可以相信:神經(jīng)網(wǎng)絡(luò)可以模擬任何函數(shù),不管它是多么的復(fù)雜。上面提到的神經(jīng)網(wǎng)絡(luò)也被稱為前饋神經(jīng)網(wǎng)絡(luò)(FFNN),因?yàn)樾畔⒘魇菃蜗颉o環(huán)的。現(xiàn)在我們已經(jīng)理解了感知機(jī)和前饋神經(jīng)網(wǎng)絡(luò)的基本知識(shí),我們可以想象,數(shù)百個(gè)輸入連接到數(shù)個(gè)這樣的隱藏層會(huì)形成一個(gè)復(fù)雜的神經(jīng)網(wǎng)絡(luò),通常被稱為深度神經(jīng)網(wǎng)絡(luò)或者深度前饋神經(jīng)網(wǎng)絡(luò)。
那么深度神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)有什么不同呢?讓我們來探討一下。
CNN 由于被應(yīng)用在 ImageNet 等競(jìng)賽中而廣受歡迎,最近也被應(yīng)用在自然語(yǔ)言處理和語(yǔ)音識(shí)別中。需要記住的關(guān)鍵點(diǎn)是,其他的變體,如 RNN、LSTM、GRU 等,基于和 CNN 類似的結(jié)構(gòu),不過架構(gòu)存在一些差異。
CNN 由三種不同的層組成,即「卷積層」、「池化層」、「密集層或全連接層」。我們之前的神經(jīng)網(wǎng)絡(luò)都是典型的全連接層神經(jīng)網(wǎng)絡(luò)。如果想了解更多卷積和池化層的知識(shí),可以閱讀 Andrej Karpathy 的解釋(https://cs231n.github.io/convolutional-networks/)。現(xiàn)在繼續(xù)我們關(guān)于層的討論,下面我們來看一下卷積層。
(在下面的內(nèi)容里,我們會(huì)以圖像分類為例來理解卷積神經(jīng)網(wǎng)絡(luò),后面再轉(zhuǎn)移到自然語(yǔ)言處理和視頻任務(wù)中。)
卷積層:假設(shè)一張圖像有 5*5 個(gè)像素,1 代表白,0 代表黑,這幅圖像被視為 5*5 的單色圖像。現(xiàn)在用一個(gè)由隨機(jī)地 0 和 1 組成的 3*3 矩陣去和圖像中的子區(qū)域做乘法,每次迭代移動(dòng)一個(gè)像素,這樣該乘法會(huì)得到一個(gè)新的 3*3 的矩陣。下面的動(dòng)圖展示了這個(gè)過程。
上述的 3*3 的矩陣被稱作「濾波器」,它的任務(wù)是提取圖像特征,它使用「優(yōu)化算法」來決定 3*3 矩陣中具體的 0 和 1。我們?cè)谏窠?jīng)網(wǎng)絡(luò)的卷積層中使用好幾個(gè)這樣的濾波器來提取多個(gè)特征。3*3 矩陣的每一個(gè)單個(gè)步驟被稱作「步幅」(stride)。
下圖展示了使用兩個(gè)三通道濾波器從三通道(RGB)圖像中生成兩個(gè)卷積輸出的詳細(xì)過程。
濾波器 w0 和 w1 是「卷積」,輸出是提取到的特征,包含這些濾波器的層叫做卷積層。
池化層:這個(gè)層主要使用不同的函數(shù)為輸入降維。通常,最大池化層(max-pooling layer)出現(xiàn)在卷積層之后。池化層使用 2*2 的矩陣,以卷積層相同的方式處理圖像,不過它是給圖像本身降維。下面分別是使用「最大池化」和「平均池化」的示例。
全連接層:這個(gè)層是位于之前一層和激活函數(shù)之間的全連接層。它和之前討論過的簡(jiǎn)單「神經(jīng)網(wǎng)絡(luò)」是類似的。
注意:卷積神經(jīng)網(wǎng)絡(luò)結(jié)果也會(huì)使用正則化層,不過本文將分開討論。此外,池化層會(huì)損失信息,所以也不是首選的。通常的做法是在卷機(jī)層中使用一個(gè)較大的步幅。
ILSVRC 2014 的亞軍 VGGNet 是一個(gè)流行的卷積神經(jīng)網(wǎng)絡(luò),它使用 16 個(gè)層來幫助我們理解 CNN 中深度的重要性,AlexNet 是 ILSVRC 2012 的冠軍,它只有 8 層。Keras 中有可以直接使用的模型 VGG-16。
在 Keras 中加載了這個(gè)模型之后,我們可以觀察每一層的「output shape」來理解張量維度,觀察「Param#」來了解如何計(jì)算參數(shù)來得到卷積特征。「Param#」是每一次獲取卷積特征時(shí)的所有權(quán)重更新。
現(xiàn)在我們已經(jīng)熟悉了卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),理解了每一層都是如何運(yùn)行的,那么我們可以進(jìn)一步去理解它是如何用在自然語(yǔ)言處理和視頻處理中的了。您可以在這個(gè)鏈接中了解自 2012 年以來所有獲得 ImageNet 競(jìng)賽冠軍的 CNN 模型(https://adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html)。
∑編輯?|?Gemini
來源 | 機(jī)器之心
算法數(shù)學(xué)之美微信公眾號(hào)歡迎賜稿
稿件涉及數(shù)學(xué)、物理、算法、計(jì)算機(jī)、編程等相關(guān)領(lǐng)域
稿件一經(jīng)采用,我們將奉上稿酬。
投稿郵箱:math_alg@163.com
總結(jié)
以上是生活随笔為你收集整理的入门 | 一文看懂卷积神经网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维码提升对比度文献调研(5)--Dee
- 下一篇: (pytorch-深度学习)门控循环单元