こんにちは､ このチュートリアルにようこそ｡
わかりました｡
そこで､ まずはモデルの最初のファイル､ そしてPIをモデル化した最も重要なファイルからご紹介します｡
そしてこのファイルに､ モデル全体の頭脳､ つまりa3cモデルの中心にある頭脳を実装するのです｡
このファイルでニューラルネットワークを作ります｡ もちろん､
畳み込みニューラルネットワークも含みます｡
だから､ 私たちのAIにはまだ目があるはずです｡
そして､ このニューラルネットワークの中に､ アクティブクリティックモデルに関連するものをすべて統合していくのです｡
そして､ ボーナスもあります｡
先ほどお話したように､ 私たちは最も強力な3Cモデルの1つを導入しています｡
そして､ それだけ強力なのは､ 神経ネットワークの記録､ より正確には長期記憶､ 長期短期記憶に含まれることになり､
ゲームの中で起こっていることの時間的特性を学習することができるようになるからです｡
それは､ 実は入力の時間的特性を利用して､ さらに良い予測ができるようにするためです｡
そうそう､ そうなんです｡
ディープラーニングのコースで見たニューラルネットワークを基本的にすべて組み合わせた､ 非常に強力なモデルを実装しています｡
それが､ 人工ニューラルネットワーク､ 畳み込みニューラルネットワーク､ 再帰性ニューラルネットワークです｡
そして､ これらすべてのネットワークの中心には､ もちろん､ AIを非常に強力にするa3cモデルが存在します｡
では､ こうしてみましょう｡
このモデルを攻略して実行しよう｡
この関数は重みを初期化するための関数で､ これからニューラルネットワークを作るので､
重みが必要になります｡
そして､ この2つの関数を最初に作って､ モデル全体､ つまりニューラルネットワークの中に非常に簡単に統合できるツールを用意しておきたいのです｡
つまり､ この2つの関数は､ 正規化された列を初期化することになるわけです｡
それは基本的に､ いくつかの重みを初期化するだけでなく､ 重みのテンソルの特定の分散を設定することができる関数である｡
まさに今､ それを実行しようとしているわけです｡
そして､ 2つ目の関数を実装します｡ IT関数の重みは､ 基本的に学習に最適な方法で重みを初期化することになります｡
わかりました｡
そして､ この2つの関数が終わったら､ ニューラルネットワークの実装に入ります｡
では､ やってみましょう｡
早速､ この2つの関数を作ってみましょう｡
だから､ ここのデフから始めているんです｡
そして､ 正規化されたこの関数の名前をつけます｡
カラム､ アンダースコア､ 初期化する｡
これでよしとしよう｡
そしてこの関数は､ たった2つの入力を受け取ることになる｡
最初に初期化するのは重みと標準偏差です｡ 先ほど言ったように､ テンソル重みに特定の分散を設定したいからです｡
なぜこんなことをしなければならないかというと､ ニューラルネットワークを作るときに､
3Cモデルに従って俳優と評論家がいて､ 俳優用と評論家用の2つの独立した完全接続された層を作るからです｡
そして､ この2つの完全連結層は重みを持ち､ この2つの重みのグループそれぞれに標準偏差を設定します｡
そこで､ 俳優の標準偏差を小さく設定することにします｡
0前後となる｡ 01と､ 批評家の標準偏差が大きいので､ 1くらいになるかと思います｡
この関数は､ 後でアクターとクリティックの重みを初期化する際に､ その標準偏差を簡単に設定できるようにするためのものです｡
だから､ こうしているんです｡
今はデフォルト値を設定していますが､ この後､ 重みを初期化する際に変更します｡
では､ 1についてsoを選んでみましょう｡ 0.
わかりました｡
そして､ この関数の中身を定義する準備が整いました｡
そこで､ まず用意するのは､ 呼び出す出力です｡
つまり､ このout変数が､ この関数から返されるものです｡
まず最初に､ 初期化を行います｡
つまり､ ご理解いただいたように､ この出力は特定の標準偏差を持つ重みのテンソルになるわけです｡
しかし､ 標準偏差を設定する前に､ 初期化をしてから､ この関数の入力である引数で標準偏差を設定します｡
だから､ その敏感な重みを初期化するために出て､ あなたはそれを行う方法を知っているかもしれません｡
もう､ やりましたよ｡
これからtorchライブラリを使い､ ストレージライブラリから､ 正規分布に従うランダムな重みを持つtorchテンソルを初期化するRand
M関数を取ります｡
だからランNWと呼ばれ､ ノーマル用なんですね｡
そして､ このテンソルが含む要素の数を入力するだけでよい｡
この要素数はもちろん重みの数であり､ 実際にはここで重みのテンソルを初期化しているのだから｡
そして､ この要素数を求めるには､ 単純に重みをとればいいわけです｡
そして､ ドットを追加して､ 括弧付きのサイズを取得します｡
そして､ これは重みの要素数を与えるので､ すべての重みの要素数が同じであるトーチテンソルを作成し､
正規分布に従うランダムな重みで初期化される｡
わかりました｡
そして､ いよいよ欲しい標準偏差を設定します｡
それがここでの標準偏差です｡
そこで､ これから行うのは､ 簡単な正規化です｡
重みのトーチテンソルができたので､ 今度はそれを正規化したい｡
で､ それを正規化するために､ 単純に明示的な計算を書きます｡
ここで必要なのは､ 出力に標準偏差を掛け､ それを先ほどの合計で割ったものを更新することです｡
で､ この和を求めるために､ トーチによる平方根の関数を使うわけです｡
そして､ そのスキューやDTに向かって､ ここで取っているのが平方根の関数なんです｡
そして､ 内部にはベクトルの平方根と重みのいくつかを入力します｡
そして､ 出力は､ 和の2乗を取りたいので､ 入力したべき乗の関数を使います｡
そして､ したがって､ 私たちは､ 合計を取ります｡
そして､ 内部には､ 合計する重み1を含む列のインデックスを指定することにしています｡
そして､ これらの重みをうまく合計したいので､ 別々に取得すること｡
私たちは､ アウトプットの関数として､ スコアのエクスパンションを使用しています｡
わかりました｡
つまり､ これまでタッチセンサーのウェイトとして初期化されていたaltのウェイトを取得することになります｡
それで､ この重さをすべて手に入れることができるのです｡
二乗和をとり､ 平方根をとって正規化を適用するのです｡
そして､ この標準偏差を分子に持っていることで､ ここに書くことができることを確認します｡
アルトの分散は､ 標準偏差の二乗に等しくなる｡
この式は､ 初期化した重みのテンソルが､ 引数として入力した標準偏差の2乗に等しい分散を持つことを確認するものである｡
そして､ そうやって､ これから作る俳優や評論家に対して､ 具体的な標準偏差を設定することができるのです｡
そして､ 俳優の標準偏差は小さく､ 評論家の標準偏差は大きく選ぶことにする｡
そして､ この機能のおかげで､ 非常に簡単にこれを行うことができるようになります｡
わかりました｡
そうなると､ もうやることは一つしかない｡
もちろん､ この特定の標準偏差で正規化された出力を返すために､ それを残した｡
わかりました｡
とても完璧です｡
それが､ 最初に作らなければならない機能です｡
それが､ a3c脳を作るための最初のツールとして､ とても喜んで使わせていただきます｡
これから作るべき機能はもうひとつ｡
この関数の中で重みになるのですが､ これは学習を最適化するために重みを初期化することを思い出させる関数なんです｡
では､ 次のチュートリアルでこれをやってみましょう｡
そしてそれまで､ お楽しみに｡
I.