Coursera Deep Learning専門講座の受講メモ (コース4 - Convolutional Neural Networks - Week 4)
この記事のまとめ:
- CourseraのDeep Learning専門講座のコース4: Convolutional Neural NetworksのWeek 4の受講メモとして、要点とよくわからなかったところを補完のために調べたことなどを備忘録としてまとめています。
- Week 4では顔認識とニューラルスタイル変換について学びます。
コース4: Convolutional Neural Networksについて
このコースでは、基本的な畳み込みニューラルネットワーク (Convolutional Neural Networks)の層の実装と、マルチクラスの画像分類問題を解くためのディープニューラルネットワークの正しい組み上げ方について学びます。
4週間の内容は次の通りです。
Week 4の概要
このコースのWeek 4では、下記のことついて学びます。
- 顔認識
- Siamese Network
- Triplet Loss
- ニューラルスタイル返還
顔認識アプリケーションの分類
- 顔識別 (Face Verification) 画像と識別子を入力します。つまり、1:1の認識です。
- 顔認識 (Face Recognision) データベースにK人のデータが保存されており、1:Kの認識をします。
顔認識
顔認識を行うために過去に学んできたCNNと同じように構築することは可能ですが、多くの顔認識アプリケーションは、認識対象が後から追加されることが考えられます。これまで学んできたCNNは認識対象を認識するために非常に計算コストの高い訓練を行う必要があり、新しい顔を識別するのにCNNを訓練しなおすことは非常に大変です。
また、例えば従業員を認識するようなアプリケーションを例にとると、新しい従業員の教師データは少なく従来のCNNでは扱うことが困難です。なお、このように他クラス分類問題において、あるクラスに属する教師データがかなり少ない場合の問題をOne-shot Learningといいます。
そこで、Siamese Networkというニューラルネットワークを用いて、Triplet Lossという損失関数を使うことでこの問題を解決することが考えます。
Siamese Network
NNを とし定義し、評価関数 を次のように定義します。
このとき、 が次のような振る舞いをするようにしたいとします。
- と が同じ人物であれば、 は小さく、
- と が異なる人物であれば、 は大きく
上記を満たすように が符号化されたベクトルを出力するように訓練されたNNをSiamese Networkといいます。
一般的には、 はInceptionネットワークなどの最終段の全結合層が使われます。
Triplet Loss
Triplet Lossは、Siamese Networkを訓練するための損失関数として使われます。
3枚の画像A (Anchor)、P (Positive)、N (Negative)の組み合わせを用意します。Aは学習させたい人物の画像、Pは学習させたい人物でかつAとは異なる別の画像、NはPとは異なる人物の画像です。
その画像を次のTriplet Loss関数を使って勾配降下法による訓練をさせればよいです。
はハイパーパラメーターであり、 と の値が拮抗したいためにギャップを大きくするためのパラメーターです。
Triplet Loss関数を用いるとコスト関数は次のようになります。
ここで、学習セットを作る場合、PとNは異なる人物ではありますがなるべく近い画像を選ぶことでNNはより良い学習ができます。 どのようにA、P、Nの画像を選べばよいかは論文によくまとまっているので参照していただきたいです。
ニューラルスタイル変換 (Neural Style Transfer: NST)
これまでやってきたニューラルネットワークのパラメーターセットの値を得るためにコスト関数を最適化してきましたが、ニューラルスタイルネットワークではピクセルの値を得るためにコスト関数を最適化します。
NSTでは二つのイメージ(コンテントイメージCとスタイルイメージS)を合成して一つのイメージ (合成イメージG) を得ます。
NSTでは転移学習を応用しているため、VGGなど訓練済みのCNNの上にNSTを構築します。
コスト関数
NSTではコスト関数を次のように定義します。
は、CとGがどの程度似ているかを示すコンテントコスト関数であり、 は同様にSとGがどの程度似ているかを示すイメージコスト関数です。
また、 と はハイパーパラメーターであり、コンテントイメージとスタイルイメージの相対的な重みであります。
コンテントコスト関数
の計算には、訓練済みのCNN (e.g. VGG network)の任意の隠れ層 の 活性化関数 を使って次のように定義します。
と が似ているということは両方のイメージが同じような内容であるといえます。
スタイルコスト関数
スタイルコスト関数では、スタイルは活性化関数 のチャネル間の相関 (正確には非正規化相互共分散行列)として定義します。各層における活性化関数のチャネルは特徴検出器のような働きがありますので、チャネル間の相関が高い常態とは入力画像に異なる特徴が同時に起こっている状態を表します。つまり、スタイルイメージと合成イメージの特徴が近い場合には相関の差が小さいということになります。そのため、スタイルイメージと合成イメージでそれぞれ相関を計算し、それらの平均二乗誤差をスタイルコスト関数と定義します。
隠れ層 においてチャネル間の相関の計算を行います。
、、はそれぞれ高さ、幅、チャネルのインデックスです。また、 は の行列です。
線形代数においてはこの行列はグラム行列と呼ばれます。
最後に各層ごとの係数 を以て の総和を求めることでスタイルコスト関数が求まります。
畳み込みニューラルネットワークの汎用化
これまで畳み込みニューラルネットワークの応用先として2次元データである画像のみを扱ってきましたが、畳み込みニューラルネットワーク自体は1次元や3次元などさまざまな次元のデータにも汎用化できます。
CourseraのDeep Learning専門講座の他のコースの受講メモ
- コース1: Neural Networks and Deep Learning
- コース2: Improving Deep Neural networks
- コース3: Structuring Machine Learning Projects
- コース4: Convolutional Neural Network
- コース5: Sequence Models
コメント
コメントを投稿