Dyna-Q で Q-Learning を拡張し、意思決定を強化します

尊渡假赌尊渡假赌尊渡假赌
リリース: 2024-01-02 11:02:21
転載
2329 人が閲覧しました

Q ラーニングは、特定の状態におけるアクションの値または「Q 値」の学習に焦点を当てた、強化学習における重要なモデルフリー アルゴリズムです。このアプローチは、周囲の環境の事前定義されたモデルを必要としないため、予測不可能な環境でうまく機能します。ランダムな変換やさまざまな報酬に効率的に適応するため、結果が不確実なシナリオに適しています。この柔軟性により、Q-Learning は、環境力学に関する事前知識がなくても適応的な意思決定が必要なアプリケーションにとって強力なツールになります。

Dyna-Q で Q-Learning を拡張し、意思決定を強化します

Dyna-Q で Q ラーニングを拡張し、意思決定を強化します

Dyna-Q について詳しく見る, これは、現実世界の経験とシミュレートされた計画を組み合わせることによって Q ラーニングを拡張する、高度な強化学習アルゴリズムです。

Q ラーニングは、特定の状態におけるアクションの値または「Q 値」の学習に焦点を当てた、強化学習における重要なモデルフリー アルゴリズムです。このアプローチは、周囲の環境の事前定義されたモデルを必要としないため、予測不可能な環境でうまく機能します。ランダムな変換やさまざまな報酬に効率的に適応するため、結果が不確実なシナリオに適しています。この柔軟性により、Q-Learning は、環境力学に関する事前知識がなくても適応的な意思決定が必要なアプリケーションにとって強力なツールになります。

学習プロセス

Q 学習は、各状態の各アクションの Q 値テーブルを更新することによって機能します。ベルマン方程式を使用して、観察された報酬と将来の報酬の推定に基づいてこれらの値を繰り返し更新します。ポリシー、つまりアクションを選択するための戦略は、これらの Q 値から導出されます。

  • Q 値 - 特定の状態で特定のアクションを実行することで得られる将来の報酬を表します。
  • 更新ルール - Q 値は次のように更新されます。
    • Q (状態、行動) ← Q (状態、行動) α (報酬最大値 γ Q (次の状態、a) − Q (状態、行動))
    • 学習率 α は、新しいことの重要性を表します。情報として、割引係数 γ は将来の報酬の重要性を表します。

提供されたコードは、Q-Learner のトレーニング機能として使用されます。ベルマン方程式を利用して、状態間の最も効率的な遷移を決定します。

def train_Q(self,s_prime,r): 			  		 			     			  	   		   	  			  	
        self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \
            self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) 
        self.experiences.append((self.s, self.action, s_prime, r))
        self.num_experiences = self.num_experiences + 1
        self.s = s_prime
        self.action = action
        return action 	
ログイン後にコピー

探索と開発

Q ラーニングの重要な側面は、探索 (報酬を発見するために新しいアクションを試す) と活用 (報酬を最大化するために既知の情報を使用する) のバランスを取ることです。アルゴリズムでは、このバランスを維持するために、ε-greedy などの戦略がよく使用されます。

探索と活用のバランスをとるために、ランダム操作のレートを設定することから始めます。 Q テーブルがより多くのデータを蓄積するにつれて、ランダム性を徐々に減らすために減衰率を実装します。このアプローチにより、時間の経過とともにより多くの証拠が蓄積されるにつれて、アルゴリズムが悪用されるようになっていきます。

if rand.random() >= self.random_action_rate:
  action = np.argmax(self.QTable[s_prime,:])  #Exploit: Select Action that leads to a State with the Best Reward
else:
  action = rand.randint(0,self.num_actions - 1) #Explore: Randomly select an Action.
    
# Use a decay rate to reduce the randomness (Exploration) as the Q-Table gets more evidence
self.random_action_rate = self.random_action_rate * self.random_action_decay_rate
ログイン後にコピー

Dyna-Q の紹介

Dyna-Q は、従来の Q ラーニング アルゴリズムの革新的な拡張であり、現実世界の経験とシミュレーションされた計画を組み合わせる最前線にあります。このアプローチは、実際のインタラクションとシミュレートされたエクスペリエンスを統合することで学習プロセスを大幅に強化し、エージェントが複雑な環境に迅速に適応し、情報に基づいた意思決定を行えるようにします。 Dyna-Q は、環境フィードバックとシミュレーションを通じて得られた洞察からの直接学習を活用することで、現実世界のデータが不足している、または取得にコストがかかる場合の課題に対処するための包括的かつ効果的な戦略を提供します。

Dyna-Q的组件

  1. Q-Learning:从真实经验中学习
  2. 模型学习:学习环境模型
  3. 规划:使用模型生成模拟体验

模型学习

  • 该模型跟踪转换和奖励。对于每个状态-动作对 (s, a),模型存储下一个状态 s′ 和奖励 r。
  • 当智能体观察到转换 (s, a,r,s′) 时,它会更新模型。

使用模拟体验进行规划

  • 在每个步骤中,代理从真实体验更新其 Q 值后,还会根据模拟体验更新 Q 值。
  • 这些体验是使用学习模型生成的:对于选定的状态-动作对(s,a),它预测下一个状态和奖励,并且Q值被更新,就好像已经经历了这种转变一样。

算法 Dyna-Q

  1. 初始化所有状态-动作对的 Q 值 Q(s, a) 和模型 (s, a)。
  2. 循环(每集):
    • 初始化状态 s。
    • 循环(针对剧集的每个步骤):
      • 使用派生自 Q 从状态 s 中选择操作 a(例如,ε-greedy )
      • 采取行动 a,观察奖励 r,然后下一个状态 s′
      • 直接学习:使用观察到的跃迁(s、a、r、s′)更新 Q 值
      • 模型学习:使用转换(s、a、r、s′)更新模型
      • 计划:重复 n 次:
        • 随机选择以前经历过的状态-动作对 (s, a)。
        • 使用模型生成预测的下一个状态 s′ 并奖励 r
        • 使用模拟跃迁 (s, a,r,s′) 更新 Q 值
        • s← s′。
  3. 结束循环 此功能将 Dyna-Q 计划阶段合并到前面提到的 Q-Learner 中,从而能够指定在每一集中运行的所需模拟量,其中操作是随机选择的。此功能增强了 Q-Learn 的整体功能和多功能性。
def train_DynaQ(self,s_prime,r): 			  		 			     			  	   		   	  			  	
        self.QTable[self.s,self.action] = (1-self.alpha)*self.QTable[self.s, self.action] + \
            self.alpha * (r + self.gamma * (self.QTable[s_prime, np.argmax(self.QTable[s_prime])])) 
        self.experiences.append((self.s, self.action, s_prime, r))
        self.num_experiences = self.num_experiences + 1
        
        # Dyna-Q Planning - Start
        if self.dyna_planning_steps > 0:  # Number of simulations to perform
            idx_array = np.random.randint(0, self.num_experiences, self.dyna)
            for exp in range(0, self.dyna): # Pick random experiences and update QTable
                idx = idx_array[exp]
                self.QTable[self.experiences[idx][0],self.experiences[idx][1]] = (1-self.alpha)*self.QTable[self.experiences[idx][0], self.experiences[idx][1]] + \
                    self.alpha * (self.experiences[idx][3] + self.gamma * (self.QTable[self.experiences[idx][2], np.argmax(self.QTable[self.experiences[idx][2],:])])) 
        # Dyna-Q Planning - End

        if rand.random() >= self.random_action_rate:
          action = np.argmax(self.QTable[s_prime,:])  #Exploit: Select Action that leads to a State with the Best Reward
        else:
          action = rand.randint(0,self.num_actions - 1) #Explore: Randomly select an Action.
          
    	# Use a decay rate to reduce the randomness (Exploration) as the Q-Table gets more evidence
        self.random_action_rate = self.random_action_rate * self.random_action_decay_rate 
        
        self.s = s_prime
        self.action = action
        return action 	
ログイン後にコピー

结论

Dyna Q 代表了一种进步,我们追求设计能够在复杂和不确定的环境中学习和适应的代理。通过理解和实施 Dyna Q,人工智能和机器学习领域的专家和爱好者可以为各种实际问题设计出有弹性的解决方案。本教程的目的不是介绍概念和算法,而是在这个引人入胜的研究领域激发创造性应用和未来进展的创造力。

以上がDyna-Q で Q-Learning を拡張し、意思決定を強化しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:dzone.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート