Dyna-Q로 Q-Learning을 확장하여 의사결정 강화

尊渡假赌尊渡假赌尊渡假赌
풀어 주다: 2024-01-02 11:02:21
앞으로
2332명이 탐색했습니다.

Q-Learning은 특정 상태에서 행동의 가치 또는 "Q-값"을 학습하는 데 초점을 맞춘 강화 학습의 중요한 모델 없는 알고리즘입니다. 이 접근 방식은 주변 환경에 대해 미리 정의된 모델이 필요하지 않기 때문에 예측 불가능한 환경에서 잘 작동합니다. 무작위 변형과 다양한 보상에 효율적으로 적응하므로 결과가 불확실한 시나리오에 적합합니다. 이러한 유연성 덕분에 Q-Learning은 환경 역학에 대한 사전 지식 없이 적응형 의사 결정이 필요한 애플리케이션을 위한 강력한 도구가 됩니다.

Dyna-Q로 Q-Learning을 확장하여 의사결정 강화

Dyna-Q로 Q-Learning을 확장하여 의사 결정 향상

실제 경험과 시뮬레이션 계획 학습을 결합하여 Q를 확장하는 고급 강화 학습 알고리즘인 Dyna-Q를 살펴보세요.

Q-Learning은 특정 상태에서 행동의 가치 또는 "Q-값"을 학습하는 데 초점을 맞춘 강화 학습의 중요한 모델 없는 알고리즘입니다. 이 접근 방식은 주변 환경에 대해 미리 정의된 모델이 필요하지 않기 때문에 예측 불가능한 환경에서 잘 작동합니다. 무작위 변형과 다양한 보상에 효율적으로 적응하므로 결과가 불확실한 시나리오에 적합합니다. 이러한 유연성 덕분에 Q-Learning은 환경 역학에 대한 사전 지식 없이 적응형 의사 결정이 필요한 애플리케이션을 위한 강력한 도구가 됩니다.

Learning Process

Q-learning은 각 상태의 각 작업에 대한 Q-값 테이블을 업데이트하여 작동합니다. Bellman 방정식을 사용하여 관찰된 보상과 미래 보상 추정치를 기반으로 이러한 값을 반복적으로 업데이트합니다. 정책(행동 선택 전략)은 이러한 Q-값에서 파생됩니다.

  • Q 값 - 주어진 상태에서 특정 행동을 취함으로써 얻을 수 있는 미래의 예상 보상을 나타냅니다.
  • Update 규칙 - Q 값은 다음과 같이 업데이트됩니다.
    • Q(상태, 동작) ← Q(상태, 동작) ) + α ( 보상 + 최대 γ Q(다음 상태, a) − Q(상태, 행동))
    • 학습률 α는 새로운 정보의 중요성을 나타내고, 할인 계수 γ는 미래 보상의 중요성을 나타냅니다.

제공된 코드는 Q-Learner의 훈련 기능으로 사용됩니다. Bellman 방정식을 활용하여 상태 간 가장 효율적인 전환을 결정합니다.

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 	
로그인 후 복사

Exploration vs. Exploitation

Q-learning의 핵심 측면은 탐색(보상을 발견하기 위해 새로운 행동 시도)과 활용(알려진 정보를 사용하여 보상 최대화)의 균형을 맞추는 것입니다. 알고리즘은 종종 이러한 균형을 유지하기 위해 ε-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-Learning 알고리즘을 혁신적으로 확장한 것이며 실제 경험과 시뮬레이션 계획을 결합하는 데 앞장서고 있습니다. 이 접근 방식은 실제 상호 작용과 시뮬레이션된 경험을 통합하여 학습 프로세스를 크게 향상시켜 에이전트가 복잡한 환경에서 신속하게 적응하고 정보에 기초한 결정을 내릴 수 있도록 합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:dzone.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿