こんにちは､ このチュートリアルにようこそ｡
今日のチュートリアルでは､ 共有モデルとの同期を行います｡
これから行うのは､ もちろん関数はそのままで､ 1話の長さを初期化することです｡
そこで､ エピソードの長さをエピソード､ アンダースコアの長さと呼ぶことにします｡
これでよしとしよう｡
そして､ それをゼロに初期化します｡
しかし､ その場合､ このエピソードの長さはインクリメントされることになります｡
そして､ インクリメントするといえば､ まさにその通りです｡
そこで､ whileループを使い､ このトリックを使ってwhile trueと言うことにします｡
カレンに､ これから起こること､ このループの中で起こることを繰り返させる｡
で､ この井戸端会議のループの中で､ まずこのエピソードの長さの実装が行われるわけです｡
そこでまず､ 1つずつインクリメントしていきます｡
そのためには､ 単純にエピソードの長さと
ここに足すと1になる｡
そして､ 今度は共有モデルとの同期を行います｡
つまり､ エージェントがあるステップ数でその小さな探索を行うために共有モデルを使用することを取得することになりました｡
そして､ この共有されたモデルをどのように手に入れるのか？
では､ モデルを dot で取得し､ load state dict
メソッドを使用する必要があります｡
そこで､ まず共有モデルを置き､ その共有モデルのパラメータを取得するために静的メソッドを適用する必要があります｡
そして､ ここにある私たちのモデルが､ その小さな探検に共有モデルを得ることになるのです｡
そして､ この共有モデルを手に入れたら､ 今度は2つのケースを区別しなければならない｡
1つ目はif done､ つまりゲームが終了したらという意味です｡
では､ ゲームが終了した場合､ その場合はどうなるのでしょうか？
さて､ lshtmとモデルの隠された状態とセルの状態を再初期化する必要があります｡
そこで今度は､ C Xをセルの状態､ h xを隠れた状態にして､ 両方を再初期化することにします｡
そして､ ゼロだけでうまく再初期化する方法です｡
lshtmの出力は1次元と256次元であるため､ 256個のゼロのベクトルが存在することに注意してください｡
そうそう､ そうなんです｡
ここでは､ torchライブラリを用いて初期化を行います｡
次にゼロ関数｡
256個のゼロからなるベクトルが欲しいので､ ここに2つの次元を入力します｡ 1つはベクトル､
もう1つはゼロになる要素の数である256です｡
そして､ そこに行く｡
しかし､ その後､ いくつかのグラデーションが計算されるため､ それをトーチ変数に変換します｡
そこで､ これをグラデーションで積分する必要があります｡
わかりました｡
そして､ そのすぐ下にある隠された状態も同じように初期化します｡
これでよしとしよう｡
つまり､ ゲームが出来上がった場合です｡
そして､ もう一つのケースは､ ls lsでアクセスできる場合です｡ この場合はどうなるのでしょうか｡
さて､ 古いセルの状態と隠された状態を維持するつもりなので､ 非常に簡単にこのようにタイプして古いものを維持することができます｡
xイコール変数c×データ､ hiddenステートも同様と見てください｡
ここでh xイコール変数h xをデータに追加すればいいのです｡
わかりました｡
良いことです｡
完了しました｡
これで､ ゲームが終わっても終わらなくても､ この2件は基本的に終わっているので､ LSから抜け出せますね｡
しかし､ 私たちは野生のループの中にいます｡ なぜなら､ これからさらにいろいろなことをする予定だからです｡
これから行うのは､ トレーニングの計算の中心となるいくつかの変数を初期化することです｡
では､ こうしてみましょう｡
批評家の出力である値を覚えておく必要があります｡
これがV関数で､ このように空リストとして初期化するわけです｡
そうすると､ 対数確率が必要になります｡
そこで､ ログプロブ､ また､ 空リストとして初期化することにします｡
そしてもちろん､ 空のリストとして初期化される報酬も必要です｡
そして最後にエントロピーが必要になるのですが､ これは新しいもので､ まさに学習計算の核心となるものです｡
だから､ リストも空っぽ｡
さて､ この4つの変数を初期化したところで､ 新たにforループを開始します｡
そして､ この新しいforループで､ これら4つの変数の値を更新します｡
そして､ この新しいforループは探査ステップを完全にループすることになるので､ ループする変数は我々のステップとなります｡
そのため､ 範囲内や内部のステップについては､ パラメータnum stepsがまさに探索のステップ数であるため､ 直接params dot num stepsを入力することができる｡
では､ 探索の全ステップに対して､ 何をするのか？
まあ､ モデルの予測値､ つまりモデルから返されるものを取得するわけです｡
そして､ この予測を得るには､ モデルを取り出して入力に適用するだけでよいのです｡
これが入力信号ですね｡
モデルの中の脳を経由して､ アウトプットが得られるのですが､ そのアウトプットがいくつも出てくるのです｡
評論家の出力であるV関数の値､ それから俳優の出力であるQ値のQ
assayが得られますよね｡
しかし､ 隠された状態とセルの状態のタプルも出力されることも忘れてはならない｡
このモデルに戻ると､ v関数の値であるcriticの出力と､ Q値のQ
assayであるactorの出力､ さらにlshtmの出力､ つまりこのdouble
hexを返して､ hiddenステートとcellステートを見ることができます｡
だから､ その点には気をつけなければなりません｡
これは以前とは全く異なるので､ 今度は入力である状態にモデルを適用することにします｡
しかし､ 今は拷問に関連することがいくつかありますが､ それはもちろん私たちがやっていることに力を与えてくれるものです｡
まずは絞ることです｡
インデックスがゼロでなければならないこの偽の次元を追加する状態｡
それは､ モデルは入力の一括しか受け付けず､ ベクトルやテンソル単体での入力は受け付けないからだ｡
だから､ それはまず絞りをやらなければならない｡
しかし､ それでは入力された状態をトーチ変数に変換するのに必要なのはそれだけではありません｡
だから､ ここに変数を追加しているのです｡
これで､ 状態､ 入力状態はOKですね｡
しかし､ 4つの関数の入力は､ 実は入力画像であることを忘れないでください｡
先ほどは､ Hidden StateとCell Stateのステープルの話をしましたが､ Hidden StateとCell Stateのステープルの話もあります｡
したがって､ この入力の2番目の部分には､ H､ x､ c xのカップルを追加する必要があります｡
わかりました｡
そして､ 行く先の括弧を取り上げることです｡
私たちは､ 2つのインプットを用意しました｡
1つ目は､ 入力状態です｡
つまり､ 入力画像はすべてトーチ変数に変換され､ この曖昧な次元のバッチと､ 隠れ状態とセル状態のタプルを加えるために絞り込まれます｡
だから､ もう大丈夫なんです｡
予想がつくようになりました｡
そして､ この戻り値から､ さて､ 我々の3つの予測､ 評論家の出力､ アクターの出力､
そしてLCMによる隠れ状態とセルの状態のタプルを得ます｡
さて､ これから3つの新しい変数を導入し､ この3つの出力とします｡
そうそう､ そうなんです｡
最初の出力はV関数の値で､ これは評論家の出力である｡
だから､ バリューと呼ぶことにします｡
そうそう､ そうなんです｡
これが最初の出力です｡
それから､ 2番目の出力は､ アクターの出力になりますが､ これはQ値Qアッセイです｡
しかし､ Q値はアクションに関連づけられるので､ アクション値と呼ぶこともできる｡
わかりました｡
そして､ モデルから返される最終出力｡
それが､ hidden state､ h x､ cell stateのトップです｡
Xを見て､ そこに行く｡
モデルから返される3つの出力があります｡
完璧です｡
だから､ 予測ができたからには､ ソフトマックスを使って正しいアクションを演じる必要があるのです｡
そして今､ それは以前とまったく同じになるわけです｡
次のステップは､ 確率を求めることで､ これをprobと呼ぶことができるようになります｡
そこで､ ショートカットを持つ機能モジュールから取り出したソフトマックス法を使うのです｡
F F dot soft maxで､ これから入力する入力の確率分布を生成するもので､
もちろんアクションの値です｡
それがQ値であり､ モデル内のアクターの出力である｡
なるほど｡
ここで確率が出ましたが､ お気づきのように､ エントロピーを扱うことになります｡
エントロピーを求めるには､ 確率だけでなく､ 対数確率も必要です｡ なぜなら､ エントロピーは積の和だからです｡
ログプロブ×プロブ これらすべてをマイナス1倍したもの｡
また､ ログソフトMAXから生成されるログプローブを取得する必要があります｡
だから､ 確率の分布をとるのではなく､ 対数確率の分布をとり､ それをlogで行うということです｡
詰め込まれた首､ 最大のロックは同じに機能します｡
キュー値に適用しています｡
これを私たちはアクションバリューと呼んでいます｡
わかりました｡
これでプローブとプローブが揃ったので､ エントロピーとエントロピーを求める準備が整ったわけです｡
そのための計算式は？
さて､ 先ほど申し上げたように､ 対数支柱をとり､ プローブをかけ､ そして､ このすべての合計をとることになります｡
そのためには､ ここでその和を足せばいいのです｡
ひとつ｡
この仕掛けは､ 実は今､ 何度も使っています｡
そして､ 先ほども言ったように､ これらすべてにマイナス1を掛けるのです｡
つまり､ 積分対数probの和をprob perfectにしたマイナスです｡
そして､ 先ほど計算されたこのエントロピーを､ エントロピーリストに格納することにします｡
なぜなら､ そこに行くからです｡
最後にエントロピーの計算をします｡
それで､ エントロピー・リストに格納する必要があるのです｡
そして､ これを行うには､ これ以上単純なものはありません｡ もちろん､ entropyはリストなので､ append関数を使用することになります｡
そこで､ エントロピーリストとドット､ そしてappend関数を使って､ 先ほど計算されたエントロピーを追加しています｡
わかりました｡
それでは､ ここで一旦､ 休憩とさせていただきます｡
ステップバイステップでやっていきます｡
次のチュートリアルでは､ この生成された確率分布の中からランダムに抽選して､ アクションをプレイします｡
そして､ 我々はアクションを再生した後､ 我々は状態の値を取得し､ 我々は最終的に我々の新しい伝送状態の報酬を格納し､
そう行われます｡
これは新しい大きなステップになるので､ 次のチュートリアルで完成させます｡
それまではお楽しみに｡
I.