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