0
雷鋒網(wǎng)按:本文由圖普科技編譯自《Medical Image Analysis with Deep Learning Part2》,是最近發(fā)表的《深度學(xué)習(xí)下的醫(yī)學(xué)圖像分析(一)》的后續(xù)文章。雷鋒網(wǎng)獨(dú)家首發(fā)。
在《深度學(xué)習(xí)下的醫(yī)學(xué)圖像分析》系列的第一篇文章中,我們介紹了一些使用OpenCV和DICOM圖像基礎(chǔ)知識(shí)進(jìn)行圖像處理的過(guò)程。本文,我們將從“卷積神經(jīng)網(wǎng)絡(luò)”的角度討論深度學(xué)習(xí)。在系列的第三部分,我們將利用Kaggle的肺癌數(shù)據(jù)庫(kù),重新查看肺癌DICOM圖像中的關(guān)鍵內(nèi)容和信息,并且利用Kera開(kāi)發(fā)一個(gè)肺癌預(yù)測(cè)模型。
在了解“卷積神經(jīng)網(wǎng)絡(luò)”之前,我們要先知道什么是“卷積”。
何為“卷積”?
維基百科對(duì)“卷積”的定義是:一個(gè)關(guān)于兩個(gè)函數(shù)的數(shù)學(xué)運(yùn)算。這個(gè)數(shù)學(xué)運(yùn)算將會(huì)產(chǎn)生兩個(gè)原始函數(shù)之外的第三個(gè)函數(shù),這個(gè)函數(shù)通常被看作是兩個(gè)原始函數(shù)之一的修正版,實(shí)際上是這兩個(gè)原始函數(shù)的點(diǎn)乘式相乘的積分。我們可以簡(jiǎn)單地將第三個(gè)函數(shù)理解為“一個(gè)矩陣上的滑動(dòng)窗口函數(shù)”。
圖片來(lái)源:deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution
如上圖所示,綠色表示的是滑動(dòng)窗口,紅色的是滑動(dòng)窗口矩陣,輸出的結(jié)果是帶有卷積特性的矩陣。下圖是兩個(gè)方形脈沖的卷積及其輸出結(jié)果。
圖片來(lái)源:維基百科
Jeremy Howard在他的MOOC課程里,利用一個(gè)Excel表格很好地解釋了“卷積”。f和g兩個(gè)矩陣的卷積輸出是第三個(gè)矩陣卷積的第一層,也是這兩個(gè)矩陣的點(diǎn)乘結(jié)果。這兩個(gè)矩陣的點(diǎn)乘結(jié)果是下圖所示的“標(biāo)量矩陣”,也是一個(gè)數(shù)學(xué)函數(shù)的來(lái)源。
兩個(gè)矩陣的點(diǎn)乘結(jié)果
像Jeremy一樣,我們也來(lái)利用Excel表格。我們輸入的矩陣是函數(shù)f(),滑動(dòng)窗口矩陣是函數(shù)g()。兩個(gè)函數(shù)的點(diǎn)乘結(jié)果是表格中的兩個(gè)矩陣的和積,如下圖所示:
兩個(gè)矩陣的卷積
接下來(lái),我們把這個(gè)規(guī)律用到大寫字母A的一張圖像。大家都知道,所有圖像都是由像素構(gòu)成的。因此,我們輸入的矩陣f是“A”,把滑動(dòng)窗口函數(shù)定為任意的矩陣g。然后,我們就得到了兩個(gè)函數(shù)的點(diǎn)乘結(jié)果,如下圖:
圖片來(lái)源: cs231n.github.io/convolutional-networks/
在我看來(lái),一個(gè)簡(jiǎn)單的卷積神經(jīng)網(wǎng)絡(luò)CNN是所有層的一個(gè)序列。每一層都有一些特定的函數(shù)。每個(gè)卷積層都是三維的,所以我們用體積來(lái)作為度量標(biāo)準(zhǔn)。再進(jìn)一步,卷積神經(jīng)網(wǎng)絡(luò)的每一層都會(huì)通過(guò)一個(gè)可微函數(shù)來(lái)將激活量轉(zhuǎn)化為另一個(gè),這個(gè)函數(shù)叫做“激活”或者“轉(zhuǎn)化函數(shù)”。
“卷積神經(jīng)網(wǎng)絡(luò)”包含的不同實(shí)體分別是:輸入層、過(guò)濾器(或內(nèi)核)、卷積層、激活層、聚積層、批處理層。雖然這些層的組合排列各異,但是在不同的排列中還是存在一些規(guī)律的,給我們提供了不同的深度學(xué)習(xí)架構(gòu)。
輸入層:一般情況下,我們輸入至“卷積神經(jīng)網(wǎng)絡(luò)”的通常是一個(gè)n維數(shù)組。如果是一張圖像,我們有彩色通道的三維輸入——長(zhǎng)、寬、高。
圖片來(lái)源: http://xrds.acm.org/blog/2016/06/convolutional-neural-networks-cnns-illustrated-explanation/
過(guò)濾器(或內(nèi)核):如下圖所示,一個(gè)過(guò)濾器或內(nèi)核會(huì)滑動(dòng)到圖像的所有位置,將一個(gè)新像素作為所有像素的加權(quán)總和來(lái)進(jìn)行計(jì)算。正如上面Excel表格的示例,我們的過(guò)濾器g移動(dòng)到了輸入的矩陣f處。
來(lái)源: intellabs.github.io/RiverTrail/tutorial/
卷積層:輸入矩陣的點(diǎn)乘結(jié)果與內(nèi)核共同創(chuàng)造出的新矩陣就是“卷積矩陣”,也被稱作“卷積層”。
來(lái)源: https://docs.gimp.org/en/plug-in-convmatrix.html
下面這張非常清晰的視覺(jué)圖表能夠幫助你能更好地了解卷積填充和卷積轉(zhuǎn)置的具體過(guò)程:
來(lái)源: https://github.com/vdumoulin/conv_arithmetic
激活層:“激活函數(shù)”能分成兩類——“飽和激活函數(shù)”和“非飽和激活函數(shù)”。
sigmoid和tanh是“飽和激活函數(shù)”,而ReLU及其變體則是“非飽和激活函數(shù)”。使用“非飽和激活函數(shù)”的優(yōu)勢(shì)在于兩點(diǎn):
1.首先,“非飽和激活函數(shù)”能解決所謂的“梯度消失”問(wèn)題。
2.其次,它能加快收斂速度。
Sigmoid函數(shù)需要一個(gè)實(shí)值輸入壓縮至[0,1]的范圍
σ(x) = 1 / (1 + exp(?x))
tanh函數(shù)需要講一個(gè)實(shí)值輸入壓縮至 [-1, 1]的范圍
tanh(x) = 2σ(2x) ? 1
ReLU
ReLU函數(shù)代表的的是“修正線性單元”,它是帶有卷積圖像的輸入x的最大函數(shù)(x,o)。ReLU函數(shù)將矩陣x內(nèi)所有負(fù)值都設(shè)為零,其余的值不變。ReLU函數(shù)的計(jì)算是在卷積之后進(jìn)行的,因此它與tanh函數(shù)和sigmoid函數(shù)一樣,同屬于“非線性激活函數(shù)”。這一內(nèi)容是由Geoff Hinton首次提出的。
ELUs
ELUs是“指數(shù)線性單元”,它試圖將激活函數(shù)的平均值接近零,從而加快學(xué)習(xí)的速度。同時(shí),它還能通過(guò)正值的標(biāo)識(shí)來(lái)避免梯度消失的問(wèn)題。根據(jù)一些研究,ELUs分類精確度是高于ReLUs的。下面是關(guān)于ELU細(xì)節(jié)信息的詳細(xì)介紹:
圖片來(lái)源: http://image-net.org/challenges/posters/JKU_EN_RGB_Schwarz_poster.pdf
圖片來(lái)源:維基百科
Leaky ReLUs
ReLU是將所有的負(fù)值都設(shè)為零,相反,Leaky ReLU是給所有負(fù)值賦予一個(gè)非零斜率。Leaky ReLU激活函數(shù)是在聲學(xué)模型(2013)中首次提出的。以數(shù)學(xué)的方式我們可以表示為:
圖片來(lái)源:《卷積網(wǎng)絡(luò)中整流激活函數(shù)的實(shí)證評(píng)估》
上圖中的ai是(1,+∞)區(qū)間內(nèi)的固定參數(shù)。
參數(shù)化修正線性單元(PReLU)
PReLU可以看作是Leaky ReLU的一個(gè)變體。在PReLU中,負(fù)值部分的斜率是根據(jù)數(shù)據(jù)來(lái)定的,而非預(yù)先定義的。作者稱,在ImageNet分類(2015,Russakovsky等)上,PReLU是超越人類分類水平的關(guān)鍵所在。
隨機(jī)糾正線性單元(RReLU)
“隨機(jī)糾正線性單元”RReLU也是Leaky ReLU的一個(gè)變體。在RReLU中,負(fù)值的斜率在訓(xùn)練中是隨機(jī)的,在之后的測(cè)試中就變成了固定的了。RReLU的亮點(diǎn)在于,在訓(xùn)練環(huán)節(jié)中,aji是從一個(gè)均勻的分布U(I,u)中隨機(jī)抽取的數(shù)值。形式上來(lái)說(shuō),我們能得到以下結(jié)果:
下圖是ReLU、Leaky ReLU、PReLU和RReLU的比較:
圖片來(lái)源 :https://arxiv.org/pdf/1505.00853.pdf
PReLU中的ai是根據(jù)數(shù)據(jù)變化的;Leaky ReLU中的ai是固定的;RReLU中的aji是一個(gè)在一個(gè)給定的范圍內(nèi)隨機(jī)抽取的值,這個(gè)值在測(cè)試環(huán)節(jié)就會(huì)固定下來(lái)。
噪聲激活函數(shù)
這些是包含了Gaussian噪聲的激活函數(shù),下圖能幫助你了解“噪聲”是如何與激活函數(shù)相結(jié)合的:
圖片來(lái)源:維基百科
聚積層
“聚積層”的目的就是通過(guò)逐漸縮減矩陣的空間大小,減少參數(shù)和網(wǎng)絡(luò)內(nèi)計(jì)算的數(shù)量,進(jìn)而控制過(guò)度擬合?!熬鄯e層”在輸入中獨(dú)立運(yùn)行,然后利用最大值或平均值的操作來(lái)調(diào)整輸入矩陣的空間大小。“聚積層”最常見(jiàn)的形式就是帶有應(yīng)用于輸入的兩個(gè)樣本中的2x2過(guò)濾器的“聚積層”。在這種形式中,每一次最大值操作都會(huì)取超過(guò)4個(gè)的最大數(shù)量,深度維數(shù)保持不變。更常見(jiàn)的“聚積層”如下圖:
圖片來(lái)源: http://cs231n.github.io/convolutional-networks/#pool
圖片來(lái)源: https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
注意:這里我們把2 x 2窗口移動(dòng)了兩個(gè)單元格,然后取每個(gè)區(qū)域的最大值。
批規(guī)范化層
“批規(guī)范化”是將每個(gè)過(guò)渡層,包括激活函數(shù),標(biāo)準(zhǔn)化的有效方法?!芭?guī)范化”操作的兩個(gè)主要優(yōu)點(diǎn)是:
1.在一個(gè)模型中添加“批規(guī)范”能夠加快訓(xùn)練的速度
2.規(guī)范化操作大大降低了少數(shù)外圍輸入對(duì)訓(xùn)練的制約影響,同時(shí)減少了過(guò)度擬合的發(fā)生。
Jeremy的網(wǎng)絡(luò)公開(kāi)課中有更多關(guān)于“批規(guī)范化”的細(xì)節(jié)。
全連接層
“全連接層”是一個(gè)傳統(tǒng)的“多層感知器”,這個(gè)感知器在輸出層中使用了一個(gè)“柔性最大值激活函數(shù)”。顧名思義,“全連接”意味著上一層的每一個(gè)神經(jīng)元都與下一層的每個(gè)神經(jīng)元相連接。一個(gè)“柔性最大值函數(shù)”是邏輯函數(shù)的泛化,該函數(shù)將一個(gè)任意實(shí)值的K維向量轉(zhuǎn)化為一個(gè)實(shí)值在(0,1)范圍之間的K維向量。
圖片來(lái)源:維基百科
“柔性最大值激活函數(shù)”一般被用于最后的全連接層,獲取實(shí)值在0到1之間的概率。現(xiàn)在,我們對(duì)“卷積神經(jīng)網(wǎng)絡(luò)”中的不同層已經(jīng)有所了解了,那么具備了這些知識(shí),我們就能建立起肺癌檢測(cè)所需的深度學(xué)習(xí)架構(gòu)了。關(guān)于肺癌檢測(cè)的深度學(xué)習(xí)架構(gòu),我們將在下一篇文章中討論。
雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。