AI入門:卷積神經(jīng)網(wǎng)絡(luò)

JM
2 評論 8492 瀏覽 27 收藏 14 分鐘

講到AI不得不講深度學(xué)習(xí),而講到深度學(xué)習(xí),又不能不講卷積神經(jīng)網(wǎng)絡(luò)。如果把深度學(xué)習(xí)比作中國的互聯(lián)網(wǎng)界,那卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)就是騰訊和阿里級(jí)別的地位。今天我們主要討論的卷積神經(jīng)網(wǎng)絡(luò),到底卷積神經(jīng)網(wǎng)絡(luò)能解決什么問題,它的結(jié)構(gòu)是怎樣的?是怎么學(xué)習(xí)的?應(yīng)用在哪些具體的產(chǎn)品上?本文將為大家一一解答。

如果對深度學(xué)習(xí)還不了解的同學(xué),建議你先看下之前的文章《深度學(xué)習(xí)到底有多深?》,對深度學(xué)習(xí)有一定的認(rèn)知,對接來了的討論可能會(huì)更容易理解。

以下是本文討論內(nèi)容的大綱:

下文的卷積神經(jīng)網(wǎng)絡(luò),我們用簡稱CNN表示。

01 為什么需要用到CNN?

1. 普通的神經(jīng)網(wǎng)絡(luò)會(huì)遇到什么問題?

假設(shè)我們要做圖像識(shí)別,把一張圖片丟到機(jī)器,機(jī)器能理解的就是每個(gè)像素點(diǎn)的值,如下圖:

我們在搭建好神經(jīng)網(wǎng)絡(luò)模型之后,需要做的就是用數(shù)據(jù)訓(xùn)練,最終需要確定的是每一個(gè)神經(jīng)元參數(shù)w和b,這樣我們就可以確定模型了。

假設(shè)我們輸入的是50*50像素的圖片(圖片已經(jīng)很小了),這依然有2500個(gè)像素點(diǎn),而我們生活中基本都是RGB彩色圖像,有三個(gè)通道,那么加起來就有2500*3=7500個(gè)像素點(diǎn)。

如果用普通的全連接,深度比較深時(shí),那需要確認(rèn)的參數(shù)太多了,對于計(jì)算機(jī)的計(jì)算能力,和訓(xùn)練模型來說都是比較困難一件事。

因此,普通神經(jīng)網(wǎng)絡(luò)的問題是:需要確認(rèn)的參數(shù)太多。

那CNN是怎么解決這個(gè)問題的呢?請接著往下看。

2. CNN是怎么解決這個(gè)問題的?

第一步:局部監(jiān)測

假設(shè)我們要看一張圖片中有沒有貓耳朵,也許我們不需要看整張圖片,只需要看一個(gè)局部就行了。因此看是否是一只貓,只需要看是否有貓尾、是否有貓嘴、是否有貓眼,如果都有,那機(jī)器就預(yù)測說這張圖片是一只貓。

因?yàn)檫@種方法看的是圖片的局部,而不是全部,也就是說神經(jīng)元連接的是部分的特征變量,而不是全部的特征變量,因此參數(shù)比較少。(如果這里看不懂沒關(guān)系,我們后面會(huì)詳細(xì)解釋)。

看到這里你可能會(huì)疑問,我怎么知道取哪個(gè)局部,我怎么知道貓耳在圖片的哪個(gè)部位?不著急,后面會(huì)講到。

第二步:抽樣,縮小圖片

假設(shè)我們要識(shí)別一張50*50像素的貓相片,如果我們把圖片縮小到25*25個(gè)像素點(diǎn),那其實(shí)還是能看出這是一只貓的照片。

因此,如果把圖片縮小了,就相當(dāng)于輸入的特征變量變少了,這樣也能減少參數(shù)的量。

卷積神經(jīng)網(wǎng)絡(luò)就是用上面這兩步的思想來減少參數(shù),那具體CNN的架構(gòu)是怎樣的?又是怎么運(yùn)行的?我們接下來詳細(xì)討論。

02? CNN的架構(gòu)

CNN的架構(gòu)流程圖:

第一步:卷積,即局部監(jiān)測。

第二步:特征抽樣,即縮小圖片。

然后重復(fù)第一、第二步(具體重復(fù)多少次,人為決定)。

第三步:全連接,把第一、二步的結(jié)果,輸入到全連接的神經(jīng)網(wǎng)絡(luò)中,最后輸出結(jié)果。

1. 卷積(Convolution)

首先,把圖片轉(zhuǎn)化成機(jī)器可以識(shí)別的樣子,把每一個(gè)像素點(diǎn)的色值用矩陣來表示。這里為了方便說明,我們就簡化,用6*6像素來表示,且取只RGB圖片一層。

然后,我們用一些過濾器跟輸入的圖片的矩陣做卷積。(如果不知道卷積怎么運(yùn)行的話,可以去問下百度)

那過濾器是什么呢?

——過濾器就是用來檢測圖片是否有某個(gè)特征,卷積的值越大,說明這個(gè)特征越明顯。

說到這里,我們回顧一下前面提到的問題:我怎么知道取哪個(gè)局部,我怎么知道貓耳在圖片的哪個(gè)部位?

用的辦法就是:移動(dòng)窗口卷積。

同一個(gè)過濾器,會(huì)在原圖片矩陣上不斷的移動(dòng),每移動(dòng)一步,就會(huì)做一次卷積。(每一移動(dòng)的距離是人為決定的)

因此移動(dòng)完之后,就相當(dāng)于一個(gè)過濾器就會(huì)檢測完整張圖片,哪里有相似的特征。

卷積跟神經(jīng)元是什么樣的關(guān)系呢?

上圖所示有3點(diǎn)需要說明:

1)每移動(dòng)一下,其實(shí)就是相當(dāng)于接了一個(gè)神經(jīng)元。

2)每個(gè)神經(jīng)元,連接的不是所有的輸入,只需要連接部分輸出。

說到這里可能你又會(huì)有疑問了,移動(dòng)一下就是一神經(jīng)元,這樣不就會(huì)有很多神經(jīng)元了嗎?那不得又有很多參數(shù)了嗎?

確實(shí)可能有很多神經(jīng)元,但是同一個(gè)過濾器移動(dòng)時(shí),參數(shù)是強(qiáng)行一致的,公用參數(shù)的。

3)所以同一個(gè)過濾器移動(dòng)產(chǎn)生的神經(jīng)元可能有很多個(gè),但是他們的參數(shù)是公用的,因此參數(shù)不會(huì)增加。

跟不同過濾器卷積:

同一層可能不止是跟一個(gè)過濾器卷積,可能是多個(gè)。

不同的過濾器識(shí)別不同的特征,因此不同的過濾器,參數(shù)不一樣。但相同的過濾器,參數(shù)是一樣的。

因此卷積的特點(diǎn)是:

  • 局部檢測
  • 同一個(gè)過濾器,共享參數(shù)

3. 池化(Max pooling)

先卷積,再池化,流程圖:

用過濾器1卷積完后,得到了一個(gè)4*4的矩陣,假設(shè)我們按每4個(gè)元素為一組(具體多少個(gè)為一組是人為決定的),從每組中選出最大的值為代表,組成一個(gè)新的矩陣,得到的就是一個(gè)2*2的矩陣。這個(gè)過程就是池化。

因此池化后,特征變量就縮小了,因而需要確定的參數(shù)也會(huì)變少。

4. 全連接

經(jīng)過多次的卷積和池化之后,把最后池化的結(jié)果,輸入到全連接的神經(jīng)網(wǎng)絡(luò)(層數(shù)可能不需要很深了),最后就可以輸出預(yù)測結(jié)果了。

那到這里,我們把CNN的工作流程就講完了,但是每一步具體的意義是什么,怎么理解?

可能你還不太理的順,接下來我們會(huì)用一些可視化的方式幫助大家理解。

03 CNN是怎樣學(xué)習(xí)的?

我們以AlexNet為例,給大家展示下CNN大致的可視化過程。

AlexNet是Alex Krizhevsky等人于2012年的ImageNet比賽中提出了新型卷積神經(jīng)網(wǎng)絡(luò),并獲得了圖像分類問題的最好成績(Top-5錯(cuò)誤率為15.3%)。

AlexNet的網(wǎng)絡(luò)架構(gòu):

其實(shí)AlexNet的結(jié)構(gòu)很簡單,輸入是一個(gè)224×224的圖像,經(jīng)過5個(gè)卷積層,3個(gè)全連接層(包含一個(gè)分類層),達(dá)到了最后的標(biāo)簽空間。

AlexNet學(xué)習(xí)出來的特征是什么樣子的?

  • 第一層:都是一些填充的塊狀物和邊界等特征。
  • 中間層:學(xué)習(xí)一些紋理特征。
  • 更高層:接近于分類器的層級(jí),可以明顯的看到物體的形狀特征。
  • 最后一層:分類層,完全是物體的不同的姿態(tài),根據(jù)不同的物體展現(xiàn)出不同姿態(tài)的特征了。

所以,它的學(xué)習(xí)過程都是:邊緣→部分→整體。

關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的可視化,大家想了解更多的話,可以參考文章《卷積神經(jīng)網(wǎng)絡(luò)超詳細(xì)介紹》。

04 AlphaGo

前面我們提到了AlphaGo有用到CNN,那具體是怎么應(yīng)用的呢,這里簡答給大家科普下:

我們把圍棋看成是一個(gè)19*19像素的圖片,,每個(gè)像素點(diǎn)的取值:有黑子是1、有白子是-1,空為0。

因此,輸入棋盤就是所有像素點(diǎn)的矩陣值,輸出是下一步落子的位置。

那這個(gè)跟CNN有什么關(guān)系?

我們知道CNN擅長做的事情就是檢測局部特征,那也可以把這項(xiàng)技能運(yùn)用到下圍棋上。

比如說上圖這種特征,檢測盤面上有沒有這樣的特征,如果有的話,通常下一步的落子是怎樣。就好比玩剪刀石頭布,檢測到對方出剪刀,那機(jī)器的應(yīng)對策略就是出石頭。

同樣可能有很多不同的特征,因此需要用不同的過濾器去檢測。

而且,同一個(gè)特征可能會(huì)出現(xiàn)在不同的位置,因此也可以用過濾器移動(dòng)的方法去檢測。

AlphaGo 有沒有池化?

講到這里你會(huì)不會(huì)好奇,AlphaGo到底有沒有用到CNN的池化。因?yàn)槌鼗前褕D片縮小的,圍棋是19*19個(gè)點(diǎn),如果縮成10*10個(gè)點(diǎn),能行嗎?

實(shí)際上AlphaGo是沒有用到池化這一步的,所以說CNN也未見得一定要使用池化,還是需要實(shí)際問題實(shí)際解決,靈活應(yīng)用。

好了,到這里就介紹完了CNN,后續(xù)我會(huì)寫一篇文章介紹深度學(xué)習(xí)的另一大門派:循環(huán)神經(jīng)網(wǎng)絡(luò)RNN,感興趣的同學(xué)記得關(guān)注哦。

 

本文由 @Jimmy 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自Unsplash,基于CC0協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評論
評論請登錄
  1. 很好,學(xué)習(xí)了,很希望能多學(xué)習(xí)一些AI的相關(guān)知識(shí)

    來自山東 回復(fù)
    1. 考古了

      來自四川 回復(fù)