Deep Learning

「深層学習」第3章 事前学習とその周辺

第三章は深層学習器の事前学習について書かれた章で半分近くをCD法の説明に当てています.深層学習器の事前学習は勾配消失問題や局所収束を避けるために行われるものと2章までで説明されてきました.2章によれば層ごとの事前学習が理論的に保証する性能向上は今のところ3層までのDBMに限るとのことでしたが,実験で深層でも事前学習が有効であることが示されているそうで,実用上は必須になると考えられます.以下は学んだことの箇条書きです.

  • RBMのような分布を包括する概念として指数型ハーモニウム族(EFH)が存在する.EFHではRBMでイジングモデルのエネルギー関数を用いたところを,単独項,相互作用項として一般的な関数\alpha_{i}(v_{i}|b^{(1)}_i),\beta_j(h_j|b^{(2)}_j),\phi_{ij}(v_{i},h_{j}|w_{ij})に置き換えたものである.可視変数,隠れ変数の関係はRBMと同じ.
  • EFHの学習は可視変数の分布を出来る限り良く再現するノード重み,バイアス(w_{ij},b,以下パラメータ)を最尤法で決定することで行われる(つまりRBMと同じ).最尤法で尤度を最大化する必要があり,勾配法を用いると現在のモデル分布の期待値計算が必要になり解析的に行うのは計算量的に困難.したがってサンプリング法を用いる.ギブスサンプリングを工夫せずに使うと分布が定常になるまでに時間がかかって実用的ではない.
  • CD法はギブスサンプリングにおいて初期分布を工夫する.具体的にはp^{(0)}( v,h|\theta)=q( v)p( h|v,\theta)で定義される.つまり可視変数の経験分布からv^{(0)}を発生させ,それを初期値としてh^{(0)}を発生させる.CD-k法はこの後k回のvとhの更新を行うもので,典型的にはk=1として更新を終わらせる.初期値を工夫しない場合とくらべて更新回数が劇的に減っている.また,多数回更新した場合と比べても性能があまり低下しないことが知られている.
  • CD法がうまくいく説明は数種類存在する.①モデル分布の可視変数に対する対数尤度をパラメータで微分し,導関数をk回目の更新におけるv,hの分布関数の級数で書く.CD-k法はその級数を打ち切った近似導関数を求めて勾配に使っていると説明できる.②CD法はギブスサンプリングにおいてk回目の更新で得られる分布が経験分布に近いことを要請するコントラスティブ・バイバージェンスという損失関数を最小化している③モデル分布が無限回の更新で真の分布(可視変数が従う分布)になる条件(詳細釣り合い条件)を満たすことを促進する損失関数を最小化するアルゴリズムとしてCD法が得られる./*この辺りの説明を追うのには骨が折れました*/
  • 上記③の説明は真の分布のパラメータを得る問題を可視変数→隠れ変数→可視変数→…の離散時間マルコフ過程が定常分布として真の分布を得るようパラメータを調整する問題としてみるものであった.離散時間ではなく連続時間を考えた場合の学習アルゴリズムが最小確率流法である.この手法から導かれる学習則は問題によってはCD法より高性能(速くて精度が高い)ことが確かめられている.
  • 継続的CD法は何度もサンプリングするときに前のサンプリングデータを初期値に用いる方法である.これを用いる場合,前のサンプリングデータが偏っていれば次得られるサンプルもかたよる問題がある.これを解消する手法がパラレル・テンパリング,交換モンテカルロ法である.
  • CD法は確率的なモデルを使った事前学習であり,深層NNとは間接的な関係しか持たない.確定的なモデルを使った事前学習も提案されており,積層自己符号化器,雑音除去自己符号化器などがある.積層自己符号化器は入力を模擬する出力を得るNNを層ごとに学習していくもの,雑音除去自己符号化器は積層自己符号化器の入力に雑音を乗せて出力で真の入力を模擬することを目指すものである.
  • 深層学習ではなく入力から伸びるノードの重みをランダムにした三層のNNが提案されており,極端学習機械という.出力をシグモイドではなく線形関数にすることで最適化を容易にしている.SVMと比較した場合学習時間が短く性能も高いという利点がある./*詳細が気になりますね*/

以上勉強したことを書き連ねました.事前学習がどのように行われるのかの概略はつかめましたが,理論的な裏付けは数式を追うのがなかなかタフで復習が必要そうです.

Deep Learning

「深層学習」第2章 深層ボルツマンマシン

今日は近代科学社「深層学習」の第二章を読み終えました.第二章はボルツマンマシンの説明から入ってDBM(Deep Boltzmann Machine),DBN(Deep Belief Network)が解説されている章です.学んだことを書いていきます.

  • 深層ボルツマンマシンは未知のモデルの分布を学習するための枠組みである.
  • ボルツマンマシンでは各確率変数は無向グラフ上のノードとして表され,0,1のいずれかの値を取り,どちらの値を取るかは確率的に決まる.その確率はリンクがつながっているノードの値のみに陽に依存し,「シグモイド信念」という関数によって計算される.シグモイド信念の表式は\frac{\exp{(\lambda_i x_i)}}{1+\exp{(\lambda_i)}}であり,\lambda_i\lambda_i=b_i+\sum_j w_{ij}x_jと定義される.w_{ij}はリンクの重みである.DNNでは全層の入力をシグモイドで変換した値を出力としていたがDBMではシグモイド変換した値を確率として用い0か1を出力するのが違いである.
  • 全変数の同時分布は各変数の値をスピンの±1に見立てたイジングモデルのボルツマン分布で定義される./*おそらくこれがボルツマンマシンの名称の由来*/勿論他の変数を固定した1変数の条件付き分布は上述のシグモイド信念になる.機械学習の文脈ではこの分布をギブス分布と呼ぶ.
  • ボルツマンマシンの確率変数は可観測な変数でも隠れ変数でも構わない.
  • ボルツマンマシンの学習は可観測な変数のデータを最尤推定し,適切なリンクの重みを決定することで行われる.推定の過程には現在のパラメータで変数の期待値を計算するという作業が入って,これがボルツマンマシンの計算量を飛躍的に増大させる要因となっている.
  • 隠れ変数が入ってくると計算量は更に増え面倒になる.しかし隠れ変数を導入することはグラフ全体で表現できる分布を増やすことになり,必要なことである.
  • 計算量過多の問題解決のためギブスサンプリング,平均場近似等を用いる.ギブスサンプリングはリンクの重みを固定し,適当な初期値からぐるぐる各変数を更新していき,十分時間が経った時の変数ベクトルを同時分布に従うサンプル点とみなすものである.問題点としては更新作業に計算量を消費することである.平均場近似は相互作用項をそのノードの平均値で置き換える近似である.平均値は平均場方程式(自己無撞着方程式)から求める.
  • 制限ボルツマンマシンはグラフを隠れ変数の層と可観測変数の層の2層に分け,同一層内のリンクはなく,一方の層のある変数がもう一方の層のすべての変数と結合しているモデルである.一方の層をすべて固定するともう一方の層の変数同士は条件付き独立になるので扱いが簡単になる.
  • 制限ボルツマンマシンの学習も通常のボルツマンマシン同様に行うが計算量軽減のためにコントラスティブ・ダイバージェンス法(3章)を用いる.
  • 深層ボルツマンマシンは隠れ変数の層を積み重ねたボルツマンマシンである.全体を学習させるのは骨が折れるし局所収束の問題があるのでDNNのように二層ごとに制限ボルツマンマシンとして学習させる.これを事前学習という.事前学習で得られたパラメータを初期値として仕上げに全体のパラメータを調整する.
  • 全体の仕上げ学習は計算量軽減のためギブスサンプリングと平均場近似を組み合わせて行う.ギブスサンプリングは工夫をして前回のパラメータ更新に使ったサンプル点を初期値として新たなサンプル点を得る.これにより計算量が軽減される.
  • 深層信念ネットワークは深層ボルツマンマシンにおいて,最上段以外のリンクを有向にしたものである.事前学習は深層ボルツマンマシンと同じ手続きで行う./*深層ボルツマンマシンのほうが良い結果を出すことが多いのであまり気にしないで良い?*/

以上本章の学習メモでした.気になったのはPRMLでもそうでしたが変数をイジングモデルのスピンと思ってカノニカル分布を適用するところです/*深層学習の本なのに関係ないところに引っかかるという…*/.カノニカル分布は統計力学においては熱浴と熱平衡にある系の微視的状態を記述する分布です.統計力学の定式化は確か「同じエネルギーの微視的状態の実現確率は等しい」「熱平衡状態のマクロ量はそれを実現する微視的状態の数が最も多いように決まる」から出発して(ここはかなり怪しい)後は特に物理的な原理や法則を入れず数学的になされていたと思うので,確かに出発点を再現するようなエネルギーや温度を適切に定義すれば物理以外でも成り立つでしょう.しかしイジングモデルをそのまま使うのが適切かどうかはよくわかりませんでした.

Deep Learning

「深層学習」 近代科学社

という本を冬休みに入ったので買いました.これから定期的にこの本から勉強したことまとめ(メモ?)みたいなことを書いていこうと思います.そういえばBengio先生の本は1月中に草稿が完成するそうです.出版までまだ数ヶ月かかりそうですね.内容について詳細を書くのはネタバレというか著作権?的にアレなので大雑把に書いていこうと思います.以下は第一章です.

  • 深層学習はニューラルネットワークのみを指すものではなく,より広範な手法,例えばベイジアンネットワークなどをも指す表現である.
  • 深層学習の本質は内部表現/特徴を学習させることであり,人間の特徴選択の職人芸を軽減させるために重要な役割を果たす.
  • ニューラルネットワークのブームは過去2回訪れていて,一回目は学習可能タスクが限られていること,二回目は勾配消失問題とSVMの登場で立ち消えた.現在では活性化関数にシグモイドを使う,層ごとに学習していくといった解決策が存在する.
  • 表現学習は自己符号化によって行われる.自己符号化は入力を出力層で再現するものであり,正則化を工夫することで恒等写像ができるのを避けることができる.
  • 畳み込みニューラルネットワークは重みを共有し,前層の一部を入力とするユニットを用いることで計算量減少とロバスト性を実現する.
  • 現在の課題としては層ごとの学習がなぜ局所収束を避けられるのか,中間層の表現はどう解釈すればよいのか,組み合わせで意味を持つデータ(文脈等?)に適用できるかなどが存在する.今回のブームが過去と同様な一過性のものか人工知能の本質的な進展に繋がるか現時点では判断できない.

読んでいて気になったのは,「誤差逆伝播は内部表現の学習を可能にした」とあったのですがこれに関する詳しい解説が1章にはありませんでした.中間層の重みをチューニングすることはそのまま内部表現を学習することを意味しているのでしょうか?同じ入力のデータ構造を表現するのに等価な表現がいくつもある場合には最も簡潔な表現が選ばれるのでしょうか?こういった疑問が続く章で解決されるか楽しみにしながら読んでいこうと思います.

未分類

PRML読破

こんにちは.
夏休み有り余る時間を利用してPattern Recognition and Machine Learningを読み終わりました.
演習は一応すべて目を通し,自明でない問題に関しては自力で解こうと試みました.
難しい問いは一部解けずに答えを参照したので理解度としては60%位だと思います.
後々必要に応じて読み返すことになると思います.

これからの勉強予定としてはまずPRMLの技術を必要と考えた部分に関して実装してみようと思います.
これにはあまり時間を取られたくないのでざっと振り返るくらいにしたいと思います.
実装が終わって機械学習への理解が深まったらDeep learningに関する論文等を読んでいこうと思います.
どこまで首を突っ込むかはわかりませんがライブラリを使うにしても理論面を一応理解しておいたほうが良いと思うからです.
論文を読み出したら自分なりにポイント等をこのブログで紹介していこうと計画しています.

ということでPRMLの実装のためにしばらくまたいなくなりそうです笑

未分類

PRML

お久しぶりです.

毎日数アクセスあってコンテンツのなさに呆れて帰っている様子が目に浮かんで心が傷んでいますww

学校が夏休みに入ったのでひたすらいわゆるPRML,「パターン認識と機械学習」という機械学習におけるバイブルを読んでいます.

Bengio先生のWeb教材で学んでも能力はつくと思うのですが,執筆途中ということもあり読み終わったと思った章に加筆されたりと,若干使いづらくなってきたのでPRMLに移りました.

現在は上巻を読み終わって下巻の6章,「カーネル法」に入っています.

上巻にはニューラルネットワークの章があり,Deep learningへの足がかりはつかめたと思っていますが,一応下巻まで読み通そうと思っています.

というのは先日たまたまDeep learningの研究をされている院生の人とお話する機会があって,「Deep learningだけ理解できます,と他の研究者に言ったら流行りものばかり追うミーハーと思われる」と言われたためです.

僕は研究者レベルまで行こうとは(行けるとは)思っていませんが,視野を広げるためにも必要と納得しています.

PRMLは理論的なお話がメインで一切実用的なコードは出てきません.

しかし,理論が理解できればコードに落としこむのは些細な事柄を除いて(演算に伴う誤差をどう減らすかとか,コードを走らせるマシンのOSは何にするかとか,GPU計算の特殊性とか)問題は発生し得ないので十分かと思います.

数式は線形代数と解析が学部教養レベルあれば付録と合わせて読み進められるレベルになっています.

序盤(1~2章)はかなり式展開が丁寧で,演習なんかはほとんど答えと思えるヒントが書いてあるので簡単についていけます.

それ以降は序盤ほど手取り足取りではありませんが,省略が少なく,あっても演習に回されていたりと教科書にありがちな「これは読者への課題とする」という文章は出てきません.

解答はwwwマークがついている問題は筆者のページで用意されていて,ついていない問題でも頑張ってググればオフィシャルの解答を発見することが出来ます.

僕の読み方としては,基本的には非自明な式は自分で導出しながら本文を読み進めていって,演習に当たればそれを解く,といった感じです.

演習は今は時間があるので全部取り組んでいます.

2章の計算なんかはかなりハードでした(まだ下巻にも難関が待っているらしいですね).

難しい問題になると1時間ほど考えてダメだった場合はWebの解答を見ています.

学期が始まったらおそらく簡単な問題以外はすぐに解答を見ることになると思っています.

よりよい方法があるならぜひ教えて下さい.

今は機械学習を使ったアイデアだけ浮かんできて早く実装したくて仕方ないのですが,しばらく辛抱していこうと思います.

未分類

更新

このブログを少し読んでいただくとわかるかと思いますが,4月以降更新出来ていません.

大学の学期中は忙しくて手を付けることが出来ませんでした.

7月半ば以降からまた少しずつ勉強していこうと思います.

万が一更新を待っている人がいたら,すみません.

未分類

一般化、容量、過剰適合、過小適合

/*「当てはめ過ぎ」は「過剰適合」が既に訳語としてあったのでこれからはそっちを使うようにしました.「当てはめなさすぎ」はまだ訳語が見つかっていないので過剰適合にあわせて「過小適合」を用いることにしました.*/

線形回帰の例では訓練データの平均二乗誤差を最小化するような計算を行いましたが,本来の目的は未知のデータに対して誤差を小さくすることであるはずでした.

ここで「一般化」という概念が出てきます.

一般化というのはこれから現れる未知のデータは訓練データと同じ確率分布に従っているものと考えて,未知のデータに対する出力を予想するものです.

従って,うまくAIが一般化できれば未知の入力に対しても損失関数を最小化できることが期待されるのです.

容量はイントロダクションでも紹介した通り,訓練データを与えられたときどれだけ正しく答えを出せるかを表すものです.

前回の例では線形回帰,つまり一次近似を行いましたが,二次とか十次近似を行うと多くのデータにうまく式を当てはめることができて容量を上げることができます.

しかし容量を上げすぎてしまうと過剰適合の問題が出てきてしまい,式の次数を上げることが一概によいこととは言えません.

さて,容量を測る指標としてVC dimension(Vapnik–Chervonenkis dimension)があります.

VC dimensionは二項分類の問題で定義されるもので,訓練データのうち正しく判定できたデータの数を表すものです.

ただし,もし訓練データが全部同じラベルを持っていたら,それによって訓練されたアルゴリズムは無限に大きな訓練データを正しく判定できることになってしまうので,訓練データは2つのラベル両方を含むものとします.

厳密にはVC dimensionとは次のような条件を満たす最大のmです.

\min_{\bf{X}\in \mathbb{R}^{m\times n}} \max_{y \in{\{0,1\}^m}} \min_{\bf{\theta}} \sum^{m}_{i=1}|f(\bf{X}[i,:];\bf{\theta})-y_i|=0

容量を減らす方法としては,複数の層を持つニューラルネットワークにおいては,中間層の数や訓練の繰り返し回数を変化させる,「正規化」というテクニックを使う,などがあります.

/*正規化については後々説明があるそうです.*/

容量の大きさと一般化能力のトレードオフはよく問題になりますが,これは古くからの考え方「オッカムの剃刀」に関連しています.

オッカムの剃刀とは物事を説明する仮説がいくつかあるときは,一番単純な仮説を採用するのがよいという考え方です.

ここではデータを説明するのに使う関数は過小適合を起こさない程度に低次元の式を用いた方がよいということになります.

統計学ではオッカムの剃刀をVC dimension等を用いてより厳密に定量化し,容量と「過剰適合によるミス数と過小適合によるミス数の差」(optimismともいいます)との関係を示しています.

それによれば,「容量とトレーニング数の比」とoptimismは増減が一致します.

適合不足によるミス数は容量が大きくなるに従って減っていくので,「過小適合によるミス数+optimism=過剰適合によるミス数」は下に凸のグラフになります.

/*optimismの増え方は過小適合によるミス数の減り方よりある地点から大きくなるそうです*/

このグラフの底が最適な容量の大きさということになります.

optimismは容量とトレーニング数の比の増減に一致するので,トレーニング数が増えればoptimismは減少します.

「過小適合によるミス数+optimism=過剰適合によるミス数」であるので,容量を固定してトレーニング数を変化させていけば最適容量(=過剰適合によるミス数が極小となる容量)が増加していきます.

/*よくわからないのでとりあえず次に進みます…*/

これはより多くトレーニング数を積めばより複雑なモデルでも学習できるという直感を裏付けています.