search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

深度學習下的醫學圖像分析(二)

AI 研習社按:本文由圖普科技編譯自《Medical Image Analysis with Deep Learning Part2》,是最近發表的《深度學習下的醫學圖像分析(一)》的後續文章。雷鋒網獨家首發。

在《深度學習下的醫學圖像分析》系列的第一篇文章中,我們介紹了一些使用OpenCV和DICOM圖像基礎知識進行圖像處理的過程。本文,我們將從「卷積神經網路」的角度討論深度學習。在系列的第三部分,我們將利用Kaggle的肺癌資料庫,重新查看肺癌DICOM圖像中的關鍵內容和信息,並且利用Kera開發一個肺癌預測模型。

「卷積神經網路」(CNN)

在了解「卷積神經網路」之前,我們要先知道什麼是「卷積」。

何為「卷積」?

維基百科對「卷積」的定義是:一個關於兩個函數的數學運算。這個數學運算將會產生兩個原始函數之外的第三個函數,這個函數通常被看作是兩個原始函數之一的修正版,實際上是這兩個原始函數的點乘式相乘的積分。我們可以簡單地將第三個函數理解為「一個矩陣上的滑動窗口函數」。

如上圖所示,綠色表示的是滑動窗口,紅色的是滑動窗口矩陣,輸出的結果是帶有卷積特性的矩陣。下圖是兩個方形脈衝的卷積及其輸出結果。

圖片來源:維基百科

Jeremy Howard在他的MOOC課程里,利用一個Excel表格很好地解釋了「卷積」。f和g兩個矩陣的卷積輸出是第三個矩陣卷積的第一層,也是這兩個矩陣的點乘結果。這兩個矩陣的點乘結果是下圖所示的「標量矩陣」,也是一個數學函數的來源。

兩個矩陣的點乘結果

像Jeremy一樣,我們也來利用Excel表格。我們輸入的矩陣是函數f,滑動窗口矩陣是函數g。兩個函數的點乘結果是表格中的兩個矩陣的和積,如下圖所示:

兩個矩陣的卷積

接下來,我們把這個規律用到大寫字母A的一張圖像。大家都知道,所有圖像都是由像素構成的。因此,我們輸入的矩陣f是「A」,把滑動窗口函數定為任意的矩陣g。然後,我們就得到了兩個函數的點乘結果,如下圖:

何為「卷積神經網路」?

在我看來,一個簡單的卷積神經網路CNN是所有層的一個序列。每一層都有一些特定的函數。每個卷積層都是三維的,所以我們用體積來作為度量標準。再進一步,卷積神經網路的每一層都會通過一個可微函數來將激活量轉化為另一個,這個函數叫做「激活」或者「轉化函數」。

「卷積神經網路」包含的不同實體分別是:輸入層、過濾器(或內核)、卷積層、激活層、聚積層、批處理層。雖然這些層的組合排列各異,但是在不同的排列中還是存在一些規律的,給我們提供了不同的深度學習架構。

輸入層:一般情況下,我們輸入至「卷積神經網路」的通常是一個n維數組。如果是一張圖像,我們有彩色通道的三維輸入——長、寬、高。

圖片來源: http://xrds.acm.org/blog/2016/06/convolutional-neural-networks-cnns-illustrated-explanation/

過濾器(或內核):如下圖所示,一個過濾器或內核會滑動到圖像的所有位置,將一個新像素作為所有像素的加權總和來進行計算。正如上面Excel表格的示例,我們的過濾器g移動到了輸入的矩陣f處。

卷積層:輸入矩陣的點乘結果與內核共同創造出的新矩陣就是「卷積矩陣」,也被稱作「卷積層」。

下面這張非常清晰的視覺圖表能夠幫助你能更好地了解卷積填充和卷積轉置的具體過程:

激活層:「激活函數」能分成兩類——「飽和激活函數」和「非飽和激活函數」。

sigmoid和tanh是「飽和激活函數」,而ReLU及其變體則是「非飽和激活函數」。使用「非飽和激活函數」的優勢在於兩點:

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細節信息的詳細介紹:

圖片來源: http://image-net.org/challenges/posters/JKU_EN_RGB_Schwarz_poster.pdf

圖片來源:維基百科

Leaky ReLUs

ReLU是將所有的負值都設為零,相反,Leaky ReLU是給所有負值賦予一個非零斜率。Leaky ReLU激活函數是在聲學模型(2013)中首次提出的。以數學的方式我們可以表示為:

圖片來源:《卷積網路中整流激活函數的實證評估》

上圖中的ai是(1,+∞)區間內的固定參數。

參數化修正線性單元(PReLU)

PReLU可以看作是Leaky ReLU的一個變體。在PReLU中,負值部分的斜率是根據數據來定的,而非預先定義的。作者稱,在ImageNet分類(2015,Russakovsky等)上,PReLU是超越人類分類水平的關鍵所在。

隨機糾正線性單元(RReLU)

「隨機糾正線性單元」RReLU也是Leaky ReLU的一個變體。在RReLU中,負值的斜率在訓練中是隨機的,在之後的測試中就變成了固定的了。RReLU的亮點在於,在訓練環節中,aji是從一個均勻的分佈U(I,u)中隨機抽取的數值。形式上來說,我們能得到以下結果:

下圖是ReLU、Leaky ReLU、PReLU和RReLU的比較:

圖片來源 :https://arxiv.org/pdf/1505.00853.pdf

PReLU中的ai是根據數據變化的;Leaky ReLU中的ai是固定的;RReLU中的aji是一個在一個給定的範圍內隨機抽取的值,這個值在測試環節就會固定下來。

雜訊激活函數

這些是包含了Gaussian雜訊的激活函數,下圖能幫助你了解「雜訊」是如何與激活函數相結合的:

圖片來源:維基百科

聚積層

「聚積層」的目的就是通過逐漸縮減矩陣的空間大小,減少參數和網路內計算的數量,進而控制過度擬合。「聚積層」在輸入中獨立運行,然後利用最大值或平均值的操作來調整輸入矩陣的空間大小。「聚積層」最常見的形式就是帶有應用於輸入的兩個樣本中的2x2過濾器的「聚積層」。在這種形式中,每一次最大值操作都會取超過4個的最大數量,深度維數保持不變。更常見的「聚積層」如下圖:

圖片來源: http://cs231n.github.io/convolutional-networks/#pool

注意:這裡我們把2 x 2窗口移動了兩個單元格,然後取每個區域的最大值。

批規範化層

「批規範化」是將每個過渡層,包括激活函數,標準化的有效方法。「批規範化」操作的兩個主要優點是:

1.在一個模型中添加「批規範」能夠加快訓練的速度

2.規範化操作大大降低了少數外圍輸入對訓練的制約影響,同時減少了過度擬合的發生。

Jeremy的網路公開課中有更多關於「批規範化」的細節。

全連接層

「全連接層」是一個傳統的「多層感知器」,這個感知器在輸出層中使用了一個「柔性最大值激活函數」。顧名思義,「全連接」意味著上一層的每一個神經元都與下一層的每個神經元相連接。一個「柔性最大值函數」是邏輯函數的泛化,該函數將一個任意實值的K維向量轉化為一個實值在(0,1)範圍之間的K維向量。

圖片來源:維基百科

「柔性最大值激活函數」一般被用於最後的全連接層,獲取實值在0到1之間的概率。現在,我們對「卷積神經網路」中的不同層已經有所了解了,那麼具備了這些知識,我們就能建立起肺癌檢測所需的深度學習架構了。關於肺癌檢測的深度學習架構,我們將在下一篇文章中討論。

關注 AI 研習社后,回復【1】獲取

百度雲盤地址!



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦