*注意)この「べじぱみゅの学習メモ」のカテゴリー記事は、ワタクシ自身がこれまでに勉強したいろいろな項目について、テキストにあんまり書いてない内容などを勝手に妄想したメモです。
ワタクシ自身の備忘録のために書いており「初学者にわかりやすく説明する」というものではございません。
導入なしに唐突に話が始まり、おそらく意味不明な文章かもしれません。
しかし、せっかく考えたことなので、記事の内容がもし誰か1人でもお役に立てれば幸いです。

次は「1乗和」?


次に R として「行列成分の
1 乗和

 CS成分の1乗和
 
を考えてみます(2 は微分をキレイにするために便宜上つけているだけで、深い意味はありません)。 こうすると「
偏差の二乗和を最小化しつつ C, S の大きさも最小化する」という意味になり、前回の「2乗和」のときとあまり変わらない気もしますが実は全然違います。
 
この「1乗和の最少化」って実は「スパースモデリング」という重要な技術と関連します。ここで詳しくは述べませんが「スパースモデリング」は大まかにいうと、R として「成分の絶対値和」を採用するもので、それにより解が「スパース」(0 がたくさん)になる、というものです。なぜ「絶対値和の最少化」で解がスパースになるのかはそのうち気が向いたら説明しますが、気になる方は文献をあたってください。 

本当はここでも「絶対値和」としたいところなのですが、絶対値を含む関数は微分が解析的に表せないなど、ちょっと面倒なことになります。しかし幸いなことに?非負データの交互最小二乗法では「非負化縛り」をかけています。ループを一回経るごとに負をゼロに置き換える、という作業が入ります。そのためループ計算中に C, S の成分として非負値しか存在しないことになるので、絶対値和は単に「和」で OK なのです!(それがさっきの式) 

こうなると微分は一気に簡単になり、ループ式は
 
1乗和最小化時のMCRループ

このようになります。U_C は C と同じ I 行 K 列の行列で、すべての成分が 1 です。U_S は S と同じ J 行 K 列の行列で、すべての成分が 1 です。

不思議なループ式

K=2 の場合について前回までと同様、成分を書き出すと
 
1乗和最小化時のMCRループ_成分

こうなります。今度は右辺のシグマから一定の数λを引く、という修正が入ります。これはまさに、C, S の各成分を「小さく」する方向に働きます。ただ前回の「二乗和」のときは「割る」操作にλが入っていたのに対し、今回は「引く」操作です。このためλの変化対するC,Sの振る舞いはだいぶ違います。

今回は「和の最小化」なので、λを大きくしていくとC,Sはどんどん「負の大きな値」になっていきます(負に大きくなることは和を「小さく」することになります)。

λを大きくしていくと、ループ式の一番右側の縦ベクトルがほとんど負になり、更新によって C, S の多くの成分が負になります。ここで「非負化縛り」により「負があったらゼロにする」という動作を入れると、C, S のほとんどの成分がゼロになります。「二乗和」のときは「λを含む項で割る」ので、C,Sの成分は小さくなっては行きますが本質的にゼロにはなりません

この手法で、やっかいな「絶対値」を直接扱わないインチキスパースモデリングができるわけです。λを適切な範囲に設定することで、「寄与が小さい成分だけをゼロに」することができるのです。これも後で実例を示します。


はっぴぃ理系らいふ、いぇい
ヽ(・ε・)人(・ε・)ノ キミモナカマニナロウゼ
   

【文責 べじぱみゅ