第6回CiNetシンポジウムを聴講してきたよ
本日グランフロント大阪にて開催された、第6回 CiNetシンポジウム「おもろい脳科学」を聴講してきました。 脳科学はテレビや本で紹介されている以上の情報は知らなかったので、人工知能分野の研究成果を理解するには何が話題になっているかくらいはおさえておきたいと思い行ってきたしだいです。
個人的にはとても刺激的なお話を聞くことができました。詳しい方には物足りないかもしれませんが、私みたいにこの分野の情報を得たいという方には、濃い時間であったことは間違いないかなと思います。大阪と東京で一年交代で、毎年このような質の高いシンポジウムを無料で開催してくださっているらしく、CiNet さん、ありがとうございます。ぜひこれからも続けてください。
さて、せっかく聞いてきたので、忘れないうちに概要をまとめてみようと思います。
エキスパートの直感思考の仕組み
最初は、田中啓治先生のご講演でした。テーマは、エキスパートの直感思考はどのような仕組みで生まれているのかというものです。内容としては、 エキスパートの直観を司る脳の仕組み | 理化学研究所にあがっているものとだいたい同じようなものになります。
エキスパートとアマチュアの一番の違いは、読みの深さや処理の速さではなく、最善手が直感的に思いつく能力と、ゲーム中に出てくる盤面を瞬間的に知覚できる能力である。このことが70年代頃までに心理学の知見として得られていたそうです。
アマチュアは盤面を見てもすぐには最善手を思いつかず、エキスパートは盤面を見た瞬間すぐに最善手を思いつく。また、プロは場面を複数のコマのまとまった配置として把握するため、通常7つのパーツの組み合わせまでしか覚えられないような一時記憶で、盤面全体を把握できているとのことでした。さらにこの複数のコマをまとめて把握するという能力は、これらのコマの組み合わせと最善手を結びつけて覚えることにより、最善手を瞬時に閃くことにも貢献しているとの事のようです。
脳科学的なアプローチからこの直感を分析した結果、基底核と呼ばれる脳の奥の方にある部分が活性化することにより直感を生み出しているのではないかと考えられるそうです。この基底核はトレーニングを積むことにより回路を鍛えることができ、特徴的な刺激に対して反応を返すようになれるそうです。つまり、直感はトレーニングによって鍛えることができるとのことのでした。
スポーツと脳
次は、内藤栄一先生のご講演でした。テーマは、スポーツと脳の関係についてです。内容としてはだいたい新技術:ネイマールのテクニックの秘密は脳にある? 先端技術で解析 (1/2) - EE Times Japanに記載されているようなものをお話されていました。
ネイマール選手と他の選手を比べてわかったこと。それは、状況に対する想像力と、特定の活動を行う際に脳全体の活動量が小さいことが、トリッキーなパフォーマンスを生み出す鍵だということだそうです。
状況に対する想像力とは、例えば、ディフェンダーと対峙している場面を見てもらい、どのようにその場面を切り抜けるかを何パターンも考えてもらい、どれだけそれが具体的か、またその時どれだけ脳が活動しているかで測ります。ネイマール選手は、具体的なテクニック名を次々とあげることができ、脳の活動も他選手と比べ非常に活発であったようです。
一方、特定の活動時に脳の活動量が小さいとはどういうことかというと、足の先を動かすようなサッカーではよくある動作を行っている状態での脳の活動状態を計測したところ、ネイマール選手は、運動をするために一部の重要な部位しか活動しておらず、他の部分はほとんど活性化していなかったということのようです。身体運動は一般的に、脳のゆらぎによるノイズが発生し成果が安定しません。しかしネイマール選手の場合は、そのノイズとなる脳活動がほとんどなく機械的に特定の運動を行えるようになっており、動きの精度が非常に高くなっていると考えられるとのことでした。
脳派から自分の無意識を知る
成瀬康先生のご講演のテーマは、脳波から自分の無意識を知るというものでした。内容としては、 IEEEがプレスセミナーを開催 『ヒューマンインタフェースと脳科学の行方』|プレスリリース配信サービス【@Press:アットプレス】に記載されている、英語のリスニングの事例が主でした。
この英語のリスニングの事例では、LとRの聞き分けは脳レベルではそれなりに行えているというところからスタートします。ただしその時に発生する脳波の違いがわずかな場合は、その違いを意識することができていません。脳波の違いが大きくなった状態で、初めて聞き分けられるようになっていると言えるわけです。
紹介いただいた研究では、脳波を大きくすることを学習することにより聞き分けられるようになるかというものです。具体的には、LとRの発音の違いにより変化する脳波を得点化し、ユーザにゲーム感覚でその得点を最大化するように取り組んでもらったところ、LとRの聞き分けもできるようになったとのことでした。
脳の知覚の可視化
西本伸志先生によるご講演のテーマは、脳の認知内容をデコードするというものでした。内容としては、夢や空想を視覚化する研究はAIでさらに進化するのか ーワークショップ「人工知能による科学・技術の革新」ー - WirelessWire News(ワイヤレスワイヤーニュース)に記載されているものとだいたい同じになります。人工知能に興味がある人は似たような感じだと思いますが、個人的にはこの講演が一番興味深かったです。
概要としては、ある知覚をしている時の脳の活動情報を取得することにより、情報と脳の知覚のエンコーダー・デコーダーを生成しようというものになります。本日はデコーダーについて主に話されていましたが、視覚再現地図があると言われている後頭葉の情報から今見ているものの画像を生成したり、物体に反応する部位があると言われている側頭葉の反応状況から脳内で知覚がどのように認識されているか、どのような関係として知覚されているかを抽出することができたとのことです。
具体的な内容はリンクの写真を見てもらうのが早いので割愛しますが、個人的には、脳が処理している内容を科学的にデコードでき得るということは、人工知能にとっては良いニュースだなと思いました。デコーダーができるということはエンコーダーもできることとほぼイコールなのですから、人工知能に必要となる脳活動を測定するというアプローチからも人工知能にせまることができるのです。構造をまねるという話は良く聞きますが、実際に使用されている数理モデルそのものを移植することができる可能性は、場合によっては最短距離で人工知能へ到達する道になるかもしれません。
ロボットのココロ
トリは、浅田稔先生のご講演でした。テーマはロボットのココロについて。内容としては、ロボットで探る人間の不思議(大阪大学・浅田稔教授) 2013/5/1 | WAOサイエンスパークの動画を見ていただくと把握できるものとだいたい同じものになります。
浅田稔先生はロボット工学がご専門で、ロボットを使用しての人工知能の実現を目指されている方という認識でしたが、脳科学からのアプローチもされているとは知りませんでした。本日の講演は、ロボットにココロを持たせるにはどうするのがよさそうかを、赤ちゃんの発達過程と人間が心と知性をどう認識しているかからご説明いただきました。
盛りだくさんすぎて内容をまとめにくいのですが、一言で言うならば人の心とは周囲との相互作用により発達していくものなので、ロボットにココロを持たせるにもそれが必要であろうということです。また、人間には心と知性を別のものとして認識する機構があり、ロボットにもそれが必要だよね、というようなお話でした。
まとめ
以上で、私のつたない言葉によるシンポジウムのまとめは終わりです。今日のシンポジウムのように人間の脳に何かしらの知覚構造があると理解するのは、自分が夢想している人工知能という課題が決して夢物語ではなく、いつか実現できるものであるということが実感できてとても良い機会でした。今まで知らなかった研究内容も知ることができますし、一石二鳥なイベントでした。
もし研究内容に興味を持たれたならば、ぜひ、それぞれのリンク先の記事や関連記事を読んでみることをおすすめします。
ベイズ統計を理解する(3) 〜 グラフィカルモデル 〜
Computer Vision Modelsのテキストとベイズ推定とグラフィカルモデル:コンピュータビジョン基礎1 | Udemyを使用して、ベイズ統計について説明するコーナーの第三弾は、グラフィカルモデルについてです。
グラフィカルモデルとは、確率変数同士の関係をグラフの形で表現したものとなります。 グラフなので、有向グラフと無向グラフが存在し、それぞれベイジアンネットワーク、マルコフネットワークと呼ばれています。
ベイジアンネットワーク
それでは、それぞれのグラフが表す確率分布を見ていきましょう。 まず、ベイジアンネットワークですが、下記のような式を満たす同時分布を表す事ができます。
確率変数からまでの同時分布は、それぞれの変数間の条件付き分布の積で表現できるという意味です。は、変数の親要素(tail部分が接続されている矢印のhead部にあたる変数)を表しています。
とは言うものの、字面だけで説明してはよくわからないので、例で見てみましょう。下記は、変数A,B,C,Dの関係を示したベイジアンネットワークになります。
このグラフで表されている同時分布は下記のように書くことができます。
対応関係は見ての通り、親がいない(入ってくる矢印のない)要素の確率分布はのようにそのまま使用されます。また、親がいる(入ってくる矢印のある)要素の確率分布はのように、親要素の条件付き分布として表現されます。
また、ある変数Aとある変数Bが条件付き独立であるかどうかをグラフで表現することができます。A,Bが変数Cで条件付き独立となるのは、A,B間にCがある場合(head-to-tail)、A,Bの親要素がCである場合(tail-to-tail)、CがA,Bの子要素もしくは子要素の子孫要素でない場合(head-to-head)です。ちなみに、head-to-headの場合は条件付きでない場合は独立になりますので注意してください。
ベイジアンネットワークでは、下記のように添字付き変数をプレートで表現したり、確率変数以外の変数との関係を表す事ができます。
上記の図は、混合正規分布をベイジアンネットワークで表現したグラフになります、青枠で囲まれた部分をプレートと呼び、添字付き変数同士の関係を示すものです。図では、との間に依存関係があり、他の添字の変数とは依存しないということが表現されています。また、黒丸で表現されている変数は確率変数でない変数で、正規分布のパラメーターや重みが表現されています。
マルコフネットワーク
次にマルコフネットワークです。マルコフネットワークは、確率変数間の関係を何らかの関数で表現し、その積で同時分布を表現したグラフとなります。式で表すと下記のようになります。
Z は partition function と呼ばれ、確率分布にするための正規化項です。は potential function と呼ばれ、必ず正の値を取る関数です。マルコフネットワークは、一般的に下記のように対数を取りギブズ分布の形で表されます。
と定義しコスト関数と呼ばれ、定義からわかるように実数値を返します。こちらもグラフの例を見てみましょう。
このグラフで表現される同時分布は、下記の通りです。
グラフ理論では、完全部分グラフのことをクリークと呼びます。マルコフネットワークでは、クリークごとに一つポテンシャル関数やコスト関数を定義し、その積で同時分布を表現します。ただし、実装上はエッジごとにポテンシャル関数やコスト関数を定義するようになっている場合が普通です。
マルコフネットワークの場合もグラフから条件付き独立かどうか判定することができます。ベイジアンネットワークの時と比べその判断は非常に簡単で、変数間にエッジがない場合は条件付き独立となります。
ベイジアンネットワークとマルコフネットワーク、どちらも確率変数同士の関係をグラフで表す手法であり、どちらで表現するのが良いかは難しい問題です。一つの判断基準としては、表現可能な条件付き独立の関係があります。
例えば、変数AとBは通常は独立だが変数Cが観測されている場合は条件付き従属となる関係を表現したい場合、ベイジアンネットワークでしか表現することができません。一方、変数A,Bは変数C,Dの元で条件付き独立であり、変数C,Dは変数A,Bの元で条件付き独立であるような関係は、マルコフネットワークでしか表現することができません。このようにグラフの特性を把握して、モデリングしていく必要があります。
内部状態の推定とサンプリング
グラフィカルモデルでの目的は、一般的なベイズモデルと同じく、観測変数を与えられた時に、状態を事後分布から推定することにあります。しかしながら、複雑なグラフィカルモデルにおいて事後分布を求めることはほぼ不可能です。そこで代替案として用いられるのが、MAP推定値、周辺事後分布、周辺事後分布の推定値、そしてサンプリングです。
サンプリング以外の方法は、事後分布と同様、計算が難しく、またそれぞれ推定結果に制約が与えられてしまいます。一方、サンプリングは代表値を取得するだけでなく、複数回サンプリングを行い事後分布の近似を作成することもでき、演算も高速であることからよく使われています。HMMなどのチェインモデルやツリーモデルのようにMAP推定値を計算できるような特殊な形のネットワークを除いては、サンプリングにより推定値を求めることが一般的です。
ベイジアンネットワークでは、サンプリングとして伝承サンプリング(Ancestral sampling)が用いられます。このサンプリング方法は、ベイジアンネットワークの一番起点となる変数から1つずつサンプリングしていき、全ての変数の値をサンプリングするという方法です。
マルコフネットワークでは、サンプリングとしてMCMC(マルコフ・チェーン・モテカルロ)が用いられます。このサンプリング方法には、いろいろとアルゴリズムがあるのですが、よく使われる Gibbs Smapling について説明します。Gibbs Smapling では、一つの変数以外の変数を固定し、その変数をサンプリングするという作業を繰り返し行い、変数セット全てをサンプリングします。
サンプリング時に気をつけることは、変数の初期値にサンプリング結果が影響されないように、Burn-in と呼ばれる、十分なサンプリングをした後に実際に使用するサンプリング点を取得する方法を行う必要がある点と、複数のサンプル点を使用する場合は、それらの間に相関関係が発生しないように、十分にサンプリング間隔をあけたサンプル点を使用する必要があるという2点です。
Gibbs Smaplingでは、サンプリングしたい変数を他の変数で条件付けした条件付き分布を求める必要がありますが、マルコフネットワークでは直接接続されているノード以外とは条件付き独立であるため、条件付き分布を簡単に利用することができます。しかし、MCMCは伝承サンプリングに比べ計算回数が圧倒的に多いため、リソースや計算時間を必要とするといった欠点もあります。また、条件付き分布を求めることが容易でないケースもあり、その場合は条件付き分布を近似した分布を用いてサンプリングを行う、メトロ・ポリス法などがあります。
グラフィカルモデルの学習
さて、上記ではグラフィカルモデルを使用してどのように未知変数を推定するかについて説明しましたが、グラフィカルモデルを使用するにはご多分にもれず学習をしてパラメーターの推定、もしくはパラメーター分布の推定を行う必要があります。もちろん、学習を一切行わず、利用者が決めた確率分布に従って推定を行うようにすることもできますが、ノードの数が多くなればなるほどそれは現実的ではありません。
とはいうものの、複雑な構造をしていますので、パラメーター学習も一般的に難しいものとなります。テキストでもあまり触れられていませんので、また別の機会に詳細を書きたいと思います。
有名なグラフィカルモデル
グラフィカルモデルの形として有名なものに、チェインモデル(HMM)、ツリーモデル、グリッドモデルがあります。
HMMは、観測できない状態wによって観測変数xが生成され、次状態は現状態に依存するという形をモデル化したもので下記のような形となります。
このHMMや前状態が複数あるツリーモデルにて、状態wを推定するのに用いられる方法はいくつかあり、MAP推定を行う場合は動的計画法が用いられ、周辺事後分布を推定する場合はForword-BackwordアルゴリズムやSum-productアルゴリズムなどが用いられます。
HMMの学習は、学習セットとして内部状態も与えられている(Supervisedな)場合と、与えられていない(Unsupervisedな)場合とで分けて考える必要があります。Supervisedな場合は、ML推定、MAP推定、ベイズ推定などを用いて比較的容易に学習することができます。Unsupervisedな場合は、内部状態wを隠れ変数として扱いEMアルゴリズムで学習を行うのが一般的です。
マルコフネットワークでよく使われるグリッドモデルは、その中でもマルコフ確率場(MRF)と呼ばれるモデルが良く使われます。MRFでは、ノードが格子状に接続された無向グラフで、ノードは内部状態を表す未観測の確率変数として扱います。そして、その状態に応じてノードごとに1つずつ観測変数が現れるという形をモデル化したものです。
MRFで状態wをMAP推定するために、グラフカットやα-拡張という手法が用いられます。この手法では、劣モジュラであれば厳密解を劣モジュラでなくても良い近似解を得ることができます。
上記で説明した推定方法はここでは詳しく説明しませんが、テキストには詳細が記載されていますので興味がある方はぜひ読んでみてください。
終わりに
この記事では、グラフィカルモデルについて説明しました。ベイジアンネットワーク、マルコフネットワークそれぞれで未観測変数がどのように推定されるのかを説明しました。
そして、全3回とだいぶ長々と書いてきましたが、ひとまずベイズ統計およびそれを利用した機械学習の基本の説明記事は今回にて終了です。変分ベイズ法とか、グラフィカルモデルの学習手法とか、ベイズによる教師なし学習手法とか、まだまだ抑えておきたい部分はありますが、今までの3記事の内容を理解しておけば、とりあえずベイズが分からないせいで何を言っているか分からないということにはならないだろうと思います。
来週からは、また Deep Learning 周りの話に戻りたいと思います。
ベイズ統計を理解する(2) 〜 判別モデルと生成モデル 〜
先週に引き続き、Computer Vision Modelsのテキストとベイズ推定とグラフィカルモデル:コンピュータビジョン基礎1 | Udemyを使用して、ベイズ統計について勉強中です。今週は、判別モデルと生成モデル、それぞれのモデリング方法での基礎的な学習方法を、回帰と識別それぞれのケースでどのように行うかを書いていきたいと思います。
ベイズ推論とモデリング
まずベイズを用いた学習では、観測変数xが与えられた時に、その時の状態wを求めるためのモデルを学習により獲得することを目標とします。この事後分布を利用するプロセスは、
xとwを関連付けるモデルをパラメーターθを用いて表す
学習データからパラメーターθを学習する
与えられた観測データxからを計算する。その計算が難しい場合は、サンプル結果やMAP推定値を返す
といったようになります。
1.で使用するモデリングの方法には、を直接モデル化しパラメーターを学習する方法(判別モデル:Discriminative Model)と、をモデル化しパラメーターを学習する方法(生成モデル:Generative Model)の2つがあります。
判別モデルでは直接推論を行うことができるので簡易でありまた計算コストも抑えることができます。一方、生成モデルはデータセットをサンプリングでき、また推論時にwの事前分布を使用できるため、ノイズの多いデータでは判別モデルより頑健性の高い結果を得ることができます。
それぞれのモデルで、回帰と分類で行われるモデリングの例を見ていきましょう。
まず、回帰の例です。判別モデルでは
と表現することができます。この場合、が0であれば、となることからわかるように、線形回帰モデルとしてxとwの関係が表現されています。もちろん、が正規分布であると仮定する必要もありませんし、wとxの関係が線形なものである必要も、分散に影響を与えないようなモデルにする必要もありません。モデル化後は、お好きな推定手法を用いてパラメーターθを推定すればOKです。
一方、生成モデルでは
と表現することができます。見ていただいたように、xとwが反転しているだけで、これも線形回帰モデルとなります。この場合も基本的にモデリング自体はもっと自由に行うことができます。生成モデルが判別モデルと異なるところは、事前分布を仮定してやる必要がある点です。この場合、事前分布を正規分布として仮定しており、必要に応じてパラメーターを学習する必要があります。
次に、分類の例です。判別モデルでは、
と表現することができます。この場合、Pr(w)をベルヌーイ分布で仮定し、wとxの関係をシグモイド関数で表現していることから、ロジスティック回帰となります。もちろん、分布や関係式は自由に設定することができます。
一方、生成モデルでは大きく異なり、
と表現されます。これは、wの値ごとにxの分布が変化することを確率密度関数として表しています。この時、はベルヌーイ分布で表現し、このパラメーターも必要に応じて学習する必要があります。
生成モデルによる分類
生成モデルによる分類は、確率密度関数の推定という形で行われます。
例えば、とwの値ごとの確率変数xの確率密度関数を定義します。この時最尤推定を行うことにより、推定値を
と求めることができます。はカテゴリがwである観測データの集合であるとします。つまり二値分類でいうと、w=0の場合のパラメーターとw=1の場合のパラメーターはそれぞれのカテゴリに分類される観測データxから別々に推定されることになります。
最後に評価を行う場合は、を利用して、とをベイズルールで求め利用します。ちなみにの値も学習データを利用して、何かしらの方法(例えば頻度とか)で決めておく必要がありますが、以降でもあまり話題には上がりませんので「何か決まってるんだなー」くらいに思っておいてください。
以上で生成モデルによる分類を行う基本的な方法を説明しましたが、尤度が正規分布で表現されるため、この場合認識精度はそこまでよくはなりません。精度を上げるには一般的に尤度に複雑な分布を利用する必要がありますが、その場合、通常の方法では推定値を求めることができません。
そこで利用するのが、隠れ変数とEMアルゴリズムです。
隠れ変数の考え方は非常にシンプルです。尤度関数を
dh
と隠れ変数hをおいて定義します。この時最尤推定を行うことにより、以下のように推定値を求めます。
このように隠れ変数を設定すると、単純なモデルを利用してモデルの表現力を上げることができます。例えば、以下で説明する正規混合分布では、h=1の時の分布、h=2の時の分布といったように複数の正規分布を利用し、それを足し合わせることにより複雑な分布を表現することができています。
しかし、上記のような積分の入った式では解析的に簡単にパラメーターの推定を行うことができません。そこで利用されるのがEMアルゴリズムと呼ばれる手法です。EMアルゴリズムでは、下界(Lower Bound)の考え方を利用して、パラメーターを段階的に更新していきます。この手法で一番重要な式は、下記の下界の定義式です。
ちなみに、はKLダイバージェンスと呼ばれるもので、確率分布の非類似度を表す情報量の一つです。EMアルゴリズムはこの下界を最大化する分布とパラメーターθを交互に求めます。Eステップでは、
とを固定してを求めます。Mステップでは、
のようにパラメーターの推定値を求めます。この計算を繰り返し、パラメーターをより元の尤度関数を最大化するパラメーターに近づけていきます。この手順は、Eステップで下界の関数を更新し、Mステップでその関数を最大にするパラメーターを求めていることに相当します。
では、混合正規分布を例に、EMアルゴリズムの手順を見ていきましょう。混合正規分布は、複数の正規分布の和で確率分布を表現するものとなります。求める確率分布は
と定義できます。は合計すると1になる値です。この時、
と定義することができる。Eステップは、
となる。は負担率とも呼ばれる値で、観測データをどの分布で負担するかを表すような値になっています。Mステップでは、この負担率を用いて以下のように更新する。
このように、それぞれの正規分布の分布全体への影響度を示すは負担率の合計値が、平均や分散は負担率を重みとして利用した値が使われており、直感的にも妥当そうな更新式になっています。
以上で混合正規分布を用いたEMアルゴリズムの推定の方法となります。EMアルゴリズムは他にも様々な分布に適用することができます。外れ値に強くするために用いられるt-分布、部分空間を用いて正規分布の表現力を上げる因子分析、そしてt-分布に部分空間を適用したものなど、それこそ適用方法は様々で、詳しくは上記テキストの7.5 - 7.7章をご確認ください。
判別モデルによる回帰
次に、判別モデルによる回帰の方法を説明していきます。判別モデルでの回帰は、上で示したようにと書くことができます。この式に対して下記のような最尤推定を行うことを考えます。
この式を解くと、推定値は解析的に求めることができ下記のようになります。
以上が判別モデルでの線形回帰の例となります。しかし、この単純なモデルで単純な推定を行うと問題があります。一つは、学習データ点のない部分についても過剰に推定の信頼性がたかくなってしまうover-confident、さらに線形関数にしか適用できない点、さらに過学習や高次元な観測値の場合パラメーターの次元が大きくなりすぎる点が挙げられます。
over-confident に対しては、ベイズ推定を用いることで、非線形化は関数の非線形化およびカーネルトリック、過学習やパラメーターの次元の削減にはスパース回帰を用いることで改善できます。これらの手法は組み合わせることにより、Gaussian Process Regression やRelative Vector Regression などより高度な手法でモデリングすることができます。
それぞれを簡単に見ていきましょう。まず、ベイズ推定による線形回帰です。これは何も難しいことはありません。ベイズ推定により観測データが与えられた時のパラメーターの確率分布を推定すればよいのです。
ですので、で、とおくと、を解析的に求めることができます。また新しい観測値が与えられた際に、
も解析的に求めることができます。このように推定を行うと、学習データに近い部分のxとwの組み合わせの信頼性は高く、そうでない点については信頼性があまり高くない分布を得ることができます。ちなみに上記の推定はパラメーターについてのものだけであり、については別途推定をする必要があります。このテキストでは、についての周辺尤度を最大化するを用いて、説明を行っています。
次に非線形関数の例です。非線形関数ではとなる非線形関数fを定義し、とおいてパラメーターを推定します。関数fにはRBFやarctanなどが用いられます。いずれにおいても、最尤推定もベイズ推定も線形回帰と同様に行うことができます。
ただし、新たな観測値xに対してwを計算すると逆行列等の行列計算が非常に大変になります。そこでカーネルトリックを用いてzの内積計算を簡単になるような関数fを用います。RBFカーネルなどが有名なカーネル化関数となります。
スパースな回帰では、を正規分布をステューデントのt-分布を用いることにより、パラメーターが各軸が独立になるように学習させます。具体的には下記のように定義します。
しかしこの分布を用いると単純に解析的に推定を行うことができません。そこで、について事後確率分布を周辺化することによりその値を求めることにより、直接事後確率分布を計算します。
また、次元を削減するには双対モデルを解く方法もあります。双対モデルは、パラメーターをとおくことでパラメーターを推定する方法です。このモデルの面白いところは、元の式で推定した場合と同じ結果を得ることができるところです。ここでの次元は変数の次元数に依存し、の次元は学習データの数に依存します。つまり、双対モデルを用いることにより、求めるパラメーターの次元数を削減することができます。
このように、様々なテクニックを用いることにより判別モデルの回帰を行い、分布を求めることができます。
判別モデルによる分類
判別モデルによる分類は、モデルとしてを使う以外は、回帰モデルと似たような工夫を行い、様々な分類モデルを表現することができます。
一番の違いは、このモデルでは解析的に解を求めることができず、ニュートン法などを用いて最適なパラメーターを推定する必要がある点です。最尤推定でもベイズ推定でもそれは変わりません。
また、多クラス問題への拡張を考える必要もあります。多クラス問題への拡張は、モデルをカテゴリカル分布と仮定し、そのパラメーターの値をソフトマックス関数により定義することにより表現します。
ベイズ統計を理解する(1) 〜 最尤推定、MAP推定、ベイズ推定 〜
先日、下記のような記事が上がっていまして、小説生成を目論む私としては気になって論文にも目を通してみたのですが、どうやら生成モデルを利用しているらしいということしか分からず、理解が足踏みしてしまっています。
最近、Deep Learning 周りでは生成モデルが流行ってるようで、DCGANを使ってイラストを自動で生成するアルゴリズムが年末にバズっていたように、この周辺はじわじわホットトピックになってきている感があります。
しかし、生成モデルを理解するには Deep Learning だけでなくベイズ統計周りの知識が必須になります。利用するだけならどなたかが実装するのを待てばよいのですが、新しくでた論文の内容を実装してみようと思うと、ベイズの基礎くらいは必要な印象を受けました。
そこで、今回からしばらくはComputer Vision Modelsのテキストを使用して、ベイズ統計について学んでいきたいと思います。また、こちらのテキストは日本語での解説動画が上がっていますので、こちらもご参考ください。
前置きが長くなりましたが、今回はモデルのフィッテングに使用される、最尤推定、MAP推定推定、ベイズ推定について書いていきたいと思います。
以下では、はモデルのパラメーター、はパラメーターの推定値、は観測値(省略して単にと記述することもあります)、はモデルにフィットするか評価する値とします。
最尤推定
最尤推定は、下記のように観測値の尤度が最大化するようなパラメーターを推定します。
新しいデータがモデルにどれだけ適合するかは、 を計算すれば良いので簡単に求めることができます。
例として観測変数が正規分布から生成されるようなモデルを考えます。このとき、推定するパラメーターはとになります。式展開の詳細は、上記で紹介してある本や資料を見ていただくとして、が正規分布の場合、最尤推定を行うとは解析的に簡単に求める事ができ、下記のようになります。
見ていただいてわかるように、それぞれ観測点の平均と分散になります。以上が最尤推定による学習の概要となります。
MAP推定
MAP推定は、事後確率を最大にするパラメーターを推定する方法です。式は下記のようになります。
ベイズの定理に従い素直に展開するとが分母につきますが、この値はによらず一定であり、式を最大にするを求める際には不要なので除いています。最尤推定法と比較してみると、事前確率が推定に影響を与えるかどうかの違いがあります。
新しいデータがモデルにどれだけ適合するかは、 を計算することで求めることができます。これは最尤推定の時と同じですね。
同じく、例として観測変数が正規分布から生成されるようなモデルを考えます。この時、事前分布であるは正規分布の共役事前分布である逆ガンマ分布であると仮定します。式展開の詳細は省略しますが、この場合も解析的に簡単にを求めることができ、下記のようになります。
は逆ガンマ分布のハイパーパラメーターです。に注目していただくと分かりやすいように、事前分布の情報の分、最尤推定の時と比べてハイパーパラメーターで推定値が補正されています。以上がMAP推定による学習の概要となります。
ベイズ推定
ベイズ推定は、観測値にが当てられた時にパラメーターの事後確率分布を推定する方法です。先程までの最尤推定やMAP推定はベイズ推定がパラメーターの分布を推定するのに対して、最大になるパラメーター一点のみを推定するので点推定と呼ばれます。
ベイズ推定の式は下記のようになります。
ここで求めたパラメーターの事後分布を用いて新しい値の評価を行いますが、この評価の仕方も点推定の場合とはかなり異なります。ベイズ推定では、ある値が観測されるようなモデルに新しく観測された値がフィットするかを評価します。式は下記のようになります。
[tex: { \displaystyle Pr(x^ | x) = {\int Pr(x^ | \theta)Pr(\theta | x) d \theta} }]
例として観測変数が正規分布から生成されるようなモデルを考えます。はMAP推定の時と同じく逆ガンマ分布であると仮定します。 この時、推定されるパラメーターの事後分布は解析的に求めることができ下記のようになります。
また、 も解析的に求める事ができ、下記のようになります。
はと観測値から計算されるパラメーターです。このようにだいぶ複雑になりますが、解析的に求める事ができるため素早く簡単に計算できます。以上がベイズ推定による学習の概要となります。
学習結果の比較
平均が0、標準偏差が2の正規分布からサンプリングしたデータを使用して、上記の各モデリング手法による学習結果を比較してみました。ちなみにベイズ推定は式を入力するのが面倒くさかったのと、ベイズ推定ライブラリの使用方法がよくわからなかったので結果は載せていません。 赤が元の分布、青が最尤推定で学習した分布、緑がMAP推定で学習した分布です。MAP推定では、中心が0、標準偏差が2~4くらいのパラメーターが最も表れやすい事前分布を与えています。
I=10
I=100
観測数が10の時は、学習が不完全で中心付近の大きく分布がよってしまっています。MAP推定は最尤推定とくらべ、事前分布の影響を見て取ることができます。一方、単純な分布なこともあり観測数が100もあれば、いずれも十分に元の分布を再現できるに至っています。
学習に使用したコードは下記のとおりです。といっても、上記の式に合わせてコード書いてあるだけなんですけどね。
word2vec の結果を利用して RNN で文章を生成してみる(2)
word2vec の出力結果を元に文章を作ってみるコーナーの第二弾です。 今回はエンコーダー・デコーダーモデルを使用して word2vec の出力から文章を生成できないかを試してみました。 使用したモデルは以前の記事で紹介した Skip-Thought Vectors です。
Skip-Thought Vectors を簡単に説明すると、入力文をエンコーダーでエンコードしその文の情報をコンテキスト情報として指定サイズのベクトルに圧縮、そしてこのコンテキスト情報を元に、デコーダーを使用して入力文の前後の文を出力しようというモデルとなります。 この Skip-Thought Vectors の入力および出力は、単語のIDを各ユニットに割り当てた形となります。今回は、この入力と出力を word2vec にして日本語で動かしてみました。
chainer を用いて、前回も利用した mecab で分かち書きにした wikipedia の記事文章とその文章から生成した word2vec を利用して処理を行いました。ロス関数は本家のソフトマックスのままでは利用できないので、正解単語とデコーダーによって出力された単語との二乗誤差を用いました。対象となった単語は40万語ほどで、それ以外は未知語としてすべて同じベクトルを割り当てるようにしています。
利用したコードは記事の最下部に記載しています。一部 util.py に逃がしたコードは記載していませんが、だいたい何をやっているかは分かっていただけるかと思います。chainer にはコンディショナルな GRU を扱う方法がないので、StatefulGRU のコードを利用して ConditionalStatefulGRU を自作、それをさらに自作の Skip-Thoughts モデルで使用しています。Skip-Thoghts モデルでは、まず入力単語をエンコーダー部でエンコードし、その出力をデコーダーで使用して前後の文が出力されるように学習しています。
だいたい6万文ほど学習させた段階で誤差が小さくならなくなってきたので、今回はそこで処理を停止させました。以下はその時のモデルを利用して、文章を入力した際に、次の文章として生成されたものです。文章の生成は、「。」が現れるか、30単語生成した時点で停止するようにしています。ちなみに入力文章は、学習したデータの中にも含まれている、wikipedia のアンパサンドに関する説明の一節です。
- 入力文:アンパサンド(&)とは「…と…」を意味する記号である。
出力単語列:'000', '受け取る', '回数', '推定', '平均', '000', '賃金', '月末', '政令', '条', '詐欺', '弁護士', '監査', '地裁', '年金', '協定', '加盟', '審議', '令', '奉仕', '自治体', '在日', '捕鯨', '定める', '通知', '土木', '請求', '職員', '実務', '事務'
入力文:その使用は1世紀に遡ることができ(1)、5世紀中葉(2,3)から現代(4-6)に至るまでの変遷がわかる。
- 出力単語列:'フラッシュ', 'メニュー', 'フォーマット', '送信', 'ケーブル', '媒体', 'ホスト', '動画', 'MHz', '閲覧', 'エージェント', '互換', '通信', '準拠', 'タイミング', 'サポート', 'OS', 'メニュー', 'SD', 'ボード', 'ファイル', '周波数', 'ゲート', '本体', 'マイクロソフト', 'シフト', 'コンテンツ', 'オブジェクト', 'Microsoft', 'ロード', 'フォーマット', 'ドメイン', '選択肢', 'オブジェクト', 'ソニー', 'ウェア', 'マイクロソフト', 'データ', '素子', 'オート', 'アプリ', 'コア', '動画', 'スケジュール', 'グループ', '夏季', 'メイン', '祭り', 'ライフ', 'ロケ', 'ショップ'
ご覧いただいた通り、全然うまく学習できていません。入力文の話の流れを完全に無視しているだけでなく、出力がただの名詞の羅列でありそもそも文章として成り立たせるための学習が行われたように全く見えません。一方、出力する単語列はその前の単語に大きく影響されるところがあり、連想ゲームのように関連する単語が生成されるようになってしまっています。
「てにおは」が全くなく、その前の単語に近い単語が生成されるというのは、学習動作から考えて一応想定していた結果ではあります。ある文章には、それ以前に入力されてきた単語に関連する単語(word2vec 的に距離が近い単語)が現れる確率が、それ以外の単語が現れる確率より格段に高いので、入力された単語と近い単語を出力するような学習となったのでしょう。
入力文のコンテキストを完全に無視するという挙動はなんとも言えません。同じ文の組み合わせを一回ずつしか学習させていないので十分に学習しきれていない可能性もありますし、自前で実装した ConditionalStatefulGRU がうまく機能していない可能性もあります。一応 ConditionalStatefulGRU のパラメーター更新は行われているようですので、そんなことはないと思いたいものですが。
とりま、前者の挙動をなんとかしないと、文章っぽいものを生成することすらできません。この辺りをどう解決するかが今後の鍵になりそうです。
Deep Learning で使われてる attention ってやつを調べてみた
先週 Skip-Thought Vectors について調べてみたわけですが、その中でよく何を言っているのかよく分かっていなかった、 attention mechanism について調べてみました。 調べるにあたって、最近のDeep Learning (NLP) 界隈におけるAttention事情 が大変参考になりました。ありがとうございます。
まず attention 、特にエンコーダー・デコーダーモデルにおける attention について簡単に説明すると、入力情報全体ではなく、その一部のみを特にフォーカスしたベクトルをデコーダーで使用する仕組みのことです。そのことにより、デコードの特定のタイミングにだけ必要になる入力情報を精度よく出力に反映させることができるようになります。
これだけでは何のことかちょっと分かりにくいので、Neural machine translation by jointly learning to align and translate を例に説明していきたいと思います。この論文は、Neural Machine Translation という Neural Network を利用して翻訳タスクを行う分野の論文ですが、最近その分野でも著しい成果を出しているエンコーダ・デコーダーモデルでの翻訳処理に、attention を導入することによって、翻訳前の文章が長文であっても精度よく翻訳処理が行えるようにしたという成果を紹介しています。
通常のエンコーダ・デコーダモデルでは、エンコーダの出力は一つしかデコーダでは使用されません。それをどのように用いるかは手法によりけりですが、この方法では、入力文の情報を特定のサイズのベクトルにまとめる必要があり、長文になればなるほど元の情報の圧縮精度が悪くなってしまいます。
一方、attention を用いたモデルでは、エンコーダーの隠れ層のうち、特定の入力単語やその周辺の単語にフォーカスしたベクトルをデコーダで用います。これにより、デコーダのある時点で必要な情報にフォーカスして使用することができ、入力文の長さに関係なくデコードを効率よく行うことができます。attention の利用方法も手法によりけりですが、すべてのベクトルを重み付けして利用する global attention や特定のベクトルのみを用いる local attention と呼ばれる方法に分けている提案もあります。
上記の論文では、長文での翻訳精度が上昇したでけでなく、alignment と呼ばれる機械翻訳分野で、翻訳前の文と翻訳語の文の対照関係を分析する処理でも有用な結果を生成することができているようです。
個人的には、エンコーダで生成するベクトルに十分な長さがあれば特に問題なく似たような状況を学習できそうな気もするのですが、なかなかそれではうまくいったりしないものなんでしょうか。
参考文献
Skip-Thought Vectors を解説してみる
本日は、インスピレーションと予算の枯渇のため、実験ができていなかったので、論文の解説をいたします。まあ、解説とか偉そうなことを言っていますが、主に自分用のメモみたいなものなのですが。
紹介する論文は、「Skip-Thought Vectors」です。この手法は、文(センテンス)をベクトル化する手法の一つで、様々なNLPタスクで好成績を挙げたことで知られている去年の6月にarxivに公開された論文です。ちなみに著者の方が Theano 上で動くソースコードを公開しているので、実際に動かしてみることも可能です。(ただし、学習に時間がかかる) github.com
さて、この Skip-Thought Vectorsのですが、最大の特徴は教師なし学習でかなり質の高い文ベクトルを生成できる点にあります。実際に使用する入力データは、文章のコーパス(論文中ではブックコーパス)だけでできてしまいます。計算資源さえあればOKという、日曜大工な人間には最高に相性の良い手法となっています。
その構造ですが、下記の図が一番わかりやすいでしょう。入力しているのは、文書中のi番目の文。出力は、同じくi-1番目とi+1番目の文である入力文書の前後の文です。正確に言うと、入力文を元に文ベクトルを生成するエンコーダと、文ベクトルを元に前の文と次の文を生成する2つのデコーダから成っているモデルです。
論文中では、エンコーダに用いたモデルはGRU、デコーダに用いたモデルは conditional GRUを使用していますが、エンコーダ・デコーダとして使用できればモデル上なんでもいいことになります。
では実際にどのように学習していくのか。手順は下記になります。
- エンコーダに入力となる文を最後まで入力する(入力に用いる単語ベクトルはあらかじめ用意しておく。ID形式とかなんでもOK)。
- エンコーダの学習により獲得した隠れ層の値を入力文のベクトルとして使用する。
- デコーダに入力文の引数と、生成する文の一つ前の単語を入力する(最初の単語の場合は、eos 記号を入力とする)。
- デコーダのこの時の隠れ層の値と、出力される単語に対応する語彙ベクトルの内積を求め、この値をその時点での該当単語の出力される確率として扱う。
- 出力文の最後まで 3−4 の操作を繰り返し、単語生成確率の和を求め、この値が最大化されるようにエンコーダとデコーダのパラメータを学習する
デコーダは、前の文を生成するものと次の文を生成するものの2つがあり、基本的にそれぞれで使用するパラメータは違うものを使用しますが、語彙ベクトルだけは共通のものを使用します。というわけで、以上で学習は完了です。簡単ですね!
注意点としては、学習時に出現していない単語がテストセットに含まれている時の扱いです。論文中では、テストセットと学習セットに含まれる単語をword2vec等でベクトル化した後、学習セットに含まれる単語のベクトルを word2vec ベクトルから学習時に使用したベクトルに射影する線形変換を学習しすることにより、未知語の表現を獲得しエンコーダでも使用できるようにしています。 デコード時に出力される語彙に関する言及は特にないので、増やすことについての考慮は特にされていないと思われます。難しそうですものね。
また、学習時に使用する文ですが、 attention mechanism (参照:Neural machine translation by jointly learning to align and translate.) を使用して、適切な単語のみを考慮して学習できるように一部改変しながらもちているようです。
というわけで、後はエンコードしたりデコードしたりして遊んでみてねーとのことですね。エンコーダ・デコーダに使用するモデルを変更してみても面白いかもしてません。
2016.04.30 追記
attention mechanism については、エンコーダー・デコーダーモデルにそういう+αもあるよという一般的な説明であって、実際に論文で説明している手法には使用されていないようです。