Lecture 05: Q-learning을 활용한 비결정론적 세계에서의 학습
이번 강의에서는 여러분을 꽁꽁 얼어붙은 호수로 초대합니다. 이 강의에서는 비결정론적(nondeterministic) 환경에서의 Q-learning을 탐구하고, 실제로 이러한 환경에서 학습하는 방법을 알아보겠습니다. 비결정론적 환경은 행동의 결과가 불확실한 세계를 의미하며, 이는 우리 일상에서도 흔히 경험할 수 있는 상황입니다.
https://www.youtube.com/watch?v=6KSf-j4LL-c
비결정론적 환경이란?
비결정론적 환경에서는 같은 행동을 반복해도 항상 동일한 결과를 얻지 못합니다. 예를 들어, 얼어붙은 호수 위를 걷는 상황을 상상해 봅시다. 여러분은 오른쪽으로 이동하려고 하지만, 바닥이 미끄러워서 오른쪽으로 가지 않고 미끄러져 다른 방향으로 갈 수도 있습니다. 이는 비결정론적 환경의 전형적인 예입니다.
결정론적 환경과의 차이점
결정론적 환경에서는 행동의 결과가 항상 예측 가능합니다. 예를 들어, 오른쪽으로 이동하려고 하면 항상 오른쪽으로 이동하고, 보상도 항상 일정하게 주어집니다. 반면, 비결정론적 환경에서는 같은 행동을 해도 결과가 매번 달라질 수 있습니다.
비결정론적 환경에서의 Q-learning
비결정론적 환경에서 Q-learning을 적용하려면, 우리가 기존에 사용했던 Q-learning 알고리즘에 몇 가지 수정을 해야 합니다. 특히, 탐험과 착취의 균형을 맞추는 ε-탐욕 정책(ε-greedy policy)과 할인된 보상(Discounted Reward)을 효과적으로 활용해야 합니다.
ε-탐욕 정책
ε-탐욕 정책은 일정 확률(ε)로 탐험을 하고, 나머지 확률(1-ε)로 현재의 Q값이 가장 높은 행동을 선택합니다. ε 값은 시간이 지남에 따라 점점 감소시켜, 초기에는 탐험을 많이 하고 후반에는 착취를 많이 하도록 합니다.
def epsilon_greedy(Q, state, epsilon):
if np.random.rand() < epsilon:
# 탐험: 랜덤한 행동 선택
action = np.random.choice(len(Q[state]))
else:
# 착취: Q값이 최대인 행동 선택
action = np.argmax(Q[state])
return action
할인된 보상
할인된 보상은 미래의 보상을 현재의 보상으로 변환하는 방법입니다. 할인율(γ)을 사용하여 먼 미래의 보상을 현재보다 덜 중요하게 만듭니다. 할인율은 0과 1 사이의 값을 가지며, 1에 가까울수록 먼 미래의 보상을 더 중요하게 고려합니다.
할인된 보상을 사용하는 Q-learning 업데이트 식은 다음과 같습니다:
Q(s,a)←Q(s,a)+α[r+γmaxQ(s′,a′)−Q(s,a)]
여기서:
- Q(s,a)Q(s, a): 상태 s에서 행동 a를 했을 때의 Q값
- α\alpha: 학습률
- rr: 현재 상태에서의 보상
- γ\gamma: 할인율
- s′s': 다음 상태
- maxQ(s′,a′)\max Q(s', a'): 다음 상태에서의 최대 Q값
Q-learning 코드 구현
다음은 비결정론적 환경에서의 Q-learning 알고리즘을 Python으로 구현한 예시입니다:
# 환경 설정
num_states = 5
num_actions = 2
Q = np.zeros((num_states, num_actions))
alpha = 0.1 # 학습률
gamma = 0.9 # 할인율
epsilon = 0.1 # 탐험 확률
# Q-learning 알고리즘
for episode in range(1000):
state = np.random.randint(0, num_states) # 초기 상태
done = False
while not done:
action = epsilon_greedy(Q, state, epsilon)
next_state = np.random.randint(0, num_states) # 환경에 따른 다음 상태
reward = np.random.randn() # 임의의 보상
done = np.random.rand() < 0.1 # 임의로 종료 결정
# Q값 업데이트
best_next_action = np.argmax(Q[next_state])
td_target = reward + gamma * Q[next_state][best_next_action]
td_error = td_target - Q[state][action]
Q[state][action] += alpha * td_error
state = next_state
print("최종 Q-테이블:")
print(Q)
위 코드에서는 각 에피소드마다 에이전트가 초기 상태에서 시작하여 종료 상태에 도달할 때까지 행동을 선택하고 Q값을 업데이트합니다. ε-탐욕 정책을 사용하여 탐험과 착취의 균형을 맞추고, 할인된 보상을 통해 미래의 보상을 고려합니다.
고급 Q-learning: 다중 에이전트 접근법
비결정론적 환경에서 Q-learning을 더욱 효과적으로 적용하기 위해 다중 에이전트 접근법을 사용할 수 있습니다. 이는 여러 개의 에이전트가 동시에 학습하여 서로의 경험을 공유함으로써 더 빠르고 정확하게 학습하는 방법입니다.
다중 에이전트 Q-learning
다중 에이전트 Q-learning은 여러 에이전트가 각각 Q 테이블을 가지고 학습하되, 주기적으로 서로의 Q 테이블을 공유하여 학습 속도를 높이는 방법입니다. 이를 통해 각 에이전트는 더 많은 경험을 바탕으로 학습할 수 있습니다.
# 환경 설정
num_agents = 3
num_states = 5
num_actions = 2
Q_agents = [np.zeros((num_states, num_actions)) for _ in range(num_agents)]
alpha = 0.1 # 학습률
gamma = 0.9 # 할인율
epsilon = 0.1 # 탐험 확률
# Q-learning 알고리즘
for episode in range(1000):
states = [np.random.randint(0, num_states) for _ in range(num_agents)] # 초기 상태
done = [False for _ in range(num_agents)]
while not all(done):
for i in range(num_agents):
if not done[i]:
action = epsilon_greedy(Q_agents[i], states[i], epsilon)
next_state = np.random.randint(0, num_states) # 환경에 따른 다음 상태
reward = np.random.randn() # 임의의 보상
done[i] = np.random.rand() < 0.1 # 임의로 종료 결정
# Q값 업데이트
best_next_action = np.argmax(Q_agents[i][next_state])
td_target = reward + gamma * Q_agents[i][next_state][best_next_action]
td_error = td_target - Q_agents[i][states[i]][action]
Q_agents[i][states[i]][action] += alpha * td_error
states[i] = next_state
# 주기적으로 Q 테이블 공유
if episode % 100 == 0:
avg_Q = sum(Q_agents) / num_agents
Q_agents = [avg_Q for _ in range(num_agents)]
print("최종 Q-테이블:")
for i, Q in enumerate(Q_agents):
print(f"Agent {i} Q-테이블:")
print(Q)
위 코드는 여러 에이전트가 각각의 Q 테이블을 가지고 학습하다가, 일정 에피소드마다 평균 Q 테이블을 계산하여 모든 에이전트가 이를 공유하도록 합니다. 이를 통해 각 에이전트는 다른 에이전트의 경험을 바탕으로 학습할 수 있습니다.
결론
비결정론적 환경에서의 Q-learning은 결정론적 환경보다 복잡하지만, ε-탐욕 정책과 할인된 보상을 효과적으로 활용하면 충분히 효과적인 학습이 가능합니다. 다중 에이전트 접근법을 사용하면 학습 속도를 더욱 높일 수 있으며, 다양한 환경에서의 적용 가능성을 넓힐 수 있습니다. 이번 강의를 통해 비결정론적 환경에서 Q-learning을 효과적으로 적용하는 방법을 이해하는 데 도움이 되었기를 바랍니다.
태그: 비결정론적, Q-learning, 강화학습, 탐험, 착취, 할인된보상, ε-탐욕정책, 다중에이전트, Python, 인공지능
'IT' 카테고리의 다른 글
챗GPT를 활용하여 1일 1콘텐츠 쉽게 만드는 비법 (0) | 2024.07.17 |
---|---|
Make 프로그램 이용 노코드 자동화 ChatGPT와 구글 시트 연동하기! (0) | 2024.07.17 |
Lab 4: Q-learning을 활용한 Exploration and Exploitation와 할인된 보상 discounted reward 최적화 (0) | 2024.07.17 |
OpenAI GYM 환경을 이용한 강화 학습 실습 (0) | 2024.07.17 |
Q-러닝을 통한 강화 학습 실습: Frozen Lake 예제 (0) | 2024.07.17 |
댓글