WEBVTT

00:00.360 --> 00:02.700
こんにちは､ このチュートリアルにようこそ｡ 

00:02.850 --> 00:06.940
よし､ ではこれから人工知能をゼロから実装していこう｡ 

00:06.960 --> 00:08.790
行ごとに呼び出すことにしています｡ 

00:08.790 --> 00:12.300
そして､ この最初のコードセクションでは､ ライブラリをインポートします｡ 

00:12.300 --> 00:20.310
しかし､ この最初のコードセクションを始める前に､ AIと私たちのマップの関係､ Pファイルについて説明しておきたいと思います｡

00:20.340 --> 00:23.940
つまり､ なぜこれを地図に実装するのか､ ということです｡ 

00:23.940 --> 00:27.620
私たちのAIは何のために､ どこで使うのか？

00:27.630 --> 00:29.940
だから､ 実はとてもシンプルなんです｡ 

00:29.940 --> 00:39.030
AIにその都度正しい行動を選択させるだけなので､ AIファイルからin classをインポートします｡

00:39.030 --> 00:49.560
そこで､ このファイルではこのドキュメントクラスを作りますが､ それをインポートして､ その都度､ 適切なアクションを選択して再生するようにするだけです｡

00:49.590 --> 00:52.830
そして､ このアクションをまさにこのラインで選択するのです｡ 

00:52.860 --> 00:54.900
行動イコール脳のアップデート｡ 

00:54.900 --> 00:56.910
報酬が少なければ､ 信号も少ない｡ 

00:56.940 --> 01:00.510
少ない信号がニューラルネットワークの入力となる｡ 

01:00.930 --> 01:05.880
センサーの3つの信号と､ プラス方位､ マイナス方位で構成されているのです｡ 

01:05.880 --> 01:07.170
それがインプットされるわけです｡ 

01:07.170 --> 01:14.670
でも､ そうするとアウトプットはプレイするためのアクションになるわけで､ それはあくまでこれから作るI feltから受け取るものです｡

01:15.060 --> 01:16.230
だから､ そのことを心に留めておいてください｡ 

01:16.230 --> 01:17.340
それはとてもシンプルなことです｡ 

01:17.340 --> 01:33.570
まずAIからクラスをインポートし､ ドキュメントクラスからオブジェクトブレインを作成し､ 3つの信号＋方向＋マイナス方向の5次元の状態を符号化したベクトルを入力とする｡

01:33.570 --> 01:36.810
左へ行く､ まっすぐ行く､ 右へ行くという3つのアクション｡ 

01:36.810 --> 01:42.210
そして､ このガンマパラメーター､ これだけが､ これから作るクラスのパラメーターです｡ 

01:42.210 --> 01:49.950
そして､ そのオブジェクトを作ったら､ ゲームクラスで､ その都度再生するアクションを選択します｡ 

01:49.950 --> 01:53.670
そしてそれは､ 最後の報酬と最後の信号､ つまり入力に依存します｡ 

01:53.670 --> 02:00.990
このAIを作る目的はそれだけです｡ 本物の人工知能に正しい行動をさせるために､ 前のチュートリアルで見たようなランダムな行動ではなく､

02:00.990 --> 02:07.830
毎回正しい動きをさせることなのです｡

02:08.340 --> 02:09.600
よし､ じゃあやってみようか｡ 

02:09.600 --> 02:12.510
人工知能を実装しよう

02:12.510 --> 02:18.210
そして､ 先ほども言ったように､ まずは実装に使用するライブラリをすべてインポートすることから始めます｡

02:18.210 --> 02:20.760
そうすれば､ 必要なツールはすべて揃うことになります｡ 

02:21.000 --> 02:21.330
わかりました｡ 

02:21.330 --> 02:22.680
では､ まず1つ目から｡ 

02:22.680 --> 02:25.830
1つ目は､ 必然性です｡ 

02:25.830 --> 02:27.360
NumPyのライブラリです｡ 

02:27.360 --> 02:28.710
NumPyのライブラリです｡ 

02:28.710 --> 02:30.630
私はいつも輸入をお勧めしています｡ 

02:30.630 --> 02:35.160
これは､ アレイを再生して作業できるようにするライブラリです｡ 

02:35.370 --> 02:39.900
そして､ こことBは､ numpyを使いたいときに､ より便利に使えるショートカットに過ぎません｡ 

02:40.380 --> 02:41.220
よし､ それなら

02:41.220 --> 02:43.800
2つ目のライブラリはランダムです｡ 

02:43.800 --> 02:51.690
これは､ 経験値リプレイを実装する際に､ 異なるバッチからいくつかのランダムなサンプルを採取するためです｡

02:51.690 --> 02:54.210
そこで､ このランダムなライブラリもインポートする必要があります｡ 

02:54.630 --> 02:58.070
そして､ OSSを輸入することになります｡ 

02:58.080 --> 03:03.210
これはモデルをロードするときに便利です｡ なぜなら､ モデルの準備ができたら､ モデルを保存するコードを実装し､

03:03.210 --> 03:08.610
次にモデルをロードするコードを実装するからです｡

03:08.610 --> 03:13.950
そんな時こそ､ 脳を保存しておいて､ コンピュータをシャットダウンしたい時に脳をロードし､

03:13.950 --> 03:18.810
前に訓練した脳を何か新しい実験に再利用したいのです｡

03:18.960 --> 03:20.160
だから､ それが大事なんです｡ 

03:20.460 --> 03:27.090
そして､ トーチライブラリ必須をインポートします｡ 

03:27.090 --> 03:32.130
それは､ ニューラルネットワークをPyTorchで実装するからです｡ PyTorchは動的なグラフを扱えるので､

03:32.130 --> 03:36.450
人工知能には他のものよりもずっとおすすめです｡

03:36.450 --> 03:37.920
そこで､ トーチと一緒に｡ 

03:38.310 --> 03:44.880
そして､ トーチからトーチDOTとNWをインポートすることになります｡ 

03:44.970 --> 03:47.280
NWモジュールは､ 最も必要なものです｡ 

03:47.280 --> 03:51.510
これは､ いくつかのニューラルネットワークを実装するためのすべてのツールを含むモジュールです｡ 

03:51.510 --> 03:57.300
そしてもちろん､ 3つのセンサーの信号プラス方向とマイナス方向を入力とし､ うまく再生するためのアクションを出力として返す､

03:57.300 --> 04:07.440
実際には異なるアクションのQ値を返す､ ディープニューラルネットワークもあります｡

04:07.440 --> 04:15.030
そしてソフトマックスを使い､ コースの目標を達成するために最も関連性の高い1つだけを再生するようにアクションを返します｡

04:15.030 --> 04:17.640
だから､ トーステンは最も必要な存在です｡ 

04:17.910 --> 04:24.300
そして､ 機能的なショートカットを出します｡ 

04:25.430 --> 04:29.720
ここから先は､ PNモジュールからの機能パッケージ｡ 

04:29.720 --> 04:36.080
つまり､ この関数パッケージには､ ニューラルネットワークを実装する際に使用するさまざまな関数が含まれているのです｡ 

04:36.080 --> 04:47.000
最後の関数は､ 収束性を高めるためにユーバープラスを使用し､ ユーバーロスはGNモジュールからこの機能サブモジュールに含まれています｡

04:47.000 --> 04:53.600
そして､ このすべてがかなり長いので､ ショートカットを与え､ F simplyと呼ぶことにします｡ 

04:54.210 --> 04:57.050
そうすると､ インポートするモジュールはあと3つしかない｡ 

04:57.060 --> 05:02.430
ということで､ 次も欠かせないのが､ アップです｡ 

05:02.430 --> 05:06.720
ティムと私たちは､ トーチ・ライブラリから､ さらに上へと持っていきます｡ 

05:06.720 --> 05:08.280
ティム そうです｡ 

05:08.580 --> 05:10.650
そして､ 呼び出そう｡ 

05:10.650 --> 05:15.150
Tim instead of torch up Tim それはもちろんオプティマイザーのためなんですね｡ 

05:15.150 --> 05:21.570
確率的勾配降下を行うためのオプティマイザをいくつかインポートする予定なので､ 必ず必要になる｡

05:21.570 --> 05:28.560
そして､ import autoが必要ですが､ これはgradから変数クラスを取るためだけです｡ 

05:28.950 --> 05:31.380
だから､ その趣旨はちょっと専門的なんです｡ 

05:31.410 --> 05:38.670
基本的には､ より高度な配列のようなセンサーから､ グラデーションを含む変数に何らかの変換を行うために､

05:38.670 --> 05:42.930
変数クラスをインポートする必要があります｡

05:42.930 --> 05:46.470
だから､ テンソル単体だけでは困るという感じです｡ 

05:46.470 --> 05:50.730
このテンソルを､ 勾配を含む変数に置きたい｡ 

05:50.730 --> 05:58.230
そして､ そのためには､ このテンソルを､ 変数クラスを使って､ テンソルと勾配を含む変数に変換する必要がある｡

05:58.230 --> 06:02.460
ちょっと技術的な話になりますが､ これがPyTorchで作業するときのポイントです｡ 

06:02.460 --> 06:13.860
しかし､ 変数クラスを取得する前に､ そのR2 gradに向かってインポートする必要があります｡

06:14.340 --> 06:17.310
アンダーグラデュエイト､ そしてフロム｡ 

06:18.300 --> 06:21.060
直筆サイン入りのトーチ

06:22.180 --> 06:25.240
バレーボールを輸入しています｡ 

06:25.660 --> 06:26.410
これでよしとしよう｡ 

06:26.410 --> 06:33.850
これでAPIを実装するためのライブラリはすべて揃ったので､ 他のライブラリをわざわざインポートする必要はないでしょう｡

06:33.850 --> 06:39.610
必要なツールはすべて揃ったので､ あとはニューラルネットワークのアーキテクチャを作るだけです｡ 

06:39.760 --> 06:42.550
そこで､ 次のチュートリアルでは､ まさにこれを実行します｡ 

06:42.550 --> 06:43.900
そしてそれまで､ お楽しみに｡ 

06:43.900 --> 06:44.470
I.
