機械学習TwitterGooglePocket今回はAutoEncoderについて書きます。以前ほんのちょっとだけ紹介しましたが、少し詳しい話を研究の進捗としてまとめたいと思います。(AdventCalendarに向けて数式を入れる練習がてら)まず、AutoEncoderが今注目されている理由はDeepLearningにあると言っても過言ではないでしょう。DeepLearningは様々なコンペディション、例えば、ILSVRC2012(画像認識のコンテスト)や化合物の活性予測で、従来の手法を抑えとてつもない成績を収めて注目を浴びました。今年のILSVRC2013ではその殆どがDeepLearningを取り入れているほどです。learningの研究所を作る」等学習界隈ではかなり注目された技術の一つです。Googleが猫画像認識で結果を出し、iPhoneのSiri(ソースが不確かですが)にも使われています。このものすんごいDeepLearningですが、学習器の形としては多層ニューラルネットワーク(以下、多層NN)になります。多層NNの研究は数多くありましたが、NN全体の学習を行う際のパラメータ更新の難しさ等の問題がありました。そこでDeepLearningでは、事前学習という形で各層毎に教師なし学習を行っておいて、少ない変数で入力情報をうまく説明できるように学習(情報圧縮)しつつ、良い初期パラメータを先に持っておいて全体の教師あり学習に挑もう、という形をとっています。することでNN全体の学習における調整も楽にできるようにる(事後学習)という訳です。(制限付きボルツマンマシン)AutoEncoderの二種類に分類されます。どちらも情報圧縮を行う事ができるNNですが、学習の過程が大きな違いです。ここではAutoEncoderの学習について説明していきます。AutoEncoderの学習は一般的なNNとほとんど変わりません。大きく違う点は「出力が入力を再現するような学習」を行う事です。上の図で見ると、inputとoutputをサンプルを学習させて同じに出来れば、hidden(隠れ層)では少ない素子数で情報を表現出来ている、と考える事が出来ます。ここで「学習」はエンコード式とデコード式のパラメータの調整となります。(ちなみにDeepLearningでは学習させたinputとhiddenを使ってつなげていきます。)AutoEncoderのDecode式とencode式は入力をxとすると以下のようになります。