O'Reilly Japan - ゼロから作るDeep Learning
畳み込みニューラルネットワーク
- CNN(Convolutional Neural Network)
- 画像に特に有効
- これまでのニューラルネットは全結合
- Affine ReLU
- Affine Softmax
- CNN
- Convolution ReLU Pooling
- 出力に近い層 Affine Relu
- 最後はAffine Softmax
- 全結合層の問題点
- データの形状が無視される
- 3次元の画像データを1次元にして入力
- 特徴マップ
- 畳み込み層の入出力データのこと
- 畳み込み演算
- 積和演算
- フィルター(カーネル)をスライドさせて入力と乗算して和を取る
- フィルターのパラメータが重みに相当
- 最後にバイアスも加算
- パディング
- 出力サイズの調整
- 周囲に0埋め
- ストライド
- フィルター適用位置の感覚
- 大きくすると出力サイズが小さくなる
- 3次元データの畳込み演算
- フィルターのチャンネルも入力に合わせる
- 出力のチャンネルは1になる
- フィルターを複数適用して、チャンネル複数に
- これを次の層に渡して行くのがCNN
- プーリング
- 空間を小さくする演算
- maxプーリング、最大値を取る
- フィルターと同じくストライドとサイズ
- 特徴1: 学習するパラメータがない
- 特徴2: チャンネル数が変化しない
- 特徴3: 微小な位置変化に対してロバスト
レイヤの実装
- 4次元データ 複雑になる
- さらにnumpyはforが遅い
- im2col
- image to column
- 画像データを行列に変換
- あとはAffineと同じく行列の内積でいける
- メモリ使うが多量の行列を一気に処理するのはライブラリの最適化により効率良い
- 最後reshapeして戻す
CNNの可能性
- 層を重ねると複雑で抽象的な情報が抽出可能
- 3層のシンプルなネットワークで99%近くの精度
- LeNet(1998)
- AlexNet
- そんなに変わらない
- GPUとビッグデータにより日の目を見た
- 学習のための大量データと、計算リソース
TODO
- 99%超え目指す