こんにちは、StatoilのこのPythonチュートリアルを歓迎します。我々は、深い理論モデルを実装するための第一歩を踏み出すつもりです。
ですから、基本的に拡散アルゴリズムの全プロセスを実装しようとしています。
それで、私たちが以前作ったものを使うつもりです。
これは、これをデキュー学習プロセス全体に統合するためにメモリを再生するニューラルネットワークのアーキテクチャです。
そして、この学習アルゴリズム全体は1つのクラスに収まるでしょう。
それが人工知能を実装するために最後にしていることです。
そして、このクラスにはさまざまな機能が含まれています。
そこで私たちは、モデルそのものを表現する将来の迂回オブジェクトに付加されたすべての変数を作成して初期化し、いくつかの他の関数を持つ関数を用意します。
そのうちの1人はもちろん、毎回適切なアクションを選択することになります。
また、このコアを取得するための更新機能のコア機能があり、うまくいけば学習がどのように進んでいるかを知ることができます。
探査がうまくいけば、それが搾取に移ることができれば、我々は明日を保存する安全機能を持っています。それは車の脳を救って最終的に機能をロードすることです。
だから私たちはいくつかの機能を持っています。
私たちはそれぞれのために1つの機能を果たすつもりです。
そして今日、私たちは、クラスを作るときにいつものようにend関数から始めます。
しかし、まずクラスを紹介することを忘れないで、それをDと呼ぶことにしましょう。
Qそしてあなたのネットワークのためにいくつかのかっこが呼び出されます。
それから、最初の機能に行きます。
だから、このdefをして、二重のアンダースコアと二重のアンダースコアを二重にしましょう。
したがって、この関数で理解しているように、オブジェクトに付加された変数を紹介します。
だから私たちはすべての自己から始まる2本の線を持つつもりです、そして、私たちは基本的にD2ネットワークを実装するのに必要なすべての変数を作成し、初期化します。
だから、たとえば、私たちが深い神経ネットワークを必要とし、私たちの記憶が必要になるため、オブジェクトやネットワークを作成します。
メモリのための別の変数を作成します。
だから、私たちは別の可変セルフ・アップ・メモリを持っていますが、それだけでなく、私たちも作成する必要があります。
最後の日付の変数。
最後の行為と最後の言葉。
もちろん、あなたは拡散アルゴリズムで見られる変数を知っています。
そしてそれ以外は何か？
また、エラーにどのくらい寄与するかに応じて、データの重みの意味で確率的グリッドを実行するために知っているオプティマイザも必要です。
AIが間違いを犯しているとき、それは基本的に私たちが今作成して初期化する必要がある変数だと思う。
しかし、このinit関数では、最初の2つの引数を最初の通常のselfとして指定します。これは、オブジェクトを参照する引数です。
それからあなたは、ネットワーククラスのオブジェクトを作成するつもりであることを知っているからです。
ネットワーククラスはinit関数の入力サイズと引数で引き数をとります。これはここでも同じです。
ネットワーククラスのオブジェクトを作成するときは、入力サイズの引数と実際の引数を選択する必要があります。
したがって、私たちはここにいくつかコピーすることができます、そしてここに行きます。
だから、これらの議論は今やなるでしょう。
また、いくつかの議論は持続しなかった。
将来のいくつかのディールロールモデルの異なるクラスの将来のオブジェクトを作成するたびに、私はあなたの状態を含むベクトルの次元数を思い出させる入力サイズを指定する必要があります。
あなたの入力状態と、車が可能な行動の数であるアクションの数。
だから私はあなたに思い出させる。
これらはそのまま左に行くか右に行くかのどちらかです。
大丈夫です。
次に、リプレイメモリクラスの新しいオブジェクトを作成してメモリオブジェクトを作成し、遷移のメモリと容量引数を持つ情報を取得することがわかります。
しかし、私たちはメモリを作成するときには実際に一度しか使用しないので、それ以降は容量の引数を指定する必要はありません。
これを行うことができますが、私たちの記憶に必要なトランジションの数を直接入力します。
しかし、教師モデルでパラメータを取得する最後の議論が1つ必要です。
このガンマパラメータは遅延であることを忘れないでください。
それは方程式のパラメータなので、後でそれを何度か使用するので、ここではそれを記述します。
それでここに入れましょう。
ガンマと呼ぶつもりです。
だから、それは議論の名前に過ぎないし、そのためにあなたが必要とするすべての議論を取り上げます。
それは、私たちが教室で教師のオブジェクトを作成するたびに辞書モデルを作成するたびにそのことを意味します。
さて、アクションの数とパラメータの入力サイズを引数として指定する必要があります。
そして、私たちはそれらの本当の価値を終わらせます。
さて、関数の中に入ってみましょう。
OK。
ですから、基本的にこれは簡単になるでしょう。
私たちが必要とするすべての変数を作成して初期化しようとしています。
最初のものから始めましょう。
ガンマから始めましょう。
実際には遅延係数。
だから、これはVoivodeが彼女の物体に付けられたいので、私たちは自分で始まります。
したがって、ガンマは教師の変数となり、ガンマはデチューンクラスのオブジェクトを作成するときに入力される引数と同じになります。
そこでジャナと、そこでは第二の議論に行く。
2番目の引数は報酬のウィンドウになります。
では、このウィンドウは何ですか？
さて、これは、過去100回の単語の平均のスライディングウィンドウになるでしょう。あなたが知っているパフォーマンスの進化を評価するために使用するこの戦争Winduへの言葉の意味が時間の経過と共に滑ります。
私たちが観察したいのは、時間と共に増加する最後の100語の意味です。
それでは、報酬のアンダースコアウィンドウを自分自身で初期化しましょう。
そして、これは最後の100単語の進化する平均のスライディングウィンドウになるので、
さて、それを空のリストとして初期化してから、時間外に作業するという意味に拡張します。
すべての権利は、よりエキサイティングです。
私たちのニューラルネットワークを作りましょう。
基本的にそれがモデルの核心なので、私たちはそれを独学のMarioと呼ぶつもりです。
私はそれをモデルと呼んでいます。このモデルは、そのクラスの主題以外のものであり、そのようなオブジェクトを作成することはありません。
私たちはクラスのネットワークを括弧で取ります。ここではクラスの引数を入れますが、これらの引数をinit関数の引数に入れます。したがって、ここでそれらをコピーしてネットワーククラスに貼り付けるだけですこのコード行に従ってください。
我々は完全な学習モデルのための1つのニューラルネットワークを作成し、次にメモリを作成しましょう。
それではまた、私たちは自己教えられた記憶と呼ぶ新しいヴァルゴを作ります。
また、これは再生メモリクラスの対象になります。
それでは、名前またはクラスをコピーしてみましょう。ここでそれに直面しましょう。そして、かっこには容量を入れる必要があります。なぜなら、容量が関数の引数であり、それがここで必要な引数だからです。
どの容量が選択されるのかは、遷移の数に対応することを覚えておいてください。イベントの数は、最後のアクションと最後の単語の状態を最後に示しています。
そして、Priesterの労苦の1つに言及されているように、私たちは10万回の推移をメモリに取り込み、次にこのメモリからサンプリングして、少数のランダムな遷移を取得し、モデルをOKにします。
今私たちは私たちの記憶を完璧にしています。
さあ、オプティマイザを手に入れましょう。
だから私たちは再び新しい変数を作成します。これをオプティマイザと呼びます。オプティマイザは、私たちの将来のデキューの別の変数です。
そして、もし私たちが元に戻れば、中央にグリッドを作るために実行するすべてのツールを含むモジュラートーチである拷問されたUptonを輸入したことがわかります。
もちろん、それにはいくつかのオプティマイザが含まれています。そのため、Uptonというショートカットを付けました。したがって、ここではモデルを彼のものまで引き上げることにします。これはトーチのことであり、このモジュールから、オプティマイザ
あなたが見ることができるように、それらはすべてここにリストされています。
それらの多くは優れたものです。例えば鎧のProppは優れたオプティマイザです。
例えば、ニューラルネットワークや教師なしの深い学習の記録に強くお勧めします。
しかし、優秀であり、彼が選択するもう一つのものは原子オプティマイザです。
それはあなたがこの車で良い自家用車を手に入れられることがわかるでしょう。
しかし、もう一度あなたは武器を試してみることができる他のものを試してみることを完全に歓迎しますが、金属のために私たちはアダムを選ぶでしょう。
だから私はenterを押している。
実際、ここに議院があることに気付くでしょう。
これはAtomクラスのオブジェクトを作成するためです。
これはクラスですが、オブジェクトは原子オプティマイザ自体になります。
しかし、これはクラスであるため、Atomクラスの引数と引数は、すべてあなたとオプティマイザをカスタマイズできるパラメータです。
例えば、それは典型的に学習レートの減衰またはいくつかの他のパラメータです。
また、Ormeauのすべてのパラメータを取ることに加えて、学習率を指定します。
だから私たちのモデルのパラメータの始まりです。
私たちは自己疑惑モデルでそれらを得ることができます。
それで、私たちがここで作ったモデルは、私たち自身のクラスの独学モデルです。
自己学習モデルでは、モデルのパラメータにアクセスするために、別の点を追加してから、かっこでパラメータを簡単に追加します。
ですから、アドオンオプティマイザを私たちのニューラルネットワークに接続するだけです。ここでもう一度作成したオプティマイザを教えてください。学習レートを追加する予定です。
AIが正しく学習するようになると、学習があまり速く起こらないような値に設定します。
そして、我々が学習率が大きすぎるとAI
私たちはAIに、間違いから学ぶ探求の時間を与えたいと思っています。
あなたが何らかの過ちを犯したり、壁に近づけたりするようなミスをしたときに、私たちがそれを処罰するときを知っています。
さて、私たちは学ぶ時間を与えたいと思っています。
私たちは、ニューラルネットワークへの正しい方法を求めています。
そして、それらのいくつかを試した後に私が終わった学習率の良い値は0です。 2または1である。
それだけでオプティマイザを作成する必要があります。
つまり、基本的にAtomクラスのオブジェクトを作成しています。
すばらしいです。
そして、必要な最後の3つの変数は、遷移イベントを構成する変数です。
それは最後の行為と最後の言葉です。
これは基本的に今作成するもので、初期化するだけです。
それで、最後に私たちが独学と呼ぶ最後の日から始めましょう。
最後のアンダースコアの状態です。次にそれをどのように初期化しますか？
最終日は、環境の1つの状態でエンコードされた5つの支配のベクトルであることを忘れないでください。
また、これらの5つの次元は、3つのセンサーの3つの信号が、真っ直ぐに、また、向きと向きがマイナスになっています。
これはベクトルと直観的な意味です。
しかし、トーチではベクトル以上のものが必要です。
それは実際にトーチテンソルである必要があります。
しかし、それはトーチセンサーである必要があるだけでなく、バ​​ッチに対応する偽の次元と呼ぶのが好きな次元がもう1つ必要です。
これは、最後の8つがニューラルネットワークの入力となるためですが、一般的には密度の高い流れであれトーチを運ぶときには私と一緒に仕事をしているのですが、入力ベクトルは単純なベクトルではありません。
それはバッチでなければなりません。
ネットワークは入力観測のバッチのみを受け入れることができるため、入力状態ベクトルのテンソルを作成するだけでなく、バ​​ッチに対応するこの偽の次元を作成します。
それでは、これを行い、トーチテンソルを初期化して始めましょう。これを行うには、もっと単純なものはありません。
あなたが推測したように、これはテンソルオブジェクトであるテンソルクラスのオブジェクトを作成するため、テンソルクラスを使用します。
そして、このテンソルでは、テンソルのサイズを指定する議論を行う必要があります。
1つのタイプのアレイのようなものです。
しかし、基本的にこれは現在、あなたが見ることができるこの入力状態はベクトルを持ち、距離の要素の数を指定する必要があります。
入力サイズは入力状態ベクトルの次元数と正確に同じなので、もちろん入力サイズを使用する必要があります。
今私はテンソルを言うべきです。
テンソルオブジェクトを作成するためにテンソルクラスに入力するだけです。
まあ、それは不正確です。
後で入力サイズが定量化されます。
大丈夫だよ。
それが最初に行われたことです。
テンソルを初期化しました。
しかし、偽のディメンションを作成するために必要な別のことをする必要があることを覚えておいてください。これは、ネットワークが入力に期待しているものであり、このテストを作成するためのテストです。バッチに入れて私がこれを言及する最初の時は非常によく言う。
これを行うには、単にそれを追加して絞り込み、その後かっこで括るだけです。
この大きな次元の指数を置く必要があります。
そして私がちょうど言ったように、この偽の次元は最後の日付の最初のアニメーションでなければならず、インデックスとバイト以降ゼロを開始するために、この新しいパラダイムエンジンが最初のラインエンジンになるようにゼロを入力する必要があります。
だから我々はバッチに対応した最初のエンジンを持っていて、ダイアモンドはそのセンサーに応答して、入力信号の5つの要素に3つの信号の向きとマイナスの向きが含まれているはずです。
そして、入力状態を適切に初期化します。
完璧。
そして、次の変数が最後のアクションであるため、2つの変数が移動しやすくなります。
それはオブジェクトの最後のアクションのために作成している新しいRoybalです。
そして、セクションの最初のチュートリアルでは、アクションは0または2のいずれかになると言いました。そして、アクション回転ベクトルを使用して、これらのアクションのインデックスをローテーションの角度に変換します20またはマイナス20。
私たちは実際にそれを使って記憶をリフレッシュすることができます。
それはまさにここにあります。
アクションがゼロの場合のローテーションへのアクション。
これは、アクションが1の場合、ゼロの最初のインデックスに対応します。
これは、20度のこれらのベクトルのインデックス1に対応します。アクションが実行される場合は、アクションを実行するときに私たちの車の回転角度になるマイナス20度になります。
大丈夫。
したがって、アクションは0 1または2のいずれかになるので、アクションは単純な数だけ存在します。
そして、非常に単純にゼロに初期化することができます。
私たちは何十も創造する必要はありません。
ゼロで初期化するだけです。
そして最後に。
まあそれは最後の言葉です。
それは最後の言葉の自己です。
そこに行く。
そして再び言葉はマイナス1とプラス1の間にある浮動小数点数です。
それは再び数字です。
そして、その行動については。
これを0に初期化してから行っていきます。
おめでとうございます。
今、私たちはエキサイティングなものに移ります。
そして、実際に、AIにとって最も重要なのは、それぞれの時間とそれぞれのテントでどのアクションを実行するかを決定することです。そして、これは、次のチュートリアルで、選択アクションメソッドを作成することによって、
それでは、次の苦労まで、そしてそれまで、これをやろう。