畳み込みニューラルネットワークを用いて肺がんの予測

こちらはTaposh Dutta-Roy – Mediumの記事を参照し,作った内容になります.

-------------------------------------------

前回に続いて,医用画像処理の第2弾の内容をまとめる.

 今回のテーマは畳み込みニューラルネットワーク(CNN)を用いて画像から肺ガンを予測することです.

1. 畳み込み演算 

畳み込みニューラルネットワークを理解する前に,まずは畳み込みという操作を理解する必要があります.

Wikipediaによると以下の定義です.

畳み込み演算とは関数 g を平行移動しながら関数 f に重ね足し合わせる二項演算である

 

わかりやすく可視化するとスライドする窓を行列にかけたイメージです. 下図の緑の図は元に画像で,それにフィルターをかけると黄色の領域となり,畳み込まれた結果は右側の結果になります.

フィルタの値は以下の値です.

 1 0 1

    0 1 0

    1 0 1

f:id:dreamhona-lele:20180423144138g:plain

参考ページ: Convolution with 3×3 Filter. Source: http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution

 

ほかにも以下のような畳み込み演算を可視化した例があり,より直感的に理解できます.二つの矩形窓関数fとgの畳み込み演算した結果が黒線の値で表れます.

f:id:dreamhona-lele:20180423145942g:plain

 

畳み込み演算のマークは*で,(f*g)(t)と表すことができます.演算の式を理解する前にまずはドット積を理解する必要で,以下のようです.

f:id:dreamhona-lele:20180423152658p:plain

たたみ演算とは行列同士のドット積として理解することもできます.

 

2. 画像処理の畳み込み演算

ご承知の通り,画像はピクセルから作られています.下図の例ではアルファベットの'A'の文字を行列にし,excelに出力した結果です.真ん中のフィルター行列をかけた結果は右側のようです.

 

f:id:dreamhona-lele:20180423154813p:plain

 

3. 畳み込みニューラルネットワーク

 畳み込みニューラルネットワーク(以下CNNと呼ぶ)とは処理層の系列のことだと理解しています.各層に様々な用途があります.または色画像が3次元です.さらに各層の出力に対し,微分可能なアクティベーション関数を用いて変換することが必要で,この関数のことをアクティベーション関数か活性化関数と呼ぶ.下の図ではCNNの一例をあげております.

f:id:dreamhona-lele:20180423155343p:plain

Source: http://cs231n.github.io/convolutional-networks/

CNNに必要な要素は:入力層,フィルター(カーネルともいう),畳み込み層,活性化層,プーリング層,またはBatch Normalization層などがあげられます.これらの層の組み合わせを使って様々なネットワーク構造を作っています.

 

3.1 入力層

入力層は基本的にn次元の配列になります.例えば,画像の場合3次元で,それぞれ高さ(Height),幅(Width),深さ(Depth)は画像のチャネル数に対応しています.

 

f:id:dreamhona-lele:20180423160814p:plain

 

3.2 フィルタとカーネル

下図のように入力層にフィルタをかけることにより重みつけられた値が計算され,出力層の一単位になります.

f:id:dreamhona-lele:20180423161248p:plain

Source: http://xrds.acm.org/blog/2016/06/convolutional-neural-networks-cnns-illustrated-explanation/

3.3 畳み込み層


いよいよ畳み込み層の説明ですが,名前の通り前述下畳み込み演算が行なわれる層です.畳み込み層に必要なパラメータのpadding,stridesとtransposeは以下の図で説明されています.

f:id:dreamhona-lele:20180423161835p:plain

source : https://github.com/vdumoulin/conv_arithmetic

 

3.4 活性化層

活性化関数に図のように2種類ありまして,飽和型と非飽和型です.(現在のニューラルワークでは飽和型の活性化関数が使われていません.)

  1. 飽和型:Sigmoid, Tanh
  2. 非飽和型:ReLU,ELU,Leaky ReLU,PReU,RReLU

非飽和型の活性化関数の良いところは以下です.

  • 1. 勾配爆発/消失問題の解決
  • 2. 収束スピードの加速

 

3.5 プーリング層

プーリング層の目的は配列の次元を徐々に減らすことにより,ネットワークのパラメータを減らすことです.計算時間が短くになるにつれ,過学習も抑止することができることになります.プーリング層は各入力に対し,MaxかAverageすることにより空間中にリサイズします.例として以下の図を参考してください.

f:id:dreamhona-lele:20180423175110p:plain

Source : https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

3.6 Batch Normalization Layer

Batch Normalizationは各中間層の重みと活性化関数に対し,正規化する層のことを言います.そうするメリットは以下のようです.

1.  バッチノルムを各層に加えることにより,10x訓練スピードまでにあげることが知られています.

2.  正規化により少量のアウトライアーズによる過学習に対する抑止することもできます.

 

3.7 全結合層

全結合層は従来からの多層ニューラルネットワークを流用し,出力にソフトマックス函数を活性化函数として利用する層のことです.'全結合'という言葉は前のレイヤの全てのニューロンから現在レイヤのニューロンに全て繋くことを言います.ソフトマックス函数はロジステック函数の一般化としてk次元に横並びにしたもので,出力がk次元の(0,1)の間の実数を出力し,合計が1になるように設計された函数です.

 

ソフトマックス函数(Wikipedia)

f:id:dreamhona-lele:20180424162348p:plain

 

ソフトマック活性化関数は最後の全結合層お出力を各クラスの確率として合計1になるように設定.

 

ここまで畳み込みニューラルネットワークCNNのコンテンツに関する説明を終えました.次回は実際にKerasを用いた深層学習構造で肺がんの検出を実装します.