WEBVTT

00:00.300 --> 00:02.340
こんにちは､ このチュートリアルにようこそ｡ 

00:02.370 --> 00:02.790
わかりました｡ 

00:02.790 --> 00:08.910
そこで､ まずはモデルの最初のファイル､ そしてPIをモデル化した最も重要なファイルからご紹介します｡

00:08.910 --> 00:15.780
そしてこのファイルに､ モデル全体の頭脳､ つまりa3cモデルの中心にある頭脳を実装するのです｡

00:15.780 --> 00:21.270
このファイルでニューラルネットワークを作ります｡ もちろん､

00:21.270 --> 00:25.470
畳み込みニューラルネットワークも含みます｡

00:25.470 --> 00:27.600
だから､ 私たちのAIにはまだ目があるはずです｡ 

00:27.600 --> 00:33.090
そして､ このニューラルネットワークの中に､ アクティブクリティックモデルに関連するものをすべて統合していくのです｡ 

00:33.090 --> 00:34.440
そして､ ボーナスもあります｡ 

00:34.440 --> 00:38.010
先ほどお話したように､ 私たちは最も強力な3Cモデルの1つを導入しています｡ 

00:38.010 --> 00:43.050
そして､ それだけ強力なのは､ 神経ネットワークの記録､ より正確には長期記憶､ 長期短期記憶に含まれることになり､

00:43.050 --> 00:49.140
ゲームの中で起こっていることの時間的特性を学習することができるようになるからです｡

00:49.140 --> 00:54.300
それは､ 実は入力の時間的特性を利用して､ さらに良い予測ができるようにするためです｡ 

00:55.050 --> 00:55.950
そうそう､ そうなんです｡ 

00:55.950 --> 01:02.490
ディープラーニングのコースで見たニューラルネットワークを基本的にすべて組み合わせた､ 非常に強力なモデルを実装しています｡

01:02.490 --> 01:07.980
それが､ 人工ニューラルネットワーク､ 畳み込みニューラルネットワーク､ 再帰性ニューラルネットワークです｡ 

01:07.980 --> 01:13.920
そして､ これらすべてのネットワークの中心には､ もちろん､ AIを非常に強力にするa3cモデルが存在します｡

01:14.100 --> 01:15.120
では､ こうしてみましょう｡ 

01:15.120 --> 01:18.210
このモデルを攻略して実行しよう｡ 

01:18.210 --> 01:24.000
この関数は重みを初期化するための関数で､ これからニューラルネットワークを作るので､

01:24.000 --> 01:29.070
重みが必要になります｡

01:29.070 --> 01:38.040
そして､ この2つの関数を最初に作って､ モデル全体､ つまりニューラルネットワークの中に非常に簡単に統合できるツールを用意しておきたいのです｡

01:38.040 --> 01:42.400
つまり､ この2つの関数は､ 正規化された列を初期化することになるわけです｡ 

01:42.450 --> 01:50.250
それは基本的に､ いくつかの重みを初期化するだけでなく､ 重みのテンソルの特定の分散を設定することができる関数である｡

01:50.250 --> 01:52.740
まさに今､ それを実行しようとしているわけです｡ 

01:52.740 --> 02:01.230
そして､ 2つ目の関数を実装します｡ IT関数の重みは､ 基本的に学習に最適な方法で重みを初期化することになります｡

02:01.680 --> 02:02.190
わかりました｡ 

02:02.190 --> 02:08.040
そして､ この2つの関数が終わったら､ ニューラルネットワークの実装に入ります｡ 

02:08.070 --> 02:08.880
では､ やってみましょう｡ 

02:08.880 --> 02:11.940
早速､ この2つの関数を作ってみましょう｡ 

02:11.940 --> 02:14.190
だから､ ここのデフから始めているんです｡ 

02:14.190 --> 02:18.390
そして､ 正規化されたこの関数の名前をつけます｡ 

02:18.690 --> 02:23.570
カラム､ アンダースコア､ 初期化する｡ 

02:24.570 --> 02:25.380
これでよしとしよう｡ 

02:25.380 --> 02:28.690
そしてこの関数は､ たった2つの入力を受け取ることになる｡ 

02:28.710 --> 02:40.080
最初に初期化するのは重みと標準偏差です｡ 先ほど言ったように､ テンソル重みに特定の分散を設定したいからです｡

02:40.080 --> 02:44.760
なぜこんなことをしなければならないかというと､ ニューラルネットワークを作るときに､

02:44.760 --> 02:53.610
3Cモデルに従って俳優と評論家がいて､ 俳優用と評論家用の2つの独立した完全接続された層を作るからです｡

02:53.610 --> 03:01.620
そして､ この2つの完全連結層は重みを持ち､ この2つの重みのグループそれぞれに標準偏差を設定します｡

03:01.620 --> 03:05.520
そこで､ 俳優の標準偏差を小さく設定することにします｡ 

03:05.520 --> 03:12.510
0前後となる｡  01と､ 批評家の標準偏差が大きいので､ 1くらいになるかと思います｡ 

03:12.510 --> 03:21.750
この関数は､ 後でアクターとクリティックの重みを初期化する際に､ その標準偏差を簡単に設定できるようにするためのものです｡

03:21.750 --> 03:23.070
だから､ こうしているんです｡ 

03:23.280 --> 03:29.400
今はデフォルト値を設定していますが､ この後､ 重みを初期化する際に変更します｡

03:29.400 --> 03:31.830
では､ 1についてsoを選んでみましょう｡  0.

03:32.070 --> 03:32.760
わかりました｡ 

03:32.760 --> 03:36.960
そして､ この関数の中身を定義する準備が整いました｡ 

03:37.170 --> 03:41.790
そこで､ まず用意するのは､ 呼び出す出力です｡ 

03:41.790 --> 03:45.870
つまり､ このout変数が､ この関数から返されるものです｡ 

03:46.140 --> 03:50.100
まず最初に､ 初期化を行います｡ 

03:50.100 --> 03:56.700
つまり､ ご理解いただいたように､ この出力は特定の標準偏差を持つ重みのテンソルになるわけです｡ 

03:56.700 --> 04:06.420
しかし､ 標準偏差を設定する前に､ 初期化をしてから､ この関数の入力である引数で標準偏差を設定します｡

04:06.600 --> 04:10.590
だから､ その敏感な重みを初期化するために出て､ あなたはそれを行う方法を知っているかもしれません｡ 

04:10.590 --> 04:11.730
もう､ やりましたよ｡ 

04:11.970 --> 04:21.390
これからtorchライブラリを使い､ ストレージライブラリから､ 正規分布に従うランダムな重みを持つtorchテンソルを初期化するRand

04:21.390 --> 04:27.150
M関数を取ります｡

04:27.330 --> 04:30.900
だからランNWと呼ばれ､ ノーマル用なんですね｡ 

04:30.930 --> 04:36.240
そして､ このテンソルが含む要素の数を入力するだけでよい｡ 

04:36.240 --> 04:43.050
この要素数はもちろん重みの数であり､ 実際にはここで重みのテンソルを初期化しているのだから｡

04:43.080 --> 04:47.490
そして､ この要素数を求めるには､ 単純に重みをとればいいわけです｡ 

04:48.490 --> 04:53.320
そして､ ドットを追加して､ 括弧付きのサイズを取得します｡ 

04:53.320 --> 05:00.520
そして､ これは重みの要素数を与えるので､ すべての重みの要素数が同じであるトーチテンソルを作成し､

05:00.520 --> 05:06.160
正規分布に従うランダムな重みで初期化される｡

05:06.760 --> 05:07.240
わかりました｡ 

05:07.240 --> 05:11.380
そして､ いよいよ欲しい標準偏差を設定します｡ 

05:11.380 --> 05:13.360
それがここでの標準偏差です｡ 

05:13.360 --> 05:16.720
そこで､ これから行うのは､ 簡単な正規化です｡ 

05:16.720 --> 05:21.250
重みのトーチテンソルができたので､ 今度はそれを正規化したい｡ 

05:21.370 --> 05:25.600
で､ それを正規化するために､ 単純に明示的な計算を書きます｡ 

05:25.600 --> 05:40.960
ここで必要なのは､ 出力に標準偏差を掛け､ それを先ほどの合計で割ったものを更新することです｡

05:40.960 --> 05:44.830
で､ この和を求めるために､ トーチによる平方根の関数を使うわけです｡ 

05:44.830 --> 05:50.410
そして､ そのスキューやDTに向かって､ ここで取っているのが平方根の関数なんです｡ 

05:50.530 --> 05:55.900
そして､ 内部にはベクトルの平方根と重みのいくつかを入力します｡ 

05:55.900 --> 06:05.200
そして､ 出力は､ 和の2乗を取りたいので､ 入力したべき乗の関数を使います｡

06:05.710 --> 06:08.530
そして､ したがって､ 私たちは､ 合計を取ります｡ 

06:08.830 --> 06:16.060
そして､ 内部には､ 合計する重み1を含む列のインデックスを指定することにしています｡ 

06:16.720 --> 06:22.660
そして､ これらの重みをうまく合計したいので､ 別々に取得すること｡ 

06:22.660 --> 06:29.350
私たちは､ アウトプットの関数として､ スコアのエクスパンションを使用しています｡ 

06:29.380 --> 06:29.740
わかりました｡ 

06:29.740 --> 06:36.550
つまり､ これまでタッチセンサーのウェイトとして初期化されていたaltのウェイトを取得することになります｡ 

06:36.550 --> 06:38.110
それで､ この重さをすべて手に入れることができるのです｡ 

06:38.110 --> 06:43.720
二乗和をとり､ 平方根をとって正規化を適用するのです｡ 

06:43.720 --> 06:50.770
そして､ この標準偏差を分子に持っていることで､ ここに書くことができることを確認します｡

06:51.790 --> 06:58.540
アルトの分散は､ 標準偏差の二乗に等しくなる｡ 

06:58.660 --> 07:10.570
この式は､ 初期化した重みのテンソルが､ 引数として入力した標準偏差の2乗に等しい分散を持つことを確認するものである｡

07:10.960 --> 07:18.540
そして､ そうやって､ これから作る俳優や評論家に対して､ 具体的な標準偏差を設定することができるのです｡

07:18.550 --> 07:24.130
そして､ 俳優の標準偏差は小さく､ 評論家の標準偏差は大きく選ぶことにする｡ 

07:24.130 --> 07:27.070
そして､ この機能のおかげで､ 非常に簡単にこれを行うことができるようになります｡ 

07:27.580 --> 07:28.060
わかりました｡ 

07:28.060 --> 07:30.400
そうなると､ もうやることは一つしかない｡ 

07:30.400 --> 07:38.140
もちろん､ この特定の標準偏差で正規化された出力を返すために､ それを残した｡ 

07:38.770 --> 07:39.220
わかりました｡ 

07:39.220 --> 07:40.240
とても完璧です｡ 

07:40.240 --> 07:42.590
それが､ 最初に作らなければならない機能です｡ 

07:42.610 --> 07:47.210
それが､ a3c脳を作るための最初のツールとして､ とても喜んで使わせていただきます｡ 

07:47.230 --> 07:49.180
これから作るべき機能はもうひとつ｡ 

07:49.210 --> 07:56.980
この関数の中で重みになるのですが､ これは学習を最適化するために重みを初期化することを思い出させる関数なんです｡

07:57.280 --> 07:59.410
では､ 次のチュートリアルでこれをやってみましょう｡ 

07:59.410 --> 08:00.640
そしてそれまで､ お楽しみに｡ 

08:00.640 --> 08:01.180
I.
