工場統計力学(建設中!) このページをアンテナに追加 RSSフィード

いまだ輝かざる暁の数は、げに多かり    (リグ・ヴェーダ)

2017-03-28

[][]画像の主成分分析 画像の主成分分析を含むブックマーク 画像の主成分分析のブックマークコメント

ここまで主成分分析の勉強をすると、以前和訳したオルスホーゼンとフィールドの論文Natural image statistics and efficient coding(自然画像統計と効率的符号化)」で理解出来ていなかった画像の主成分分析というのはどういうことなのか分かりかけてきました。まず、その箇所を引用します

f:id:CUSCUS:20170310210558p:image:left

図1.サンガーのルール*1を用いて自然の光景から抽出した8×8の画像区間について計算した主成分分析。これらの関数は局所化されておらず、大多数はどのような既知の皮質受容野にまったく似ていない。最初の数個の主成分は、単にそれらが(最低の空間周波数は自然の光景内のばらつきの最も大きな部分を説明するので*2.)少数の低周波要素から成るという事実のおかげで「方向付けられた」ようにみえ、これらの関数だけに基づく再構成は単にぼやけた画像しか生み出さない。


「自然の光景から抽出した8×8の画像区間について計算した主成分分析」とありますが、これはどういうことでしょうか? 私は以下のように理解しました。


自然にある光景の一部を8×8マスで表します。各マスは下図のように番号をつけます。

図2

f:id:CUSCUS:20170328063051p:image:left:w300

そして、各マスの明るさを実数で表します。すると1つの画像は、8×8=64次元のベクトルとして表すことが出来ます。つまりi番目のマスの明るさをx_iとすれば、この画像は¥[x_1,x_2,...,x_i,...,x_{64}¥]^Tで表されます。1つの画像が1つのベクトルに対応します。おそらく上記論文の上記箇所では多数の画像を用いたのだろうと思います。よって、画像と同じ数だけのベクトルが存在します。主成分分析ではまず、これらのベクトル分散分散行列を求め、次にその行列の固有値を求め、最後に各固有値に対応する固有ベクトルを、正規直交系を成すように求めるのでした(主成分分析(1)(6)参照)。分散分散行列Sij列は64行64列の行列になります。


  • S=¥left¥[¥begin{array}¥sigma_{1,1}&¥cdots&¥sigma_{1,64}¥¥¥vdots&¥ddots&¥vdots¥¥¥sigma_{64,1}&¥cdots&¥sigma_{64,64}¥end{array}¥right¥]・・・・(1)

行列Sij列の要素¥sigma_{ij}x_ix_jの間の共分散

  • ¥sigma_{ij}=(¥bar{x_i-¥bar{x_i}})¥cdot(¥bar{x_j-¥bar{x_j}})・・・・(2)

でした。ただしi=jの時はx_i分散です。ところで¥sigma_{ij}iとかjは、元々は図2のマスの番号を表していたのでした。こう考えると、¥sigma_{ij}は多数の画像データからマスiとマスjの明るさの相関を示しているということが分かります。位置が近い2つのマス同士の明るさには強い相関があり、反対に位置の遠い2つのマス同士の明るさには相関があまりない、というような結果が想像出来ます。

上の論文では、このように2つの場所の相関関係を計算していることを「ペアワイズ(pairwise 2つ組の)」と形容していることに気づきました。この論文の和訳をしている当時はこの言葉をどういう日本語にしたらよいか悩み、結局はそのまま「ペアワイズ」と訳したのですが、今になってこういうことだったのだと思い当たりました。そしてこの論文では、ペアワイズな統計では自然画像の特徴を捉えるには不十分だ、と主張しています。


では、上の引用箇所の図1にある64個の画像は何を表しているのでしょうか? これはどうも、主成分分析で求めた固有ベクトルを表しているようです。1つの固有ベクトルi番目の要素の値を図2のi番目のマスの明るさで表せば、1つの固有ベクトルは8×8マスの画像として表されます。画像が64次元データなので、分散分散行列Sは64×64の行列になります。よって線型代数の定理により互いに直交する固有ベクトルの数は最大64個になります。よって固有ベクトル全体で最大64個の画像が得られます。おそらく図1の64個の8×8マス画像は、固有ベクトルを画像で表したものだと理解しました。


さて、使用されたどの画像データに対応するベクトルも、上記で得られた正規直交化された固有ベクトルの線形結合として表すことが出来るはずです。ということは、これら64個の画像のそれぞれの明るさに重み付けをし、重ね合わせる(明るさを足し合わせる)ことで、元のどの画像データも表すことが出来るはずです。しかし、これはよく考えると1つの画像の中にある64個の変数を、64個の重みで表していることですから、別に次元を削減しているわけではありません。


上の引用の中の

これらの関数は局所化されておらず、大多数はどのような既知の皮質受容野にまったく似ていない。

という文章は、「関数(function)」という言葉をこれらの「(固有ベクトルを表す)画像」と解釈すればよいと思います。確かに図1のどの画像もガボールフィルタのような形とは似ていません。

f:id:CUSCUS:20170307063325p:image:w200:left



ガボールフィルタ。「ガボールフィルタ」参照。


次の

最初の数個の主成分は、単にそれらが(最低の空間周波数は自然の光景内のばらつきの最も大きな部分を説明するので[7])少数の低周波要素から成るという事実のおかげで「方向付けられた」ようにみえ、これらの関数だけに基づく再構成は単にぼやけた画像しか生み出さない。

の「最初の数個の主成分」というのは

  • f:id:CUSCUS:20170328063457p:image

のことでしょう。これらは「方向付けられた」ように見えるので若干ガボールフィルタに似ているようにも見えますが、それは単に低周波空間周波数を表しているために方向が見えるということです。これらの画像だけを使って元の画像を再構成しようとしても「単にぼやけた画像しか生み出さない」のは、これらの画像が局所的でないので当然です。「最初の数個の主成分」という言葉から、これらの画像が固有値の大きい固有ベクトルから順に並んでいると想像します。つまり、第1主成分が

  • f:id:CUSCUS:20170328063920p:image

で、第2主成分が

  • f:id:CUSCUS:20170328063919p:image

で、第3主成分が

  • f:id:CUSCUS:20170328063918p:image

というふうにです。比較的主要な主成分でこのような三角関数的な画像(明るいところと暗いところが周期的に現れる画像)が現れる理由については別途、考えてみたいと思います。

*1:[18] Sanger TD (1989) An optimality principle for unsupervised learning. In: Advances in Neural Information Processing Systems I, D. Tourezky, ed., pp. 11-19.

*2:[7] Field DJ (1987) Relations between the statistics of natural images and the response properties of cortical cells, J Opt Soc Am, A, 4: 2379-2394.

トラックバック - http://d.hatena.ne.jp/CUSCUS/20170328

2017-03-27

[]次元削減(3) 次元削減(3)を含むブックマーク 次元削減(3)のブックマークコメント

しかし、主成分分析による次元削減は線形であるという大きな制約があります。

f:id:CUSCUS:20170326151317p:image:left



たとえば左図のような2次元データのクラス分けの学習はどうでしょうか? 第1主成分はほぼx軸と同じ方向になりそうなことが分かります。


しかし、第2主成分、つまりy座標、を無視してx軸だけでこれらのデータを表現しようとすると、下の図のようになってしまいます。

f:id:CUSCUS:20170326153950p:image:left



これでは、青い点の領域と赤い点の領域を分けることが出来ません。


これは、これらのデータ点が全体として直線の近傍に位置していないからです。今は分かりやすさのために2次元と1次元で話をしていますが、次元削減の結果現れるのは直線に限るわけではなく、平面、超平面、などになります。しかし、これらは線形、つまりまっすぐな形です。ところで、これらのデータは楕円の周囲に散らばっていたのでした。もし、これらの点を下図のように楕円上に次元削減出来るならば、楕円も(まっすぐではありませんが)1次元の線であるのでその線についての機械学習であれば、効率を上げる効果が得られることになります。

f:id:CUSCUS:20170326155459p:image

しかしながら楕円は線形(まっすぐ)ではないので、主成分分析によってこのような次元削減を行うことが出来ません。ところが、このような非線形の次元削減を行う方法が、ニューラルネットワークの世界には存在するそうです。それは、オートエンコーダと呼ばれています。このアイディアはかなり昔からあったようですが、実用化されたのは2006年にジェフリー・ヒントンがスタックド・オートエンコーダという技法を編み出してからのようです。この技法について述べたのが2015年に私が翻訳した(でもよく理解していなかった)Reducing the Dimensionality of Data with Neural Networks(ニューラルネットワークによるデータの次元削減)です。

トラックバック - http://d.hatena.ne.jp/CUSCUS/20170327

2017-03-26

[]次元削減(2) 次元削減(2)を含むブックマーク 次元削減(2)のブックマークコメント

では次元削減をすると何がメリットなのでしょうか? 「次元削減(1)」でお見せしたような2次元のデータを1次元のデータに変換するような例ではあまりピンと来ませんが、100次元のデータを10次元に削減する、というような例を考えれば、次元削減がデータの通信効率を高め、保存に必要なデータサイズを削減するのに大きな効果があることが想像出来ます。また、10次元のデータを2次元や3次元に次元を削減することで視覚化することも出来ます。もちろん、多くの次元を削減しているので視覚化したものは不正確なものであるのですが、それでも何がしかの状況把握を可能にしてくれます。次元削減は機械学習の効率を高めるのにも利用されています。


たとえば簡単なパーセプトロンを考えてみましょう。データは2次元だとします。本当は10次元とかの例を出したいのですが、図示できないので(インパクトが少ないのですが)2次元の例を出します。ここでの問題は、あるデータを入力した時、それがある集合に属するかどうかを判別することだとします。まず、訓練データをこのパーセプトロンに学習させます。訓練データは下の図のようになっているとしましょう。

f:id:CUSCUS:20170325194705p:image:left

青い点は集合に属することを意味し、赤い点は属さないことを意味するとします。パーセプトロンは青い点の領域と赤い点の領域の境界線を設定することで学習を完了させますが、パーセプトロンの能力上の制約から、境界線としては直線しか引けません。

w_xx+w_yy-h=0

と表すことが出来ます。そして、パーセプトロンは訓練の間、w_x,w_y,hの3つのパラメータを調整して、何とかうまく全ての青い点がw_xx+w_yy-h>0の領域に入り、全ての赤い点がw_xx+w_yy-h<0の領域に入るようにします。ということは、(w_x,w_y,h)の3次元の空間内をさまよって最適な点を見つけようとします。


f:id:CUSCUS:20170325194704p:image:right



ところがこの訓練データを主成分分析してみたところ、これらのデータがほぼ一方向に並んでいることが分かったとします。今の例では人間が見てすぐに気づくのですが、データが10次元とか100次元だったらこんなことは直感的には分かりません。


f:id:CUSCUS:20170325194702p:image:left



そこでこれらの訓練データを第1主成分の座標軸で変換して1次元のデータにしてしまいます。つまり2次元から1次元への次元削減です。そうすると、問題は1次元の線の中で境界点を求める問題に変換出来ます。今回は変数は2個で済みます。

w_xx-h=0

つまり、今回はパーセプトロン(w_x,h)の2次元の空間内をさまよって最適な点を見つけることになり、最適解を見つけるまでのステップ数が大幅に少なくなります。これが2次元から1次元への次元削減でなく、10次元から3次元への次元削減であったならもっと効果があることでしょう。


このように次元削減機械学習において大きな効果を持ちます。

トラックバック - http://d.hatena.ne.jp/CUSCUS/20170326

2017-03-25

[]次元削減(1) 次元削減(1)を含むブックマーク 次元削減(1)のブックマークコメント

主成分分析(6)」で検討した例をここでも取り上げます。そこでは(x,y)で表されるデータを(v,w)で表される座標に変換したのでした。「主成分分析(6)」の図4にvwの名前を入れて、座標変換の意味するところを分かり易くしてみました。

  • 図5
  • f:id:CUSCUS:20170323204513p:image

今後の話を分かり易くするために、(v,w)座標の原点を、データの平均値のところに置きました。 x平均値を計算すると2.215、y平均値を計算すると0.869になりました。つまり平均値を表す点は(x,y)座標で(2.215, 0.869)の位置にあります。これにともなって「主成分分析(6)」の式(17)(18)も以下のように修正します。

  • v=0.882(x-2.215)+0.471(y-0.869)・・・・(19)
  • w=-0.471(x-2.215)+0.882(y-0.869)・・・・(20)

さて、上の図5を見ているとv方向のデータのばらつき具合で、全体のデータのばらつき具合のだいたいの傾向を表しているのを感じることが出来ます。v方向とw方向のそれぞれのデータのばらつき具合は、変動という形ですでに主成分分析(6)で計算しておりました。第1成分の分散が0.486(標準偏差は0.697)、第2成分の分散が0.036(標準偏差は0.190)でした。そこでばらつきの小さいw方向のばらつきを無視し、vの値だけで各データの位置を、正確ではないにしても、大体の位置を示すことが出来ることが分かります。

これを実際にやってみましょう。

  • (x,y)で表された各データを式(19)(20)で(v,w)によるデータに変換します。
  • 次にそのデータのwの値を全てゼロにしてしまいます。つまりw方向のばらつきを無視するということです。
  • 最後に式(19)(20)の逆変換を用いて、データを(x,y)に戻します。

式(19)(20)の逆変換は、途中経過を省略して結果だけ示すと以下のようになります。

  • x=0.882v-0.471w+2.215
  • y=0.471v+0.882w+0.869

これにw=0を代入すると

  • x=0.882v+2.215・・・・(21)
  • y=0.471v+0.869・・・・(22)

となります。


たとえば、元もとのデータが(x,y)で(1.578,0.710)であるとすると、これは(v,w)では(-0.637,0.160)になります。これを(-0.637,0)にして式(21)(22)で逆変換すると(1.653,0.569)になります。元々が(1.578,0.710)であったものがそれに近い位置(1.653,0.569)になりました。

  • (1.578,0.710)→(1.653,0.569)

つまり、vの値-0.637だけで、(x,y)の値が完全ではないにしても大体の値が復元出来たわけです。元々xyの2次元のデータをvという1次元のデータで表すことが出来た(多少の誤差に目をつぶれば、ですが)ということです。このように分散の小さい主成分を無視することでデータの次元を下げるデータ加工が次元削減です。図5のデータでw方向を無視してvの値だけで図を描くと以下のようになります。

  • 図6
  • f:id:CUSCUS:20170323204511p:image

2017-03-24

[]主成分分析(6) 主成分分析(6)を含むブックマーク 主成分分析(6)のブックマークコメント

では、「主成分分析(1)」で示した例

  • 図1
  • f:id:CUSCUS:20170318062141p:image

について実際に主成分分析をしてみまよう。まず、分散分散行列Sを計算すると、

  • S=¥left¥[¥begin{array}0.386&0.187¥¥0.187&0.136¥end{array}¥right¥]・・・・(14)

となります。次にS固有値を求めるために、

  • |S-¥lambda{I}|=0・・・・(13)

を計算します。これは

  • ¥left|¥begin{array}0.386-¥lambda&0.187¥¥0.187&0.136-¥lambda¥end{array}¥right|=0

となります。これを書き下すと

  • (0.386-¥lambda)(0.136-¥lambda)-0.187^2=0

となり、これを変形すると

  • ¥lambda^2-0.522¥lambda+0.018=0

になります。これを二次方程式の解の公式を使って解くと

  • ¥lambda=0.486,¥;0.036

になります。よって、第一成分の分散が0.486(標準偏差はその平方根なので0.697)、第二成分の分散が0.036(標準偏差は0.190)になります。次に、固有ベクトルを求めます。まず固有値が0.486の時の固有ベクトルですが、

  •  ¥left¥[¥begin{array}0.386&0.187¥¥0.187&0.136¥end{array}¥right¥]¥left¥[¥begin{array}x¥¥y¥end{array}¥right¥]=0.486¥left¥[¥begin{array}x¥¥y¥end{array}¥right¥]

から、

  • ¥left¥[¥begin{array}0.386x+0.187y¥¥0.187x+0.136y¥end{array}¥right¥]=0.486¥left¥[¥begin{array}x¥¥y¥end{array}¥right¥]
  • ¥left¥[¥begin{array}-0.100x+0.187y¥¥0.187x-0.350y¥end{array}¥right¥]=¥left¥[¥begin{array}0¥¥0¥end{array}¥right¥]

となり、ここから

  • -0.100x+0.187y=0
  • 0.187x-0.350y=0

の2つの式が出来ますが、両方の式は同じ内容を示していて、変形すると

  • y=0.534x・・・・(15)

となります。ここで、ベクトルの長さを1にするために

  • x^2+y^2=1・・・・(16)

という条件を課します。式(16)に(15)を代入して

  • (1+0.534^2)x^2=1

これを計算すると

  • x=0.882

になります。これを式(15)に代入してy=0.471になります。ここから、固有値0.486の時の固有ベクトル¥left[¥begin{array}0.882¥¥0.471¥end{array}¥right¥]となります。固有値0.036の時の固有ベクトルも同様に計算すると¥left¥[¥begin{array}-0.471¥¥0.882¥end{array}¥right¥]となります。この2つのベクトル直交しているのは、ちょっと計算すれば分かります。主成分分析の結果としては、第1主成分が¥left¥[¥begin{array}0.882¥¥0.471¥end{array}¥right¥]でその分散が0.486、第2主成分が¥left¥[¥begin{array}-0.471¥¥0.882¥end{array}¥right¥]でその分散が0.036となります。上の図にこの2つの成分(方向)を書き入れてみました。

  • 図4
  • f:id:CUSCUS:20170322195025p:image

赤色の線が第1主成分を、緑色の線が第2主成分を表します。


さらにU固有ベクトルを並べたものですから

  • U=¥left¥[¥begin{array}0.882&-0.471¥¥0.471&0.882¥end{array}¥right¥]

となります。変換後の座標をv,wで表すと「主成分分析(5)」の式(11)を参照して

  • ¥left¥[¥begin{array}x¥¥y¥end{array}¥right¥]=¥left¥[¥begin{array}0.882&-0.471¥¥0.471&0.882¥end{array}¥right¥]¥left¥[¥begin{array}v¥¥w¥end{array}¥right¥]

ここでU^{-1}=U^Tであることを考慮すれば

  • ¥left¥[¥begin{array}v¥¥w¥end{array}¥right¥]=¥left¥[¥begin{array}0.882&0.471¥¥-0.471&0.882¥end{array}¥right¥]¥left¥[¥begin{array}x¥¥y¥end{array}¥right¥]

つまり、元のデータのx,y

  • v=0.882x+0.471y
  • w=-0.471x+0.882y

で変換すれば新しい座標v,wが得られることになります。