OpenAI 헬스장을 활용한'택시'소개 학습 강화
우리가 시작하기 전에 택시는 무엇입니까?
택시는 OpenAI 헬스장이 제공하는 수많은 환경 중 하나다.이러한 환경은 학습 대리인을 개발하고 훈련하는 데 쓰인다.
택시의 목표는 최소한의 동작으로 승객을 연결시켜 목적지에서 내리는 것이다.이 자습서에서는 임의로 재생되는 프록시부터 시작합니다.
...그리고 강화 학습을 성공적으로 응용하여 특공 해결 게임을 훈련한다.
💡 학습 도론을 강화하다.
개를 앉히는 것과 같은 새로운 수법을 어떻게 가르칠 수 있는지 생각해 보세요.
출처:
사돈과 바토 🏋️ OpenAI 헬스장과 택시를 설치하다
이 자습서에서는 Taxi-v3 환경을 사용합니다.
설치가 필요합니다.
pip install gym
pip install numpy
import numpy as np
import gym
import random
# create Taxi environment
env = gym.make('Taxi-v3')
🎲 임의 요소
우리는 우선 전혀 배우지 않는 대리인을 실현할 것이다.반대로 동작을 무작위로 선택한다.이것은 우리의 기선이 될 것이다.
첫 번째 단계는 우리의 대리 초기 상태를 주는 것이다.한 주가 우리 스파이들의 현재 환경이 어떤지 알려줄 것이다.택시에서 주에서는 택시, 승객, 그리고 승하차 지점의 현재 위치를 정의했다.다음은 택시의 세 가지 다른 상태의 예이다.
주:노란색=택시,파란색자모=취차지점,보라색자모=하차목적지
초기 상태를 가져오려면 다음과 같이 하십시오.
# create a new instance of taxi, and get the initial state
state = env.reset()
다음에, 우리는 모든 게임을 순환하기 위해 for 순환을 실행할 것이다.매번 교체할 때마다 우리 대리인은 다음과 같이 할 것이다.다음은 우리의 랜덤 프록시 스크립트입니다.
import gym
import numpy as np
import random
# create Taxi environment
env = gym.make('Taxi-v3')
# create a new instance of taxi, and get the initial state
state = env.reset()
num_steps = 99
for s in range(num_steps+1):
print(f"step: {s} out of {num_steps}")
# sample a random action from the list of available actions
action = env.action_space.sample()
# perform this action on the environment
env.step(action)
# print the new state
env.render()
# end this instance of the taxi environment
env.close()
너는 이 프로그램을 실행해서 너의 에이전트가 무작위로 이동하는 것을 관찰할 수 있다.특별히 흥분되지는 않지만, OpenAI 헬스장 도구 꾸러미를 익히는 데 도움이 됐으면 좋겠습니다.다음에 우리는 관건적인 알고리즘을 실현하여 우리의 에이전트가 환경에서 배워서 문제를 해결할 수 있도록 할 것이다.
📖 Q - 학습 에이전트
Q-learning은 학습 알고리즘을 강화하는 것으로 현재 상태를 정한 상황에서 최상의 다음 행동을 찾아 얻은 수익을 최대한 높인다(Q-learning의'Q'는 품질을 대표한다) - 행동의 가치
다음 시작 상태를 예로 들겠습니다.
가장 큰 보답을 얻기 위해서는 어떤 행동(상, 하, 좌, 우, 승차 또는 하차)을 취해야 합니까?(주:파란색=승차지점,보라색=하차지점)
우선, 우리 대리인이 어떻게 그 행위로 인해'장려'를 받았는지 봅시다.학습을 강화하는 과정에서 우리는 우리의 대리인이 행동을 취해 환경에서 얻는 보답을 최대한 높일 수 있기를 바란다는 것을 명심하세요.
택시 장려 제도
:
"…you receive +20 points for a successful drop-off, and lose 1 point for every timestep it takes. There is also a 10 point penalty for illegal pick-up and drop-off actions."
Dell의 원래 상태를 살펴보면 Dell이 수행할 수 있는 조치와 그에 따른 보상이 다음과 같습니다.
Taxi documentation
위의 그림에서 대리인은 한 시간마다 1점을 손실한다.만약 이곳에서 상하차 조작을 사용한다면 그것도 10점을 손실하게 될 것이다.
우리는 우리의 대리인이 북쪽으로 파란색 R이 표시한 수령 장소로 가기를 희망한다. 그러나 만약 그들이 모두 같은 처벌을 받게 된다면, 그것은 어떻게 어떤 행동을 취해야 할지 알 수 있겠는가?
탐색
우리 에이전트는 현재 파란색 R에 가장 가까운 동작을 알 수 없습니다. 이것이 바로 시험 오류의 원인입니다. - 우리는 우리의 대리인이 무작위 행동을 취하고 그 보상을 관찰할 것이다. 즉, 우리의 대리인이 환경에 대해 탐색을 할 것이다.이것이 바로 우리의 랜덤 스파이가 전에 한 일이다.
여러 번 교체되는 동안, 우리의 에이전트는 어떤 동작 서열이 다른 동작 서열보다 더 보답하는 것을 관찰할 것이다.이 과정에서 우리 대리인은 어떤 행위가 어떤 보상을 가져올지 추적해야 한다.
소개...Q표
Q표는 단지 검색표일 뿐입니다. 저희 대리인이 특정한 상태에서 특정한 행위가 예상할 수 있는 최대 미래 수익을 대표하는 값을 저장합니다. (Q값이라고 합니다.)그것은 대리인에게 어떤 상태를 만났을 때 어떤 행위가 다른 행위보다 더 높은 보답을 가져올 수 있다는 것을 알려줄 것이다.그것은 우리 대리인에게 가장 좋은 행동이 무엇인지 알려주는 메모지로 변했다.
다음 그림은 Q 테이블의 모양을 보여 줍니다.
교육 에이전트를 시작하기 전에 다음과 같이 Q시트를 초기화해야 합니다.
state_size = env.observation_space.n # total number of states (S)
action_size = env.action_space.n # total number of actions (A)
# initialize a qtable with 0's for all Q-values
qtable = np.zeros((state_size, action_size))
프록시가 탐색할 때, 찾은 Q 값으로 Q표를 업데이트합니다.Q 값을 계산하기 위해서 우리는 Q 학습 알고리즘을 소개할 것이다.Q-학습 알고리즘
다음은 Q-학습 알고리즘을 제시한다.자세한 내용은 설명하지 않겠지만 자세한 내용은 에 나와 있습니다.
Ch 6 of Sutton & Barto (2018)
Q - 학습 알고리즘은 에이전트가 행동을 취한 후에 현재 Q 값 (Q (St, At) 을 관찰 값으로 업데이트하는 데 도움을 줄 것입니다.즉, 긍정적인 보상을 받으면 Q를, 부정적인 보상을 받으면 Q를 낮춘다.
택시에서 저희 대리인은 승객을 내리는 데 성공한 후에만 정보상(+20점)을 받을 수 있습니다.따라서 우리 대리인이 올바른 방향으로 나아가고 있어도 그들이 받아야 할 긍정적인 보답은 늦어진다.Q-learning 등식의 다음 용어는 이 점을 설명합니다.
이 용어는 앞으로 언제 받을 수 있는 보상의 일부(St+1)를 포함하여 현재 Q 값을 조정합니다.'a' 라는 말은 그 주에서 취할 수 있는 모든 행동을 가리킨다.방정식에는
다음은 Q 학습 알고리즘을 구현하는 코드입니다.
# hyperparameters to tune
learning_rate = 0.9
discount_rate = 0.8
# dummy variables
reward = 10 # R_(t+1)
state = env.observation_space.sample() # S_t
action = env.action_space.sample() # A_t
new_state = env.observation_space.sample() # S_(t+1)
# Qlearning algorithm: Q(s,a) := Q(s,a) + learning_rate * (reward + discount_rate * max Q(s',a') - Q(s,a))
qtable[state, action] += learning_rate * (reward + discount_rate * np.max(qtable[new_state,:]) - qtable[state,action])
탐사와 개발의 균형
이전에, 우리는 Q표를 업데이트하기 위해 대리 탐색 환경을 만들었다.우리의 대리인이 환경에 대한 이해가 갈수록 많아짐에 따라 우리는 이 지식을 이용하여 더욱 최적화된 행동을 취할 수 있다 - 착취라고 불리다.
공격 과정에서, 우리 에이전트는 Q표를 보고, Q값이 가장 높은 조작을 선택할 것입니다. (무작위 조작이 아니라)시간의 추이에 따라, 우리의 대리인은 더 적은 탐색을 필요로 하고, 그것이 알고 있는 것을 이용하기 시작할 것이다.
탐사 개발 전략을 실시하는 방법은 매우 많다.여기에는 단 하나의 예가 있다.
# dummy variables
episode = random.randint(0,500)
qtable = np.random.randn(env.observation_space.sample(), env.action_space.sample())
# exploration-exploitation tradeoff
epsilon = 1.0 # probability that our agent will explore
decay_rate = 0.01 # of epsilon
if random.uniform(0,1) < epsilon:
# explore
action = action = env.action_space.sample()
else:
# exploit
action = np.argmax(qtable[state,:])
# epsilon decreases exponentially --> our agent will explore less and less
epsilon = np.exp(-decay_rate*episode)
위의 예에서 우리는 0과 1 사이에 약간의 값을 epsilon
으로 설정했다.만약에 epsilon
이 0.7이라면 이 단계에서 우리의 대리인은 70%의 확률로 탐색을 하고 이용하지 않을 것이다.우리는 epsilon
을 한 걸음 한 걸음 지수가 쇠퇴함에 따라 설정하기 때문에 우리의 대리 탐색 시간이 점점 적어진다.이 모든 것을 결합시키다
우리는 학습 에이전트를 강화하는 데 필요한 모든 구축 블록을 완성했다.Dell 에이전트를 교육하는 과정은 다음과 같습니다.
다음은 완전한 실현이다.
import numpy as np
import gym
import random
def main():
# create Taxi environment
env = gym.make('Taxi-v3')
# initialize q-table
state_size = env.observation_space.n
action_size = env.action_space.n
qtable = np.zeros((state_size, action_size))
# hyperparameters
learning_rate = 0.9
discount_rate = 0.8
epsilon = 1.0
decay_rate= 0.005
# training variables
num_episodes = 1000
max_steps = 99 # per episode
# training
for episode in range(num_episodes):
# reset the environment
state = env.reset()
done = False
for s in range(max_steps):
# exploration-exploitation tradeoff
if random.uniform(0,1) < epsilon:
# explore
action = env.action_space.sample()
else:
# exploit
action = np.argmax(qtable[state,:])
# take action and observe reward
new_state, reward, done, info = env.step(action)
# Q-learning algorithm
qtable[state,action] = qtable[state,action] + learning_rate * (reward + discount_rate * np.max(qtable[new_state,:])-qtable[state,action])
# Update to our new state
state = new_state
# if done, finish episode
if done == True:
break
# Decrease epsilon
epsilon = np.exp(-decay_rate*episode)
print(f"Training completed over {num_episodes} episodes")
input("Press Enter to watch trained agent...")
# watch trained agent
state = env.reset()
done = False
rewards = 0
for s in range(max_steps):
print(f"TRAINED AGENT")
print("Step {}".format(s+1))
action = np.argmax(qtable[state,:])
new_state, reward, done, info = env.step(action)
rewards += reward
env.render()
print(f"score: {rewards}")
state = new_state
if done == True:
break
env.close()
if __name__ == "__main__":
main()
👏 다음은요?
OpenAI Gym에는 과 같은 다양한 환경이 있습니다.더 적은 사건에서 문제를 해결하기 위해 상술한 실현을 최적화할 수도 있습니다.
기타 유용한 리소스는 다음과 같습니다.
Reference
이 문제에 관하여(OpenAI 헬스장을 활용한'택시'소개 학습 강화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/joooyz/an-introduction-to-reinforcement-learning-with-openai-gym-s-taxi-258c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)