乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      卷積?神經(jīng)?網(wǎng)絡?教你從讀懂詞語開始了解計算機視覺識別最火模型 | CNN入門手冊(上)

       葉老師YP 2017-07-17

      大數(shù)據(jù)文摘作品,轉(zhuǎn)載要求見文末

      編譯 | 璐,高寧,樊恒巖,田奧

       

      簡介

      卷積神經(jīng)網(wǎng)絡聽起來像一個奇怪組合。這個名字涉及了生物學、數(shù)學,還有一點計算機科學亂入,但它卻是計算機視覺領域最具影響的創(chuàng)新。在2012年,由于Alex Krizhevsky使用神經(jīng)網(wǎng)絡贏得了ImageNet挑戰(zhàn)賽的冠軍(這個比賽可被看作計算機視覺領域的奧運會),神經(jīng)網(wǎng)絡第一次嶄露頭角。神經(jīng)網(wǎng)絡把分類誤差從26%降低到15%,這在當時是一個令人震驚的進步。

      從那以后,大量公司在他們的核心業(yè)務中使用深度學習。Facebook把神經(jīng)網(wǎng)絡用在自動標簽算法上,google把它用于相片搜索,亞馬遜把它用于產(chǎn)品推薦,Pinterest把它用于房屋列表個性化,Instagram把它用于搜索框架。

      然而,神經(jīng)網(wǎng)絡經(jīng)典且最常用的使用案例仍是圖像處理。就讓我們一起來看看,CNN(卷積神經(jīng)網(wǎng)絡)是如何在圖像處理任務中實現(xiàn)圖像分類的。

      問題描述

      圖像分類這項任務旨在把輸入的圖片分入某一特定類別(例如一只貓或者狗等)或者可能性最大的類別。對我們?nèi)祟惗?,圖像識別的能力是我們從出生起就在學習的一項任務,這項任務對于成年人來說更是不費吹灰之力。無需多想,我們就能迅速而準確地識別出我們所處的環(huán)境和我們周圍的物體。大多數(shù)時候,當我們看到圖片或者是周圍的世界時,甚至不用刻意觀察,我們就可以立刻描繪出場景的特征,并給每個物體貼上標簽。這些迅速識別模式、歸納知識以及適應不同圖像與環(huán)境的技能一直是機器難以擁有的。

      輸入和輸出


      當電腦看見一張圖像(把圖像作為輸入),它實際上看到的是一個由像素值組成的數(shù)組?;诜直媛屎蛨D像的大小,它會看到一個32 x 32 x 3的數(shù)組(3指的是RGB的值)。假設我們有一張JPG格式、大小為480 x 480的彩色圖片,那么它對應的就是一個480 x 480 x 3的數(shù)組。數(shù)組中的每一個數(shù)字都是介于0到255之間的,這些數(shù)字代表像素在這一點的強度。盡管這些數(shù)字對于人類做圖像分類是毫無意義的,它們卻是電腦唯一能得到的輸入信息。計算機識別圖像的基本思路是,你把這個數(shù)組輸入給電腦,它就會輸出一個數(shù)字,代表該圖像屬于某一特定分類的概率(例如,80%的概率是貓,15%的概率是狗,5%的概率是鳥)。

      計算機的任務

      現(xiàn)在我們知道了問題所在,以及輸入和輸出,下面我們就該來思考一下怎么完成這個過程了。我們希望計算機能夠區(qū)分開我們輸入的所有圖像,并且識別出其獨特的特征,比如哪些特征是狗特有的,哪些是貓?zhí)赜械?。這個過程也會在我們的大腦中下意識地進行。當我們觀察狗的圖片時,我們會在圖片中尋找可識別的特征,例如爪子或者4條腿,這樣我們就能將它正確地分類。同樣的,通過尋找例如邊緣和曲線之類的底層特征,并通過一系列的卷積層建立一個更加抽象的概念,電腦也能進行圖像分類。這是CNN工作原理的概覽。下面讓我們來了解一下它工作的細節(jié)。

      與生物學的聯(lián)系

      首先,講一點背景知識。當你剛聽到卷積神經(jīng)網(wǎng)絡這一術(shù)語時,你可能會想到神經(jīng)學或者生物學。沒錯,就是這樣!一定程度上,CNN確實從視覺皮層的生物學中汲取了靈感。視覺神經(jīng)中有一個小分區(qū)中的細胞對特定視覺區(qū)域很敏感。這個想法是從Hubel和Wiesel在1962年做的一個有趣的實驗中擴展得來的。實驗顯示,大腦中的一些特別的神經(jīng)細胞只會對特定方向的邊緣做出反應。例如,一些神經(jīng)元在看到垂直的邊緣時會被激發(fā),而另外一些則會被水平或者斜對角邊緣激發(fā)。Hubel和Wiesel發(fā)現(xiàn)所有這些神經(jīng)元都排列在一個圓柱構(gòu)架中,它們一起工作,產(chǎn)生視覺感知。系統(tǒng)中特定部件完成特定任務的想法(視覺皮層中的神經(jīng)細胞尋找特定特征)對機器也適用,它是CNN的基本原理。

      結(jié)構(gòu)

      回到細節(jié)上來,CNN所需做的是,拿到圖像,輸入一系列卷積、非線性、池化(下采樣)和完全連接的層中,最終得到一個輸出。就像我們之前說的,輸出可以是能最好描述圖的分類的一個單一結(jié)果或者一組分類的概率?,F(xiàn)在,最難的部分即是理解每一層的工作原理。首先讓我們來看看最重要的部分。

      第一層(數(shù)學部分)

      CNN的第一層通常是卷積層。首先,你需要記住卷基層的輸入是什么。如上所述,輸入是一個32 x 32 x 3的像素值數(shù)組?,F(xiàn)在,解釋卷積層的最好的方法就是想象一個手電筒正從圖像的左上角照過。我們假設這個手電筒的光覆蓋了一個5 x 5的區(qū)域。然后,我們想象這個手電筒的光照過輸入圖像的所有區(qū)域。在機器學習的術(shù)語中,這個手電筒叫做過濾器(有時也被稱作神經(jīng)元或者內(nèi)核),手電筒照過的區(qū)域稱作感受域。現(xiàn)在這個過濾器也是一個數(shù)組(其中的數(shù)字被稱為權(quán)重或者參數(shù))。一個非常重要的注意事項是過濾器的深度要和輸入的深度相同(這保證可以進行數(shù)學運算),所以這個過濾器的大小是5 x 5 x 3?,F(xiàn)在我們以濾器的第一個位置為例,即圖像左上角。隨著過濾器在輸入圖像上滑動,或者進行卷積運算,過濾器中的值會和圖像上的原始值相乘(又稱作計算點積)。將這些乘積相加(從數(shù)學角度講,一共會有75個乘積),你就得到了一個數(shù)字。記住,這個數(shù)字只是過濾器在圖像左上角時得到的結(jié)果?,F(xiàn)在,我們在輸入內(nèi)容的每一個位置重復這一過程。(下一步是把過濾器向右移動一個單位,然后再右移一個單位,以此類推)。輸入內(nèi)容上的每一個特有位置都會產(chǎn)生一個值。過濾器滑過所有位置后,你會發(fā)現(xiàn)你得到了一個28 x 28 x 1的數(shù)組,我們把它稱作激活映射或特征映射。你得到一個28 x 28數(shù)組的原因是,5 x 5的過濾器在32 x 32的輸入圖像上有784個不同的位置。這784個數(shù)字映射成了一個28 x 28的數(shù)組。 

      (小注:包含上圖在內(nèi)的本文的一些圖片,來自一本Michael Nielsen寫的《神經(jīng)網(wǎng)絡和深度學習》,強烈推薦。)

      假設現(xiàn)在我們用兩個而非一個5 x 5 x 3的過濾器,那么我們的輸出就變成了28 x 28 x 2的數(shù)組。通過使用更多的過濾器,我們能更好的保存空間維度。數(shù)學上講,這就是卷積層上發(fā)生的事。

      第一層(任務概況)

      讓我們從更高層次來看卷積實際在做什么吧。每一個過濾器都可以看做為一個特征標識器。這里的特征是指直線、簡單的顏色以及曲線之類的東西,這些都是圖片所共有的最簡單特征。我們的第一個過濾器是一個7 x 7 x 3的曲線檢測器。(為了簡化這個問題,在這里我們先忽略過濾器有3個單位深度這一事實,只考慮過濾器和圖片的最上層切片。)曲線檢測器有一定的像素結(jié)構(gòu),在該結(jié)構(gòu)中,沿著曲線形狀的區(qū)域?qū)⒕哂懈叩臄?shù)值。

      圖片標題:左- 過濾器的像素化表現(xiàn)

      右-可視化的曲線檢測過濾器


      現(xiàn)在讓我們將這個數(shù)學問題可視化。當我們對左上角的輸入使用這個過濾器時,這個區(qū)域的像素值和過濾器將進行乘法運算。以下圖為例,我們將過濾器放在左上角。

      圖片標題:左-原始圖

      右-可視化過濾器在圖片上的位置


      記住,我們要做的是將過濾器的值與圖片的原始像素值進行乘法運算。

      圖片內(nèi)容:可視化的接受域 的像素值 * 過濾器的像素值

      相乘和相加 = (50*30)+(50*30)+(50*30)+(20*30) +(50*30)=6600. (一個很大的數(shù)字?。?/span>

      一般來說,如果輸入圖片的形狀與過濾器所表現(xiàn)的曲線相類似,那么我們的乘積的和會是一個很大的數(shù)值?,F(xiàn)在,我們嘗試移動過濾器,看看會發(fā)生什么。

      圖片內(nèi)容:過濾器在圖片上的位置 接受域的像素值*過濾器的像素值

      相乘和加和 = 0


      這個值相比上一個要低很多!這是因為圖片中沒有任何部分與曲線檢測過濾器對應。記住,這個卷積層的輸出是一個激活映射。在這個只有一個過濾器(并且這個過濾器是曲線檢測器)的卷積的案例中,激活映射會顯示出圖片中那些與過濾器的曲線相類似的區(qū)域。該示例中,28 x 28 x 1的激活映射的左上角的值將為6600。這個很高的值意味著輸入中包含著某種類型的曲線激活了過濾器。激活映射的右上角的值是0,因為所輸入的值并沒有激活過濾器。(或者更簡單的說,圖片的右上角沒有這樣一個曲線)。這僅僅是一個過濾器,一個可以檢測出向右外側(cè)的曲線的過濾器。我們可以擁有更多的過濾器,如向左的曲線或者直線。過濾器越多,激活映射的深度越深,我們從輸入中取得的信息也就越多。

      免責聲明:在本節(jié)中的所描述的簡化版的過濾器,是為了說明一個卷積中所涉及到的數(shù)學問題。在下圖中,你可以看到一個已經(jīng)訓練好的神經(jīng)網(wǎng)絡中,第一個卷積層中過濾器可視化的一些示例。但它們主要的想法還是一致的。第一個卷積層中的過濾器對于輸入的圖片進行卷積,當過濾器所代表的某個具體特征在輸入中被發(fā)現(xiàn)時,過濾器就會被“激活”(或者得到很高的值)。

      (提醒:上面的圖片來自于斯坦福大學Andrej Karpathy 和Justin Johnson任教的 CS 231N 課程,如果想要更深入地了解CNN,這門課是你的不二選擇。)

      更深入地了解神經(jīng)網(wǎng)絡

      在傳統(tǒng)的卷積神經(jīng)網(wǎng)絡架構(gòu)中,各個卷積層中穿插了其他的一些層。我強烈鼓勵大家去了解這些層的具體功能和效果,但簡單來說,這些層提供了非線性和保留維度的功能,從而提升神經(jīng)網(wǎng)絡的魯棒性,并能防止過度擬合。一個經(jīng)典的CNN架構(gòu)如下:

      輸入-> 卷積->激活-> 卷積->激活->池化->激活-> 卷積->激活->池化->全連接

      神經(jīng)網(wǎng)絡的最后一層是很重要的一個層,我們稍后會進行具體介紹。讓我們先回顧一下到目前為止我們所學的內(nèi)容。第一個卷積層上的過濾器是用來發(fā)現(xiàn)特征的,通過這些過濾器可以發(fā)現(xiàn)低層次的特征,例如邊和曲線。然而,為了預測圖片類型,我們需要讓神經(jīng)網(wǎng)絡識別出高層次的特征,例如手、爪子或耳朵。讓我們思考一下,神經(jīng)網(wǎng)絡中第一個卷積層的輸出是什么?應該是一個28 x 28 x 3的體量。(假設我們使用的是3個5 x 5 x 3的過濾器)。

      當我們進入另一個卷積層的時候,第一個卷積層的輸出就成為了第二個卷積層的輸入。接下來的步驟很難被可視化。在第一層中,輸入是原始的圖片。然而,當我們進入第二個卷積層的時候,第一層的計算結(jié)果,激活映射就成為了第二層的輸入,每個輸入都描述了某些低層次特征在原始圖片中出現(xiàn)的位置?,F(xiàn)在當你使用一組過濾器(讓它通過第二個卷積層)時,輸入中被激活的部分就代表了高層次特征。

      這些特征可能是半圓形(由一條曲線和一條直線組成)或者方形(由幾根直線組合而成)。當你使用更深層的神經(jīng)網(wǎng)絡和更多的卷積層時,你將得到更復雜特征的激活映射。訓練完神經(jīng)網(wǎng)絡后,你會得到一些過濾器,當圖片中是手寫字母時它們會被激活,或者當識別到粉色時被激活等等。如果你想進一步了解卷積網(wǎng)絡中過濾器的可視化,你可以參考Matt Zeiler 和 Rob Fergus一篇很優(yōu)秀的研究報告(http://www./pubs/arxive2013/arxive2013.pdf)。你也可以在YouTube上看到Jason Yosinski做的一個很精彩的可視化展現(xiàn)視頻(https://www./watch?v=AgkfIQ4IGaM)。還有一個有意思的事情是,當你使用更深層的神經(jīng)網(wǎng)絡,過濾器所覆蓋的接受域會逐漸變大,這意味著過濾器考慮了原始輸入中更大范圍的信息(換句話說,這些過濾器對于更大范圍的像素空間反應更敏感)。

      全連接網(wǎng)絡層

      既然我們已經(jīng)可以檢測到這些高層級的特征,接下來我們就需要一個全連接網(wǎng)絡層作為神經(jīng)網(wǎng)絡的結(jié)束層。該層將之前層(卷積層、激活層或者池化層)的處理結(jié)果作為輸入,并輸出一個N維的向量,N是程序所選擇的類別的數(shù)量。例如你想做一個數(shù)字識別程序,一共有10個數(shù)字,那么N就是10。這個N維向量中每一個數(shù)字表示了目標對象屬于該類的概率值。例如,一個數(shù)字識別程序的結(jié)果向量是[0 .1 .1 .75 0 0 0 0 0 .05],它的意思就是這個圖片有10%的可能性是1, 10%的可能性是2, 75%的可能性是3,以及5%的可能性是9(注:你也可以使用其他方式表示輸出,在這里我使用了Softmax回歸模型的方法)。全連接網(wǎng)絡層的功能是通過分析前一層的輸出(代表高層次特征的激活映射)決定哪些特征值和某一個特定的類別相關性最高。

      例如,如果程序預測某張圖像是一條狗,它就會在代表一個爪子或四條腿等高級特征的激活映射中有較高的值。類似的,如果程序預測某張圖像是一只鳥,它就會在代表翅膀和喙等高級特征的激活映射中有很高的值。本質(zhì)上講,一個全連接層關注與特定類相關性最強、并且有特定權(quán)重的高層特征,以便能在計算權(quán)重與前面一層乘積后得到不同類的正確概率。

      模型訓練

      現(xiàn)在我要說的是我之前故意沒有提到一個話題,它也可能是CNN最重要的部分。閱讀中你可能已經(jīng)產(chǎn)生了許多疑問:過濾器如何在第一個轉(zhuǎn)換層知道它要尋找的邊緣和曲線?完全連接層如何知道要查看什么激活映射?每個層中的過濾器的值要怎么確定?這些都是通過一個叫“反向傳播”的訓練過程實現(xiàn)的。通過這一訓練,計算機可以正確調(diào)整其過濾值(或權(quán)重)。

      在討論反向傳播之前,讓我們先看一下使神經(jīng)網(wǎng)絡工作的條件。在我們出生的那一刻,我們的意識是一張白紙。我們不知道貓、狗、鳥是什么。類似地,在卷積神經(jīng)網(wǎng)絡被訓練之前,權(quán)重或過濾值都是隨機的。過濾器不知道如何查找邊緣和曲線,在更高的層的過濾器不知道尋找爪子和喙。隨著年齡的增長,我們的父母和老師給我們展示了不同的圖片和圖像,并告訴我們相應的標簽。這個讓圖像和標簽一一對應的想法就是CNN訓練的過程。

      讓我們回到反向傳播。假設我們有一個訓練集,它有數(shù)千張狗、貓和鳥的圖像,并且每一個圖像都有一個正確的標簽。

      反向傳播可以分為4個不同的部分:前向傳遞、損失函數(shù)、后向傳遞和權(quán)值更新。在向前傳遞時,你接受一個訓練圖像(它是一個32×32×3的數(shù)組),并通過整個網(wǎng)絡傳遞它。在我們的第一個訓練示例中,由于所有的權(quán)重或篩選值都是隨機初始化的,輸出可能類似于[.1 .1 .1 .1 .1 .1 .1 .1 .1 .1],基本上是一個不優(yōu)先考慮任何數(shù)字的輸出。以其當前的權(quán)重,這一神經(jīng)網(wǎng)絡是無法查找那些低級的特征的,因此也無法對圖像作出合理的分類,這就是反向傳播損失函數(shù)的一部分。記住,我們現(xiàn)在使用的是訓練數(shù)據(jù),此數(shù)據(jù)既有圖像又有標簽。比方說,輸入的第一個訓練圖像是3,圖像的真實標簽就是[ 0  0  0  1  0  0  0  0  0  0 ]。損失函數(shù)可以有許多不同的定義方式,一個常見的定義是MSE(均方誤差),即?乘(實際值-預測值)的平方。

      假設變量L等于那個值。可以想象,第一張訓練圖像的損失將非常高。現(xiàn)在,讓我們直觀地思考這個問題。我們想使得預測標簽(ConvNet輸出)與訓練集的實際標簽盡可能吻合(這意味著我們的網(wǎng)絡預測是正確的)。為了達到這一目標,我們要盡量減少我們的損失。讓我們把這一問題看作是微積分中的一個優(yōu)化問題——我們想找出哪些權(quán)重最直接地導致網(wǎng)絡的損失(或錯誤)。

      現(xiàn)在,我們要做的是在網(wǎng)絡中進行反向傳遞,它決定了哪些權(quán)重造成了最大的損失,并找出調(diào)整它們的方法,以減少損失。一旦我們計算出這個導數(shù)(dL/dW,W是權(quán)重),我們就可以進入最后一步,即權(quán)重更新。在這一步,我們對過濾器的權(quán)重進行更新,更新的方向即是我們剛才計算出的導數(shù)/梯度的反方向。

      學習率(Learning Rate)是由程序員選擇的參數(shù)。高學習率意味著在權(quán)重更新中采取更大的步驟,因此,該模型可能只需要較少的時間來收斂到最優(yōu)的權(quán)重集上。然而,學習率過高可能導致跳躍過大而不夠精確,無法收斂至最佳點。

      正向傳遞、損失函數(shù)、后向傳遞和參數(shù)更新過程是一個訓練迭代過程。程序?qū)⒅貜瓦@一過程,為每一組訓練圖像(通常稱為批處理)進行固定次數(shù)的迭代。在我們完成最后一個訓練示例中的參數(shù)更新后,如果一切正常,網(wǎng)絡就已經(jīng)得到了足夠的訓練,即網(wǎng)絡的權(quán)重得到了正確的調(diào)整。

      測試

      最后,為了檢驗我們的卷積神經(jīng)網(wǎng)絡是否有效,我們需要一套不同的圖像和標簽(不能在訓練和測試之間重復使用!)。我們用訓練過的卷積神經(jīng)網(wǎng)絡對圖片標簽作出預測,再比較輸出和這些圖片的真實標簽,以檢驗我們的網(wǎng)絡是否能正常工作。

      企業(yè)如何利用卷積神經(jīng)網(wǎng)絡

      數(shù)據(jù),數(shù)據(jù),數(shù)據(jù)!相比其他競爭對手,那些擁有海量數(shù)據(jù)的公司有著先天的優(yōu)勢。你給網(wǎng)絡提供的訓練數(shù)據(jù)越多,你可以做的訓練迭代越多,你能做的權(quán)重更新就越多,而當你投入到生產(chǎn)中時,對網(wǎng)絡的調(diào)整就越好。Facebook和Instagram可以使用數(shù)十億用戶當前的所有照片,Pinterest可以使用其網(wǎng)站上的500億個引腳的信息,谷歌可以使用搜索數(shù)據(jù),亞馬遜可以使用每天產(chǎn)品銷售產(chǎn)生的數(shù)以百萬計的數(shù)據(jù)。而現(xiàn)在,你已經(jīng)知道了使用這些數(shù)據(jù)背后的秘密了。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多