こんにちは､ 人工知能の講座にようこそ｡
わかりました｡
それでは､ これまでのチュートリアルを楽しんでいただければ幸いです｡
直感はもう少しで完成です｡
もうすぐですね｡
もうすぐです｡
実用面を重視する
ちょっとしたことでカバーできるようになったんです｡
さて､ 前回は､ このキーとなる学習の方程式にニューラルネットワークを追加し､ 学習を次のステップに進め､
ディープラーニングに変えていく方法についてお話しました｡
そして今日は､ 実用面でコーディングすることになる､ 特別に重要な機能を追加する予定です｡
そこで､ ハドリンと私は､ 直感の部分でカバーすることが重要だと考え､ コーディングの部分になったときに､
より準備ができているようにしました｡
ですから､ 先ほどお話したように､ 私たちはそこにネットワークを持っているのです｡
起こるのは2つのパートだ｡
まず､ 学習です｡
つまり､ ネットワークは新しい状態になるたびに実際に学習していくのです｡
この環境に対応するために､ ウエイトを少しずつ更新して､ どんどん良くしていくのです｡
そして､ 国家内部での演技です｡
そのため､ Q値の状態がカウントされた後､ 1つのキーバリューが選択される｡
そこで今日は､ やはり学習の部分についてお話します｡
これから､ まあ面白い機能を考え出すのですが､ この機能を自分たちで考え出すわけではないのですが､
ディープラーニングにとって非常に重要な機能についてお話します｡
そして､ その機能が「エクスペリエンス・リプレイ」です｡
さて､ ここで私たちのネットワークを紹介します｡
だから､ ここにコピーしてきたんだ｡
下側で計算された損失は､ ネットワークを通じて逆伝播されることがわかりました｡
そして､ 私たちが扱っている問題をもう少し理解するために､ 何が起こるかの例を見てみましょう｡
そこで､ 実際にこのコースで学んだ例をご紹介します｡
これはまさにこのコースから撮影したスクリーンショットです｡
これをプログラミングするのです｡
これは自動運転車で､ この道路に沿ってこの中を走っているのですが､ この道路のナビゲーションの仕方を学ばなければなりません｡
それで､ 前回お話したように､ この状態で何があるのか？
そしてもちろん､ 国家は×1､ ×2だけでは済まない｡
アランがもう少し詳しく説明しますが､ 車の角度に関連するいくつかのパラメータと､
相対的なパラメータ､ センサーの読み取り値などが､ どのような状態になっているかを示しています｡
そのため､ 状態を記述するためのパラメータはそれ以上になりますが､ それでも値のベクトルになります｡
ニューラルネットワークを経由することになります｡
そして､ 出力には､ いくつかのQ値が表示されます｡
繰り返しになりますが､ 環境に応じて､ さまざまなアクション､ 可能性のあるアクションの数があります｡
しかし､ ここで何が起こっているのかをもう少し理解できるように､ わかりやすくするために､
このままにしておきます｡
では､ この場合､ これまでのところ､ このニューラルネットワークへの入力は何なのか､ ということが問題になっています｡
もっと言えば､ この神経回路網をどれくらいの頻度で起動させるか｡
このニューラルネットワークは､ どれくらいの頻度で通っているのでしょうか？
まあ､ 毎回新しい状態で終わるので､ 車が動くと新しい状態で終わるわけです｡
そして､ すべてがうまくいく｡
すべてのデータ､ 状態に関するすべての情報がネットワークを通過するのは､ 計算されたエラーです｡
このエラーは､ 以前のチュートリアルで説明した内容に基づいて計算されているのでしょうか｡
このエラーはネットワークを通じて逆伝播される｡
重みが更新され､ その後､ 車がどの行動を取るべきかを選択し､ その移動が新しい状態で終了します｡
新しい状態では､ すべてがやり直しになります｡
そして､ 基本的にこれは車が新しい状態になるたびに起こるわけです｡
さて､ この例をご覧ください｡
私がこのスクリーンショットを撮ったのは､ 経験､ リプレイ､ 体験によって解決される問題を非常によく表しているように見えるからです｡
リプレイは､ このコースやこの特定の問題で使うだけのものではありません｡
これは､ 人工知能のアルゴリズムのように､ 何度も何度も繰り返し使われるもので､
非常に強力で重要なものだからです｡
だからこの車､ この問題､ この環境の中で見てください｡
その目標は､ ここからここまで往復することです｡
その目的は､ 砂でできたこの壁を越えないように､ ここ､ ここに進むことです｡
そして､ 車はこっちからスタートして､ 下に降りていき､ 目標にどれだけ近づいたかで報酬が決まるような仕組みになっています｡
ここから先は車の話か｡
下がっては､ こうして､ こうして､ こうして､ こうして､ こうして｡
この壁に沿って､ この壁に沿って｡
そして､ 次は何をするつもりなのか｡
回ってくるから､ どんどん進む｡
では､ どうすればいいかというと､ このままでいいのです｡
でも､ ちょっと考えてみましょう｡
この壁まで来たら､ いちいち前に出るんですよ｡
前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､ 前へ､
前へ､ 前へ｡
だから､ 構造環境によっては､ ここで100手とか､ ここで50手とか､ そういうこともあるかもしれない｡
彼らはただひたすら､ 前へ､ 前へ､ 前へと4人で進んでいく｡
そして､ 何も変わらない｡
何もない｡
本当に変わるんですね｡
そう､ このターゲットからさらに遠ざかり､ このターゲットに近づいていくのです｡
それは素敵ですね｡
しかし､ 周囲の環境という点では､ あまり変わっていない｡
相変わらずの壁です｡
車に乗っている人なら､ このような状況を見たことがあると思いますが､
何を見ても環境が単調で､ ただ通り過ぎるのと同じようなものを見ているだけなのです｡
でも､ 例えば､ 砂漠を車で走っていて､ 同じものを見ているだけだとしたら､ どうでしょう｡
同じ音なんです､ 同じ音なんです｡
何も起こらない､ 何も変わらない｡
もちろん､ 何かが変わるかもしれません｡
例えば､ 車を運転しているときに､ GPSが目的地に近づいていることを表示しているとします｡
つまり､ このインプットのひとつが「変化」なのです｡
しかし､ その他の多くの入力､ たとえばクルマに搭載されているセンサーは､ 変化しません｡
そのため､ 運転中に
この状態で､ ニューラルネットワークにインプットを入れていくわけです｡
ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここと､ ここです｡
ずっと入力はほとんど同じです｡
ですから､ 同じ入力､ 同じ値､ 同じベクトル､ あるいは非常に似たベクトルをネットワークに入力し続ければ､
多様性がないため､ 車は非常によく学習します｡
ひとつは､ その右側にあるこの壁沿いの走り方がとても勉強になることです｡
そうしてネットワークが更新され､ やりがいを感じていくのでしょう｡
運転することで徐々に報われるようになる｡
だから､ まあ､ いいかという感じで､ ここからが勉強のスタートです､ ああ､ 私はとてもいいことをしている｡
さらに良くなっています｡
もっとうまくやるんだ｡
この壁に沿って運転する方法を学んだだけなのに､ 実際にはとてもうまくいっているという誤った認識を持つことになるのです｡
そうすると､ ニューラルネットワークは､ この壁に沿って走ることに非常に適応してくるわけです｡
そして､ 突然このカーブが出てきて､ 車はどうしたらいいかわからなくなり､ 完全にこのニューラルネットワークに合わなくなるのです｡
そして､ 仮に何らかの形で調整されたとしても､ この部分を通過して､ この壁に行き着いたとしても､
同じことが起こるのです｡
ここから､ ここ､ こことドライブしていくんです｡
さて､ ニューラルネットワークはこの壁に適応するように自らを再構築しているのですが､ あるとき､ バーンとこんなことが起こりました｡
そして､ どうにかしてそれを乗り越えたとしても､ このままでは追い越されてしまう｡
そして､ この線に沿って同じことを｡
つまり､ 私たちが抱えている問題を非常に鮮明に表しているのです｡
それは､ ニューラルネットワークの使い方として､ 1つ1つの状態を更新していくので､ 連続したステップがたくさんあれば､
それらが同じである必要さえないからでしょう｡
しかし､ 環境には､ 連続した状態が何らかの形で相関していたり､ 相互に依存していたりすることが普通にあります｡
そして､ その相互依存関係によってネットワークが偏らないようにしたいのです｡
自動車に直線や長い曲線の走り方を学ばせるのではありません｡ また､
エージェントが環境をナビゲートする際､ 相関関係や相互依存の状態が次々に発生すると､
エージェントに学習させるだけではニューラルネットワークを台無しにしてしまいます｡
そこで登場するのが､ エクスペリエンス・リプレイです｡
経験値再生で何が起こるかというと､ これらの経験値です｡
そのため､ 1～3州､ つまり50州ある州は､ すぐにネットワークに接続されるわけではありません｡
実際には､ エージェントのメモリに保存されます｡
例えば､ これらすべてを保存して､ ある時点である閾値に達すると､
エージェントが自分で判断するようになります｡
よし､ 勉強の時間だ｡
私は､ 自分が持っているこのバッチを､ 今度はそのバッチから学ぼうとしているのです｡
そして､ 一様に分布したものをランダムに選択します｡ ここで重要なのは､ 次のスライドで説明する「一様に」という点です｡
それは言っておきます｡
しかし､ それは一様に分布したサンプルを取ります｡
つまり､ 基本的にすべての経験は平等であると考えられているのです｡
その経験のバッチから一様に分布したサンプルを取るのです｡
そして､ それを経て､ 彼らから学ぶのです｡
だから､ すべての経験が必要なわけではないんです｡
ただ､ 一様に分布したサンプルを取るだけです｡
だから､ ここから2人､ ここから2人､ ここから2人という具合にかかるかもしれません｡
そして､ そして､ それぞれの体験は､ 状態によって特徴づけられます｡
それは､ その行動､ その結果得られた状態､ そしてその特定の状態でのその行動によって得られた報酬にあるのです｡
そのため､ 各経験状態の要素に対して､ 1つのアクション状態から報酬を得ることができます｡
そして､ そのような経験をすべてネットワークに流し､ 学習していくのです｡
そうすれば､ そのパターンを断ち切ることができるのです｡
イライアス それは､ ネットワークを通して次々と体験させることで､ その連続性からくるものです｡
体験リプレイのメインはそこなんですね｡
それこそが､ アドレスの問題なのです｡
また､ 経験値再生のもう一つの利点は､ このような環境では､ 時として非常に貴重な､ レアな経験をすることができるかもしれないことです｡
だから､ 例えば､ よくわからないけど､ このコーナーを見てみよう｡
そうだろ？
これは......これは右コーナーです｡
そうですね｡
しかも､ とてもシャープなもの｡
シャープって何本？
だから､ このコーナーに抱きつくことを想定して､ ここから来ることになる｡
では､ この部屋全体では､ いくつの鋭い右角があるのでしょう？
右の角はこことここしかないんです｡
そうだろ？
だから､ こっちに来るときは､ 右の角なんです｡
そして､ 戻るときは､ この右端の鋭角の部分です｡
だから､ そしてこれはシャープじゃないんです｡
こちらはシャープです｡
つまり､ 鋭い右コーナーから学ぶ機会は､ 全環境で1回しかないのです｡
直線を走るのが得意になったり､ 柔らかいコーナーが得意になったり､
そういうのは大事な経験です｡
しかし､ それから学ぶ機会がそれほど多くないために､ この鋭い右隅を台無しにし続けることになるのです｡
そのため､ 他のことはすぐに覚えますが､ この右の角を覚えるのには長い時間がかかるのです｡
非常に単純化した例です｡
非常に単純化された説明ですが､ これは､ 時には貴重な経験となり得るという概念を示しています｡
単純なニューラルネットワークで､ ここに自分の価値観を入れると､ それが通過していきます｡
経験の順序性や相互依存性､ 相関性の問題を忘れて､ ちょっと忘れても､
何が起こるかというと､ 経験を入れると､ それがネットワークを通過して更新され､
その経験を瞬時に忘れてしまうのです｡
次へ次へと進むのです｡
それがニューラルネットワークの仕組みなんです｡
そして､ 次の状態､ 次の状態､ 次の体験､ 次の体験､ 次の体験と移っていくのです｡
この右隅は､ ネットワークを通した途端に消えてしまい､ その貴重な体験の記憶がないわけです｡
一方､ 経験値再生では､ これらの経験をバッチにまとめるので､ バッチをローリングウィンドウとして整理することができます｡
例えば､ 100個のバッチのように､ バッチに100個の経験ができるわけです｡
だから､ ここから戻ってくるときは､ この経験をバッチリ記録しているときと同じなんです｡
そして､ ある時点で､ 経験値のバッチから一様な分布を取って､ ローリングウィンドウにするのです｡
だから､ これらの経験を忘れてしまうのです｡ しかし､ これらの経験を保ちながら､
再び､ このバッチから学ぶのです｡
そして､ ここまで来たら､ でも､ そんな経験もバッチリしています｡
だから､ 今はその経験から学んでいるのです｡
そうすると､ この右側の角は学習過程で何度も出てくるかもしれません｡ なぜなら､ バッチがこの辺にあったときに､
そのバッチの中にあったからです｡
それから､ ここのバッチで､ ここのバッチで｡
だから､ 何回かに分けて出てきたのです｡ バッチは､ 経験のローリングウィンドウとして更新されるかもしれないからです｡
古い経験が追い出され､ 新しい経験が加わり､ そしてまた古い経験がそれを追い上げるわけです｡
そのため､ 経験というものは､ かなりの期間､ バッチに残り､ 車や代理店はその経験から何度も学ぶことができます｡
それも経験値リプレイのメリットですね｡
そしてもちろん､ 最後のアドバンテージは経験値です｡
リプレイは､ 一度に1つの経験から学ぶよりも､ より多くの経験から学ぶ機会を与えてくれます｡
そのため､ 経験値が限られた環境であっても､ 経験値再生のアプローチによって､ より早く学習することができるのです｡
また､ 何度も何度も環境をやり直すのではなく､ やり直しが効かない分､ 学習スピードが上がります｡
その経験を保存しているのですね｡
それが経験による主なメリットですね｡
リプレイ
それについておさらいしておきましょう｡
私たちは､ 独立のパターンを打破し
連続した体験の相関関係
重要かもしれない希少な経験を保存しておくことで､ そこからより多くのことを学べるのです｡
そして､ 環境の中で学ぶことができるのです｡
私たちは､ 経験豊かな環境､ 経験不足の環境､ エージェントが経験することがそれほど多くない環境でも､
それを学ぶことができます｡
それがエクスペリエンス・リプレイというわけですね｡
これよりもう少し詳しく読みたい方は､ 2016年にDeepMindが発表した興味深い記事があります｡
Prioritized Experience Replayと呼ばれるもので､ その理由について語られています｡
なぜ､ 体験バッチから体験を選択するのに､ 一様分布を使っているのでしょうか？
より良い選択方法を見つけて､ 重要だと思う体験に優先順位をつけてみてはどうでしょうか｡
というわけで､ なかなか面白いことになっています｡
この場合､ 経験値再生で知識を補強するだけでなく､ 実際に技術の最先端で動くことができるようになるわけです｡
これは2016年で､ ディープマインドから出版されているんですね｡
つまり､ 非常に最近の､ 非常に強力な論文なのです｡
ですから､ 実際にこのアルゴリズムの限界を探る､ あるいはさらに探求して､ 次のレベルに持っていくことができるようになるのです｡
では､ なぜ一様分布なのか､ どのように変えれば経験値再生につながるのか､ この論文から読み取っていただくことにして､
よろしければ､ 今日のチュートリアルを楽しんでください｡
そして､ エクスペリエンス・リプレイとは何かということがわかり､ 自信を持って実践的なチュートリアルに使うことができるようになりました｡
そして､ 次回お会いできるのを楽しみにしています｡
それまではお楽しみに｡
I.