• 24
    いいね
  • 0
    コメント

PCANetというニューラルネットワークを実装しました。

PCANetの概要

PCANetはその名の通り,ネットワークの重みをPCA(主成分分析)によって計算するCNNの一種です。

利点

PCANetには次のような特徴があります。

  • PCAで重みを計算するため学習が非常に高速である
  • PCANetそのものの学習は教師ラベルを必要としない
  • 調整が必要なハイパーパラメータが無い
  • モデルが比較的単純なため実装しやすい

教師ラベルを必要としない

PCANetは,画像から切り出したパッチをベクトルとみなし,その主成分をネットワークの重みとしています。
一般的なCNNでは,目標とする出力とネットワークの出力の差をネットワーク全体に逆伝搬することで学習を行っています。一方でPCANetは画像さえ与えられればあとはPCAをかけるだけで学習ができてしまうため,教師ラベルを必要としません。

欠点

モデルが線形な演算やヒストグラム計算のみで構成されているため,非線形なモデルと比べると表現力は劣るようです。例えばCIFAR10での識別精度は80%に達していません

「DeepLearningやるほどの計算量が無い,でもHoGだと精度が悪い」などというときにはPCANetを使うといいかもしれません。

実装について

論文中にわからない部分がある

We then subtract patch mean from each patch

とありますが,データセット内の全ての画像から抽出したパッチの平均なのか,それとも画像1枚ごとに抽出したパッチの平均なのかがわかっていません.私は画像間の輝度差を消せるので多分後者だろうと思っています。

mini-batchが使えない

PCAは基本的にバッチ処理なので,mini-batchのようにデータを小さなバッチに切り分けて学習することができません。このため非常に大きなデータを使って学習する際はメモリが足りなくなってしまいます。
実装上の解決策として,

  • 逐次学習可能なPCAを使う
  • mini-batchの各バッチに対してPCAを適用し,各バッチの主成分の和を重みとする

などが考えられるため,今後必要に応じて改善していきます。

この投稿は DeepLearning Advent Calendar 201615日目の記事です。