機械学習とニューラルネットワーク - ページ 65

 

Python の基礎 - パート 02



Python の基礎 - パート 02

私はソーパー博士です。今日は、Python プログラミング言語の基礎に関する 3 部構成のシリーズの第 2 回目を紹介できることを光栄に思います。

今日のレッスンに入る前に、私が共有する情報は前のレッスンで培った知識とスキルに基づいていることを強調したいと思います。したがって、前のビデオを視聴する機会がなかった場合は、Python のこのレッスンを開始する前に視聴することを強くお勧めします。

ここで、このレッスンで学習できる内容を簡単に確認してみましょう。

このビデオを終えると、Python の次の側面についての知識が得られます。

  1. リスト
  2. NumPy 配列
  3. If ステートメント
  4. 論理演算子

レッスン全体を通じて、これらの各トピックを詳しく説明し、Python プログラミング言語内での機能を示す実例とデモンストレーションを完了します。

Python のリストについて説明することから始めましょう。

Python では、リストは単に項目の名前付きコレクションです。これらの項目には、数値、テキスト、変数、オブジェクト、さらにはその他のリストなど、あらゆるタイプを使用できます。リストに項目として他のリストが含まれる場合、そのリストは多次元リストと呼ばれます。

これを説明するために、いくつかの例を考えてみましょう。最初の例では、「int list」というリストを作成し、その要素に値 -3、7、4、0、-2、および 342 を割り当てます。単純な 1 次元のリストをベクトルとして想像できます。 Python はリストを角かっこで識別します。リストの要素に値を割り当てるには、角括弧内で要素をカンマで区切ります。リストにはあらゆるデータ型の項目を含めることができることに注意してください。

2 番目の例では、惑星のリストを宣言し、太陽系内の既知のすべての惑星の名前をその要素として割り当てます。冥王星は2006年に国際天文学連合によって「準惑星」の地位に降格されたため、このリストには含まれていないことに注意してください。 3 番目の例に進み、2 次元のリストを宣言します。つまり、このリストの要素もリストです。これは、2 行 3 列の 2x3 行列と考えることができます。

ここで、リストが Python で宣言されて使用されるデモをいくつか見てみましょう。最初のコード セルでは、前に説明した 3 つのリストを単純に宣言します。このセルを実行すると、これら 3 つのリストを作成してコンピューターのメモリに保存するように Python に指示しているだけなので、出力は表示されません。後続のコード セルでは、リスト内の特定の値にアクセスする方法を検討します。ただし、先に進む前に、Python のインデックス作成について理解することが重要です。

Python はゼロベースのインデックス システムを採用しています。これは、リストや配列などのコレクションを扱う場合、最初の項目のインデックスは 0、2 番目の項目のインデックスは 1 などということを意味します。説明のために、「int リスト」を例として考えてみましょう。このリストには 6 つの値が含まれています。たとえば、リストの 5 番目の項目にアクセスしたい場合、その項目のインデックスは 4 になります。

このゼロベースのインデックス システムを理解すると、次のコード セルは単に「惑星」リストの 3 番目の惑星の名前 (この場合は「地球」) を出力します。これはリストの 3 番目の要素であるため、インデックス位置 2 に配置される必要があります。実行ボタンをクリックして、出力が期待どおりであることを確認し、地球が実際に太陽から 3 番目の岩であることを確認しましょう。

次に、このレッスンの次のトピックである Python の NumPy 配列を詳しく見てみましょう。さて、このレッスンの次のトピックである if ステートメントと論理演算子に進みましょう。 Python では、if ステートメントを使用して条件ステートメントを使用する機能が提供されます。 if ステートメントを使用すると、特定の条件が true か false に基づいて、さまざまなコード ブロックを実行できます。さらに、Python には、複数の条件を組み合わせることができる論理演算子も用意されています。

最初の例には、「x」という名前の変数が 10 未満かどうかをチェックする単純な if-else 構造があります。条件が true の場合、「x は 10 未満です」と画面に表示されます。それ以外の場合、条件が false の場合は、「x は 10 以上です」と出力されます。 else ステートメントは、if ステートメントの条件が false の場合に実行されるコードを指定するために使用されます。

この構造を拡張して、if-elif-else 構造を使用して複数の可能性を処理できます。 2 番目の例では、人物の年齢が 13 歳未満であるかどうかをチェックする追加条件を導入します。コードは、人物の年齢に基づいて、その人物が子供、ティーンエイジャー、または大人であるかを判断します。 elif ステートメントを使用すると、どの条件も true でない場合に else ステートメントに戻る前に、追加の条件をチェックできます。

これらの if ステートメントと論理演算子が Jupyter Notebook で実際に動作するデモンストレーションをいくつか見てみましょう。

最初のコードセルでは、「x」という名前の変数を宣言し、その値を設定します。次に、if-else 構造を使用して、「x」が 10 未満かどうかに応じて特定のメッセージを出力します。コード セルを実行して出力を観察してみましょう。現在「x」の値は 10 であるため、Python は「x は 10 以上です」を画面に出力します。 「x」の値を -7 に変更してコード セルを再度実行すると、異なる結果が得られます。 「x」の値を -7 に変更すると、Python は「x は 10 未満です」と出力するようになりました。

次のコード セルでは、if-elif-else 構造を実装して、年齢に基づいて人が子供、ティーンエイジャー、または大人であるかどうかを判断します。セルを実行して何が起こるか見てみましょう。予想どおり、「age」変数の値が現在 5 に設定されているため、Python は「child」を出力します。「age」の値を変更してコード セルを再実行すると、人の年齢に基づいて異なる結果が得られます。次のトピックに進み、Python の論理演算子について説明します。 Python には、「and」、「or」、「not」の 3 つの論理演算子が用意されています。これらの演算子を使用すると、複数の条件を同時にテストできます。

最初の例では、「and」演算子と「or」演算子を使用して、2 つの変数「x」と「y」が正であるかどうかを判断する方法を示します。 if ステートメントは、「x」と「y」が両方とも正であるかどうかをチェックします。少なくとも 1 つの条件が false の場合、コードは elif ステートメントに進み、「x」または「y」のいずれかが正であるかどうかを確認します。 「x」も「y」も正でない場合、else ステートメントが実行されます。

2 番目の例では、比較結果を反転または反転するために使用される「not」演算子を導入します。人の年齢が 13 歳以上であるかどうかを確認します。その人の年齢が 13 歳以上である場合、その人は少なくとも 13 歳である必要があり、したがって子供ではありません。それ以外の場合は子供とみなされます。

Python で使用されるこれらの論理演算子のデモをいくつか見てみましょう。

最初のコード セルでは、論理演算子「and」と「or」を使用して、「x」と「y」が正であるかどうかを判断します。 「x」を 5 に、「y」を -2 に設定しました。セルを実行して出力を観察してみましょう。 「y」が負であるため、「and」演算子の条件は false になります。ただし、「x」が正であるため、「or」演算子の条件は true です。したがって、コードは「x は正です」と画面に表示します。ここで、「x」の値を -3 に変更して、コード セルを再度実行してみましょう。今回は、「and」演算子と「or」演算子の両方の条件が false であるため、コードは else ステートメントに進み、「x と y は正ではありません」と出力します。

次のコード セルでは、「not」演算子を使用して、年齢に基づいて人が子供ではないかどうかを確認します。 「年齢」変数を 10 に設定しました。これは、その人が子供であるとみなされることを意味します。コードセルを実行して出力を観察してみましょう。この人の年齢は 13 歳未満であるため、「not」演算子の条件は false となり、コードは「Child」を画面に出力します。

ここで、「age」の値を 18 に変更し、コード セルを再実行します。今回は、その人の年齢が 13 歳以上であるため、「not」演算子の条件が true となり、コードは「子供ではありません」と出力します。これで、Python のリスト、NumPy 配列、if ステートメント、論理演算子に関するレッスンは終わりです。この情報が役に立ち、Python プログラミングの旅に役立つことを願っています。

このシリーズの次の最終回では、ループ、関数、ファイル処理など、より高度なトピックを取り上げます。それでは、乞うご期待!

ご清聴ありがとうございました。また次のレッスンでお会いしましょう。

Python Fundamentals - Part 02
Python Fundamentals - Part 02
  • 2020.04.03
  • www.youtube.com
Dr. Soper discusses more fundamentals of the Python programming language, including how to work with lists in Python, how to use NumPy arrays, how to use 'if...
 

Python の基礎 - パート 03



Python の基礎 - パート 03

皆様が良い一日をお過ごしのことを願っております。ソーパー博士です。Python プログラミング言語の基礎に関する 3 回目のレッスンに再びお会いできることをうれしく思います。今日のセッションでは、Python をさらに深く掘り下げ、理解と習熟度を高めるためのいくつかの重要な概念を探っていきます。

始める前に、このレッスンで提供される情報は、前の 2 つのレッスンで培った知識とスキルに基づいていることを強調したいと思います。これらのビデオをまだ視聴していない場合は、Python のこのレッスンに入る前に視聴することを強くお勧めします。

それでは、このレッスンで何を学ぶことができるかについて話し合ってみましょう。このセッションが終わるまでに、Python の次の側面を包括的に理解できるようになります。

  1. 「for」ループ
  2. 「while」ループ
  3. 機能
  4. クラス
  5. オブジェクト

このレッスンでは、例とデモンストレーションを通じてこれらの概念を探求し、Python プログラミング言語での実際のアプリケーションを理解できるようにします。

まずは、Python の「for」ループと「while」ループの世界を詳しく見てみましょう。

一般に、ループを使用すると、一連の命令を繰り返し実行できます。 Python には、「for」ループと「while」ループの 2 種類のループが用意されています。 2 つの主な違いは、「for」ループは特定の回数だけ実行されるのに対し、「while」ループは特定の条件が満たされるまで実行され続けることです。

最初の 10 個の自然数 (1 ~ 10 の整数) を出力する "for" ループの例から始めましょう。"for" ループを作成するには、キーワード "for" の後に変数名を使用します。この場合、変数「x」を使用します。 「for」ループが反復されると、変数「x」には反復ごとに異なる値が割り当てられます。次に、変数に繰り返し割り当てられる一連の項目を指定し、その後にコロンを付けます。この特定の例では、Python の「range」関数を使用して項目のセットを作成します。 「range」関数は、下限と上限の間の数値の範囲を返します。特に、下限は包括的ですが、上限は排他的です。したがって、この例の数値の範囲は 1 ~ 10 になります。

ループの最初の反復では、「x」の値は 1 になります。その後、2 回目の反復では、「x」に 2 が割り当てられ、10 に達するまで同様に続きます。「for」に続くコードのインデントされた行はすべて、ステートメントはループの反復ごとに実行されます。この例では、単に「x」の値を出力しているだけで、1 ~ 10 の数字が表示されます。

次に、惑星の名前を出力する別の「for」ループを見てみましょう。この場合、変数名「planet」を使用してループを制御し、惑星のリストを反復処理します。ループが進むにつれて、「planet」変数に各惑星の名前が 1 つずつ割り当てられ、リスト内の各惑星の名前を出力できるようになります。

次に、Python のネストされたループについて説明します。ネストされたループでは、1 つのループ (内側ループと呼ばれる) が別のループ (外側ループと呼ばれる) 内で実行されます。内側のループは、外側のループの反復ごとに 1 回実行されます。たとえば、外側のループが「row」という名前の変数に 0 ~ 1 の範囲の整数を入力し、内側のループが「column」という名前の変数に 0 ~ 2 の範囲の整数を入力するシナリオを考えてみましょう。これらの数値は行に対応します。および 2 次元 NumPy 配列の列インデックス。ネストされたループが進行すると、最初に配列の最初の行のすべての要素の値が出力され、次に 2 番目の行に進みます。

最後に、「while」ループを見てみましょう。このタイプのループでは、最初に特定の値に設定される「x」などの制御変数に依存します。 「x」の値が特定の条件を満たす限り、ループは実行され続けます。たとえば、「x」を 1 に初期化すると、「x」が 10 未満である限りループは実行され続けます。各反復で「x」の値が更新され、その中で特定のアクションを実行できるようになります。条件が満たされなくなるまでループします。

これで、Python の "for" ループと "while" ループの概要が終わりました。次のセグメントでは、コードを効果的に整理して再利用できるようにするプログラミングの基本概念である関数について説明します。

Python Fundamentals - Part 03
Python Fundamentals - Part 03
  • 2020.04.03
  • www.youtube.com
Dr. Soper discusses even more fundamentals of the Python programming language, including how to use 'for' loops in Python, how to use 'while' loops in Python...
 

強化学習の基礎


強化学習の基礎

私はソーパー博士です。今日は、人工知能のより広い領域の中で重要な領域である強化学習の基礎について説明します。強化学習の基礎を掘り下げる前に、このレッスンで学習する内容を復習しておきましょう。

このビデオを最後まで見ると、次のことが明確に理解できるようになります。

  1. 強化学習とは何か。
  2. 強化学習ベースの人工知能の基礎を形成する 5 つの原則:入出力システム。 b.ご褒美。 c.環境。 d.マルコフの意思決定プロセス。 e.トレーニングと推論。

これらの概念を理解すると、実際の AI モデルの構築を開始するための準備が整います。時間を無駄にせずに始めましょう!

まず、「強化学習」とは何を意味するのか見てみましょう。強化学習は、教師あり学習と教師なし学習と並んで、機械学習の 3 つの主要なパラダイムの 1 つです。

教師あり学習では、機械は入出力ペアに基づいて出力を予測するための一般的な関数を学習します。教師なし学習では、データに関する事前知識がなくても、機械がデータセット内のパターンを発見します。一方、強化学習は、累積報酬を最大化するためのアクションを実行できるように、環境を理解するようにマシンをトレーニングすることを目的としています。これを達成するために、強化学習には、環境の探索とこれまでに学習したことの活用の間の最適なバランスを見つけることが含まれます。ここで、強化学習ベースの AI の基礎となる 5 つの原則を詳しく見てみましょう。

最初に説明する原理は、入出力システムです。このシステムは強化学習に固有のものではなく、すべての人工知能およびコグニティブ コンピューティング システムの基礎となります。これには、入力を出力に変換することが含まれます。

強化学習のコンテキストでは、入力は環境の状態を表す「状態」と呼ばれます。アウトプットは「アクション」と呼ばれ、「次に何をすべきか?」という質問に答えます。強化学習の目標は、各状態でのアクションを導く最適なポリシーを特定することです。

次に、報酬について話しましょう。報酬は、すべての AI およびコグニティブ コンピューティング システムにおいて重要な役割を果たします。これらは、システムのパフォーマンスを通知するメトリクスとして機能します。報酬関数は、解決する問題に応じて、利益を最大化するか、損失を最小化するように設計できます。即時報酬と累積報酬は、時間の経過とともに累積報酬の合計を最大化すると考えられます。

3 番目の原則は環境であり、強化学習システムが動作する環境や環境を指します。環境は、状態と報酬に関する情報を提供します。また、ゲームのルールを定義し、いつでもどのようなアクションが可能かを決定します。当初、システムはその動作の結果について何も知らないため、学習するために実験する必要があります。

次に、マルコフ決定プロセス (MDP) があります。数学者のアンドレイ・アンドレイエヴィッチ・マルコフにちなんで名付けられた MDP は、結果が部分的にランダムであり、部分的に意思決定者の制御下にある場合の意思決定をモデル化するための数学的フレームワークを提供します。強化学習では、AI システムは環境内で動作する意思決定者として機能します。 MDP には離散的な時間単位が含まれ、システムは観察、アクション、報酬、およびその後の状態に基づいて、ある状態から次の状態に遷移します。

最後に、トレーニング モードと推論モードがあります。強化学習システムは、トレーニングと推論という 2 つのフェーズを経ます。トレーニング モードでは、システムは複数のトレーニング サイクルを通じて学習し、最適なポリシーを特定しようとします。得られた知識に基づいてポリシーを更新します。推論モードでは、システムは完全にトレーニングされており、それ以上更新することなく、学習したポリシーを使用してタスクを実行するように展開されます。

強化学習の原理をしっかり理解したので、実際の強化学習モデルの構築を開始できます。次の 2 つのビデオでは、トンプソン サンプリングを利用して実際的な問題を解決する強化学習モデルについて説明します。最初のモデルは多腕盗賊問題における探査と悪用のジレンマに対処し、2 番目のモデルはシミュレーションを使用して複雑な広告キャンペーンの結果を最適化します。

これらのビデオでは、Python を使用して AI モデルを作成する実践的な経験を提供します。コグニティブ コンピューティングと人工知能におけるこれらのエキサイティングな冒険に皆さんも参加していただければ幸いです。

これで強化学習の基礎に関するレッスンは終わりです。この情報が興味深かったら幸いです。皆様にとって素晴らしい一日になることをお祈りしています。

Foundations of Reinforcement Learning
Foundations of Reinforcement Learning
  • 2020.04.07
  • www.youtube.com
Dr. Soper discusses the foundations of reinforcement learning, which is one of the primary focus areas in the broader realm of artificial intelligence and co...
 

強化学習: トンプソン サンプリングと多腕バンディット問題 - パート 01



強化学習: トンプソン サンプリングと多腕バンディット問題 - パート 01

私はソーパー博士です。強化学習に関する包括的なレッスンの最初の部分を、特にトンプソン サンプリングと有名な多腕バンディット問題に焦点を当てて紹介できることを嬉しく思います。

トンプソン サンプリングと多腕バンディット問題に関連した強化学習の複雑さを掘り下げる前に、このシリーズの前のビデオを見ることの重要性を強調したいと思います。これらの前述のレッスンは、今日説明する概念の基礎となるため、まだ理解していない場合は、よく理解しておくことを強くお勧めします。

このレッスンで学習できる内容の概要を説明するために、重要なポイントを説明します。

  1. まず、多腕の盗賊問題が何を意味するのかを理解することから始めます。
  2. なぜ多腕盗賊問題が重要な意味を持つのかを探っていきます。
  3. 次に、トンプソン サンプリングとこの問題との関連性について紹介します。
  4. 最後に、トンプソン サンプリングの内部動作と、それが探索と活用のジレンマに効果的に対処する方法を明らかにします。

多腕バンディットの問題のさまざまな応用例や影響が明らかになり、今後の旅は啓発的なものになることが約束されています。それでは早速、探索を始めましょう!

多腕バンディット問題の文脈で強化学習の概念を理解するには、まずこの問題が何を伴うかを定義することが重要です。

「多腕バンディット問題」とは、一連の競合するオプション間で限られたリソースの固定量をどのように割り当てるかを決定しなければならないあらゆるシナリオを指します。主な目的は、不確実性に直面しながらも、期待される報酬を最大化することです。

この限られたリソースには、時間、お金、ターンなど、さまざまな形が考えられます。さらに、利用可能な各オプションから受け取る可能性のある報酬は完全にはわかっていません。ただし、リソースをさまざまなオプションに割り当てるにつれて、それぞれに関連する潜在的な報酬について徐々に理解できるようになります。

「多腕盗賊問題」という名前は、ギャンブルの例えに由来しています。ギャンブラーがスロット マシンの列に直面し、勝つ可能性を最大化するマシンを特定しようとしていると想像してください。スロット マシンは、プレイヤーがお金を預けてターンを行う、カジノでよく見られる運次第のゲームです。運がプレイヤーに有利な場合、マシンは金銭的な報酬を分配し、プレイヤーはその報酬が初期投資を上回ることを期待します。

伝統的に、スロット マシンは、ゲームを開始するために機械的なレバー (アーム) が使用されるため、「片腕の盗賊」と呼ばれていました。したがって、ギャンブラーが複数のスロット マシンに遭遇し、どれをプレイするかを決定しなければならない場合、典型的な多腕バンディット問題が発生します。この問題は本質的に、強化学習の基本である探索と活用のジレンマを具体化しています。

探索と悪用のジレンマは、ギャンブラーが各マシンで何回プレイすべきかを決定することを中心に展開します。ギャンブラーが、頻繁に報酬を提供しているように見えるマシンを発見した場合、その特定のマシンでプレイを続けるか (搾取)、それともさらに報酬の高いオプションを見つけることを期待して他のマシンを試して潜在的な損失の危険を冒すべきでしょうか (探索)?

さて、なぜ多腕盗賊問題がこれほど重要なのか疑問に思われるかもしれません。実のところ、複数の武器を持った盗賊の問題は現実世界のいたるところに存在し、私たちの日常生活とビジネス環境の両方に浸透しています。

私生活で遭遇する選択肢について考えてみましょう。たとえば、金曜日の夜にもう一度お気に入りのレストランを訪れるか、それともこれまでに経験したことのない新しい飲食店を探索するかを決定します。同様に、ストリーミング可能な複数の興味深いテレビ シリーズがあるものの、視聴できる自由時間が限られていると想像してください。どの番組に時間を投資するかをどのように決めますか?

トンプソン サンプリングは、多腕バンディット問題における探査と悪用のジレンマに対処するために使用される一般的なアルゴリズムです。ベイズ推論を活用することで、探索と活用のバランスをとるための原則に基づいたアプローチを提供します。

トンプソン サンプリングの背後にある中心的な考え方は、バンディット問題の各オプション (アーム) の真の基礎となる報酬確率に関する信念または確率分布を維持することです。この信念は、アームとの以前のインタラクションから観察された報酬に基づいて更新されます。

トンプソン サンプリングは、意思決定に確率的なアプローチを採用しています。期待される報酬 (搾取) が最も高いアームを厳密に選択したり、アームをランダムに探索したりする代わりに、探索と搾取のバランスがとれた方法で信念分布からアームをサンプリングします。

トンプソン サンプリング アルゴリズムの手順を見てみましょう。

  1. 初期化: 各アームの信念分布を初期化することから始めます。この分布は、各アームの真の報酬確率の不確実性を表します。通常、ベータ分布は、バンディット問題の報酬をモデル化するために一般的に使用される二項分布と共役であるため、事前分布として使用されます。

  2. サンプリング: インタラクションの各ラウンドで、各アームの信念分布から報酬確率をサンプリングします。このステップには、報酬確率の不確実性がより高い武器を考慮することによる探索が組み込まれています。

  3. 選択: サンプリングされた報酬確率が最も高いアームを選択します。このステップには、信念分布に基づいてより高い期待報酬が得られる可能性が高い武器を優先することによる搾取が組み込まれています。

  4. 更新: 選択したアームからの報酬を観察し、ベイズ推論に基づいてそのアームの信念分布を更新します。このステップでは、事前分布と観察された報酬を使用して事後分布を更新します。

トンプソン サンプリングは、サンプリング、選択、更新を繰り返すことで、観測された報酬に基づいて信念分布を適応させ、時間の経過とともにアームの選択を徐々に改善します。

トンプソン サンプリングは、さまざまなアプリケーションにおける探索と活用のジレンマを解決するための効果的なアルゴリズムであることが証明されています。オンライン広告、臨床試験、推奨システム、および不確実性の下での逐次的な意思決定が関与するその他の多くの分野で広く使用されています。

トンプソン サンプリングの主な利点の 1 つは、そのシンプルさと実装の容易さです。このアルゴリズムは複雑な計算やハイパーパラメーターの調整を必要としないため、現実の多くのシナリオで実用的な選択肢となります。

結論として、トンプソン サンプリングは、ベイズ推論を通じて探索と活用のバランスを取ることにより、多腕バンディット問題に対する洗練された解決策を提供します。変化する報酬確率に適応する能力と幅広い適用性により、強化学習と意思決定における貴重なツールとなっています。

レッスンの次の部分では、トンプソン サンプリングの数学的基礎をさらに深く掘り下げ、そのパフォーマンスの保証について検討します。この強力なアルゴリズムの複雑さを探るエキサイティングな旅にご期待ください!

Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 01
Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 01
  • 2020.04.11
  • www.youtube.com
Dr. Soper discusses reinforcement learning in the context of Thompson Sampling and the famous Multi-Armed Bandit Problem. Topics include what the multi-armed...
 

強化学習: トンプソン サンプリングと多腕バンディット問題 - パート 02



強化学習: トンプソン サンプリングと多腕バンディット問題 - パート 02

私はソーパー博士です。トンプソン サンプリングと有名な多腕バンディット問題に関連した強化学習に関するレッスンのパート 2 を紹介するためにここに来ました。

このシリーズの前のビデオでは、多腕バンディット問題と、それに対処するためにトンプソン サンプリングをどのように利用できるかを理解しました。

先に進む前に、前のビデオをまだ視聴していない場合は、視聴することを強くお勧めします。このビデオでは、このレッスンの理解に非常に役立つ重要な知識が得られます。

今日は、トンプソン サンプリングを利用して実際のマルチアーム バンディット問題を解決する強化学習ベースの AI システムの実装に焦点を当てます。これを行うには、Python に切り替えて始めます。まず、これから扱うシナリオを簡単に確認してみましょう。スロット マシンをプレイするために 1,000 ドルを持ってカジノにいると想像してください。利用可能なスロット マシンは 6 台あり、各ターンのプレイ料金は 1 ドルです。特定のターンで勝つ確率を表す変換率はマシンによって異なり、ユーザーにはわかりません。

あなたの目標は、コンバージョン率が最も高いスロット マシンをできるだけ早く特定して、勝利のチャンスを最大化することです。

Python の実装では、必要なライブラリをインポートすることから始めます。幸いなことに、このプロジェクトでは、numpy をインポートするだけで済みます。次に環境を定義します。環境の定義は、強化学習プロジェクトにおいて重要なステップです。ここでは、スロット マシンをプレイする合計ターン数を指定することから始めます。 $1,000 があり、各ターンのコストは $1 なので、合計 1,000 ターンになります。

スロット マシンの総数 (この場合は 6 台) も定義する必要があります。さらに、各スロット マシンの勝敗を追跡するための配列を作成します。前のレッスンで説明したように、これらの配列はベータ分布の形状パラメーターとして機能します。さらに、結果の再現性を確保するために乱数ジェネレーターのシードを設定します。

次に、スロット マシンごとに 1% ~ 15% のランダムな変換率を生成します。これらのコンバージョン率は、ギャンブラーがその特定のマシンでプレイした場合にどれくらいの頻度で勝つかを表します。現実のシナリオでは、ギャンブラーはこの情報にアクセスできないことに注意してください。変換レートを生成した後、それを画面に印刷して、コンピューターのメモリに保存されている値を観察します。

次のステップでは、プライマリ データセットを作成します。このデータセットは、ターンごとに 1 行、スロット マシンごとに 1 列を含む行列になります。この場合、データセットには 1,000 行と 6 列があり、1,000 ターンと 6 台の可能なスロット マシンを表します。マトリックスの各エントリは、特定のターンで特定のスロット マシンをプレイした結果を示します。「1」は勝ちを示し、「0」は負けを示します。

データセットを生成するには、ネストされた「for」ループを使用します。データセットを生成した後、最初の 15 行を出力して、その構造を把握します。

コード セルを実行すると、勝ちと負けをそれぞれ表す 1 と 0 で満たされた行列が表示されます。各行はターンに対応し、各列はスロット マシンに対応します。たとえば、最初のターンでスロット マシンをプレイすると負けになります。このデータセットを使用すると、特定のターンに特定のスロット マシンをプレイした場合の結果を理解できます。

次に、データセット内の各列の平均を表示します。これらの平均値は、シミュレーションで各スロット マシンに期待できる実際のコンバージョン率を表します。コード セルを実行すると、これらの値が表示されます。乱数ジェネレーターとデータセットのターン数が限られているため、正確ではありませんが、前に定義した理論上の変換率に近いはずです。

ここで、1 ターンに 1 台のマシンのみをプレイするという制約を守りながら、スロット マシンを 1,000 回プレイするシミュレーションを行ってみましょう。

ネストされた「for」ループを使用し、外側のループが各ターンを反復し、内側のループが各スロット マシンを反復して、シミュレーションを実行します。各ターンの開始時に、「max_beta」変数を -1 に設定します。この変数は、現在のターンで観察された最大のベータ値を追跡するのに役立ちます。

各スロット マシンについて、マシンのベータ分布からランダムな値が抽出されます。分布の形状は、その特定のマシンをプレイして蓄積された勝ち数と負け数によって決まります。現在のスロット マシンのベータ値を、現在のラウンドでこれまでに観察された最大のベータ値と比較します。それが大きい場合は、「index_of_machine_to_play」変数を現在のスロット マシンのインデックスで更新します。

6 台すべてのスロット マシンのベータ値を調べた後、「index_of_machine_to_play」変数には、現在のターンで最も高いベータ値を持つマシンのインデックスが格納されます。次に、データセット内の結果を検索し、「number_of_positive_rewards」または「number_of_negative_rewards」配列の対応する要素をインクリメントすることによって勝ったか負けたかを記録することで、選択したスロット マシンをプレイします。

このプロセスは、1,000 ラウンドすべてが完了するまで続きます。私たちの AI システムは各ラウンドで環境から継続的に学習し、蓄積された知識を利用して探索と活用のどちらを行うかを決定します。 1,000 ラウンドがすべて終了したら、AI エージェントが各スロット マシンをプレイした合計回数を計算し、結果を画面に出力します。

コードセルを実行すると、各スロットマシンがプレイされた回数が表示されます。ご覧のとおり、強化学習ベースの AI システムは、スロット マシン 4 が最も勝つ確率が高いものとして識別することに成功しました。累積報酬を最大化するために、1,000 ターン中 695 ターンでそのマシンをプレイすることを選択しました。

最後に、これらの結果を関連するベースラインと比較することが重要です。この場合、素朴なアプローチは、各ラウンドでプレイするスロット マシンをランダムに選択することです。最後のコード セルは、各ターンでプレイするスロット マシンをランダムに選択した場合の勝ち数を計算することにより、このランダム サンプリング アプローチを示しています。

コード セルを実行すると、トンプソン サンプリング アプローチとランダム サンプリング アプローチの比較が明らかになります。ご覧のとおり、トンプソン サンプリング アプローチは、単純なランダム サンプリング アプローチと比較して、大幅に多くの勝利をもたらしました。したがって、ギャンブラーはトンプソン サンプリングを利用するのが賢明です。

このレッスンでは、このシリーズでこれまでに得た知識を適用して、現実世界の意思決定問題を解決しました。具体的には、トンプソン サンプリングを使用して実際の多腕バンディット問題に対処する、完全な強化学習ベースの人工知能システムを Python で構築することに成功しました。

このシリーズのこの段階では、意思決定をサポートする AI ツールの有用性について理解を深めていただければ幸いです。また、現実世界の他の問題を解決するために、これらのテクノロジーを賢く革新的に応用することを思い描いているかもしれません。

このシリーズの次のビデオでは、複雑な広告キャンペーンに適用されるトンプソン サンプリング ベースの強化学習のより洗練されたバージョンを検討します。ぜひそのビデオにも参加してください。

これで、トンプソン サンプリングと有名なマルチアーム バンディット問題に関連した強化学習に関するレッスンのパート 2 が終わりました。このレッスンが面白かったと思っていただければ幸いです。次回まで、楽しい一日をお過ごしください。

Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 02
Reinforcement Learning: Thompson Sampling & The Multi Armed Bandit Problem - Part 02
  • 2020.04.11
  • www.youtube.com
Dr. Soper provides a complete demonstration of how to implement a reinforcement learning-based AI system in Python that uses Thompson Sampling to solve the c...
 

利益を最大化する Python の強化学習ベースの AI システム



利益を最大化する Python の強化学習ベースの AI システム

みなさん、良い一日を!ソーパー博士が話しています。今日は、複数のオプションと数百万の顧客が関与する複雑なシナリオにおいて、強化学習ベースの AI システムがどのようにして企業利益を効果的に最大化できるかを示す Python の包括的な例を詳しく掘り下げていきます。

このビデオで紹介されているテクニックは、このシリーズの以前のレッスンで紹介され、詳しく説明されています。以前のビデオを視聴する機会がなかった場合は、このビデオに進む前に視聴することを強くお勧めします。

Python でのコーディングに入る前に、このビデオで Thompson サンプリング強化学習に基づく AI システムを使用して解決しようとしているビジネス上の問題について説明します。

あなたが 1,000 万人の顧客を誇る無線会社で働いていると想像してください。同社はスマートフォンのアップグレードプログラムを開始することで収益を拡大することを決定した。顧客にスマートフォンのアップグレードを促すために、同社のマーケティング チームは 8 つの異なる広告キャンペーンを考案しました。各キャンペーンでは、顧客に特定の機能、プロモーション、または割引を提供します。ただし、関連する機能、プロモーション、割引によって会社にかかるコストが異なるため、各キャンペーンからの平均利益は異なります。同社は各広告キャンペーンの販売あたりのコストと利益を計算することはできるが、各キャンペーンがどれほど効果的であるかは依然として不透明である。特定のキャンペーンは非常に効果的であることがわかりますが、他のキャンペーンでは大きな成果が得られない場合もあります。

私たちの目標は、スマートフォンのアップグレードプログラムで企業の利益を最大化できるAIシステムを構築することです。私たちの目的は、単にプログラムに参加する顧客の数を最大化することではないことに注意することが重要です。代わりに、当社は利益を最適化することを目指しています。利益は、各広告キャンペーンに接触する顧客の数だけでなく、売上を生み出す各キャンペーンの有効性や売上ごとの平均利益にも依存します。ビジネス上の問題を明確に理解したら、Python に切り替えて実装を開始しましょう。

このノートブックのコードを説明する前に、ビデオの説明にこのノートブックへのリンクがあることをお知らせします。ノートブックのコピーを自由にダウンロードして、試したり、特定の要件に合わせたりしてください。いつものように、必要な Python ライブラリをインポートすることから始めます。このプロジェクトには 2 つのライブラリが必要です。さまざまな確率分布からランダムな値を生成するために使用する NumPy と、通貨値を適切にフォーマットするために使用する locale です。私たちの目的は利益を最大化することなので、このプロジェクトでは金銭的な価値を広範囲に扱います。現在のロケールを米国に設定すると、Python は通貨値を米ドルにフォーマットし、大きな数値を区切るためにカンマを使用します。別の通貨形式を希望する場合は、それに応じてロケールを自由に変更してください。

コードの次の行では、乱数ジェネレーターのシードを設定します。これにより、ノートブックをダウンロードして実行することを選択した場合、このビデオで観察された正確な結果を再現できることが保証されます。

次のタスクには、さまざまな広告キャンペーンに関する情報を保存するクラスの定義が含まれます。このクラスを利用して、各広告キャンペーンを表すオブジェクトを作成します。オブジェクトは、それぞれのキャンペーンの属性や特性を保持します。この方法でキャンペーン オブジェクトを使用すると、キャンペーンに関連するすべての詳細を残りのプログラム ロジックから分離できるため、AI がどのように学習して意思決定を行うかについての理解が大幅に高まります。

ご覧のとおり、各キャンペーン オブジェクトは一意のキャンペーン ID を指定することによって初期化されます。その後、__init__ 関数は、NumPy を使用して一様な確率分布からランダムな値を抽出し、1% ~ 20% のランダムなコンバージョン率をキャンペーンに割り当てます。コンバージョン率は、特定の広告キャンペーンを見た場合にスマートフォンのアップグレードを選択する顧客の割合を示します。ワイヤレス会社がこの情報についての知識が不足していることは注目に値します。また、NumPy を使用して、各キャンペーンの成功した販売ごとに 100 ドルから 200 ドルの範囲のランダムな利益を割り当てます。これらの利益値はランダムに割り当てられますが、各広告キャンペーンに対して無線会社が提供する特定の値を使用することも同様に可能です。最後に、このクラスには、キャンペーンの成功した販売ごとの利益を返すメソッド get_profit() が含まれています。

Campaign クラスのコードは次のとおりです。

import numpy as np

class Campaign:
    def __init__( self , campaign_id):
         self .campaign_id = campaign_id
         self .conversion_rate = np.random.uniform( 0.01 , 0.20 )
         self .profit_per_sale = np.random.uniform( 100 , 200 )
    
    def get_profit( self ):
         return self .profit_per_sale

Campaign クラスを定義したので、トンプソン サンプリングに基づいた強化学習アルゴリズムの実装に進むことができます。アルゴリズムをカプセル化する ThompsonSampling というクラスを作成します。

ThompsonSampling クラスには次の属性とメソッドがあります。 num_campaigns: 広告キャンペーンの数。

  • キャンペーン: 利用可能な広告キャンペーンを表す Campaign オブジェクトのリスト。
  • total_sales: 各キャンペーンの合計販売数を追跡するリスト。
  • total_profits: 各キャンペーンの合計利益を追跡するリスト。
  • num_trials: Thompson サンプリング アルゴリズムの試行または反復の合計数。
  • Trial_results: 各トライアルの結果、つまり選択されたキャンペーンとその結果得られる利益を保存するリスト。

ThompsonSampling クラスのメソッドは次のとおりです。

  • Initialize_campaigns(): 指定されたキャンペーン数で Campaign オブジェクトのリストを初期化します。
  • select_campaign(): トンプソン サンプリング アルゴリズムを実装して、各トライアルのキャンペーンを選択します。
  • update_statistics(): 選択したキャンペーンとその結果得られる利益に基づいて、合計売上と利益を更新します。
  • run_trials(): 指定された数のトライアルを実行し、結果を記録します。

ThompsonSampling クラスのコードは次のとおりです。

 class ThompsonSampling:
    def __init__( self , num_campaigns, num_trials):
         self .num_campaigns = num_campaigns
         self .campaigns = []
         self .total_sales = [ 0 ] * num_campaigns
         self .total_profits = [ 0 ] * num_campaigns
         self .num_trials = num_trials
         self .trial_results = []
    
    def initialize_campaigns( self ):
         for i in range( self .num_campaigns):
             self .campaigns.append(Campaign(i))
    
    def select_campaign( self ):
        samples = []
         for campaign in self .campaigns:
            profit = campaign.get_profit()
            sample = np.random.normal(profit, 1.0 / campaign.conversion_rate)
            samples.append(sample)
        selected_campaign = np.argmax(samples)
         return selected_campaign
    
    def update_statistics( self , trial, selected_campaign, profit):
         self .total_sales[selected_campaign] += 1
         self .total_profits[selected_campaign] += profit
         self .trial_results.append((trial, selected_campaign, profit))
    
    def run_trials( self ):
         for trial in range( self .num_trials):
            selected_campaign = self .select_campaign()
            profit = self .campaigns[selected_campaign].get_profit()
             self .update_statistics(trial, selected_campaign, profit)

ThompsonSampling クラスを実装したので、クラスのインスタンスの作成とアルゴリズムの実行に進むことができます。この例では、キャンペーンの数を 8 に、トライアルの数を 1000 に設定します。トライアルを実行した後、各キャンペーンの売上と利益の合計が表示されます。

Thompson サンプリング アルゴリズムを実行するコードは次のとおりです。

num_campaigns = 8
num_trials = 1000

ts = ThompsonSampling(num_campaigns, num_trials)
ts.initialize_campaigns()
ts.run_trials()

for i in range(num_campaigns):
    total_sales = ts.total_sales[i]
    total_profits = ts.total_profits[i]
    print(f "Campaign {i}: Total Sales = {total_sales}, Total Profits = {total_profits}" )
キャンペーンやトライアルの数など、特定の要件に応じてコードを変更できます。さらに、より多くの属性とメソッドを使用して Campaign クラスを拡張し、各キャンペーンに関する追加情報を取得することができます。
A Profit-Maximizing Reinforcement Learning-Based AI System in Python
A Profit-Maximizing Reinforcement Learning-Based AI System in Python
  • 2020.04.15
  • www.youtube.com
Dr. Soper provides a complete example of a profit-maximizing artificial intelligence system in Python that relies on Thompson Sampling-based reinforcement le...
 

Qラーニングの基礎



Qラーニングの基礎

みなさん、良い一日を!私はソーパー博士です。今日は、人工知能の分野における強力な技術である Q ラーニングの基礎を詳しく掘り下げることに興奮しています。この概念に慣れていない場合は、この学習の旅に着手する前に、このシリーズの前のビデオ「強化学習の基礎」を視聴することをお勧めします。

このレッスンでは、Q ラーニングの特性、Q 値、時間差、ベルマン方程式、Q ラーニング プロセス全体など、Q ラーニングの基本的な概念を学びます。このレッスンを終了するまでに、これらの概念をしっかりと理解し、Q 学習に依存する AI モデルを構築するための十分な準備が整っていることになります。それでは、さっそく始めましょう!

まず、Q ラーニングが何を伴うのかについて簡単に説明しましょう。前述したように、Q ラーニングは強化学習の一種であり、AI エージェントが状態と報酬で構成される環境と対話します。エージェントの目的は、基礎となる数学的モデルや確率分布を学習することなく、環境と直接対話することによって最適なポリシーを構築することです。 Q ラーニングには試行錯誤が含まれます。エージェントは、得られた知識に基づいてポリシーを更新しながら、複数のエピソードにわたって異なるアプローチを使用して問題の解決を継続的に試みます。

ここで、Q 学習モデルの特徴を詳しく見てみましょう。 Q 学習は強化学習の一種であるため、すべての強化学習モデルの基本的な特性を共有します。これらの特性には、入出力システム、報酬、環境、マルコフ決定プロセス、トレーニング モードと推論モードの両方が含まれます。これらの特性に加えて、Q 学習モデルには 2 つの特有の属性があります。まず、Q 学習モデルで考えられる状態の数は有限です。つまり、AI エージェントは常に、固定数の考えられる状況の 1 つに陥ることになります。第 2 に、Q 学習モデルで可能なアクションの数も有限であるため、AI エージェントは各状態で可能なアクションの固定セットから選択する必要があります。

特徴を理解したところで、いくつかの古典的な Q ラーニングの問題を検討してみましょう。このような問題の 1 つは迷路です。迷路では、各位置が状態を表し、エージェントのアクションには上下左右の移動が含まれます。目的は、迷路を通り抜けてできるだけ早く出口に到達することです。もう 1 つの典型的な例は、崖歩きの問題です。この問題では、エージェントは崖から落ちずに特定の場所に到達するために、グリッド状の環境をナビゲートする必要があります。どちらのシナリオでも、AI エージェントは Q 値に依存して更新することで環境について学習します。

では、Q値とは何でしょうか? Q 値は、特定の状態 (s) における特定のアクション (a) の品質を表します。これらは、現在の状態からそのアクションが取られた場合に将来の報酬の予想合計を示します。言い換えれば、Q 値は、エージェントが特定のアクションを実行し、そこから最適に進むことによって蓄積できる追加の報酬を推定します。 AI エージェントは、報酬の合計を最大化するか、報酬がマイナスのシナリオでは罰の合計を最小限に抑えることを目指します。 Q 値を更新および調整することで、エージェントは正の強化と負の強化の両方を通じて学習します。

Q 値は Q テーブルに格納されます。Q テーブルには、可能な状態を表す行と、可能なアクションを表す列があります。 Q テーブルはエージェントのポリシーとして機能し、環境内でのアクションをガイドします。最適な Q テーブルには、エージェントが任意の状態で最適なアクションを選択できるようにする値が含まれており、潜在的な報酬が最大につながります。

時間差 (TD) は Q 学習において重要な役割を果たします。 TD は、現在の状態のアクションの Q 値についてエージェントが学習した内容に基づいて、前のアクションの Q 値をどの程度調整する必要があるかを計算する方法を提供します。この調整は、エージェントが後続のエピソードでより適切な意思決定を行うのに役立ちます。 TD 値は、前のアクションで受け取った即時の報酬、将来の報酬を割り引く割引係数 (ガンマ)、および次の状態の最大 Q 値を考慮して計算されます。

TD 誤差はδとして表されることが多く、TD 値と前の状態とアクションのペアの現在の Q 値の差として計算されます。これは、エージェントの予測と環境で観察された実際の報酬との間の差異を表します。 TD エラーは、前の状態とアクションのペアの Q 値を更新するために使用され、それによって時間の経過とともに Q 値が徐々に改良されます。

ここで、Q ラーニングの中心となるベルマン方程式を紹介しましょう。ベルマン方程式は、状態とアクションのペアの Q 値と、それに隣接する状態とアクションのペアの Q 値の間の関係を表します。次のように定義されます。

Q(s, a) = R(s, a) + γ * max[Q(s', a')]

この式で、Q(s, a) は状態 s とアクション a の Q 値を表し、R(s, a) は状態 s でアクション a を実行したときに得られる即時報酬を表し、γ (ガンマ) は割引係数です。は、当面の報酬と比較した将来の報酬の重要性を決定します。s' は、状態 s でアクション a を実行した後に到達する次の状態であり、a' は、状態 s' で実行する最適なアクションを表します。

ベルマン方程式は基本的に、状態とアクションのペアの Q 値は、得られる即時の報酬に次の状態とアクションのペアの割引最大 Q 値を加えたものに等しくなるべきであると述べています。ベルマン方程式を繰り返し適用し、観察された報酬と将来の推定に基づいて Q 値を更新することにより、エージェントは最適なポリシーに向かって徐々に収束します。

それでは、全体的な Q 学習プロセスに移りましょう。 Q ラーニングは、次の手順で構成される反復アプローチに従います。

  1. Q テーブルを任意の値またはゼロで初期化します。
  2. 現在の状態を観察します。
  3. 新しいアクションの探索と学習した知識の活用のバランスをとる、epsilon-greedy などの探索活用戦略に基づいてアクションを選択します。
  4. 選択したアクションを実行し、即座の報酬と次の状態を観察します。
  5. ベルマン方程式と観測された報酬を使用して、前の状態とアクションのペアの Q 値を更新します。
  6. 現在の状態を次の状態に設定します。
  7. エージェントが終末状態に達するか、または事前に定義されたエピソード数に達するまで、ステップ 3 ~ 6 を繰り返します。
  8. 複数のエピソードに対してステップ 2 ~ 7 を繰り返して、Q 値を調整し、エージェントのポリシーを改善します。

この反復プロセスを通じて Q 値が更新され、徐々に最適値に収束し、ポリシーの改善につながります。探索・活用戦略により、エージェントは、より良い戦略を発見するために新しいアクションを探索することと、学習した知識を活用して現在の最善のアクションに基づいて意思決定を行うことの間のバランスをとることができます。

Q ラーニングはオフポリシー学習アルゴリズムであることに言及する価値があります。これは、エージェントが別のポリシーによって生成されたエクスペリエンスから学習できることを意味します。この特性により、学習がより効率的になり、さまざまな戦略を検討する際の柔軟性が向上します。

要約すると、Q ラーニングは強化学習の分野における強力な手法です。これには、環境の数学的モデルを必要とせずに、試行錯誤を通じて最適なポリシーを学習することが含まれます。 Q 値を使用して将来の報酬の予想合計を推定し、時間差とベルマン方程式を通じてそれらを更新し、反復学習プロセスに従うことにより、エージェントは徐々にポリシーを改善し、特定のタスクでより良いパフォーマンスを達成します。

このレッスンで Q ラーニングの基礎をしっかりと理解していただければ幸いです。次のレッスンでは、実装の詳細をさらに深く掘り下げ、Q ラーニングの実際の例を検討します。ご清聴ありがとうございました。次のビデオでお会いできるのを楽しみにしています。

Foundations of Q-Learning
Foundations of Q-Learning
  • 2020.04.22
  • www.youtube.com
Dr. Soper discusses the foundations of Q-learning, which is one of the major types of reinforcement learning within the broader realm of artificial intellige...
 

Q-Learning: Python の完全な例


Q-Learning: Python の完全な例

私は Soper 博士です。今日は、Q ラーニングを使用した Python ベースの AI システムの詳細なウォークスルーを紹介できることを嬉しく思います。このレッスンは、前のビデオで説明した概念に基づいて構築されているため、Q ラーニングに慣れていない場合は、このビデオに進む前に前のビデオを視聴することを強くお勧めします。

このレッスンでは、成長する電子商取引企業が直面するビジネス上の問題に取り組みます。同社は新しい倉庫を建設中で、倉庫ロボットを使用してピッキング作業を自動化したいと考えています。倉庫ロボットは、ピッキングなどのさまざまな倉庫作業を処理するように設計された自律型地上車両です。

ピッキングとは、顧客の注文を満たすために倉庫内のさまざまな場所から個々の商品を収集するプロセスを指します。電子商取引会社は、商品が棚からピッキングされると、出荷のためにロボットが商品を倉庫内の特定の梱包エリアに輸送することを望んでいます。

最大限の効率と生産性を確保するために、ロボットは、梱包エリアと、ロボットが移動できる倉庫内の他のすべての場所との間の最短経路を学習する必要があります。このビデオでは、Q ラーニングを使用してこのタスクを達成することが目標です。

まず、倉庫ロボットのシナリオの環境を紹介します。倉庫は図で表すことができます。黒い四角は品目の保管場所 (棚または保管箱) を表し、白い四角はロボットがナビゲーションに使用できる通路を表します。緑色の四角は商品の梱包エリアの位置を示します。

倉庫内には合計 121 の場所があり、各場所はロボットが特定の時点で置かれる可能性のある状態または状況を表します。各状態は行と列のインデックスによって識別できます。たとえば、アイテムの梱包領域は位置 (0, 5) にあります。黒と緑の四角は終末状態であり、AI エージェントがトレーニング中にロボットをこれらの領域のいずれかに移動させると、トレーニング エピソードが終了することを意味します。緑の四角は目標状態を表し、ロボットをアイテム保管領域に衝突させると失敗とみなされ、黒の四角は失敗状態を表します。

次に、AI エージェントが利用できるアクションについて説明します。 AI エージェントは、上、右、下、左の 4 つの方向のいずれかを選択できます。エージェントの目標は、ロボットがアイテム保管エリアに衝突するのを防ぐアクションを学習することです。

次に、シナリオの報酬構造を見てみましょう。倉庫内の各状態 (場所) には報酬値が割り当てられます。 AI エージェントの学習を支援するために、目標状態を除くすべての状態に負の報酬 (罰) が使用されます。パッケージング領域 (目標状態) には 100 の報酬値が割り当てられますが、他のすべての状態の報酬値は -100 です。ネガティブな報酬を使用すると、AI エージェントは罰を最小限に抑えて目標への最短経路を見つけることができます。エージェントの目標は累積報酬を最大化することであるため、白い四角のプラスの報酬は使用されません。白い四角のプラスの報酬を使用すると、エージェントが目標を達成せずに目的もなく報酬を蓄積する可能性があります。

状態、アクション、報酬を含む環境を定義したので、Python に切り替えて、コードの実装を詳しく見てみましょう。

まず、必要な Python ライブラリをインポートします。このプロジェクトでは、多次元配列の作成、ランダム値の生成、数値タスクの実行に使用される numpy ライブラリのみが必要です。

次のステップでは、状態から始めて環境を定義します。倉庫は 11x11 のグリッドとして表され、121 の可能な状態が得られます。 3 次元の numpy 配列を使用して、状態とアクションの各組み合わせの Q 値を保存します。最初の 2 つの次元は状態の行と列を表し、3 番目の次元には AI エージェントが実行できるアクションごとに 1 つの要素が含まれます。

次に、エージェントが使用できる 4 つのアクション (上、右、下、左) を定義します。

コードの実装を続けましょう。

import numpy as np

# Define the environment
num_rows = 11
num_cols = 11
num_actions = 4

# Create the Q- table
Q = np.zeros((num_rows, num_cols, num_actions))
環境と Q テーブルを定義したので、Q 学習アルゴリズムの実装に進むことができます。 Q 学習アルゴリズムは次のステップで構成されます。

  1. Q テーブルをゼロで初期化します。
  2. ハイパーパラメータ: 学習率 (アルファ)、割引係数 (ガンマ)、探索率 (イプシロン)、エピソード数 (num_episodes) を設定します。
  3. 各エピソードについて:
    • 初期状態(current_state)を設定します。
    • 現在の状態が最終状態に達するまで繰り返します。
      • epsilon-greedy ポリシーに基づいてアクション (current_action) を選択します。
      • 選択したアクションを実行し、次の状態 (next_state) と報酬 (reward) を観察します。
      • Q 学習公式を使用して、現在の状態とアクションのペアの Q 値を更新します。
      • 現在の状態 (current_state) を次の状態 (next_state) に更新します。

倉庫ロボット シナリオの Q 学習アルゴリズムを実装するコードは次のとおりです。

# Set the hyperparameters
alpha = 0.1     # Learning rate
gamma = 0.9     # Discount factor
epsilon = 0.1   # Exploration rate
num_episodes = 1000

# Q-learning algorithm
for episode in range(num_episodes):
    # Set the initial state
    current_state = ( 0 , 0 )
    
    # Repeat until the current state reaches a terminal state
    while current_state != ( 0 , 5 ):
        # Select an action based on the epsilon-greedy policy
        if np.random.uniform() < epsilon:
            current_action = np.random.randint(num_actions)
         else :
            current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
        
        # Perform the selected action and observe the next state and the reward
        if current_action == 0 :  # Up
            next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
        elif current_action == 1 :  # Right
            next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
        elif current_action == 2 :  # Down
            next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
         else :  # Left
            next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
        
        reward = - 1   # Default reward for non-terminal states
        
        # Update the Q- value of the current state- action pair
        Q[current_state[ 0 ], current_state[ 1 ], current_action] = ( 1 - alpha) * Q[current_state[ 0 ], current_state[ 1 ], current_action] + alpha * (reward + gamma * np. max (Q[next_state[ 0 ], next_state[ 1 ], :]))
        
        # Update the current state to the next state
        current_state = next_state
Q 学習アルゴリズムを実行すると、Q テーブルには各状態とアクションのペアの学習された Q 値が含まれ、特定の状態で特定のアクションを取ることで期待される累積報酬を表します。

学習したポリシーをテストするには、Q テーブルを使用して、各状態の最高の Q 値に基づいてアクションを選択します。

 # Use the learned Q-table to select actions
current_state = ( 0 , 0 )
path = [current_state]

while current_state != ( 0 , 5 ):
    current_action = np.argmax(Q[current_state[ 0 ], current_state[ 1 ], :])
    
     if current_action == 0 :   # Up
        next_state = (current_state[ 0 ] - 1 , current_state[ 1 ])
    elif current_action == 1 :   # Right
        next_state = (current_state[ 0 ], current_state[ 1 ] + 1 )
    elif current_action == 2 :   # Down
        next_state = (current_state[ 0 ] + 1 , current_state[ 1 ])
     else :   # Left
        next_state = (current_state[ 0 ], current_state[ 1 ] - 1 )
    
    current_state = next_state
    path.append(current_state)

print( "Optimal path:" )
for state in path:
    print(state)
このコードは、学習された Q 値に基づいて、開始状態 (0, 0) から目標状態 (0, 5) までの最適なパスを出力します。
Q-Learning: A Complete Example in Python
Q-Learning: A Complete Example in Python
  • 2020.04.24
  • www.youtube.com
Dr. Soper presents a complete walkthrough (tutorial) of a Q-learning-based AI system written in Python. The video demonstrates how to define the environment'...
 

人工ニューラル ネットワークとディープ Q ラーニングの基礎


人工ニューラル ネットワークとディープ Q ラーニングの基礎

私はソーパー博士です。今日は人工ニューラル ネットワークとディープ Q ラーニングの基礎について皆さんとディスカッションできることを光栄に思います。

Q ラーニングに詳しくない場合は、これらのトピックの複雑さを掘り下げる前に、このシリーズの前のビデオ「Q ラーニングの基礎」を視聴することをお勧めします。

このレッスンで学ぶ内容を簡単に要約することから始めましょう。

このビデオを終えると、次の内容を包括的に理解できるようになります。

  1. 人工ニューロンとは何か。
  2. 活性化関数の概念。
  3. ニューラルネットワークがどのように動作するか。
  4. ニューラル ネットワークの学習プロセス。
  5. ディープ Q ラーニングの基礎とその機能。

これらの概念を理解すると、人工ニューラル ネットワークとディープ Q ラーニングに依存する AI モデルを構築するための準備が整います。

さっそく始めましょう!

人工ニューラル ネットワークとその内部動作を理解するには、まず人工ニューロンと活性化関数を理解する必要があります。

では、人工ニューロンとは一体何なのでしょうか?

人工ニューロンは、すべての人工ニューラル ネットワークが構築される基本的な構成要素として機能します。これらは、人間の脳を含む動物の脳の基礎を形成する生物学的ニューロンの数学的モデルとして、1943 年にウォーレン・マカロックとウォルター・ピッツによって最初に提案されました。

これらの生物学的ニューロンに触発されて、人工ニューロン モデルが登場しました。

図に示されているように、人工ニューロンの目的は、1 つ以上の入力値を出力値に変換することです。各入力値には重みが乗算され、入力の強度が調整されます。たとえば、入力値が 0.8 で重みが 0.5 の場合、乗算の結果は 0.4 になります。このシナリオでは、重量により入力の強度が減少します。逆に、重みが 1 より大きい場合、入力の強さは増幅されます。

重み付けされた入力値が計算されると、活性化関数が実行され、人工ニューロンの出力値が生成されます。エラーを最小限に抑えるためにトレーニング中に重みを調整できることは注目に値します。このアイデアについては、すぐに再検討します。

それでは、活性化関数について詳しく見ていきましょう。

活性化関数は、重み付けされた入力値を出力値に変換するために人工ニューロンによって使用される数学関数です。式に示されているように、アクティベーション関数は、各入力値に関連する重みを乗算することで得られる単一の入力値を受け取り、これらの結果をすべて合計します。次に、合計値が活性化関数に渡されて、人工ニューロンの出力値が取得されます。

人工ニューロンではさまざまな活性化関数を使用でき、入力値を出力値に変換する際にそれぞれ異なる動作をすることに注意することが重要です。

4 つの一般的なアクティベーション関数を見てみましょう。

  1. しきい値アクティブ化関数: この関数は出力として 0 または 1 を返します。入力値がゼロ以上の場合は 1 を返し、それ以外の場合は 1 を返します。それ以外の場合は 0 を返します。その結果、閾値活性化関数を使用する人工ニューロンの出力値は常に 0 または 1 になります。

  2. シグモイド アクティベーション関数: シグモイド アクティベーション関数の出力の範囲は 0 ~ 1 です。正の入力値では、入力値が増加すると出力値は 1.0 に近づきますが、負の入力値では入力値が減少すると出力値は 0.0 に近づきます。したがって、シグモイド活性化関数は常に 0 と 1 の間の出力を生成します。

  3. ハイパボリック タンジェント アクティベーション関数: ハイパボリック タンジェント関数は、出力値が常に -1.0 と +1.0 の間に収まることを除いて、シグモイド アクティベーション関数によく似ています。正の入力値は、入力値が増加すると +1.0 に近づく出力値を生成し、負の入力値は、入力値が減少すると -1.0 に近づく出力値を生成します。

  4. Rectified Linear Unit (ReLU) アクティベーション関数: ReLU アクティベーション関数は、入力値が正の場合は入力値そのものを返し、入力値が負の場合は 0 を返します。言い換えれば、ReLU はすべての負の値を 0 に設定し、正の値は変更しないままにします。

これらは、人工ニューラル ネットワークで使用される活性化関数のほんの数例です。活性化関数の選択は、特定の問題とニューラル ネットワークの望ましい動作によって異なります。人工ニューロンと活性化関数について説明したので、ニューラル ネットワークがどのように動作するかを理解しましょう。

ニューラル ネットワークは、相互接続された人工ニューロンの複数の層で構成され、複雑なネットワーク構造を形成しています。ニューラル ネットワークの 3 つの主要な層は、入力層、隠れ層、出力層です。入力層は、画像、テキスト、数値などの入力データを受け取り、それを後続の層に渡して処理する役割を果たします。入力層内のニューロンの数は、データ内の入力フィーチャまたは次元の数に対応します。隠れ層は、その名前が示すように、入力層と出力層の間の中間層です。これらの層は、ニューラル ネットワーク内の計算の大部分を実行します。隠れ層の各ニューロンは、前の層から入力を受け取り、活性化関数を使用して出力を計算します。

出力層はニューラル ネットワークの最終出力を生成します。出力層のニューロンの数は、問題の性質によって異なります。たとえば、バイナリ分類問題では、通常、出力層に 1 つのニューロンがあり、1 つのクラスに属する確率を表します。学習を可能にし、ニューラル ネットワークのパフォーマンスを向上させるために、トレーニング フェーズ中にニューロン間の接続の重みが調整されます。この調整は、バックプロパゲーションと呼ばれるプロセスを確率的勾配降下法などの最適化アルゴリズムと組み合わせて使用して実現されます。トレーニング中に、ニューラル ネットワークには、対応するターゲット出力とともに一連の入力データが与えられます。ネットワークは入力ごとに出力を計算し、計算された出力とターゲット出力の差が損失関数を使用して測定されます。

トレーニングの目標は、接続の重みを調整することでこの損失を最小限に抑えることです。バックプロパゲーション アルゴリズムは、重みに対する損失関数の勾配を計算し、損失を低減する方向に重みを更新できるようにします。この反復プロセスは、ニューラル ネットワークが指定された入力に対して正確な出力を生成することを学習するまで続きます。人工ニューラル ネットワークについてしっかりと理解したところで、ディープ Q ラーニングの基礎を探ってみましょう。

ディープ Q ラーニングは、マルコフ決定プロセス (MDP) または強化学習環境で最適なアクションを学習するための関数近似器としてディープ ニューラル ネットワークを利用する強化学習手法です。ディープ Q ラーニングのコンテキストでは、Q ネットワークと呼ばれることが多いニューラル ネットワークは、環境の状態を入力として受け取り、可能なアクションごとに Q 値を生成します。 Q 値は、特定の状態から特定のアクションを実行したときに予想される将来の報酬を表します。トレーニング中、Q ネットワークは、強化学習とニューラル ネットワークの要素を組み合わせた Q 学習アルゴリズムを使用して更新されます。 Q 学習アルゴリズムは、探索と活用を組み合わせて使用し、Q ネットワークの最適な Q 値の推定値を徐々に改善します。

ディープ Q ラーニング アルゴリズムの基本ステップは次のとおりです。

  1. ランダムな重みを使用して Q ネットワークを初期化します。
  2. 現在の環境の状態を観察します。
  3. 新しいアクションの探索と現在の知識の活用とのバランスが取れている、epsilon-greedy などの探索-活用戦略を使用してアクションを選択します。
  4. 選択したアクションを実行し、報酬と新しい状態を観察します。
  5. Q 学習更新ルールを使用して Q ネットワークの重みを更新します。このルールは、観察された報酬と新しい状態の最大 Q 値に基づいて、選択したアクションの Q 値を調整します。
  6. 学習プロセスが収束するか、事前に定義された反復回数に達するまで、ステップ 2 ~ 5 を繰り返します。

Q 学習アルゴリズムを使用して Q ネットワークを繰り返し更新することにより、ネットワークは各状態とアクションのペアの最適な Q 値を推定する方法を徐々に学習します。トレーニングが完了すると、Q ネットワークを使用して、特定の状態に対して最高の Q 値を持つアクションを選択できるようになり、エージェントが強化学習環境で情報に基づいた意思決定を行えるようになります。ディープ Q ラーニングは、特にゲームプレイ、ロボット工学、自動運転車制御など、さまざまな領域に適用されて成功しています。高次元の感覚入力から複雑なタスクを学習する際に顕著なパフォーマンスを示しています。ただし、ディープ Q ラーニングには、Q 値の過大評価の可能性や連続アクション空間の処理の難しさなど、特定の制限があることに注意することが重要です。研究者たちは、これらの課題に対処し、深層強化学習の機能を向上させるために、高度な技術とアルゴリズムを探索し続けています。

ディープ Q ラーニングは、強化学習とディープ ニューラル ネットワークを組み合わせて、特定の環境で最適なアクションを学習する強力な技術です。ディープ ニューラル ネットワークの機能を活用して複雑な関数を近似することにより、ディープ Q ラーニングは人工知能のさまざまな分野で大幅な進歩を実証しました。

Foundations of Artificial Neural Networks & Deep Q-Learning
Foundations of Artificial Neural Networks & Deep Q-Learning
  • 2020.04.30
  • www.youtube.com
Dr. Soper discusses the foundations of artificial neural networks and deep Q-learning. Topics addressed in the video include artificial neurons, activation f...
 

畳み込みニューラル ネットワークと深層畳み込み Q ラーニング



畳み込みニューラル ネットワークと深層畳み込み Q ラーニング

みなさん、良い一日を!ソーパー博士です。今日は畳み込みニューラル ネットワーク (CNN) と深層畳み込み Q 学習について説明します。人工ニューラル ネットワークや Q ラーニングに詳しくない場合は、このシリーズに進む前に、このシリーズの前半の「人工ニューラル ネットワークとディープ Q ラーニングの基礎」というタイトルのビデオを視聴することをお勧めします。

畳み込みニューラル ネットワークとディープ畳み込み Q ラーニングのトピックを掘り下げる前に、このレッスンで学習できる内容を簡単に確認してみましょう。このビデオを最後まで見ると、畳み込みニューラル ネットワークとは何か、そしてそれがどのように機能するのかをしっかりと理解できるようになります。特徴マップ、畳み込み、最大プーリング、フラット化、予測を生成するための完全接続レイヤーへの接続などの重要な概念について説明します。さらに、深層畳み込み Q 学習がどのように動作するかを調査します。

これらの基本概念を理解すると、優れたタスクを実行できる畳み込みニューラル ネットワークを構築できるようになります。これらのタスクには、画像やビデオ内のオブジェクト認識、さらには人間の能力を超えたレベルでのビデオ ゲームのプレイが含まれます。

それでは、始めましょう。まず、畳み込みニューラル ネットワークとは何か、そしてなぜそれが役立つのかを直感的に理解しましょう。簡単に言えば、畳み込みニューラル ネットワーク (CNN) は、空間構造を持つデータ用に設計された人工ニューラル ネットワークの一種です。空間構造を持つデータには、画像、ビデオ、さらにはテキストも含まれます (ただし、CNN は主にコンピューター ビジョン タスクに使用されます)。このビデオでは、画像ベースの入力に焦点を当てます。

画像などの空間構造を持つデータには、特定の方法で配置されたピクセルが含まれます。各ピクセルの位置には意味があり、この配置によって画像内のオブジェクトを識別できるようになります。たとえば、画像内のピクセルをランダムに並べ替えると、それは認識可能なオブジェクトではなく、無意味なノイズの集合になってしまいます。この空間的な配置が「空間構造を持ったデータ」を意味します。

畳み込みニューラル ネットワークは、画像内のピクセルの位置や文内の単語の位置など、入力値間の空間的関係を捕捉するように意図的に設計されています。これらの空間関係を考慮することで、CNN は空間構造を持つデータを効果的に処理および分析できます。

ここで、CNN が高レベルでどのように機能するかについて説明します。大まかに言うと、CNN は入力ケースごとに一連の特徴マップを生成します。つまり、畳み込み層のデータを作成します。次に、プーリングと呼ばれる手法を適用して、各特徴マップを簡素化します。次に、プールされた特徴マップが平坦化され、結果のベクトルが全結合層に接続されます。この接続により、情報がネットワークを通じて伝播し、予測の生成につながります。

詳細をさらに詳しく調べるために、最初のステップ、つまり入力画像にフィルターを適用することから始めましょう。特徴検出器またはカーネルとも呼ばれるフィルターは、画像内の線、曲線、形状などの特定の特徴を検出するように設計されています。これらのフィルターを入力画像に適用することで、特徴マップを生成します。特徴マップのコレクションは畳み込み層を形成します。

このプロセスを説明するために、マトリックスで表されたピクセルで構成される単純な白黒画像を考えてみましょう。次に、垂直線を検出するように設計された 3x3 フィルターなどのフィルターを画像に適用できます。画像上でフィルターをスライドさせることで、フィルターと画像のさまざまなセクションの間の重なりの程度を示す特徴マップを作成できます。

画像に複数のフィルターを適用して、さまざまな特徴を検出できます。各フィルターは独自の特徴マップを生成し、線、曲線、形状などを検出できるようにします。これらの特徴マップは集合的に畳み込み層を形成します。

おめでとう!これで、畳み込みニューラル ネットワークにおける畳み込みのプロセスが理解できました。次に、最大プーリングについて説明します。

最大プーリングは、畳み込み層から取得した特徴マップをダウンサンプリングするために CNN で使用される手法です。その目的は、最も重要な情報を保持しながら、特徴マップの空間次元を削減することです。

最大プーリングの背後にある考え方は、特徴マップを重複しない領域 (プーリング ウィンドウまたはプーリング領域と呼ばれることが多い) に分割することです。各領域では、その領域内の最大値のみが保持され、他の値は破棄されます。この最大値は、プールされた特徴マップに含まれます。

最大値を選択することにより、最大プーリングは入力データの最も顕著な特徴を保存するのに役立ちます。また、ある程度の平行移動不変性も提供します。これは、たとえ特徴の位置がわずかにずれたとしても、それに関連付けられた最大値が依然として捕捉される可能性が高いことを意味します。

このプロセスを説明するために、特徴マップに適用される 2x2 の最大プーリング操作を考えてみましょう。特徴マップを重複しない 2x2 領域に分割し、各領域から最大値を取得して、プールされた特徴マップを形成します。これにより、特徴マップの空間次元が 2 分の 1 にダウンサンプリングされます。

最大プーリングは CNN で複数回実行できるため、空間次元がさらに削減されます。このダウンサンプリングは、ネットワークの計算の複雑さを軽減し、効率を高めるのに役立ちます。

最大プーリング操作が完了したら、次のステップは、プールされた特徴マップを平坦化することです。平坦化には、多次元特徴マップを 1 次元ベクトルに変換することが含まれます。この変換により、データを完全に接続された層 (従来のニューラル ネットワークの標準層) に接続できるようになります。

平坦化されたベクトルは、完全に接続された層への入力として機能し、ネットワークは高レベルの表現を抽出し、それらの表現に基づいて予測を行うことを学習します。完全に接続された層は、グローバル コンテキストを組み込み、畳み込み層によって抽出された特徴に基づいて複雑な決定を行う責任を負います。

CNN の情報の流れを要約すると、次のようになります。

  1. 畳み込み: 入力画像にフィルターを適用して特徴マップを生成します。
  2. 最大プーリング: プーリング領域内の最大値を保持しながら、特徴マップをダウンサンプリングします。
  3. 平坦化: プールされた特徴マップを 1 次元ベクトルに変換します。
  4. 完全接続レイヤー: 平坦化されたベクトルを完全接続レイヤーに接続して、高レベルの特徴抽出と予測生成を行います。

この特徴抽出、ダウンサンプリング、および意思決定のプロセスにより、CNN は入力データの空間関係を効果的にキャプチャし、正確な予測を行うことができます。

畳み込みニューラル ネットワークについて十分に理解したところで、畳み込み Q 学習について詳しく掘り下げてみましょう。

深層畳み込み Q ラーニングは、CNN の能力と強化学習技術、特に Q ラーニングを組み合わせて、複雑なタスクを解決します。 Q ラーニングは強化学習アルゴリズムの一種で、エージェントが環境と対話して報酬を受け取ることによって、その環境における最適なアクションを学習できるようにします。

深層畳み込み Q 学習のコンテキストでは、エージェントは通常、コンピューター プログラムなどの人工エージェントであり、環境はビデオ ゲームのプレイなどの視覚ベースのタスクです。エージェントは、ゲームの現在の状態 (画像として表される) を観察し、各アクションに関連付けられた Q 値に基づいてアクションを実行します。 Q 値は、特定の状態で特定のアクションを実行した場合に期待される将来の報酬を表します。

Q 値を近似するには、ディープ畳み込みニューラル ネットワークが使用されます。 CNN は現在の状態 (画像) を入力として受け取り、可能なアクションごとに Q 値を出力します。その後、Q 値を使用して、ポリシーに従って将来の報酬が最も高いと予想されるアクションを選択します。

エージェントは、アクションを実行し、報酬を受け取り、観察された報酬と予測された Q 値に基づいて Q 値を更新することによって、環境と対話します。環境と対話して Q 値を更新するこのプロセスは、エージェントの意思決定能力を向上させるために反復的に繰り返されます。

ディープ畳み込みニューラル ネットワークと Q ラーニングを組み合わせることで、エージェントは複雑な視覚パターンを学習し、それに基づいて意思決定を行うことができます。このアプローチは、ビデオゲーム、自動運転、ロボット工学など、さまざまな分野で成功しています。

Convolutional Neural Networks & Deep Convolutional Q-Learning
Convolutional Neural Networks & Deep Convolutional Q-Learning
  • 2020.05.12
  • www.youtube.com
Dr. Soper discusses convolutional neural networks and deep convolutional Q-learning. Topics addressed in the video include what convolutional neural networks...