Q Pythonでの学習:それは何ですか、定義[コーディング例]
公開: 2020-03-26強化学習とは、学習エージェントが絶え間ない相互作用を通じて環境に応じて最適に動作することを学習することです。 エージェントはさまざまな状況を経験しますが、これは状態とも呼ばれます。 ご想像のとおり、強化学習は私たちの世界で多くの用途があります。 データサイエンスアルゴリズムについて詳しく知りたい場合は、詳細をご覧ください。
また、多くのアルゴリズムがあり、最も人気のあるものの中にQ学習があります。 この記事では、このアルゴリズムとは何か、そしてそれがどのように機能するかについて説明します。
それで、それ以上の苦労なしに、始めましょう。
目次
Qラーニングとは何ですか?
Q学習は強化学習アルゴリズムであり、特定の状況に最適な行動方針を見つけることに重点を置いています。 Q学習関数が学習するアクションは既存のポリシーの範囲外であるため、ポリシーから外れているため、ポリシーは必要ありません。 それは、その総報酬を増やす方針を学ぶことに焦点を合わせています。 これは、アクション値(またはQ値)を使用して学習エージェントの動作を強化する強化学習の単純な形式です。
Q学習は、理解と実装が簡単なため、強化学習で最も人気のあるアルゴリズムの1つです。 Q学習の「Q」は品質を表します。 先に述べたように、Q学習は特定の状況に最適なアクションを見つけることに焦点を当てています。 そして、品質は、特定のアクションがどれほど有用であり、それが到達するのにどのような報酬を与えることができるかを示しています。
重要な定義
それがどのように機能するかを説明する前に、まずq学習のいくつかの重要な概念を確認する必要があります。 始めましょう。
Q値
Q値は、アクション値とも呼ばれます。 これらはQ(S、A)で表され、状態SでアクションAが実行するのにどれだけ優れているかを推定します。モデルは、後で説明する時間差更新ルールを使用して、この推定を繰り返し計算します。このセクションで。
エピソードと報酬
エージェントは、開始状態から開始し、いくつかの遷移を経て、アクションと環境に応じて現在の状態から次の状態に移行します。 エージェントが行動を起こすときはいつでも、それはいくらかの報酬を受け取ります。 そして、可能な遷移がない場合、それはエピソードの完了です。
TD-更新(時間差)
TD-UpdateまたはTemporalDifferenceルールは次のとおりです。
Q(S、A) Q(S、A)+ (R + Q(S'、A')-Q(S、A))
ここで、Sはエージェントの現在の状態を表し、S'は次の状態を表します。 Aは現在のアクションを表し、A'はQ値の推定による次の最良のアクションを表し、Rは現在のアクションによる現在の報酬を示し、割引係数を表し、ステップ長を示します。
また読む:データサイエンスの前提条件。 時間の経過とともにどのように変化しますか?
Q学習Pythonの例
QラーニングPythonを理解する最良の方法は、例を見ることです。 この例では、OpenAIのジム環境を使用して、モデルをトレーニングしています。 まず、環境をインストールする必要があります。 次のコマンドでこれを行うことができます。
ピップインストールジム
次に、この例に必要なライブラリをインポートします。
インポートジム
itertoolsをインポートする
matplotlibをインポートする
matplotlib.styleをインポートします
numpyをnpとしてインポートします
パンダをpdとしてインポートします
sysをインポート
コレクションからimportdefaultdict
windy_gridworldからインポートWindyGridworldEnv
インポートプロット
matplotlib.style.use('ggplot')
必要なライブラリがないと、これらの操作を正常に実行できません。 ライブラリをインポートしたら、次の環境を作成します。
env = WindyGridworldEnv()
次に、 -greedyポリシーを作成します。
def createEpsilonGreedyPolicy(Q、epsilon、num_actions):
「」
イプシロン欲張りポリシーベースを作成します
与えられたQ関数とイプシロンについて。
状態を取得する関数を返します
入力として、確率を返します
numpy配列の形式でアクションごとに
アクションスペースの長さ(可能な応答のセット)。
「」
def policyFunction(state):
Action_probabilities = np.ones(num_actions、
dtype = float)*イプシロン/ num_actions
best_action = np.argmax(Q [state])
Action_probabilities [best_action] + =(1.0 –イプシロン)
Action_probabilitiesを返します

policyFunctionを返します
q学習モデルを構築するためのコードは次のとおりです。
def qLearning(env、num_episodes、discount_factor = 1.0、
アルファ=0.6、イプシロン= 0.1):
「」
Q学習アルゴリズム:ポリシー外のTD制御。
改善しながら最適な欲張りポリシーを見つけます
イプシロン欲張りポリシーに従う”””
#アクション値関数
#マップするネストされた辞書
#状態->(アクション->アクション値)。
Q = defaultdict(lambda:np.zeros(env.action_space.n))
#有用な統計を追跡します
stats = plotting.EpisodeStats(
Episode_lengths = np.zeros(num_episodes)、
Episode_rewards = np.zeros(num_episodes))
#イプシロン欲張りポリシー関数を作成する
#環境アクションスペースに適切
policy = createEpsilonGreedyPolicy(Q、epsilon、env.action_space.n)
#すべてのエピソードについて
range(num_episodes)のith_episodeの場合:
#環境をリセットし、最初のアクションを選択します
状態=env.reset()
itertools.count()のtの場合:
#現在の状態からすべてのアクションの確率を取得します
action_probabilities = policy(state)
#に従ってアクションを選択します
#確率分布
アクション=np.random.choice(np.arange(
len(action_probabilities))、
p = action_probabilities)
#行動を起こし、報酬を受け取り、次の州に移行する
next_state、reward、done、_ = env.step(action)
#統計を更新する
stats.episode_rewards [i_episode]+=報酬
stats.episode_lengths [i_episode] = t
#TDアップデート
best_next_action = np.argmax(Q [next_state])
td_target=報酬+割引係数*Q[next_state] [best_next_action]
td_delta = td_target –Q[状態][アクション]
Q[状態][アクション]+=アルファ*td_delta
#エピソードが終了した場合、doneはTrueです
完了した場合:
壊す
state = next_state
Q、統計を返します
今すぐモデルをトレーニングしましょう:
Q、統計= qLearning(env、1000)
モデルを作成してトレーニングした後、同じものの基本的な統計をプロットできます。
plotting.plot_episode_stats(stats)
このコードを使用して、モデルを実行し、グラフをプロットします。 どのような結果が見られますか? 結果を私たちと共有してください。混乱や疑問に直面した場合は、私たちに知らせてください。
また読む:データサイエンスのための機械学習アルゴリズム
世界のトップ大学からデータサイエンスコースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
最終的な考え
グラフをプロットすると、エピソードごとの報酬が時間の経過とともに徐々に増加することがわかります。 そして、特定のエピソードの後、プロットは、エピソードごとの高い報酬制限を平準化することも反映しています。 これは何を示していますか?
これは、モデルが最適に動作することを確認することで、エピソードで獲得できる合計報酬を増やすことをモデルが学習したことを意味します。 また、qLearningPythonが非常に多くの業界や分野でアプリケーションを認識している理由も理解しておく必要があります。
強化学習の欠点は何ですか?
1.過度の強化学習は、過剰な状態をもたらし、結果の質を低下させる可能性があります。
2.問題解決を容易にするために、強化学習は推奨されません。
3.強化学習は大量のデータと計算を必要とします。
4.強化学習には、トレーニング設計のセットアップに挑戦したり、探索と強化のバランスに関する問題など、独自の非常に複雑な障害があります。
Q学習はモデルベースですか?
いいえ、Q学習はモデルに依存していません。 Q学習は、特定の状態での特定のアクションの価値を判断するためのモデルフリーの強化学習手法です。 Q学習は、モデルを使用しない現在の強化学習アルゴリズムの1つです。つまり、さまざまなコンテキストで使用でき、新しい未知の条件にすばやく適応できます。 適応を必要とせずに確率的遷移と報酬を含む問題を処理でき、環境モデルを必要としません。 Q学習は、値に基づく学習アルゴリズムです。 値ベースのアルゴリズムは、方程式を使用して値関数(特にベルマン方程式)を更新します。
Q学習とSARSAの違いは何ですか?
SARSAは探索中にほぼ最適なポリシーを学習しますが、Q学習は最適なポリシーを直接学習します。 ポリシー外のSARSAは、フォローしているポリシーに関連してアクション値を学習しますが、ポリシー上のSARSAは、フォローしているポリシーに関連してアクション値を学習します。 貪欲なポリシーに関連して、Qラーニングはそれを行います。 これらは両方とも、いくつかの同様の条件下で、ただし異なる速度で実数値関数に収束します。 Q学習は収束するのに少し時間がかかりますが、規制が変更されている間も学習を続ける可能性があります。 線形近似と組み合わせると、Q学習は収束することが保証されません。 SARSAは、収束に近づくときに探索的ステップからのペナルティを考慮しますが、Q学習は考慮しません。 理想的なパスに沿って重大な負の報酬が発生する可能性がある場合、Qラーニングは探索中にそれをトリガーしようとしますが、SARSAは危険な最適パスを回避し、探索パラメーターが減少した後にのみそれを利用することを学習します。