1. Qiita
  2. 投稿
  3. DeepLearning
  • 12
    いいね
  • 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日目の記事です。
Comments Loading...