こんにちは､ このPythonチュートリアルへようこそ｡
さて､ それではpush関数を作ってみましょう｡ この関数は2つの作業を行います｡
まず､ 新しいトランジションまたは新しいイベントをメモリに追加します｡
そして2つ目は､ メモリに常に100の遷移があるようにすることです｡
前回のチュートリアルで100個のイベントの例を出したので100個と言っていますが､ 実際には100個よりはるかに多いイベントになります｡
これはむしろ1万人､ 10万人くらいになるかもしれません｡
見てみよう｡
でも､ とにかくこの値が容量になります｡
よし､ じゃあこのプッシュ機能を作ろう｡
そこで､ いつものように､ まずdefで新しい関数を定義し､ この関数に名前をつけます｡
そこで､ pushと呼び､ この関数は2つの引数を持つことになる｡
まず､ いつものように､ 対象物を指す自己と次の自己｡
それはどうなるのでしょうか？
さて､ このプッシュ機能は､ メモリに新しいイベントを追加するために使用されることを覚えておいてください｡
メモリはすでに持っています｡
そこで､ 変数として今必要なのは､ イベントです｡
これが引数､ 入力となり､ この入力をオブジェクトの変数であるメモリに追加します｡
さて､ イベントですが､ 実際にはイベントと呼ぶか､ トランジションと呼ぶか､ どちらかです｡
それは同じです｡
そして､ 次のコードセクションで､ このイベントが具体的にどのようなもので､ どのような形をしているのかを見てみましょう｡
実は､ 今だから言えますが､ このイベント､ メモリに追加するトランジションは全部で4つの要素で構成されています｡
1つ目は､ ステートである最後のステートです｡
2つ目は､ 州プラス1という新しい州です｡
3つ目は､ 最後に表示されたアクションが80であることです｡
そして､ 4つ目は最後の報酬､ 手に入れた最後の報酬です｡
その通りです｡
このイベントは､ まさにそういう形になるわけです｡
わかりました｡
イベントをメモリにオープンして､ メモリに容量があることを確認したいだけなので､
イベントが必要なのはそれだけです｡
わかりました｡
では次に､ この関数の中に入ってみましょう｡
そこで､ まず最初に新しいイベントをメモリに追記します｡
そしてそれは､ append関数を使うのでとても簡単です｡
だから､ それがダイレクトになる｡
そして､ append関数を使うときは､ 何かを追加したいリストで始めなければならない｡
そしてこのリストは､ もちろんメモリーです｡
そこで､ まずはメモリから｡
そして､ メモリはオブジェクトの変数なので､ ここではself dot memoryからスタートします｡
これでよしとしよう｡
つまり､ 自己メモリと､ ドットを追加して､ 最初の1つであるappend関数を追加しています｡
そこで､ append関数の内部で､ メモリに追加したいものを入力します｡ それはもちろん､ イベントです｡
だから､ ここでも｡
そして､ 最後の状態､ 新しい状態､ 少ない区間､ 少ない報酬で構成される新しいイベントをメモリに追加することになります｡
わかりました｡
だから､ それがまず第一の完成形です｡
そして､ 2つ目は､ メモリに常に容量要素が含まれるようにすることです｡
そこで､ 定員が10万人になったとします｡
100万要素になると学習が遅くなる可能性があるので､ おそらくこのくらいの容量になると思います｡
では､ 10万としましょう｡
これから､ メモリには常に10万トランジション､ 10万イベント､ そしてネバーモアが含まれるようにするのです｡
だから､ 最初はもちろん1個､ 2個､ 3個と増えていきますが､ 10万個になったら､
まあ必ず10万個になるわけです｡
だから､ それを確認するためには､ この上限を超えたくないというF条件を作ればいいだけなんです｡
そうすると､ ここで使うIDは､ 限界を超えると､ まあ､ メモリの最初の遷移､ 最初のイベントを削除することになるので､
メモリの長さを取るためにLen関数を使うということです｡
それが､ メモリ内の要素数です｡
そこで､ ランド機能では､ 自己のドットメモリーを入力します｡
それが記憶です｡
ですから､ 自己のメモリの要素数が容量より大きい場合､ まあ､ その場合は､
メモリが常に同じ容量の要素数になるように､ 最初の要素を削除することになります｡
これほどシンプルなものはありません｡
もう一つの関数､ del pythonのトリックを使うことにします｡
そこで､ Del and thereforeは､ 最後のトランジションは追加するものであるため､ メモリ内で最も古いトランジションである最初のトランジションを削除したいと思います｡
つまり､ 最初のトランジションは最も古いものなのです｡
そこで､ ここでは､ 自己学習したメモリとブラケットを削除したいので､ メモリの最初の要素であるインデックス0を取ります｡
だから､ セルフメモリゼロ｡
今すぐ
面白いですね｡
未定義の名前容量があるという小さな警告が表示されるのですが｡
それは､ ここでの容量が入力ではないからです｡
それは､ オブジェクトに付けられた容量変数に違いない｡
したがって､ ここでは自己の自己容量を追加する必要があり､ これで警告は消えました｡
これでさらに自己の使い方が理解できたわけですね｡
それは本当は､ 作成されるオブジェクトの容量を取るために参照することです｡
これは､ リプレイメモリークラスのインスタンスです｡
さて､ これでこのプッシュ機能は終了です｡
次の関数はサンプル関数です｡ この関数は､ 最後の容量要素のメモリからランダムにサンプルを取得します｡
そうすることで､ ディープラーニングのプロセスを大幅に改善することができるのです｡
よし､ では次のチュートリアルでやってみよう｡
そしてそれまで､ お楽しみに｡
I.