こんにちは､ このPythonチュートリアルへようこそ｡
さて､ 前節で eligibility trace を使ったおかげで､ 出力とターゲット間の二乗距離を最小化するようにネットワークを訓練する準備ができました｡
基本的には､ 入力､ ターゲット､ 予測を得て､ 予測とターゲットの間の最後の誤差を計算し､ 確率的勾配降下を用いた後方伝搬で重みを更新して､ 全体の訓練を始める準備ができたわけです｡
しかし､ 100ステップの移動平均を計算したいので､ トレーニング中の平均を記録するために､
このトレーニング全体を行う前に､ 100ステップの移動平均を取得するクラスを作ります｡
だから心配ない｡
早くやります｡
3つの関数を持つクラスを作りますが､ このチュートリアル1回で全て行います｡
だから､ 早くやります｡
もう､ やりましたよ｡
それに､ 今はトレーニングに集中したいのです｡ それが一番大切ですから｡
では､ このクラスを今すぐこのチュートリアル1回で作ってみましょう｡
わかりました｡
そこで､ 新しいクラス､ 4移動平均と呼ぶことにします｡
そして､ 最初の関数を紹介します｡
それはもちろん､ その中で変わることのないinit関数なんですね｡
そして､ このinit関数は2つの引数を取ることになる｡
最初のものは､ 移動平均の未来オブジェクトとサイズのための自己であり､ これは平均を計算することになる報酬のリストのサイズに対応することになります｡
これが100になるわけです｡
わかりました｡
init関数の引数ができたので､ 次はその関数の中に入ってみましょう｡
これで､ 何をすればいいのかがわかったと思います｡
オブジェクトに固有の変数を初期化する必要があります｡
そして､ これらはまあ最初に､ 報酬のリストになるわけです｡
つまり､ これが平均を計算する100の報酬を含むリストになります｡
ここでは､ 単にこのリストを空のリストで初期化しているだけです｡
だから､ 報酬のリスト｡
そして､ 未来のオブジェクトの2番目の変数は､ もちろん､
サイズになります｡ サイズは､ 未来の移動平均オブジェクトを作成するときに入力する引数と同じになりますから､
ここにサイズがあります｡
気をつけることは､ 単純な報酬ではなく､ 積み重ねの報酬です｡
それはですね､ 適格トレースをしているので､ 10ステップごとに学習するため､ 単純な報酬ではなく､
累積的な報酬で学習しているからです｡
つまり､ これから作るこのadd関数は､ 累積報酬を報酬のリストに追加するのです｡
で､ defは､ もちろんADDと呼ぶことにして､ このADD関数は2つの引数を取ることにしています｡
最初のものは自己です｡ なぜなら､ ここでこの報酬のリストを使うのは､ 単純にこの報酬のリストに累積報酬を追加するためです｡
だから､ このソの自己が必要なんです｡
そして2つ目が報酬で､ これは累積報酬を表します｡
わかりました｡
これがADD関数の2つの引数です｡
では､ この関数の内部で､ 何をしなければならないかを定義してみましょう｡
なるほど｡
非常に単純なことですが､ まず､ 累積的な報酬､ 新しい報酬を得るたびに､ つまり､ 新しい10ステップを進めたときに､
この累積的な報酬をリストに追加しなければならないのです｡
そして､ それこそが私たちの目指すところです｡
これから､ 10ステップ進んだ後に得られる新しい累積報酬を､ この報酬リストに追加するコード行を書きます｡
なぜなら､ バッチを扱うので､ 報酬はリストになることもありますが､ 他のケースでは､
報酬は単一の要素になることもあるからです｡
また､ リストに要素を追加する構文､ つまりここでの報酬のリストは､ リストを追加するのか､ 単一の要素を追加するのか､
同じではありません｡
だから､ この2つのケースを分けるための条件を作ればいいんです｡
そして､ まず最初のケース､ つまり､ この報酬のリストに追加するものがリストの場合について説明します｡
そして､ そのために､ isインスタンスを追加し､ 括弧の中に2つの引数を入力するのです｡
まず1つ目は､ 私たちが追加しているリワードなので､ 報酬です｡
そして2つ目がリストです｡
例えば､ 報酬リストというのは､ 報酬がリストになっている場合です｡ 報酬がリストになっている場合､
私たちが行うことは､ 非常に単純に､ 私たちがリストを取ることです｡
報奨金
これはリストなので､ 単純な足し算の操作で2つのリストを合計することができます｡
報酬のことです｡
これはtrueと同じになるので､ ここにリストがあります｡
つまり､ 今回のケースであれば
そして､ このリストを報酬のリストに単純に合計することができます｡ したがって､ ここにある報酬のリストと等しい報酬を単純に追加すればよいのです｡
そして､ こうすることで､ この2つのリストを合計してリストを拡張しているに過ぎないのです｡
わかりました｡
そして､ 2つ目の条件｡
だから､ 単純にelseを追加すればいいんです｡
つまり､ 報酬がリストでない場合､ したがって単一の要素である場合です｡
その他､ その場合はどうなるのでしょうか？
まあ､ それは同じなんですけどね｡
rewardsをリストに追加したいのですが､ rewardsはもはやリストではないので､ この構文は使えません｡
単一要素になります｡
そこで､ もう一つの構文として､ append関数を使う必要があります｡
リストに1つの要素を追加したい場合､ append関数を使用する必要がありますいくつかの2を追加することができます｡
そして､ これこそが､ これからやろうとしていることなのです｡
オブジェクトの報酬のリストをここに貼り付けて､ ドットアペンドを追加するのです｡
これでよしとしよう｡
まず1つ目ですが､ もちろん括弧の中に追加したい要素を入力します｡
そして､ これはもちろん報酬です｡
しかし､ その場合の報酬はリストにはならない｡
リストにではなく､ 1つの累積報酬のような単一の要素になります｡
わかりました｡
そして､ こうしたいが､ 今度は何かを追加しなければならない｡
この報酬のリストが100以上の要素になると､ どうなるかというと､ そうなります｡
さて､ その場合､ やらなければならないことは､ この報酬のリストの最初の要素を削除して､
この報酬のリストが常に100以上の要素を含まないようにすることです｡
つまり､ 自動運転車のスコアウィンドウを作るときにやったことと全く同じです｡
そして､ これを確実にするために､ 報酬のリストの長さ､ つまり､ この数がselfより大きいときはいつでも､
報酬のリストの要素の数､ つまり､ ここで設定したサイズ､ 後でオブジェクトを作成するときに100に等しくなることを指定するウェル条件を追加するつもりです｡
まあ､ この報酬のリストの要素数が100より大きくなると､ すぐに
さて､ 私たちがしたいことは､ インデックスを0にすることで得られる報酬リストの最初の要素を削除することです｡
それが､ 報酬一覧の最初のインデックスです｡
これは､ 報酬のリストの最初の要素で､ 報酬のリストに100以上の要素が含まれるたびに､
これを削除したい｡
この条件によって､ 報酬のリストには100以上の要素が含まれないようにすることができます｡
したがって､ 今私たちができることは､ 100個の要素を含む報酬リストの平均を計算する新しい関数を作ることです｡
では､ この新しい関数を作ってみましょう｡
Pythonにはリストの平均を計算するNumPyのmain関数があるので､
とても簡単でしょう｡
では､ 最後の関数を紹介しましょう｡ ここでは､ 平均と呼ぶことにします｡
この関数は1つの引数を取ることになりますが､ それはselfになります｡
なぜなら､ もちろん､ まだ報酬のリストを使うからです｡
だからセルフとコロン｡
そして､ 平均を計算してみましょう｡ もちろん､ 平均関数を適用して平均を得ることができますので､
直接､ 平均を返します｡
さて､ 私たちが計算したいのは､ その平均値が報酬のリストであるということです｡
まだコピーしていたようです｡
はい｡
これでよしとしよう｡
そこで､ 単純に報酬のリストの平均値を返すことにした｡
そして､ 平均は､ 先ほども言ったように､ 円周率以外の関数である｡
そこで､ ここでは､ ショートカットと､ 報酬の自己リストを意味するpを追加しています｡
そして､ そこに行く｡
100歩譲って平均は取れている｡
完璧です｡
だから､ その授業はとても効率よく作りました｡
では､ 100歩譲って移動平均を求める方法を説明します｡
そして､ トレーニングを行う際には1つの移動平均オブジェクトを使用することになるので､ まあ､ もうこの移動平均オブジェクトを作りましょうよ｡
そして､ これをAと呼ぶことにして､ 単純にMarはAクラスのオブジェクトとすることにします｡
そして､ 先ほども言ったように､ 100ステップで移動平均を計算したいので､ サイズは100にしたいのです｡
とても完璧です｡
これでよしとしよう｡
これでようやくAIに知能を持たせるための訓練ができるようになりました｡
そろそろ潮時かな｡
ここからが､ 私たちのAIが賢くなるポイントです｡
だから､ 早くトレーニングしたいんです｡
これはすでにやっていたことなので､ かなり楽になりそうです｡
でも､ これは楽しいことになりそうです｡
しかも､ そのあとは､ 基本的に目の準備が完全に整っているので､ さらに楽しい時間になるはずです｡
それが構築され､ またインテリジェントであるため､ コードを実行し､ そしてAIがドゥームをプレイし､
最終的にはAIがドゥームをプレイしているビデオを見て､ ベストに到達することに成功するかどうかを確認することになるのです｡
だから､ 待ち遠しいんです｡
そのトレーニングをしよう｡
そして､ それまでは
そして､ 私｡