深さ学習(26)Network In Network学習ノート

7232 ワード

Network In Network学習ノート
原文住所:http://blog.csdn.net/hjimce/article/details/50458190
作者:hjimce
一、関連理論
このブログでは、2014年のICLRのすごいpaperについて説明します.このpaperが提案したネットワーク構造は,従来のCNNネットワークの改良である(この文献は少ないので,学習が必要であると感じている).
従来のボリュームニューラルネットワークは、一般に、線形ボリューム層、プール化層、全接続層が積層されたネットワークである.ボリューム層は線形フィルタにより線形ボリューム演算を行い,次いで非線形活性化関数を接続し,最終的に特徴図を生成する.Reluアクティブ化関数を例にとると、フィーチャーマップの計算式は次のとおりです.
 
ここで(i,j)はピクチャ画素点の位置インデックスを表し、xijは我々がウィンドウに蓄積したピクチャブロックを表し、kは我々が抽出する特徴図のインデックスを表す.
一般に,我々が抽出するいくつかの潜在的な特徴が線形分割可能であれば,線形のボリューム演算には十分である.しかし、一般的に私たちが抽出する特徴は一般的に高度に非線形である.従来のCNNでは,超完全なフィルタを用いて,種々の潜在的特徴を抽出できるかもしれない.例えば、私たちはある特徴を抽出しなければならないので、私はたくさんのフィルタを使って、すべての可能性のある抽出をして、このように私が抽出したい特徴もカバーすることができますが、このように1つの欠点があります.それはネットワークが怖くて、パラメータが多すぎます.
CNNの上層部の特徴は、実際には低層の特徴が何らかの演算によって結合されていることを知っています.そこで著者らは,この考えに基づいて,各局所感受野においてより複雑な演算を行うことを提案し,ボリューム層に対する改良アルゴリズム:MLPボリューム層を提案した.一方、従来のCNNの最後の層は全接続層であり、パラメータの個数が非常に多く、Alexnetのようなオーバーフィットを引き起こしやすく、CNNモデルでは、ほとんどのパラメータが全接続層に占有されているため、このpaperは、全接続層の代わりにグローバル平均プール化を提案した.そのため、後で主にこの2つの革新点から説明します.
二、MLP畳み込み層(文献革新点1)
これは文献の大きな革新点であり,すなわちmlpconv層を提案した.Mlpconv層は,各ボリュームの局所感受野にマイクロ多層ネットワークが含まれていると見なすことができる.実は以前のボリューム層では,野窓の演算を局所的に感じており,下図に示すように単層のネットワークとして理解できる.
深度学习(二十六)Network In Network学习笔记_第1张图片
せんけいボリューム
CNN層の計算式は以下の通りである.

しかし、現在は異なり、多層ネットワークを採用し、非線形性を向上させなければならないので、mlpconv層のネットワーク構造図は以下の通りである.
  深度学习(二十六)Network In Network学习笔记_第2张图片
Mlpconv層
上の図から分かるように、簡単に言えば、多層mlpのマイクロネットワークを利用して、局所感受野のニューロンごとにもっと複雑な演算を行い、以前のボリューム層、局所感受野の演算は単層のニューラルネットワークにすぎなかった.mlpconvレイヤの各フィーチャーマップの計算式は、次のとおりです.
深度学习(二十六)Network In Network学习笔记_第3张图片
一般にmlpは3層のネットワーク構造である.
次は、mlpconvネットワークのcaffeネットワーク構造ファイルです.ソースコードは次のとおりです.https://gist.github.com/mavenlin/d802a5849de39225bcc6 :
layers {
  bottom: "data"
  top: "conv1"
  name: "conv1"
  type: CONVOLUTION
  blobs_lr: 1
  blobs_lr: 2
  weight_decay: 1
  weight_decay: 0
  convolution_param {
    num_output: 96
    kernel_size: 11
    stride: 4
    weight_filler {
      type: "gaussian"
      mean: 0
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layers {
  bottom: "conv1"
  top: "conv1"
  name: "relu0"
  type: RELU
}
layers {
  bottom: "conv1"
  top: "cccp1"
  name: "cccp1"
  type: CONVOLUTION
  blobs_lr: 1
  blobs_lr: 2
  weight_decay: 1
  weight_decay: 0
  convolution_param {
    num_output: 96
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "gaussian"
      mean: 0
      std: 0.05
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layers {
  bottom: "cccp1"
  top: "cccp1"
  name: "relu1"
  type: RELU
}
layers {
  bottom: "cccp1"
  top: "cccp2"
  name: "cccp2"
  type: CONVOLUTION
  blobs_lr: 1
  blobs_lr: 2
  weight_decay: 1
  weight_decay: 0
  convolution_param {
    num_output: 96
    kernel_size: 1
    stride: 1
    weight_filler {
      type: "gaussian"
      mean: 0
      std: 0.05
    }
    bias_filler {
      type: "constant"
      value: 0
    }
  }
}
layers {
  bottom: "cccp2"
  top: "cccp2"
  name: "relu2"
  type: RELU
}

三、グローバル平均プール化(文献革新点2)
従来のボリュームニューラルネットワークボリューム演算は一般に低層ネットワークに現れる.分類問題では,最後のボリューム層の特徴図を量子化して全接続層に接続し,最後に次のsoftmax論理で分類層に回帰した.このネットワーク構造は,ボリューム層を従来のニューラルネットワーク層と接続させる.ボリューム層を特徴抽出器と見なし,得られた特徴を従来のニューラルネットワークで分類することができる.
しかしながら、全接続層はパラメータの個数が多すぎるため、フィッティングが過剰になりやすく、ネットワークの汎化能力が望ましくない.そこでHintonはDropoutの手法を採用し,ネットワークの汎化能力を高めた.
本論文では,従来のCNNにおける全接続層に代わるグローバル平均プール化法を提案する.従来の全接続層とは異なり,各特徴図に対して1枚のピクチャ全体をグローバル平均プール化し,各特徴図に対して1つの出力を得ることができる.このように平均プール化を採用することで、パラメータさえ節約でき、ネットワークを大幅に低減し、フィッティングを避けることができる一方で、各特徴図は出力特徴に相当し、この特徴は私たちの出力クラスの特徴を示している.このように、もし私たちが1000の分類タスクをしている間に、私たちのネットワークが設計されている間に、最後のレイヤの特徴図の数は1000を選択します.次は「Network In Network」ネットワークのソースコードで、最後のレイヤのネットワーク関連パラメータです.
layers {
bottom: "cccp7"
top: "cccp8"
name: "cccp8-1024"
type: CONVOLUTION
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
convolution_param {
num_output: 1000
kernel_size: 1 
stride: 1
weight_filler {
type: "gaussian"
mean: 0
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}


グローバル平均プール化レイヤに関するパラメータは次のとおりです.
layers {
bottom: "cccp8"
top: "pool4"
name: "pool4"
type: POOLING
pooling_param {
pool: AVE
kernel_size: 6
stride: 1
}
}


Alexnetネットワークでは、最後のボリュームレイヤ出力の特徴図サイズがちょうど6*6なので、poolingのサイズ選択6、方法選択:AVEです.
四、全体的なネットワークアーキテクチャ
以上の著者らの従来のCNNに対する2つの改良に基づいて,1000物体分類問題を行い,著者らは最後に4層のNIN+グローバル平均プール化を設計し,ネットワークは以下のようにした.
深度学习(二十六)Network In Network学习笔记_第4张图片
个人総括:个人はこの文献がとても価値があると感じて、実现の方式もとても简単で、最初は私はまたcaffeのc++ソースコードが必要だと思ってNINネットワークを実现して、结果はNINのソースコードの実现の方式が実は1*1のボリュームコアであることを発见して、ボリューム演算を実现して、だから実现するのはかなり简単で、自分でソースコードを书く必要はありません単純にボリュームコアの大きさを変えて、最後の層の全接続層をavg poolingで置き換えるだけでOKです.個人評価:ネットワークは分かりやすく、簡単に実現できるが、元のネットワークを改善し、精度を高め、モデルの大きさを減らすことができるので、学ぶ価値のある文献である.2015年には、CNNネットワーク構造の改善に関する牛迫文献「Spatial Transformer Networks」、「Striving For Simplicity:The All Convolutional Net」、「Stacked What-W here Auto-encoders」もいくつか説明されます.だから私たちは1編1編の勉強が必要です.
参考文献:
1、《Network In Network》
2、https://github.com/BVLC/caffe/wiki/Model-Zoo
3、https://gist.github.com/mavenlin/d802a5849de39225bcc6 
4、《Maxout Networks》
**********************作者:hjimce时间:2016.1.4连络QQ:1393852684オリジナル文章,版権所有,转载请保留本行情报***********************