Q 학습 : 강화 학습에 대해 알아야 할 모든 것



이 기사는 Python 코드를 통한 강화 학습의 아름다운 비유를 통해 Q-Learning에 대한 상세하고 포괄적 인 지식을 제공합니다.

과 업계 최고의 유행어에 속하며 그럴만 한 이유가있는 몇 가지 도메인입니다. AI는 기계가 인간의 행동을 모방 할 수 있도록하는 것이 주요 목표임을 고려하여 2020 년까지 230 만 개의 일자리를 창출 할 것입니다. 이상하지 않습니까? 그래서 오늘 우리는 강화 학습의 빌딩 블록 인 Q 학습에 대해 다음과 같은 순서로 논의 할 것입니다.

강화 학습이란 무엇입니까?

우리의 일상을 살펴 보겠습니다. 우리는 환경에서 수많은 작업을 수행하며 이러한 작업 중 일부는 보상을 제공하지만 일부는 그렇지 않습니다. 우리는 계속해서 다른 길을 찾고 어떤 길이 보상으로 이어질지 알아 내고 우리의 행동을 기반으로 목표 달성을위한 전략을 개선합니다. 이것은 내 친구들이 강화 학습의 가장 간단한 비유 중 하나입니다.





주요 관심 분야 :

  • 환경
  • 동작
  • 보상
  • 상태

강화 학습-Q 학습



강화 학습은 시스템이 자체 결정의 결과로부터 학습 할 수 있도록하는 기계 학습의 한 분야입니다. 의사 결정이 순차적이고 목표가 장기적인 특정 종류의 문제를 해결합니다.

Q- 학습 과정

여기서 문제 설명으로 Q 학습이 무엇인지 이해합시다. 강화 학습 솔루션의 주요 구성 요소 (예 : 에이전트, 환경, 행동, 보상 및 상태)를 정의하는 데 도움이됩니다.

자동차 공장 비유 :



우리는 로봇으로 가득한 자동차 공장에 있습니다. 이 로봇은 자동차 조립에 필요한 부품을 운반하여 공장 작업자를 돕습니다. 이러한 다른 부품은 9 개 스테이션의 공장 내 다른 위치에 있습니다. 부품에는 섀시, 휠, 대시 보드, 엔진 등이 포함됩니다. Factory Master는 섀시가 설치되는 위치를 최우선 순위로 지정했습니다. 여기에서 설정을 살펴 보겠습니다.

상태 :

로봇이 특정 인스턴스에 존재하는 위치를 상태라고합니다. 이름으로 기억하기보다는 코딩하기 쉽기 때문입니다. 위치를 숫자에 매핑 해 보겠습니다.

행위:

행동은 로봇이 어떤 위치로든 이동하는 것에 지나지 않습니다. 로봇이 L2 위치에 있고 이동할 수있는 직접 위치는 L5, L1 및 L3입니다. 이것을 시각화하면 더 잘 이해하겠습니다.

참조 C ++로 호출

보상 :

한 상태에서 다른 상태로 직접 이동하면 로봇에게 보상이 주어집니다. 예를 들어 L2에서 직접 L5에 도달 할 수 있으며 그 반대의 경우도 마찬가지입니다. 따라서 두 경우 모두 1의 보상이 제공됩니다. 보상 표를 살펴 보겠습니다.

Factory Master가 섀시 위치의 우선 순위를 지정한시기를 기억하십시오. L7 이었으므로이 사실을 보상 테이블에 통합 할 것입니다. 따라서 (L7, L7) 위치에 매우 큰 숫자 (이 경우 999)를 할당합니다.

Bellman 방정식

이제 로봇이 A 지점에서 B 지점으로 이동해야한다고 가정하면 긍정적 인 보상을 얻을 수있는 경로를 선택할 것입니다. 이를 위해 우리가 따라야 할 발자국에 대한 보상을 제공한다고 가정합니다.

그러나 로봇이 둘 이상의 경로를 볼 수있는 중간 어딘가에서 시작하면 어떨까요? 따라서 로봇은 결정을 내릴 수 없으며 이것은 주로 기억 . 이것이 Bellman Equation이 그림에 나오는 곳입니다.

V (s) = 최대 (R (s, a) + & # 120632V (s '))

어디:

C ++ 피보나치 수열
  • s = 특정 상태
  • a = 액션
  • s '= 로봇이 s에서 이동하는 상태
  • & # 120632 = 할인 요소
  • R (s, a) = 상태 (s)와 행동 (a)을 취하고 보상 값을 출력하는 보상 함수
  • V (s) = 특정 상태에있는 가치

이제 목적지 아래의 블록은 가장 높은 보상 인 1의 보상을 갖게됩니다.하지만 다른 블록은 어떻습니까? 음, 여기가 할인 요인이 들어오는 곳입니다. 할인 요인을 0.9로 가정하고 모든 블록을 하나씩 채워 봅시다.

마르코프 결정 과정

로봇이 주황색 블록에 있고 목적지에 도달해야한다고 상상해보십시오. 그러나 약간의 기능 장애가 있더라도 로봇은 올라 가기보다는 어떤 길을 택해야할지 혼란 스러울 것입니다.

그래서 우리는 의사 결정 과정을 수정해야합니다. 그것은 부분적으로 무작위부분적으로 로봇의 통제하에 있음 . 부분적으로는 로봇이 언제 기능 장애를 일으킬 지 모르기 때문에 부분적으로 무작위이며 여전히 로봇의 결정이기 때문에 부분적으로는 통제하에 있습니다. 그리고 이것은 Markov Decision Process의 기반을 형성합니다.

Markov 의사 결정 프로세스 (MDP)는 이산 시간 확률 제어 프로세스입니다. 결과가 부분적으로 무작위이고 부분적으로 의사 결정자의 통제를받는 상황에서 의사 결정을 모델링하기위한 수학적 프레임 워크를 제공합니다.

그래서 우리는 원래의 Bellman 방정식을 사용하고 그것을 변경할 것입니다. 우리가 모르는 것은 다음 상태입니다. 에스'. 우리가 아는 것은 턴의 모든 가능성이며 방정식을 변경합시다.

V (s) = 최대 (R (s, a) + & # 120632 V (s '))

V (s) = 최대 (R (s, a) + & # 120632 & 시그마에스'P (s, a, s ') V (s '))

P (s, a, s ') : 상태에서 이동할 확률 에스 ...에 에스' 행동으로 ...에

& 시그마에스'P (s, a, s ') V (s’) : 로봇의 임의성 기대

V (s) = 최대 (R (s, a) + & # 120632 ((0.8V (방쪽으로)) + (0.1V (방하위) +….))

이제 Q Learning으로 전환하겠습니다. Q-Learning은 상태가 이동되는 상태의 가능한 값을 결정하기보다는 상태로 이동하기 위해 취해진 조치의 질을 평가하는 아이디어를 제시합니다.

이것은 우리가 특정 주로 이동하기위한 행동의 질을 평가한다는 아이디어를 통합하면 얻는 것입니다. 업데이트 된 Bellman Equation에서 제거하면 최대 우리는 가능한 행동에 대한 하나의 발자국만을 가정하고 있습니다. 품질 행동의.

Q (s, a) = (R (s, a) + & # 120632 & 시그마에스'P (s, a, s ') V (s '))

행동의 질을 정량화하는이 방정식에서 우리는 V (s)가 Q (s, a)의 가능한 모든 값의 최대 값이라고 가정 할 수 있습니다. 이제 v (s ')를 Q ()의 함수로 바꾸겠습니다.

Q (s, a) = (R (s, a) + & # 120632 & 시그마에스'P (s, a, s ') 최대 Q (s ', a'))

우리는 Q Learning의 최종 방정식에 한 걸음 더 가까워졌습니다. 우리는 시간적 차이 시간에 따른 환경 변화에 대한 Q- 값을 계산합니다. 그러나 Q의 변화를 어떻게 관찰합니까?

TD (s, a) = (R (s, a) + & # 120632 & 시그마에스'P (s, a, s ') 최대 Q (s ', a')) – Q (s, a)

동일한 공식으로 새로운 Q (s, a)를 다시 계산하고 여기에서 이전에 알려진 Q (s, a)를 뺍니다. 따라서 위의 방정식은 다음과 같습니다.

(s, a) = Qt-1(s, a) + α TD(s, a)

(s, a) = 현재 Q- 값

t-1(s, a) = 이전 Q- 값

(s, a) = Qt-1(s, a) + α (R (s, a) + & # 120632 최대 Q (s ', a')-t-1(s, a))

Q 학습 데모 : NumPy

나는 사용할거야 NumPy는 Q Learning의 작동 방식을 보여줍니다.

1 단계 : 가져 오기, 매개 변수, 상태, 조치 및 보상

import numpy as np gamma = 0.75 # 할인 계수 alpha = 0.9 # 학습률 location_to_state = { 'L1': 0, 'L2': 1, 'L3': 2, 'L4': 3, 'L5': 4, ' L6 ': 5,'L7 ': 6,'L8 ': 7,'L9 ': 8} 액션 = [0,1,2,3,4,5,6,7,8] rewards = np.array ( [[0,1,0,0,0,0,0,0,0], [1,0,1,0,0,0,0,0,0], [0,1,0,0, 0,1,0,0,0], [0,0,0,0,0,0,1,0,0], [0,1,0,0,0,0,0,1,0] , [0,0,1,0,0,0,0,0,0], [0,0,0,1,0,0,0,1,0], [0,0,0,0, 1,0,1,0,1], [0,0,0,0,0,0,0,1,0]])

2 단계 : 인덱스를 위치에 매핑

메서드 오버로딩 및 메서드 재정의
state_to_location = dict ((state, location) for location, state in location_to_state.items ())

3 단계 : Q 학습 프로세스를 사용하여 최적 경로 얻기

def get_optimal_route (start_location, end_location) : rewards_new = np.copy (rewards) ending_state = location_to_state [end_location] rewards_new [ending_state, ending_state] = 999 Q = np.array (np.zeros ([9,9])) # Q- 범위 (1000)에있는 i에 대한 학습 과정 : # 임의의 상태 선택 current_state = np.random.randint (0,9) # Python은 상한을 제외 playable_actions = [] # 범위에서 j에 대한 새로운 보상 행렬을 반복합니다 ( 9) : if rewards_new [current_state, j]> 0 : playable_actions.append (j) # 다음 상태로 이끄는 임의의 행동을 선택합니다. next_state = np.random.choice (playable_actions) # 시간차 계산 TD = rewards_new [current_state , next_state] + gamma * Q [next_state, np.argmax (Q [next_state,])]-Q [current_state, next_state] # Bellman 방정식을 사용하여 Q-Value 업데이트 Q [current_state, next_state] + = alpha * TD # 시작 위치로 최적 경로 초기화 route = [start_location] # 시작 위치로 next_location 초기화 next_location = star t_location # 최종 위치에 도달하는 데 필요한 정확한 반복 횟수를 알지 못하므로 while 루프는 반복을위한 좋은 선택이 될 것입니다. while (next_location! = end_location) : # 시작 상태 가져 오기 starting_state = location_to_state [start_location] # 시작 상태와 관련된 가장 높은 Q 값을 가져옵니다. next_state = np.argmax (Q [starting_state,]) # 다음 상태의 인덱스를 얻었습니다. 그러나 우리는 해당 편지가 필요합니다. next_location = state_to_location [next_state] route.append (next_location) # 다음 반복을위한 시작 위치 업데이트 start_location = next_location return route

4 단계 : 경로 인쇄

print (get_optimal_route ( 'L1', 'L9'))

산출:

이것으로 Q-Learning이 끝납니다. 시간적 차이, Bellman Equation 등과 같은 다양한 종속성과 함께 Q Learning의 작동을 알기를 바랍니다.

에두 레카 지도 학습, 비지도 학습 및 자연어 처리와 같은 기술에 능숙하게 만듭니다. 여기에는 딥 러닝, 그래픽 모델 및 강화 학습과 같은 인공 지능 및 기계 학습의 최신 발전 및 기술 접근 ​​방식에 대한 교육이 포함됩니다.