skip to Main Content
スパモ勉強会について

弊社データサイエンスチームは人員増強を続けており、正社員とインターン生を合わせて30名を超えました。個性豊かなメンバーはそれぞれ得意とする分野も異なります。弊社の強みであるスパースモデリングも分野が多岐に渡ることから、知識や技術に個人差が出てくるようになりました。

そこで互いを補強すべく、業務の一環としてスパースモデリングを学び直す勉強会(以下スパモ勉強会)を始めました。コロナウィルスが猛威を奮い、フルリモートな職場環境に移行した中、スパモ勉強会は互いの交流を促進し興味関心を知る良い機会としても機能しています。

勉強会の成果は順次ブログに掲載していく予定です。第一段として、辞書学習のさわりの部分について概観していきます。

 

辞書学習とは

辞書学習では画像や波形などの信号のパッチを辞書(アトムの集り)の重み付き線形和として表現します(図1)。これにより本質的な信号を抽出でき、様々な応用が可能になります。

  • ノイズ除去 (図1)
  • 超解像
  • 欠損補完
  • データ圧縮
  • 分類など

応用範囲の広さに加え、入力データをパッチごとに切り揃えることで異なるサイズの画像や波形を用いた学習・予測が可能なことも魅力の一つです。

図1. 辞書学習の例。Pythonにおける代表的な機械学習モジュールであるscikit-learnが紹介している辞書学習を用いたノイズ除去の例を元に作成。アライグマの画像はPIXINIOより入手し加工しました。

数学的には辞書学習は行列分解の一種で、主成分分析も仲間になります(図2)。このため、scikit-learnにおいては、辞書学習は主成分分析と共にサブモジュールのsklearn.decompositionに収録されています。

図2. 辞書学習における前処理と学習の流れ。学習したい画像をパッチごとにベクトル化し合体させて行列化することで、行列分解にかけられるようになります。実用的には、パッチ境界部に由来する再現精度の低下を避けるため、少しずつずらしながらパッチを切り出します。目の画像はAT&T Laboratories Cambridge提供の“The Olivetti faces dataset”からトリミングしました。

主成分分析はデータの分散を最大化するように、データと同数以下の基底を直交するように選択します。一方で辞書学習はデータが最大限スパースになるように基底(アトム)を選択するので、基底が直交する必要がなく、基底の数を過剰にすることもあります(手塚2014)。「最大限スパースになるように」制約を置いているのがミソで、この制約がなければ未知数が方程式の数よりも多い時のように解が無数に存在して解くことができません。 LASSOなど他のスパースモデリングの手法と同様に、解の算出・解釈性・応用性と多方にスパース制約が寄与しています。

辞書そのものは学習せずに、ウェーブレット基底など所与の辞書を利用することも可能です。しかし、ターゲット自身やターゲットに近い画像から辞書を学習することで、よりスパースな解が得られることが知られています。

実際の学習においては、最大限にスパースな重み行列を得るために辞書と重み行列を交互に固定・更新しながら行列分解していきます。 Scikit-learnでは学習段階の行列分解に’lars’(最小角回帰)か’cd’(座標降下法)を利用できます。予測段階の行列分解には’lars’、’cd’に加え’omp’(直交マッチング追跡)や’threshold’(閾値)を利用できます。辞書と重み行列の更新方法としてメジャーなものにはMethod of Optimal Direction(MOD)とk-SVDがあり、scikit-learnでは前者を採用しています。 MODより高速なk-SVDを使いたい場合には、私たちがGitHub上で開発・公開しているspm-imageモジュールを利用してみてください。 Scikit-learnと互換性のあるインターフェースですので、scikit-learnユーザーならすぐに使い始められると思います。

これら行列分解や辞書更新のアルゴリズムについては、スパモ勉強会で取り扱うので順次ご紹介していきたいと思います。

 

参考文献

手塚太郎, 辞書学習によるビッグデータからのパターン発見, 日本化学会情報化学部会誌, 2014, 32 巻, 4 号, p. 76-, 公開日 2014/12/08, Online ISSN 1347-2283, Print ISSN 0913-3747, https://doi.org/10.11546/cicsj.32.76, https://www.jstage.jst.go.jp/article/cicsj/32/4/32_76/_article/-char/ja