1. HOME
  2. ブログ
  3. IT技術
  4. 「AutoEncoder」から見る機械学習の次元削減の意味

「AutoEncoder」から見る機械学習の次元削減の意味

AutoEncoder から見る機械学習の次元削減の意味とは

「オッカムの剃刀」という言葉をご存知ですか?

「オッカムの剃刀」は、何か現象を説明する際、仮定は少ない方が無駄がなく分かりやすいというものです。

これは、14世紀のスコラ哲学者オッカムの有名な考え方です。

「オッカムの剃刀」とは?

例えば、皆さんの周りに、会話をするときに「え、その話いる?」といった話し方をする人はいませんか?

実は、先ほどの「14世紀のスコラ哲学者オッカムの有名な考え方です。」という言葉の中にも、剃刀で削ぎ落とすべき無駄な単語が含まれています

「スコラ哲学」という単語にばかり目がいってしまい、強調したいはずの「オッカム」が霞んでしまいます。

このように、無駄のない説明の方が優れているという考え方を「オッカムの剃刀」といいます。

物理学でも用いられる「オッカムの剃刀」

物理学にも「オッカムの剃刀」は多く適用されており、物理現象は少ない変数で表されることがほとんどです。

中でも、有名なニュートンの運動方程式は驚くほど単純です。

$$F = ma$$

あれだけ単純なものにも、オッカムの剃刀という考え方が採用されていたのです。

「オッカムの剃刀」から「次元削減」へ

解析分野でも「オッカムの剃刀」は採用されています。

解析分野では、オッカムの剃刀の考え方の元、データの次元を減らす「次元削減」というものをよく行います。

スイスロール

以下は「スイスロール」と呼ばれる三次元データです。

実はこのスイスロール、三次元とはいいながらも、データの分布は偏っており、二次元に引き延ばしてしまうことができます。

三次元の時は見る角度によって、データの分布が重なっていたところがありました。

「次元削減」により、二次元では、データ同士の分布を切り離すことができていることが分かります。

そのため、新たなデータが入ってきた際に、「そのデータはどの分布に含まれるか?」といった判定がとても楽になります。

これが「次元圧縮」という手法で、解析に必要のない余分な要素を省くことができます。

「次元削減」と「機械学習」の関係

さて、次元削減について説明していきましたが、いよいよ「機械学習」との関係を見ていきたいと思います!

最も単純な削減法「主成分分析」

次元削減にも色々手法があり、最も単純な削減法は「主成分分析」です。

しかし主成分分析では、スイスロールのような非線形データ(並進、回転、拡大縮小以外の変形)に対してはうまく動作しません。

「ニューラルネットワーク」の根幹は次元削減

一方、「ニューラルネット」では、3層以上のパーセプトロンを持つならば、任意の非線形問題を解くことができます。

そのため、多くのニューラルネットワークでは、中間層のユニット数が入力に比べて小さくなっている場合がほとんどであり、入力層から中間層への次元削減をしていると言えます。

すなわち、ニューラルネットワークの根幹は次元削減であるということです。

「画像」と「次元削減」

では、画像空間における次元圧縮を学んでいきましょう!

画像空間というのは、縦×横の画像サイズだけの次元数(画素値)を持つため、一般的にかなり高次元です。

しかし、画像空間における分布というのは、かなり低次元な分布に偏っていると言われています。(多様体仮説)

そのため、次元削減することにより、画像の低次元な分布を得ることが期待できます

そして、その画像空間の多くは非線形に分布しています。(本当はもっと高次元です。スイスロールもその一例です。)

「非線形」な空間の「次元削減」ときたら、「ニューラルネットワーク」でしょう。

そのため、画像空間の次元削減には、多くの場合ニューラルネットワークが用いられます。

「AutoEncoder」の構造

では、どのようなニューラルネットワークを作成すれば良いかを考えていきましょう!

まずは、内容をシンプルにするために、CNN でない「普通のニューラルネットワーク」の場合を考えていきます!

入力は縦×横の画素数だけのユニット数を持ちます。

次元削減をしたいので、ユニット数を中間層では入力層より減らしていきます。

この中間層のユニット数が、最終的に次元圧縮した次元数となります。

画像の「多様体仮説」を思い出す

ですが、これだけではニューラルネットワークは「学習」が出来ません。

ここで、画像の「多様体仮説」を思い出します。

画像の分布は、低次元に分布しているということでした。

低次元な分布からでも高次元な画像を生成することは可能なはずです!

そのため、出力層は元の入力層と同じユニット数にします。

ネットワーク構造

よって、以下のようなネットワーク構造になります。

そして、学習は入力と出力が同じになるように、ニューラルネットワークのパラメータを最適化していきます。

誤差関数は、二乗誤差で問題ないでしょう。

これが俗に言う、「自己符号化器」または「AutoEncoder」です

実験に用いたネットワーク構造

今回使ったモデルは、pytorch 公式のサンプルを改良し、「BatchNormlization」や「LeakyLeRU」を加えた CNN 構造を取ります

実験結果

二次元まで圧縮した例

以下は、実際に数字画像を二次元まで次元削減した時の、再構成画像の例です。

元の画像

再構成した画像

そもそも生成できていない数字が存在したり間違えているものも多数あります

そのため、これらの数字の分布を確認してみます。

数字の分布

「9」と「4」、「7」の分布が完全にかぶっています。

特に「4」は、そもそも生成できていないことが分かります。

他にも「3」と「5」と「8」も同様で、うまくこれらの分布を離すことができず、誤生成につながったと考えることができます。

つまり、今回のネットワークモデルでは、m-nist を二次元で埋め込むことに失敗しました

そこで三次元でも、これらの分布を可視化してみます。

三次元まで圧縮した例

まずは、再構成前後の画像例をご覧ください。

元の画像

再構成した画像

二次元の時と比べて、表現できる数字の数が増えたのが、ぱっと見で分かるかと思います。

ただ、「9」と「7」の組み合わせや、「4」と「9」等に間違いが多いことが分かります。

実際に、これらの数字の分布が近いかどうかを見てみます。

数字の分布

確かにこれらの分布は近く、特に「9」関連で間違いが多そうな気がします。

また、見方によっては分離できていないように見えていても、違う角度から見ると分離できている「3」と「5」のような組み合わせもあり、大変興味深いです。

三次元にまで削減すれば、各数字のある程度の分布を分けることができました。

さいごに

今回は、手書き文字を用いた「AutoEncoder」を利用して、「次元圧縮」について解説してみました!

削減した次元が何を表しているのかは、自分で解釈する必要があります。

「曲がり具合」を表しているのか、それとも「線の太さ」を表しているのか?

これは、「主成分分析」であっても同じです。

これがデータサイエンスの難しい所です。

次元は減らし過ぎもよくない

また、次元数は減らし過ぎてもいけません

こればかりは、試してみて一番良いユニット数を自分たちで見つけるしかありません。

ここがニューラルネットワークの弱点でもあります。

次回は、オートエンコーダと深い関係のある、「VAE」という手法をお話ししていきます。

(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
機械学習でのシステム開発依頼・お見積もりはこちらまでお願いします。
また、機械学習系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!

全体のソースコード

 

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界はお前の手の中に・・・ /

モバイルエンジニア

\ サービスの守り神! /

インフラエンジニア