初心者プログラマがガチムチプログラマを目指すぶろぐ

2017年の春から本格的にプログラミングを学び始めた学生です!よろしければ閲覧、ご指導のほどよろしくお願いいたします!!

機械学習の勉強を真面目に始めましたわ[part2]

went-went-takkun135.hatenablog.com

続き行きます!主にCNNの話と用語解説になると思います!!

畳み込みニューラルネットワーク(CNN)

主に画像に用いられるニューラルネットワーク。 昔のモデル(ここまで考えてきたモデル)では、 Affineレイヤで前層の出力を全結合していたが、 その部分をConvolutionレイヤで置き換え、 必要に応じて、活性化関数適用後の出力にPoolingレイヤを挟むことで Affineレイヤの形状無視と言う欠点を補う。

Convolutionレイヤ

形状を考えるために、入力データに対して、 フィルター(カーネル) を用いた結合を行う。 フィルターは入力データと同じチャンネル数で、任意のサイズを持つ。 フィルターのサイズと、 入力データに対する パティング 、フィルターの ストライド によって 出力データのサイズが決定する。 一つのフィルターに対して、出力データのチャンネル数は常に1つのため、 複数のフィルターを用意して、出力データのチャンネル数を調整する。

Poolingレイヤ

サイズを小さくするための演算。 ある範囲の最も大きな値のみ抽出していくMaxPoolingが画像処理の分野では主流である。 Poolingレイヤの特徴は以下の3つに代表される。

  • 学習するパラメータがない
  • チャンネル数は変化しない
  • 微小な位置変化に対してロバスト

CNNの特徴?

フィルターが前半の層では低次元のエッジなどを抽出していくのに対し、 後半のフィルターは高次元の犬の顔などを抽出し始めるらしい。 これは層を多くすることによって、出力までの下準備をそれまでのレイヤで 丹念にできることに起因するとかしないとか。

代表的なCNN

LeNet

1998年初めてのCNN?基本的な構造は今使われているものと同じだが、 PoolingレイヤでMaxPoolingを行なっているわけではないらしいのと、 活性化関数がSigmoid関数らしい。

AlexNet

2012年に彗星のごとくコンペティションに現れ、 圧倒的な成績でトロフィーと話題をさらっていったAlexNetさんです。 機械学習ブームの火付け役をしてくれたらしいですね。LeNetと比べると

  • 活性化関数にReLU関数を用いる
  • LRNと言う局所的正規化を行う関数を挟む
  • Dropoutを使用する

松尾教授の書籍を読んだ時、うろ覚えですが、確かこのDropoutが 革新的だったといっていたような気がします。うろ覚えなので突っ込まないでください。

ディープラーニング

層を厚くすると言うこと

  • 表現力の増加
  • 表現するために必要な学習パラメタの減少
  • 学習時間は増加

こんな感じのメリットデメリットがあるらしい。 表現力の増加とあるが、実際、MNISTの認識では2層くらいのモデルが 最も高精度らしく、表現力がどの程度必要なのかも考えなければならない。 ちなみに2015年のクラス分類コンペティションの優勝モデルは 150層とか言う馬鹿げたレベルのディープさだったそうな。

有名なネットワーク

VGG

CNNの基本型らしい。3x3の小さなフィルターでなんども畳み込むそうな。

GoogleLeNet

基本的に層をディープにするといったら、伝播方向っぽいんだけど、 Googleさんは横方向にも伸ばしてしまったそうな。 インセプション構造 と呼ぶらしく、複数のサイズのフィルターで たたみ込んでその結果を結合するそうな。

ResNet

GoogleがきてMSが来ないわけがない。 これがさっき言ったアホみたいに層を深くした150層ネットワーク。 レイヤを通した出力とレイヤを通す前の入力の合計をその層の出力とする スキップ構造と呼ばれるものを用いることで、 勾配消失問題を克服して、層をものごっつ厚くできたそうな。

転移学習

すでに学習済みのパラメタをそのまま初期値として用いて、 次の学習を行う手法のこと。少ないデータセットしか手元にない時とかいいらしい。

最近ディープラーニングで行われていること

  • 物体検出(物体認識の適用範囲検索と物体認識の結合)
  • セグメンテーション(ピクセルレベルでのクラス分類)
  • 画像キャプション生成(CNNとRNNの結合)
  • 画像スタイル変換(中間出力とのloss)
  • 画像生成(DCGAN)

強化学習

エージェント(computer)が環境から得られる報酬を 最大化するように動いていくのかな? ゲームとかでやってるらしい。 パックマンをコンピューターにやらせたらもう人は勝てないらしい。 とりあえず強化学習にはまた独自のアルゴリズムがあるっぽくて(Q学習?) それとCNNを融合させることでDeep Q-Networkとか言うすごい奴が生まれたらしい。

まとめ

特殊な用語がたくさん出てきたので、 とりあえずこの分野に入るときには一回真面目に入門書を読むべきと感じました。