こんにちは､ このPythonチュートリアルへようこそ｡
さて､ ネットワーククラスのinit関数でニューラルネットワークのアーキテクチャを構築したところで､
今度は2番目の関数､ つまりforward関数を作ってみましょう｡
そして､ その機能が神経細胞を活性化させることになるのです｡
つまり､ 順伝搬を行う機能である｡
では､ こうしてみましょう｡
この機能を､ 先程のようにフォワードと呼ぶことにしましょう｡
そして､ この関数は2つの引数を取ることになる｡
まず､ いつものようにセルフで､ FC1とFC2を使うので､ オブジェクトの変数を使えるようにすることです｡
だから､ 自己が必要なんです｡
これらの変数を使用できるようにすること｡
そして､ 2番目の引数が必要です｡ これは入力で､ stateと呼ぶことにします｡ stateは､
まさにニューラルネットワークの入力だからです｡
それが､ ニューラルネットワークに入る入力となる状態です｡
そして､ 出力として､ 左へ行く､ まっすぐ行く､ 右へ行くという3つの行動の可能性を示すキュー値が用意されます｡
しかし､ ここで引数として入力する必要はない｡ なぜなら､ それこそが返したいものだからだ｡
この前方関数は､ ニューロンを活性化するだけでなく､ 入力の状態に応じて､
可能な行動ごとに手がかりとなる値を返します｡
よし､ これで必要な引数は2つだ｡
そして､ この関数の内部で､ 何をさせたいかを指定しましょう｡
なるほど｡
そこで､ まず最初に行うのは隠れニューロンを活性化することで､ 隠れニューロンを変数Xで呼び出すことにします｡
つまり､ Xは隠れニューロンを表しています｡
それで､ どうやって活性化させるのか？
まあ､ もちろん､ 入力したニューロンを
最初のFC1完全接続を使って隠れニューロンを作り､ その上に活性化関数を適用するつもりです｡
では､ どうすればいいのか？
ニューラルネットワークを実装するためのPyTorchの全関数を含むtorch dot net dot functionalモジュールをインポートして､ ショートカットをつけたことを思い出してください｡
F では､ 実際にこれから行うのは､ 関数モジュールからこれらの関数の一つを使用し､
この関数が本当の関数となるわけです｡
では､ 価値とは何でしょうか｡
値とは､ 直観講義で見た整流器の機能です｡
これは､ レクチファイヤーという機能に付けられた名前に過ぎません｡
しかし､ この関数はその中のfというショートカットの関数から取ったものなので､ まずここにf
dotと入力し､ そこからこの関数を取ることができます｡
そして､ 実際にr eと入力すると､ ほら､ 価値関数が出来上がりました｡
つまり､ これが隠れニューロンを活性化させる整流関数で､ それがXです｡
この値関数で､ 私たちは何を入力しなければならないかを完全に理解することができました｡
それが､ 活性化させたいニューロン､ つまり隠れニューロンです｡
そして､ これらの隠れニューロンを得るために､ 最初の完全な接続を行うことになります｡
FC One 入力ニューロンから隠れニューロンへ行くために､ 入力ニューロンに適用するものです｡
では､ 最初のフル接続をしてみましょう｡
FC one しかし､ 最初の完全な接続は､ 私たちのオブジェクトの変数です｡
したがって､ ここにまず自己のドットFC1を入力する必要があります｡
これが私たちのニューラルネットワークの最初の完全な接続です｡
そして､ この最初の接続の中に､ 入力ニューロンから隠れニューロンへ行くための入力状態を入力することになります｡
そして､ stateという名前をつけたので､ ここでstateと入力すればいいわけです｡
これで隠れニューロンを活性化させることができました｡
わかりました｡
そして､ 隠れニューロンができたので､ 出力ニューロンを返すことにします｡
次の行で､ ご理解いただいたように､ 出力ニューロンは私たちの行動に対応するわけです｡
しかし､ これらは直接的にはアクションではありません｡
これらはQ値で､ ディープラーニングモデルを組み合わせて学習し続けるモデルを構築しているからです｡
したがって､ ここではキー・ラーニングを使って､ 各アクションのQ値を求めているのです｡
そして､ 後でソフトマックスやARGマックスを使い､ 最終的なアクションを得ることになるのです｡
つまり､ ここでは､ これから紹介する変数が出力ニューロンに対応することになる｡
そして､ 出力ニューロンはQ値なので､ まあ､ この変数をQ値と呼ぶことにします｡
これでよしとしよう｡
そこで､ 値をキューに入れ､ 今度は直接､ 完全な接続､ つまり変数を取ります｡
FC 2 しかし､ 私たちのオブジェクトから変数を｡
だから､ 私たちはここで自己紹介をします｡
FC 2 そしてもちろんここでは､ この接続の左側のニューロンを入力します｡
それが､ 1行目からxとなった｡
そこでX､ です｡
これでQ値が求まりました｡
これがニューラルネットワークの出力ニューロンです｡
そして､ 最後の行のコード｡
もちろん､ この4番目の関数は､ このQ値を返すために使われるので､ returnを付けて単にQとするだけでいいのです｡
値で､ 可能な各アクションの Q 値を返します｡
左へ行く､ まっすぐ行く､ 右へ行く｡
それでは､ おめでとうございます｡
最初の授業は終了しました｡
そして実は､ ニューラルネットワークのアーキテクチャを作り終えているのです｡
これは完成品ではないことを忘れないでください｡
ニューラルネットワークのアーキテクチャは､ さまざまなものを試すことで常に改善することができます｡
だから､ ここでニューロンを増やして､ 自由にやってください｡
例えば､ 隠れニューロンを50個追加したい場合は､ ここの30とここの30を50､ 50､
50と置き換えるだけでいいのです｡
そして､ 新たなフル・コネクションを作ることで､ さらに隠れたレイヤーを追加することができるのです｡
まあ､ それがまさにアーティストの仕事なんですけどね｡
それぞれの状況において､ 何がベストなアーキテクチャなのか､ 一般的なルールはないのです｡
だからこそ､ 実験が必要なんです｡
でも､ もうそれでやってみましょうよ｡
いずれはかなり優秀な自動運転車が登場するのは目に見えています｡
わかりました｡
そして､ 次の授業は体験リプレイについてです｡
そして､ 次の3つのチュートリアルでそれを作っていく予定です｡
それまではお楽しみに｡
I.