こんにちは､ 脳を作る最後の工程へようこそ｡
左にする機能は1つです｡
これは､ 3つの畳み込み層と完全接続層を含むニューラルネットワークの全層に信号を伝搬させる前進関数である｡
この関数は､ 自動運転車と全く同じように前進する関数ですが､ 今回は完全連結層の前に畳み込み層で信号を伝搬させなければならない点が異なります｡
そして､ 良いニュースは､ 我々はすでに前のステップでニューロン数関数でそれを行ったので､
畳み込み層に信号を伝搬させるコードがすでにあることです｡
というわけで､ あっという間です｡
ここでやったことと､ 自動運転車のためにやったことを組み合わせれば､ 私たちの脳の前進機能ができあがるのです｡
では､ こうしてみましょう｡
この関数は､ 前述した self と x を引数にとり､
信号がニューラルネットに伝搬されると X
が更新される｡
では､ Colinと､ 関数の中に入ってみましょう｡
つまり､ 先ほど申し上げたように､ 3つの畳み込み層に信号を伝播させるためのコードはすでにできているのです｡
それがまさにこの3行のコードです｡
だから､ コピーしてここに貼り付けているのですが､ これがなかなか｡
すでに3つの畳み込み層で信号の伝搬が完了しているので､ あとは畳み込み層から隠れ層へ､
そして最終的にはニューラルネットワークの一番最後にある出力層へ信号を伝搬させるだけです｡
そして､ そのためには､ まず､ ここで得た3番目の畳み込み層を平坦化する必要があります｡
最初はXが入力画像で､ ここでXが第一畳み込み層になり､ ここでXが第二畳み込み層になり､
ここでXが第三畳み込み層になると覚えておいてください｡
つまり､ 今の段階では､ xが3番目の畳み込み層ということになります｡
そして､ 今度は平坦化層を得るために､ この第3畳み込み層xを平坦化する必要がある｡
そのために､ ここでやったのとよく似たことをやるんです｡
ただ､ 今回はニューロンの数は必要ない｡
3番目の畳み込み層のチャンネルを平らにすればいいのです｡
ですから､ これはもっとシンプルなものですが､ 非常によく似ています｡
そして､ これをうまくやるには､ Xが平坦化レイヤーになるため､ もう一度Xを取ることになります｡
つまり､ xを更新しているだけなので､ xは等しい｡
そして､ 再びxを取る｡
しかし､ このxは3番目の畳み込み層である旧xである｡
そこで､ 3番目の畳み込み層､ ドット､ そして2つの引数を適用したビュー関数を取ります｡
1つ目は､ xドットサイズ0｡
そこで､ ここでもサイズ関数を用いて､ 第3畳み込み層の全チャンネルの全ピクセルを取り出し､
それを次々と並べていく｡
そして､ この巨大なベクトルがこのXとなり､ このXが完全連結ネットワークの入力となる｡
しかし､ ここで加えるべきはコンマとマイナス1だけではありません｡
その仕掛けは､ PyTorchのチュートリアルに載っています｡
このように､ 複数のチャンネルで構成される畳み込みレイヤーを､ サイズ関数を使って平坦化することができるのです｡
もちろん､ この仕組みの詳細が知りたければ､ pytorchのチュートリアルに行けばいいんですけどね｡
リンクを提供します｡
さて､ 平坦化層ができたので､ この平坦化層は､ 単純な線形伝送を行う古典的な完全連結ネットワークの入力になるわけですね｡
それで､ 今度はコンボリューション関数を使って信号を渡すのではありません｡
線形クラスで線形伝送を行い､ 線形性を崩すために､ 画像を扱うので､
画像には非線形関係があり､ この非線形関係を学習できるように整流関数を使います｡
では､ こうしてみましょう｡
実はこれ､ 次のステップなんです｡
そして今､ それはまさに自動運転車のためにやったようなことなのです｡
またアップデートしたいからXを取る｡
今､ 隠れ層を手に入れたいのです｡
そこでまず､ 私たちが行うことは､ 完全な接続を取ることです｡
FC1完全接続のため｡
FC1は､ 平坦化層と隠れ層をつなぐものです｡
そこで､ FC1を使って､ 今あるX（フラットニング層）に適用する必要があります｡
FC oneはinit関数の変数なので､ selfはFC one xを行い､
平坦化層から隠れ層へ線形に信号を渡しますから｡
しかし､ 今度はこのニューロンを活性化させると同時に､ 直線性を崩す必要があるのです｡
そして､ それがまさにRectifier活性化関数で行われるのです｡
さて､ 次は機能モジュールです｡
そして､ この機能モジュールから
もちろん､ 整流された関数がその値であり､ 括弧の中にselfというFC1が入ります｡
わかりました｡
つまり､ このコードの行では､ まず平坦化層から完全連結ネットワークの隠れ層に信号を伝搬させるのです｡
そして､ この整流器活性化関数で線形性を破って､ この隠れ層のニューロンを活性化させるのです｡
そして､ 隠れ層はここでXとなります｡
完璧です｡
そして､ これで一段落です｡
もちろん､ 最終的に出力ニューロンがある隠れ層から出力層へ信号を伝播させるためである｡
そして､ これをうまくやるには､ それはとてもシンプルなことです｡
それはまさに､ 自動運転車のためにやったようなものです｡
2回目の完全接続を行う｡
FC 2 そして､ もちろん､ 今まさにxである隠れ層のニューロンにも適用します｡
ということで､ xが隠れ層のニューロンです｡
この古いxとここでのxは､ もちろんQ値を含む出力層の出力ニューロンになる｡
そして最後に､ Q値でXとなる出力ニューロンを返すだけである｡
とても完璧です｡
おめでとうございます｡
脳を作ったところです｡
目と残りの細胞で目の脳を作っただけです｡
だから､ おめでとうございます｡
あとは､ 脳ですべての信号が処理された後､ どのようにアクションを演じるかを定義している本体を作ることになります｡
それが､ 私たちの第二の大きな一歩です｡
次のチュートリアルでやってみましょう｡
そしてそれまで､ お楽しみに｡
I.