딥러닝 파이토치 교과서 책에는 강화학습 내용이 간단하게 소개되어 있어 유튜브와 다른 책을 참고하였음
- 노승은(2020). 바닥부터 배우는 강화 학습.
<강화 학습>
- 어떤 환경에서 어떤 행동을 했을 때 그것이 잘된 행동인지 잘못된 행동인지 판단하고 보상(또는 벌칙)을 주는 과정을 반복해서 스스로 학습하게 하는 분야
- 환경이란 에이전트가 다양한 행동을 해 보고, 그에 따른 결과를 관측할 수 있는 시뮬레이터
- 에이전트는 환경에서 행동하는 주체
- 상태는 에이전트가 관찰 가능한 상태의 집합
- 행동이란 에이전트가 상태에서 가능한 행동
- 강화 학습의 문제들은 마르코프 결정 과정으로 표현하고, 이 마르코프 결정 과정은 모두 마르코프 프로세스에 기반함
<마르코프 결정 과정>
마르코프 프로세스
- 마르코프 프로세스(MP)는 어떤 상태가 일정한 간격으로 변하고, 다음 상태는 현재 상태에만 의존하는 확률적 상태 변화를 의미(현재 상태에 대해서만 다음 상태가 결정되며, 현재 상태까지의 과정은 전혀 고려할 필요가 없음)
- 변화 상태들이 체인처럼 엮여 있다고 하여 마르코프 체인이라고도 함
- 마르코프 프로세스에서 상태 간 이동인 전이는 확률로 표현하게 되는데 이를 상태 전이 확률이라고 함
- 아래의 그림은 병원을 방문한 어느 하루에 대한 마르코프 체인을 표현한 것(대기->진찰, 대기->독서, 대기->웹 서핑으로 진행되는 모든 프로세스의 합은 1이 되어야 함)
마르코프 보상 프로세스
- 마르코프 보상 프로세스는 마르코프 프로세스에서 각 상태마다 좋고 나쁨이 추가된 확률 모델임
- 상태의 정확한 가치를 구하기 위해서는 어느 시점에서 보상을 받을지가 중요함
- 미래 가치를 현재 시점으로 보면 현재 가치보다 적은데 이를 '할인율'이라고 함(0과 1 사이의 값)
- 할인율이 0인 경우 미래의 보상을 고려하지 않음
- 반대로, 할인율이 1인 경우는 모든 미래 가치에 대해 할인을 고려하지 않음
- 가치함수는 현재 시점에서 미래의 모든 기대되는 보상을 표현하는 미래 가치
- 강화학습의 핵심은 가치 함수를 최대한 정확하게 찾는 것(미래 가치가 가장 클 것으로 기대되는 결정을 하고 행동하는 것이 강화 학습의 목표)
마르코프 결정 과정
- 마르코프 결정 과정은 기존 마르코프 보상 과정에서 행동이 추가된 학률 모델임
- MDP 목표는 정의된 문제에 대해 각 상태마다 전체적인 보상을 최대화하는 행동이 무엇인지 결정하는 것
- MDP에서 가치 함수는 에이전트가 놓인 상태 가치를 함수로 표현한 상태-가치 함수와 상태와 행동에 대한 가치를 함수로 표현한 행동-가치 함수가 있음
- 상태-가치 함수: 상태 s에서 얻을 수 있는 리턴의 기댓값
- 행동-가치 함수: 상태 s에서 a라는 행동을 취했을 때 얻을 수 있는 리턴의 기댓값
- 위의 가치 함수를 계산하는 방법은 시간 복잡도가 필요하기 때문에 상태 수가 많으면 적용하기 어려워 이와 같은 문제를 해결하기 위한 방법이 발전되었음
- 다이나믹 프로그래밍: 마르코프 결정 과정의 상태와 행동이 많지 않고 모든 상태와 전이 확률을 알고 있다면 다이나믹 프로그래밍 방식으로 각 상태의 가치와 최적의 행동을 찾을 수 있으나, 실제 상황에서는 적용하기 어려움
- 몬테카를로: 전체 상태 중 일부 구간만 방문하여 근사적으로 가치 추정하며, 초기 상태에서 시작하여 중간 상태들을 경유해서 최종 상태까지 간 최종 보상을 측정하고 방문했던 상태들의 가치를 업데이트 함
- 시간 차 학습: 몬테카를로와 달리 최종 상태에 도달하기 전에 방문한 상태의 가치를 즉시 업데이트 함
- 함수적 접근 학습: 마르코프 결정 과정의 상태가 많거나 상태가 연속적인 값을 갖는 경우 상태-가치 함수나 행동-가치 함수를 테이블 형태로 학습하기 어려워 특성 벡터를 도입함
<MDP를 위한 벨만 방정식>
벨만 방정식은 상태-가치 함수와 행동-가치 함수의 관계를 나타내는 방정식임
벨만 기대 방정식
- 다음 상태로 이동하려면 어떤 정책에 따라 행동해야 하는데, 이때 정책을 고려한 다음 상태로의 이동이 벨만 기대 방정식임
- ①: 가치 함수는 현재 시점에서 미래에 기대되는 보상들의 총합으로 표현
- ②: 할인율 적용
- ③: 할인율을 기준으로 묶어줌
- ④: R_t+2 + rR_t+3 + ...은 다음 상태의 가치(G_t+1)로 표현 가능
- ⑤: 즉각적 보상과 다음 상태의 가치 함수로 표현 가능
-> 현재 시점의 가치는 현재의 보상과 다음 시점의 가치로 표현할 수 있다는 것을 학습(재귀적인 형태로서 미래의 가치들이 현재의 가치에 영향을 주고 있는 형태라고 이해)
강화학습의 학습 과정
1. 처음 에이전트가 접하는 상태 s나 행동 a는 임의의 값으로 설정
2. 환경과 상호 작용하면서 얻은 보상과 상태에 대한 정보들을 이용하여 어떤 상태에서 어떤 행동을 취하는 것이 좋은지(최대의 보상을 얻을 수 있는지) 판단
3. 이떄 최적의 행동을 판단하는 수단이 상태-가치 함수와 행동-가치 함수이고, 이것을 벨만 기대 방정식을 이용하여 업데이트하면서 점점 높은 보상을 얻을 수 있는 상태와 행동을 학습
4. 2~3 과정 속에서 최대 보상을 갖는 행동들을 선택하도록 최적화된 정책을 찾음
<벨만 최적 방정식>
최적의 가치 함수
- 최적의 가치 함수란 최대의 보상을 갖는 가치 함수
- 상태-가치 함수는 어떤 상태가 더 많은 보상을 받을 수 있는지 알려 주며, 행동-가치 함수는 어떤 상태에서 어떤 행동을 취해야 더 많은 보상을 받을 수 있는지 알려줌
- 최적의 상태-가치 함수: 주어진 모든 정책에 대한 상태-가치 함수의 최댓값
- 최적의 행동-가치 함수: 주어진 모든 정책에 대해 행동-가치 함수의 최댓값(행동-가치 함수(큐-함수라고도 함)에 대한 최적의 가치 함수를 구할 수 있다면 주어진 상태에서 q값이 가장 높은 행동을 선택할 수 있게 됨)
<다이나믹 프로그래밍>
- 다이나믹 프로그래밍은 연속적으로 발생되는 문제를 수학적으로 최적화하여 풀어내는 것이라고 할 수 있음
- 다이내믹 프로그래밍은 MDP의 모든 상황에 대한 것을 이미 알고 있다고 가정하기 때문에 계획이 가능함
- MDP와 정책을 입력으로 하여 가치 함수를 찾아내는 것이 예측 과정이며, MDP를 입력으로 하여 기존 가치 함수를 더욱 최적화하는 것이 컨트롤 과정임
정책 이터레이션
- 현재 정책을 이용해서 가치 함수를 찾는 것을 평가라고 하며, 이 가치 값과 행동에 대한 가치 값을 비교하여 더 좋은 정책을 찾아가는 과정을 발전이라고 함
- 이 두 가지 과정을 반복하여 수행하면 정책과 가치는 특정 값으로 수렴하게 되고, 그때가 최적화된 정책과 가치라고 할 수 있음
- 정책 평가: 모든 상태에 대해 그다음 상태가 될 수 있는 행동에 대한 보상의 합을 저장하는 것이 정책 평가임(주변 상태의 가치 함수와 바로 다음 상태에서 얻어지는 보상만 고려해서 현재 상태의 다음 가치 함수를 계산하는 것이라고 할 수 있음)
- 정책발전: 가장 많이 알려진 방법은 욕심쟁이 정책 발전(에이전트가 할 수 있는 행동들의 행동-가치 함수를 비교하고 가장 큰 함수 값을 가진 행동을 취하는 것임)임
가치 이터레이션
- 최적의 정책을 가정하고 벨만 최적 방정식을 이용하여 순차적으로 행동을 결정
- 한 번의 정책 평가 과정을 거치면 최적의 가치 함수와 최적의 정책이 구해지면서 MDP 문제를 풀 수 있기 때문에 정책 발전이 필요하지 않음
<큐-러닝>
- 모델없이 학습하는 강화 학습 기법 중 하나
- 마르코프 결정 과정에서 최적의 정책을 찾는데 사용
큐-러닝
- 에이전트가 주어진 상태에서 행동을 취했을 경우 받을 수 있는 보상의 기댓값을 예측하는 큐-함수를 사용하여 최적화된 정책을 학습하는 강화 학습 기법
- 여러 실험을 반복하여 최적의 정책을 학습함
- 큐-러닝의 학습 절차
- 1) 초기화: 큐-테이블에 있는 모든 큐 값을 0으로 초기화
- 2) 행동 a를 선택하고 실행(종료 상태에 도달할 떄까지 2) ~ 5)를 반복)
- 3) 보상 r과 다음 상태 s'를 관찰
- 4) 상태 s'에서 가능한 모든 행동에 대해 가장 높은 큐 값을 갖는 행동인 a'를 선택
- 5) 아래 공식을 이용하여 상태에 대한 큐 값을 업데이트
- 큐-러닝의 학습 절차
- 에이전트가 취할 수 있는 상태 개수가 많은 큐-테이블 구축에 한계가 있거나 데이터 간 상관관계로 학습이 어려운 경우 큐-러닝은 잘 동작하지 않음
딥 큐-러닝
- 딥 큐-러닝은 합성곱 신경망을 이용하여 큐-함수를 학습하는 강화 학습 기법임
- 이때 합성곱층을 깊게 하여 훈련할 떄, 큐 값의 정확도를 높이는 것을 목표로 함
- 강화 학습을 위한 시뮬레이션 환경을 제공(강화 학습을 위한 시뮬레이션 환경을 구현하는데 중요한 함수 세 개가 있음)
- reset(): 환경을 초기화할 때 사용
- step(): 에이전트에 명령을 내리는 함수
- render(): 화면에 상태를 표시하는 역할
- 타킷 큐-네트워크
- 큐-러닝에서는 큐-함수가 학습되면서 큐 값이 계속 바뀌는 문제가 있었는데, 딥 큐-러닝에서는 이 문제를 해결하기 위해 타킷 큐-네트워크를 사용(DQN에서는 수렴을 원활하게 시키기 위해 타깃 큐-네트워크를 계속 업데이트하는 것이 아니라 주기적으로 한 번씩 업데이트 함)
- 리플레이 메모리
- 에이전트가 수집한 데이터를 저장해 두는 저장소로 큐-러닝에서는 데이터 간의 상관관계로 학습 속도가 느려지는 문제가 있는데 이를 메모리를 도입하여 해결함
- 에이전트 상태가 변경되어도 즉시 훈련시키지 않고 일정 수의 데이터가 수집되는 동안 기다리며, 일정 수의 데이터가 리플레이 메모리에 쌓이게 되면 랜덤하게 데이터를 추출하여 미니 배치를 활용해서 학습함
- 합성곱 신경망을 활용한 큐-함수
- 딥 큐-러닝은 큐 값의 정확도를 높이려고 합성곱 신경망을 도입함
<몬테카를로 트리 탐색>
- 알파고에서 사용된 알고리즘으로 유명함
- 바둑처럼 다양한 경우의 수를 고려해야 할 때 주로 사용함
몬테카를로 트리 탐색 원리
- 모든 트리 노드를 대상으로 탐색하는 대신 게임 시뮬레이션을 이용하여 가장 가능성이 높아 보이는 방향으로 행동을 결정하는 탐색 방법임(경우의 수가 많을 떄 순차적으로 시도하는 것이 아닌 무작위 방법 중 가장 승률이 높은 값을 기반으로 시도하는 것)
- 몬테카를로 트리 탐색 알고리즘
- 선택: 루트 R에서 시작하여 현재까지 펼쳐진 트리 중 가장 승산 있는 자식 노드 L을 선택(아래 수식 이용)
- 확장: 노드 L에서 게임이 종료되지 않는다면 하나 또는 그 이상의 자식 노드를 생성하고 그중 하나의 노드 C를 선택함
- 시뮬레이션: 노드 C에서 랜덤으로 자식 노드를 선택하여 게임을 반복 진행
- 역전파: 시뮬레이션 결과로 C, L, R까지 경로에 있는 노드들의 정보를 갱신
출처: 서지영(2022). 딥러닝 파이토치 교과서. p638-p680.
'파이토치' 카테고리의 다른 글
[딥러닝 파이토치 교과서] 생성 모델 (0) | 2023.07.23 |
---|---|
[딥러닝 파이토치 교과서] 클러스터링 (0) | 2023.06.24 |
[딥러닝 파이토치 교과서] 자연어 처리를 위한 임베딩 (0) | 2023.06.18 |
[딥러닝 파이토치 교과서] 자연어 전처리 (0) | 2023.06.18 |
[딥러닝 파이토치 교과서] 성능 최적화 (0) | 2023.06.17 |