読者です 読者をやめる 読者になる 読者になる

AIと言語

人工知能 強化学習 機械学習 自然言語処理

本当はこれから考えを深めていかなくてはならないアイデアで、これから改良していこうという段階なのですが、面白そうなので書きます。

 

まず、できるだけ話をクリアにしたいので定義をします。AIはここではreinforcement learning agentとします。つまりAIとは与えられたタスク(普通は1つだが、複数もあり得る)に対して報酬(評価)を最大化する最適化マシンである、ということにします。これが現在では一般的なAIの定義な気がするので、とりあえずこうしておきます。

 

また、特に高次元のインプット・アウトプットに対応するためにdeep learningを使うことをイメージしています。これがいわゆるdeep reinforcement learningです。これに関しては色々と解説がありそうなので説明は省きます。

 

Deep learningを組み合わせることによって、ゲームとして定式化できるタスクであれば、(従来と比べて)はるかに複雑で高次元なゲームであっても人間並、あるいはそれ以上のレベルで攻略できることが近年実証されつつあります。

 

ただし、このような意味でのArtificial Intelligenceと、人間のHuman Intelligenceの間にはいくつか差があることも知られています。その中でも特に顕著なものは、

①AIはひとつのタスクに特化している(いわゆるmultitask learningはまだまだ難しい)が、人間は色々なタスクを(多くの場合初見であっても)うまく解決していくことができる

②AIは学習に人間の何万倍~ものデータが必要である

ということかなと思います。このような観点からみるとAIはまだまだ人間には及ばないし、その通りだと思います。

 

具体例として、に限って言えば人間はかなり少ない事例から言語を学ぶことができることが知られています。これはpoverty of stimulusと呼ばれていて、言語学の世界では議論の的になっているようです。これと同じようなことは画像認識でも言えます。

 

とりあえずは置いておいて、の問題をどのように解決すればいいでしょうか?1つの策としては何万倍~ものデータを用意してあげればいいじゃんという強硬策があります。もちろんある程度はdata efficiencyを考える必要はあると思いますが、もしもデータを大量に用意できて、さらにAIが膨大なデータを処理する能力を持つのであれば、これは理にかなっているように思います。

 

*強化学習で言えば、各時点で統計的に最適な方策を計算すればdata efficiencyは改善できますが、その分計算時間がかかります。それだったら、大雑把に方策を評価して大量に試行錯誤を繰り返すことによって、観測データを増やせばいい、という発想になります。

 

さて、ここでreinforcement learningにおける2つの流派のようなものが生まれてきます。1つ目は、バーチャルな世界を用意して、AIをその仮想世界で超高速に学習させる、という方法です。2つ目は、センサーをつけたAI(というかロボット)を現実世界で学習させる、という方法です。

 

例えば言語獲得というタスクを考えてみると、現実世界で人間と会話をしながら言葉を学習することもできますが、これはかなり時間とコストがかかりそうです。一方で仮想世界にはそもそも言語が用意されていないので、人間のような指導はちょっと期待できません。

 

しかし、仮想世界において、AIたちがAI同士の間で通じる新しい言語を作り出すことは可能です。というより、このような言語をAI創発することは必然のように思われます。これはゲーム理論の立場から次のように説明することができます。

 

・完全協力ゲーム(全てのAIが等しく報酬を得るゲーム)において重要になるのは、AI同士が行動をcoordinate(協調)することです。タスクを成功させるにあたって、このcoordinationがほとんど必須になります。それではどのようにそれを実現すればいいでしょうか?1つの有力な方法はコミュニケーションをとることです。コミュニケーションを情報のやり取りと捉えるなら、おそらく実数のような連続値を送る方法と、ビットのように離散値の情報を送る方法、という2パターンがあります(もちろん結局はビットで情報をやり取りすることにはなりますが、ビット情報の表す「意味」をここでは考えています)。連続値で情報をやり取りするとなると、これを言語として捉えるのは結構難しいものがありそうです(例えばパラメーターを丸々共有する場合など、コミュニケーションではあるが言語とは言いづらい)。しかし、効率性などを考慮すると(意味的に)離散的な情報を送ることになる、という示唆があります。また、そのような離散的な情報のやり取りを通じて実際に共通のプロトコル創発することは、deep reinforcement learningの枠組みで(小規模な実験ですが)すでに存在します。

 

とにかくmulti-agentが存在する仮想世界で、AIたちは協調する必要があります。そしておそらくこれは離散的な意味を持つ言語による協調となります(あるいはそのように誘導することができます)。

このような言語は部分的に自然言語と似てくるでしょう。なぜなら自然言語は(人間同士の間でですが)かなり効果的に情報をやり取りできるようある程度最適化されているからです。

一方で、これは自然言語とは少し違ってくるでしょう。なぜなら自然言語はAIほど徹底的には最適化されていないからです。

AIの言語がどのようなものになるかは、ちょっとまだわからないですが、これは深く考える価値がありそうです。

 

以上をまとめると、AI同士はそれぞれのタスクのパフォーマンスを上げるために、離散的なシンボルを交換し始めることが想定できるはずで、これがAI間の原始的な言語になります。これがどのようなものになるかは完全にtask specificなので予想はしづらいです。しかし、一方で先ほど述べたmultitask learningがうまくいくようになってきたら、言語も徐々にtask freeになっていくのではないでしょうか?こうしてAIの間でgeneralな言語が作られていく、というプロットは割とありえそうです。

広告を非表示にする

不完全なAI

人工知能 自然言語処理

AIに関する議論はとてもconfusingな気がします。例えばどのタイムスケール(10年後なのか30年後なのか100年後なのか)で話しているかによって見方がまるっきり変わってくるし、強いAI(人間のように思考できるレベルのAI)と弱いAI(現在のレベルのAIの拡張)の話でもまた色々と違ってくるからです。なので今回は頭を整理するつもりで、個人的に考えている将来の人工知能図を想像してみます(なのであまり信頼はしない方がいいかもです)。

まず、一応の目安として30年後くらいのAIについて考えてみます。カーツワイルの提唱したシンギュラリティもそのあたりですし、現在20代の僕たちの世代に大きく関わりがあるのはこのあたりの時代のAIじゃないでしょうか。

また、強いAIと弱いAIに関しても色々な議論があってややこしいですが、30年という単位でみると この中間あたりの不完全なAIができるのではないか、と思っています。そして僕が思うにこの不完全なAIというのはとても危険であり、これに対する議論と対策が今後重要になってくるのではないかと思います。

 

どうして不完全なAIは危険なのでしょうか?まず、強いAI(人間の知的レベルを真に上回るAI)が完成するのであれば僕はあまり心配がありません。強いAIはおそらく人間よりはるかに良い判断ができるし、人間を理解し、コミュニケーションを取ることもできるからです。確かに人類が強いAIに進化する(ポストヒューマン化する)のではないとしたら、強いAIに人類が支配される・滅ぼされる、みたいなことはあり得るかもしれません。しかし、強いAIをもし作ってしまったとしたら、その時点をシンギュラリティとしてそれ以降のことは全く予想がつかないことになるはずで、もはや心配するのも無駄な気がします。強いAIはちゃんと倫理を理解できるはずなので、それでも「やっぱり人間滅ぼそう」と判断したとしたら、もうどうしようもないです。今の僕たちには理解できないですが、これは決して最悪のシナリオではなく、なるべくしてなった自然な結果だと思います。

ただし、強いAIというのは少なくとも人間の脳を超えるようなAIです。計算力だけの話ならまだしも、30年という時間では人間の脳を細かく理解することはできないだろうし、再現することも難しいのではないかと思います。なので、強いAIはまだできないように思います。

一方で、弱いAIしか作れないのであれば、よほど変なことをしなければ大きな害はないんじゃないかと思います。もちろん現在の技術レベルの弱いAIを悪用して殺戮兵器を作ったりは出来ます。でもこれは人間の責任でAI云々の問題ではないように思います。また、AIが人から仕事を奪って云々の話も、そんなに悪い話ではないような気がします。そのような世の中で人間が幸せに生きていけるかどうか、というのも人間の責任でAIの問題ではないです。

 

しかし、不完全なAIが作られてしまったらどうなるでしょうか?改めて定義っぽいことをすると、

① 弱いAI<?不完全なAI<?強いAI

② 不完全なAI≠人間の知能

という感じになります。<?というのは「おそらく強い」という意味で、人間には判別ができない状態です。また、≠というのは人間とは類似はしていても別のアーキテクチャで動いている(ニューラルネットのような感じ)ということです。簡単に言うと多くのタスクに対して人間以上(おそらくはるかに上)のパフォーマンスを出すことができるが、人間と同じ思考回路で動いているとは限らない、という状態です。

こうなってしまうと、不完全なAIをどこまで信頼していいのか全くわからない状況になってしまいます。そしてこの不完全なAIに世界が支配されるようになる、というのがおそらく考え得る中で最悪のシナリオではないでしょうか。

実際にこのシナリオはある程度現実味を帯びていると思います。現在ぽつぽつと汎用人工知能(AGI)の研究が出てきているみたいですが、これらはおそらく不完全なAIになるような気がします。例えば

 

http://www.goodai.com/roadmap

 

に基づけば、タスクベースでAGIを作っているので確かに一見人間のように思考するものができそうですが、人間とはまるで違った構造のものが出来上がりそうです。それを一体どのように活用すればいいのでしょうか??不完全なAIを社会全体の利益につなげる方法は、正直全くわかりませんし、模索していかなくてはいけないと思います。少なくとも、最悪のシナリオを防げる対策が今現在あるようには思えません。

 

まとめます。不完全なAIを制御するのはとても難しそうで、これは早急な対策が必要なくらい重要な問題だと思います。制御の仕方は何をどのように学習させるか(悪いことを学習させない)、できる限り構造をブラックボックスにしない、人間と意思疎通ができるようにする、AIに任せる範囲を制限する、などなどたくさんあります。個人的には人間とAIが意思疎通できるようにする、というところを追求したいと思っています。そのためにはAIが自然言語をほぼ完璧に理解できるようになる必要があるので、まだまだ道のりは遠いですね。頑張ります。

広告を非表示にする

OpenAIと今後の強化学習

人工知能 強化学習

OpenAIがUniverseという強化学習のプラットフォームをリリースして話題になっているみたいです。

 

universe.openai.com

 

そもそもOpenAIとは何かというと、イーロンマスク、ピーターティールといった名だたるメンバーが後援しており、さらにMicrosoftとも提携している今とてもホットな非営利AI研究会社です。

彼らは「安全なAIの開発」と「平等かつ誰にでもAIの恩恵が受けられる世界」を志向しており、その一環として今月Universeを発表しました。

強化学習は以前記事で書いたようにagentがenvironmentと試行錯誤しながら、報酬を最大化するように学習していくという機械学習の手法です。

ここで常につきまとってくる問題として、環境を現実世界ベースにするのは難しいということが挙げられます。例えば対話システムについて考えてみると、学習中の訳わからないことばかり言うようなAIと積極的にお話したいと思ってくれるユーザーはいません。一方で、これを仮想世界ベースにするとこのような制限がありません。現実世界ではありえないくらいの、計算スピードと比例した量の学習が可能になります。

そこで、環境としてゲームを使うのが良いのでは、という話になります。もちろんゲームAIを作ったところで今のところ社会に実益はありませんが、非常に複雑なゲームを解けるくらいのAIを作ることができれば今後面白い応用はいくらでも出てくると思います。

 

さて、それでは今後の強化学習について(僕も詳しい訳ではないですが)ちょっと予想をしてみます。

まず、Universeにあるゲームを見てください。Starcraftとかいう(僕は詳しい訳ではないですが)非常に複雑なゲームがあったり、こんなのAIで解ける訳ないだろ!というものがちらほらあったりします。

しかし、もちろんOpenAIはこれらのゲームを高いレベルでプレーするAIを作れるだろうと予測しているのだと思います。実際に、それを裏付ける研究アプローチがあるみたいなので、それを紹介してみましょう。

 

一つ目は、transfer learning(転移学習)というものです。今までは例えば囲碁のAIを使って将棋をプレーさせることはできませんでした。しかし、類似したタスクで学習させたAIを新しいタスクに利用することが今後出来ていくのではないか(実際にレーシングゲームでは出来ているらしい)、という話をOpenAIのブログで読みました。これが出来たらかなりすごいですね!理論上はタスクの間でgeneralizationするだけなので、なんかやれそうな気がします。

 

二つ目は、従来のAIの問題としてMontezuma's Revengeのように非常に長いゲームだと、報酬がまばらで学習がとても難しいことが知られています(例えば前回書いたDQNだと全く歯が立ちません)。

しかし、Hierarchical RLのような手法を使うことによって、subgoalを作ることによってこのように長いゲームも解決できるようになってきているようです。

これは別の見方からすると、

まばらな報酬→学習がもっとうまくいくような報酬

となるように報酬を学習しているという風にも捉えられます。

ともかくこれによって長期的な計画を立てるようなAIが実現できる可能性が高くなるのではないか、と思います。

 

www.youtube.com

 

 

それでは僕が研究している自然言語処理にはどう役に立つのか?

これはまだはっきりとは答えられません。また改めて考えてみたいと思います。

 

三つ目がありました。

模倣学習とか逆強化学習いうのもあります。要するにプロの人間のプレーヤーから学ぶこともできるはずです。

 

 

Doube-DQN with prioritized experience replay

機械学習 強化学習

Deep Q-Network(通称DQN)を試しに使ってみました。

ちょっとだけ説明すると、前回説明した強化学習では状態数が大きい場合、現実的な時間内で実行できないので、近似的な手法が必要になります。

そこでDeep Learningを使ってvalue functionを推定しようという話になります。

しかしこれは一般的に学習が難しくて、DQNのほかにもDouble-Q-learning、prioritized experience replayなどを組み合わせた方が良いです。

Double-Q-learningはDenny Britzさんのもの、

https://github.com/dennybritz/reinforcement-learning

Prioritized Experience Replayはrank-basedですがこれを使わせていただきました。

https://github.com/Damcy/prioritized-experience-replay

実装する際はImportance sampling weightで学習率を重み付けするのだけ気をつけてください。

 

下に結果があります。

epsilon-decayを500kステップ目で0.1まで減らしてしまったので、その後はほとんど学習できてないですね。ちょっと残念です。

 

 

f:id:futsaludy:20161208101910p:plain

教養のための強化学習

人工知能 哲学 機械学習

強化学習は機械学習の一分野である、というと一般の人は敬遠しそうな気がしますが、このように考えてみてください。機械学習というのは汎化の理論です。つまり観測したデータから有用で一般的な法則を発見しよう、というだけの話なのです。そして強化学習というのは「過去の経験から汎化によって最適な行動を学習する」というものです。このように考えるだけで、強化学習がいかに僕たちの実生活と密接に関わっているかが分かると思います。

 

それでは強化学習のモデルを紹介します。これは下図のように、実はとてもシンプルなのです。

f:id:futsaludy:20161109143736p:plain

まずagentはあなた自身だと思ってください。Environmentはあなたの周りの世界です。あなたはある時点tにおいて何かしらの行動(action)を起こします。そのactionは世界に働きかけて、あなたはその結果をstateとして認識します。それと同時に、あなたは世界から何かしらのrewardを受け取ります。Rewardは必要に応じて好きなように捉えて良いです。脳の報酬系でもいいし、お金でもいいし、幸福でもいいです。そうするとあなたはstateの情報をもとに次のactionを考えて実行します。これをずっと繰り返すとしたら、あなたが取るべき最適な行動の選択(action policy)はどのようなものになるでしょうか?明らかに答えは現在から未来におけるrewardの総和を最大化するものです。なので、このようなaction policyを見つけ出すことが目標になります。

 

しかし、このままだと問題が複雑すぎるので、ちょっと話を簡単にしてみましょう。

①まず、rewardは幸福でも何でもいいですが、数値化して考えます。そこはうまく考えてください。

②また、今回は話を簡単にするためにstateactionの種類は有限であるとしておきましょう。実はこの仮定は強化学習の可能性を制限するよりは、むしろ役に立つ方が多いようです。例えば0~1kmの間の任意の地点をstateとすればこれは無限集合になりますが、実際問題としては{0, 100m, 200m, … 1km}のように地点を分割して有限にして考えることによって話が単純になるだけでなく、無駄に細かい情報をそぎ落とすことができます。

③最後にvalue functionという考えを導入しましょう。これはstateとaction policyを引数にとって、そのstateからaction policyに従って行動した場合に得られるrewardの総和の期待値を返す関数です。イメージとしてはその後得られるrewardの平均値を求めている感じです(本質的には同じです)。これによってaction policyの評価ができるので、どんどん改善していくことが可能になります。つまり強化学習は基本はvalue functionを求める→action policyを改善する→value funtionを求める→…の繰り返しになります。今回のように有限性を仮定すれば、何回かこれを繰り返すことで最適なaction policyが確実に求まります。

 

f:id:futsaludy:20161109154653p:plain

 

さて、それでは具体的にどのようにvalue functionの推定とaction policyの改善を繰り返せば良いでしょうか?いくらでも方法はありますが、その前に強化学習で最も重要とも言える方針について説明します。これだけでも理解していただければ今回は嬉しいです。

 

方針:探索(explore)と搾取(exploit)をうまく組み合わせる。

 

例えば毎晩の献立を考えてみてください。あなたはハンバーグが一番の好物で、ハンバーグを食べればかなりの満足(10くらい)を得られることがわかっています。この情報をもとにハンバーグを食べ続けることを「搾取」と呼びます。しかし、これをずっと続けるだけでは、ハンバーグより好きな料理が何かしらあった場合、最適な方針とは言えません。なので、たまには(10日に1度くらい)別の食べ物にチャレンジすることにしたとしましょう。これを探索(explore)と呼びます。もちろんめちゃくちゃ苦手なものを食べてしまって、満足を損なう可能性はあります。しかし、実はパスタを食べるとより大きな満足(12くらい)が得られることがわかったとします。そうすると、パスタを食べる方が長期的に見て満足の総和を高められます。

 

余談:しかし、もしかしたらパスタみたいにハンバーグより満足できるものは存在しなくて、ハンバーグを食べ続ければ確実に10の満足を得られるのに、10回に一度exploreを行うことによってむしろ最適なaction policyを見失うのではないか、と思われるかもしれません。しかし、exploreを行うことによるメリットは次のようなものがあります。

①だいたいの場合、パスタみたいなものは存在します。最適なpolicyが最初からわかってるなんてことはないはずです。

②味の好みが変わってきた場合(例えばハンバーグに飽きてきたとか)でも、exploreすることによってうまく対応できます。余談終わり

 

それでは具体的な方法をちょっとだけ紹介しましょう。まず、あるaction policyとそのvalue functionがあったとします。これをもとに、action policyを改善したい訳です。あるstateを選んで、そこからaction policyに従わないactionを選んでみましょう(つまりexploreする)。そしてそれ以降はもとのaction policyに従う、ということにします。ほとんど変わりませんが、これによって新しいaction policyを生み出すことができます。もしも新しいaction policyの方が良いのであれば、それに乗り換えることで改善することができます。これを繰り返す、という感じです。

 

もちろん、実際にはもっと色々な方法があるし、そもそもvalue functionの推定法も説明していないし、僕もこれから勉強していきたいところですが、アイデアはこんな感じです。

 

最後に、今回の記事のタイトルと趣旨を説明をしましょう。僕はこの強化学習のアイデアがとても素晴らしいし、実生活でも有用だと思うのです。別の言い方をすれば、強化学習はexploreとexploitをうまく組み合わせることの有用性を数学的に証明したことにもなる、と僕は感じています。そういう意味での「教養」です。

 

なので探索と搾取はうまく使い分けましょう。好きなことはどんどんやっちゃえばいいと思います。そしてたまには普段やらない変わったこと(リスクは考えた方がいいですが)もやり続けた方がいいです。多分これによって、最適な生き方に近づけるはずです。人によっては、あるいは運によってはそれでもうまく行かないかもしれません。でも、せめて最善を尽くせば後悔はしないはずです。

 

長くなってすみません。この記事はRichard SuttonらによるReinforcement Learning: An Introductionという本を大いに参考にしています。

対話について

人工知能 自然言語処理

対話というのは一見簡単そうに見えますが、よーく考えてみるとかなり難しい話がボロボロ出てきます。ということで今回はその難しさ(とできれば面白さ)を見ていきたいと思います。

そもそも対話とは何なのか?僕の専門分野では「自然言語でコミュニケーションを行い、情報を授受すること(「自然言語処理シリーズ 対話システム」より)」とか言われています。そう聞くとなるほど、と思いますが、実はこれはちょっと落とし穴な気がします。例えば「自己との対話」なんて言葉がありますが、このように情報の授受というよりも言葉を使って思考したり、議論をする場合だって「対話」になるはずです。

もっと細かい話をすると、僕たちは色々と考えるときに言葉を使っている訳です。逆に言えば言葉を使った雑多な考えが頭の中にプカプカ浮かんでいる感じです。そしてこの考えの中には互いに矛盾した考えもあります。「今日はラーメンを食べたい」「いや今日はうどんにするべきだ」みたいに。そしてこれらの矛盾を見つけて、うまいこと平衡状態に持っていくこと(「ラーメンは太るし、これから痩せていきたいから 今日はうどんを食べよう!」)を弁証法と言います。これは僕が知っている限りでは論理学の立場からは全然うまく説明できない事象で、しかし人間が思考を洗練させていくためには非常に重要な方法です。

話を戻すと、対話のこの「情報を授受する」という定義はちょっと一面的というか、情報系の分野独特の考えではあるように思います(要するに対話とはメッセージを送信するだけではないのです)。しかし、あまり目くじらを立てても仕方ないのでとりあえずこれは受け入れて話を進めます。なぜなら僕が今回議論したいのは「対話とは何であるか」という哲学的な話ではなくて、「良い対話とは何であるか」という実学的な話だからです。

 

良い対話というのははっきり定義できる場合があります。例えばある目標(タスクと言います)があって、それを達成するために対話を行う場合です。このようなケースであれば「良い対話」の定義は超簡単です。なぜならタスクを達成できれば良い対話だし、失敗すれば悪い対話である、というだけの話だからです。もうちょっと深く考えたところで、より対話にかかる時間・コストが短ければなお良い対話であるとか、話がスムーズで分かりやすければ良い対話であるとか、その程度のもんです。基本的には簡単だと思います。

 

しかし、タスクがないとか、明確でないみたいな場合は話は難しくなります。最低条件として話が通じないと良い対話とは言えないでしょう。しかし、それ以上のことを言うとよくわからなくなってきます。楽しい会話がいいのか?悲しい会話だってたまにはいいと思います。空気を読んでくれるとうれしいけど、たまにははっきりと意見を言ってくれるのもためになります。それならばめちゃくちゃ高い教養のある対話がいいのでしょうか?一理あるとは思いますが、教養のない対話(おやじギャグとか)に価値がない訳でもなさそうです。

こうなってくると収拾がつかなくなるので、僕は基本的にはあまり好きではありません。なのでそろそろ話をまとめましょう。

 

結論1:

なるべく対話をするときにはタスクベースでやる方が良いのではと思います。なぜならこれによって良い・悪いの基準がはっきり理解できて、良い・悪いの基準がわかって初めて対話の質を向上させることができるからです。かなり意識高い感じですね。タスクという言い方があまりよくないかもしれませんが、そこはうまく飲み込んでください。

 

結論2:

さらに、タスクベースという話は、対話AIみたいな人工知能の設計・評価・改善につながってきます。なぜならタスクベースで「良い対話」の基準がはっきりしていないとプログラムが書けないからです。結局今のレベルのAIなんて最終的なよし・あしを人間がはっきり教えないといけない、みたいな文句にも繋がるかもしれませんし、対話AIの話に限って言えばこれはちょっと痛い指摘かもしれません。やっぱり理想としてはAI自身がよし・あしの基準を考えるようになって欲しいからです。これはまだまだ先の話だと思いますが。

広告を非表示にする

Transduction

機械学習 哲学

人間の思考はざっくりと分けて演繹的(deductive)思考と、帰納的(inductive)思考がある、というのは古くから言われてきたことで、僕もこのブログで両方についてちょっとずつ触れてきたつもりです。例えば論理的思考みたいのは明らかに演繹的なもので、機械学習というのは基本的には帰納的な考えです。しかし、世の中には”transductive"な思考というのもあるらしい?ので、それについて今回は簡単に紹介してみたいと思います。

 

まず、帰納的な思考について復習しておきましょう。そのためにこんな例を考えてみます。今、手元に100個のりんごがあります。このりんごは自由に使っていいりんご(トレーニングセット)と呼びます。その他に、10個のりんごがあって、これらをテストセットと呼びます。問題は、トレーニングセットを自由に使って、テストセットのそれぞれのりんごに種があるか・ないかを予測することです。

機械学習的な考えで言えば、100個のりんごの「特徴(色、形、サイズなど)」と「種のあり・なし」を調べて、どんな特徴があれば種があるのか・ないのかを判別するための一般的なルールを考えることになります。これによって、テストセットのりんごについてもそれらの「特徴」から「種のあり・なし」を推測できるだろう、ということになります。

 

以上が帰納的な考え方の一例です。それではtransductiveな考えとは一体どんなものでしょうか?帰納的な考え方との相違点は以下の2つです。

○相違点その1

帰納的な考え方では、トレーニングセットを使って「特徴→種のあり・なし」という一般的なルールを考える、というアプローチでした。しかし、transductionではこのような一般的なルールは考えません。

○相違点その2

帰納的な考えでは、基本的にはテストセットは全く見ずに、トレーニングセットだけを使って予測をしようとします。transductionでは、トレーニングセットとテストセットの両方を見ながら柔軟に予測をすることを考えます。

 

注:相違点その2だけを見ると、機械学習に詳しい方はtransductionは半教師付き学習のことではないか?と思われるかもしれません。実際、これらはかなり近いことをやろうとしているだろうと思います。しかし、transductionは相違点その1という観点から見ると、半教師付き学習とも異なるのではないか、と僕は思います。

 

具体的にりんごの例を使って説明してみると、transductionとはおそらく次のような考え方だと思われます。まず、トレーニングセットとテストセットのりんごを混ぜてしまって、その中で(例えば特徴をもとに)グルーピングを行います。グループに分けたら、トレーニングセットのりんごの種のあり・なしを調べて、それをもとに(例えば同じグループに種があるのとないのが混じらないように)グルーピングを調整します。そして、それぞれのグループに対して「種がある」「種がない」のいずれかの判定を下します。そして観測していないリンゴに対しては「分からない」としておくのです。

 

そうすると、やはりこれは半教師付き学習とはちょっと異なるように思います。一つは観測していないケースでは「分からない」という判定を下す、というところです(つまり個別に、観測したものしか考えない)。しかしそれ以上に、やはり相違点その1を強調しておきたいです。今述べたtransductionの方法では、最初にすべてのりんごを含めてグルーピングを行うと言いました。これはつまり、テストセットが増えたり変わったりする度に最初のグルーピングが変わるということを意味しており、その点で「特徴→種のあり・なし」のような一般的なルールを考えるつもりは一切ありません。これは極端な例かもしれませんが、デメリットとしてテストセットが変わるごとに最初の工程から全てをやり直さなければならないので、とても非効率です。しかし、逆に言えばテストセットが変わるごとに柔軟に対応することができる、というのはメリットなのかもしれません。

また、帰納法は個別なもの→一般的なルール→個別な予測を行うものですが、これはよく考えるとちょっと「ムダ」があります。たとえば有名な三段論法


ソクラテスは人間である。人間は必ず死ぬ。よってソクラテスは死ぬ。

 

では結論「ソクラテスは死ぬ」を導くために、より一般的な「人間は必ず死ぬ」という強い結論を使っています。このような論法はそういう意味でちょっとムダがあります。

Transductionのイメージはそういうムダに話を広げるのはやめよう、個別なもの→個別な予測をしよう、という主張が暗に含まれているようです。


以上がざっくりとしたtransductionに対する僕のイメージです。これは実用性よりも、人間が普段無意識に行っているreasoningのモデル化を念頭に考えられているのではないかと思うので、あまり知っておいて役立つかどうかはわかりません。また、僕も勉強不足でよくはわかっていないので、詳しい方がいらっしゃいましたら教えていただけると幸いです。

広告を非表示にする