1장 - 강화 학습이란?
시행착오를 통해 스스로 발전해 나가는 과정
=> 순차적 의사결정 문제에서 누적 보상을 최대화 하기 위해 시행착오를 통해 행동을 교정하는 학습 과정
에이전트가 액션을 하고 그에 따라 상황이 변하는 것을 하나의 루프라고 했을 때,
이 루프가 끊임없이 반복되는 것 = 순차적 의사결정 문제
2장 - 마르코프 결정 프로세스
마르코프 결정 프로세스: MDP
MDP ≡ (S, A, P, R, γ)
S: 상태의 집합
A: 액션의 집합
P: 전이 확률 행렬 \(P_{ss'}^a\) 현재 상태가 s이며 에이전트가 액션 a를 선택했을 때 다음 상태가 s'이 될 확률
R: 보상 함수
γ : 감쇠인자
상태 가치 함수 v(s) = 현재 s에서 미래 받을 수 있는 누적 보상의 평균 (액션은 π에 의해서 한다고 치고)
= 현재 어떤 행동을 할 지 모르지만 현재 상태만으로 미래 보상들의 확률
\(v_\pi(s) = E_\pi[r_{t+1} + \lambda r_{t+2} + \lambda^2 r_{t+3} + ... | S_t = s] = E_\pi[G_t | S_t = s]\)
s부터 끝까지 π를 따라서 움직일 때 얻는 리턴의 기댓값
액션 가치 함수 q(s,a) = 현재 상태 s에서 a라는 행동을 했을 때 그 이후에 벌어질 보상들의 평균
\(q_\pi(s, a) = E_\pi[G_t | S_t = s, A_t = a]\)
s에서 a를 선택하고, 그 이후에는 π를 따라서 움직일 때 얻는 리턴의 기댓값
π*(최적 정책)를 따를 때의 가치 함수를 최적 가치 함수라고 하며 v*라고 표기한다.
π*와 v*를 찾으면 이 MDP는 풀렸다고 말할 수 있다.
3장 - 벨만 방정식
무언가 정책 가 주어져 있고, 를 평가하고 싶을 때에는 벨만 기대방정식을 사용한다.
최적의 밸류를 찾는 일을 할 때에는 벨만 최적 방정식을 사용한다.
벨만 기대 방정식 = 주어진 정책 아래에서 상태 가치를 계산하는 방정식
벨만 기대 방정식은 현재 상태에서 어떤 행동을 취한 후에 기대되는 보상의 기댓값을 나타냄.
주어진 정책에 대한 상태 가치 함수를 업데이트하고자 할 때 사용된다.
정책이 주어졌을 때, 현재 상태에서의 가치를 주변의 상태들과 그 상태들의 가치를 고려하여 업데이트한다.
벨만 최적 방정식 = 최적 정책을 찾기 위한 방정식으로 최적 가치 함수를 정의.
각 상태에서의 최적 가치 함수는 현재 상태에서 가장 높은 가치를 가지는 행동을 선택하는 것이 목표
= 해당 상태의 최대 예상 누적 보상으로 정의
최적 정책을 찾기 위한 핵심 도구로 사용된다.
최적 가치 함수를 업데이트하고 이를 이용해 최적 정책을 찾는 것이다.
4장 - MDP를 알 때의 플래닝
MDP에 대한 모든 정보를 알 때, 주어진 정책 의 상태별 밸류 \(v_\pi(s)\)를 구하는 방법과 최적 정책 *를 찾는 2가지 방법에 대해 배운다.
정책 이터레이션은 평가 단계에서 사용하는 의 밸류를 찾는다. --> 정책을 개선하는 데 초점 --> 최적 정책을 찾음
밸류 이터레이션에서는 최적 정책의 밸류를 찾는다. --> 상태 가치 함수를 개선 --> 최적 가치 함수를 찾음, 최적 정책은 각 상태에서 최대 가치를 갖는 행동을 선택하는 것.
정책 이터레이션: 임의의 정책에서 시작해 정책을 평가하여 밸류를 계산하고 계산한 밸류에 대해 그리디 정책 만드는 과정 반복
1. 정책 평가:
- 초기에 임의의 정책(policy)을 선택
- 그 정책에 대한 상태 가치 함수를 계산. 이는 현재 정책을 따를 때의 각 상태에서의 예상 누적 보상을 나타낸다.
- 가치 함수가 수렴할 때까지 반복
2. 정책 개선:
- 정책 평가 후, 현재의 정책을 개선한다.
- 각 상태에서 가능한 모든 행동 중에서 가치 함수가 높은 행동을 선택하여 새로운 정책을 만든다.
3. 수렴 검사:
- 새로운 정책이 이전 정책과 같아질 때까지 반복
- 최적 정책과 최적 가치 함수를 찾는다.
밸류 이터레이션: 최적 정책의 밸류를 찾음.
최적 정책을 찾는 것이 목적이나 최적 밸류를 구한 이유는 MDP를 모두 아는 상황에서 최적 밸류를 알면 최적 정책을 얻을 수 있기 때문.
모든 상태에 대해 가치 함수를 업데이트하며 최적 가치 함수를 찾고 이를 통해 최적 정책 도출,
현재 가치 함수를 이용해 다음 단계 최적 가치함수 계산 (벨만 최적 방정식으로 업데이트)
1. 가치 함수 초기화:
- 모든 상태에 대한 가치 함수를 임의의 값으로 초기화
2. 가치 함수 업데이트:
- 모든 상태에 대해 다음과 같이 가치 함수를 업데이트
- 모든 상태에 대해 벨만 최적 방정식을 한 번에 해결하는 것이 특징이다.
3. 수렴 검사:
- 가치 함수가 수렴할 때까지 2단계를 반복
- 최적 정책은 각 상태에서 최대 가치를 갖는 행동을 선택하는 것이다.
5장 - MDP를 모를 때 밸류 평가하기
보상 함수와 전이 확률을 모른다는 것 = 모델프리 상황
모델 프리 상황에서의 prediction, 즉 가 주어졌을 때 가치를 평가하는 2가지 방법에 대해 배울 것이다.
MDP에 대한 정보를 몰라도 각 상태의 가치를 평가할 수 있게 되었다.
(해당 정책을 따라서 에이전트가 움직이게 한 다음에 에이전트가 쌓은 경험으로부터 각 상태의 가치를 학습하는 방식으로)
몬테카를로 학습
: 모델 프리에서 여러 에피소드의 반환값(누적보상)의 평균으로 가치 함수 추정
[ 그리드월드 예제 ]
칸의 상태 N(s):방문횟수 , V(s):리턴의 총합(경험했던)
모든 칸의 N(s)와 V(s) 업데이트 -> 경험 쌓기 -> 테이블 업데이트 반복
이를 충분히 했다고 판단되면 평균을 구함
진행과정
- 에피소드를 진행하면서 각 상태-행동 쌍의 반환값(누적 보상)을 계산
- 각 상태-행동 쌍의 반환값을 모아서 해당 상태-행동의 평균을 계산하여 가치 함수를 업데이트한다.
- 이러한 과정을 여러 에피소드에 대해 반복하여 가치 함수를 수렴시킨다.
Temporal Difference 학습
에피소드가 끝나지 않더라도 v값 업데이트
현재 상태 보상과 다음 상태의 가치 함수를 이용해 가치 함수 업데이트
벨만 기대방정식 0단계를 이용해 몬테카를로에서 리턴을 여러개 모았던 것처럼 \(r_{t+1} + \gamma v_{\pi} (s_{t+1})\) 의 값을 여러 개 모은다.
TD 알고리즘이 MC와 다른 점은 2가지 = 업데이트 수식, 업데이트 시점
\(s_0 \to s_1 \to s_2 \to s_3 \to s_7 \to s_6 \to s_{10} \to s_{11} \to s_T\)
- 단계마다 -1의 보상을 받는다.
- 총 8번의 상태 전이 = 종료 상태를 제외한 8개의 상태에 대해 값 업데이트 가능
- 여기서 차이점은 종료 상태에 도달하기 전에, 각각의 상태 전이가 일어나자마자 바로 테이블의 값을 업데이트해줄 수 있다는 것이다.
6장 - MDP를 모를 때 최고의 정책 찾기
최고의 정책을 찾는 방법인 몬테카를로 컨트롤, SARSA, Q러닝
몬테카를로 컨트롤
MDP를 모를 때 정책 이터레이션을 그대로 사용할 수 없는 이유
MDP를 알 경우 평가단계에서는 반복적 정책 평가를, 개선단계에서는 그리디 정책 생성을 이용
문제
- 평가단계에서 반복적 정책 평가를 사용할 수 없다.
- 개선단계에서 그리디 정책을 만들 수 없다.
해결방법
- 평가자리에 MC
- V 대신 Q -> v(s) 대신에 액션 가치 함수인 q(s,a) 활용
액션 가치 함수인 q(s,a) : 어떤 상태에서 어떤 액션을 했다고 했을 때 얻는 기대치. (2장에 있음)
S의 상황 | \(a_1\)의 액션을 할 때 | \(q_\pi (s, a_1)\) : 200원 |
S의 상황 | \(a_2\)의 액션을 할 때 | \(q_\pi (s, a_2)\) : 100원 |
즉, 몬테카를로 컨트롤이란
정책평가 때는 MC로 q(s,a) 구하고
정책개선 때는 q(s,a)에 대한 ε-greedy 정책 만듦 (ε이라는 작은 확률로 랜덤하게 액션 선택)
정책이 바뀌지 않을 때까지 이를 반복해 최적의 정책 get
SARSA
TD를 이용해 q(s,a)를 구해보자. TD를 이용해 Q를 계산하는 접근법을 가리키는 이름은 SARSA이다.
에이전트를 환경에 던져 놓고, 에이전트가 자신의 정책 함수 \(\pi\)를 이용해 자유롭게 거닐게 하다가 한 스텝의 데이터가 생성될 때마다 이 데이터를 통해 TD 타깃을 계산하여 기존의 테이블에 있던 값들을 조금씩 업데이트해 나가는 방식
Q러닝
SARSA와 마찬가지로 TD를 이용해 최적의 정책을 찾는 방법이다.
SARSA와 Q러닝 모두 TD를 이용한 컨트롤 방법론인데 그 차이는 무엇일까?
SARSA는 on-policy이고, Q러닝은 off-policy인 것이다.
on-policy : 타깃 정책과 행동 정책이 같은 경우
off-policy : 타깃 정책과 행동 정책이 다른경우
SARSA : \(Q(S, A) \gets Q(S, A) + \alpha (R + \gamma Q(S', A') - Q(S, A))\)
Q러닝 : \(Q(S, A) \gets Q(S, A) + \alpha (R + \gamma \; \underset{A'}{\mathrm{max}} \; Q(S', A') - Q(S, A))\)
SARSA는 on-policy이고, Q러닝은 off-policy인 이유는 무엇일까?
SARSA | Q러닝 | |
행동정책 | Q에 대해 ε-greedy |
Q에 대해 ε-greedy |
타깃정책 | Q에 대해 ε-greedy |
Q에 대해 greedy |
행동 정책에는 탐험을 위한 ε값이 들어가 있는 반면 타깃 정책은 순수하게 Q값이 가장 높은 액션을 선택하는 방식인 greedy방식을 따르고 있다. 행동 정책과 타깃 정책이 다른 것이다.
비교
- On-Policy vs. Off-Policy:
- 몬테 카를로 컨트롤은 On-Policy 알고리즘이며, 현재 정책을 평가하고 개선
- SARSA도 On-Policy이며, 현재 정책을 사용하여 행동하고 가치를 업데이트
- Q-러닝은 Off-Policy로, 현재 정책과는 관계 없이 최적의 행동을 찾아나감
- 학습 속도 및 안정성:
- 몬테 카를로 컨트롤은 에피소드가 끝날 때까지 기다려야 하므로 학습이 느릴 수 있다.
- SARSA는 On-Policy로서 안정적인 학습이 가능
- Q-러닝은 Off-Policy로서 빠르게 학습할 수 있지만, 초기에는 탐험과 이용 사이의 균형을 맞추어야 할 필요가 있다.
8장 - 가치 기반 에이전트 & 9장 - 정책 기반 에이전트
가치 기반 에이전트는 가치 함수에 근거하여 액션을 선택 액션-가치 함수 q(s,a)의 값을 보고 액션을 선택
정책 기반 에이전트는 정책 함수 (a|s)를 보고 직접 액션을 선택.
밸류를 보고 액션을 선택하지 않으며, 가치 함수를 따로 두지도 않는다.
액터-크리틱은 가치 함수와 정책 함수 모두 사용한다.
액터 = 정책 , 크리틱 = 가치 함수 v(s) 또는 q(s,a)
8장 - 가치 기반 에이전트
가치 기반 에이전트는 명시적 정책이 따로 없다. 즉 없이 액션-가치 함수 q(s,a)를 이용한다.
q(s,a)는 각 상태 s에서 액션별 가치를 나타낸다. 따라서 각 상태에서 가장 가치가 높은 액션을 선택하는 식으로 정책을 만들 수 있다.
가치 함수는 밸류만 평가하는 함수인데 이를 마치 정책 함수처럼 사용하는 것이다. 이런 경우의 정책 함수를 내재된 정책이라고 한다.
이번에 배울 딥 Q러닝은 q(s,a)를 내재된 정책으로 사용한다. 챕터 6에서 배운 내용과 같으나 테이블 기반 방법론이 아닌 뉴럴넷을 이용하여 q(s,a)를 표현한다.
Q러닝을 복습해보자면 Q러닝은 결국 벨만 최적 방정식을 이용해 \(Q_*\)s,a)를 학습하는 내용이었다.
\(\begin{equation} \begin{split} Q_*(s, a) &= \mathbb{E}_{s'} \left [ r + \gamma \underset{a'}{\mathrm{max}}Q_*(s', a') \right ] \\ Q(s, a) \gets Q(s, a) &+ \alpha (r + \gamma \underset{a'}{\mathrm{max}}Q(s', a') - Q(s, a)) \end{split} \end{equation}\)
딥 Q러닝은 여기까지의 내용을 뉴럴넷으로 확장하기만 하면 된다. 뉴럴넷을 이용해 Q(s,a) 함수를 표현하기 때문에 \(Q_{\theta} (s, a)\)라고 표기하자. (는 뉴럴넷의 파라미터 벡터)
- 테이블의 업데이트 식을 보면 정답인 r + \(\gamma \underset{a'}{\mathrm{max}}\)(s', a')와 현재 추측치인 Q(s,a) 사이 차이를 줄이는 방향으로 업데이트
- 뉴럴넷은 r + \(\gamma \underset{a'}{\mathrm{max}}\)Q(s', a') 를 정답이라고 보고 이것과 \(Q_{\pi_{\theta}} (s, a)\)사이 차이의 제곱을 손실함수로 정의
9장 - 정책 기반 에이전트
먼저 정책 기반 에이전트가 왜 필요한지에 대해 설명해본다.
1. 가치 기반 에이전트가 액션을 선택하는 방식은 결정론적이다.
이 에이전트가 가위바위보를 한다면 어떨까? 계속 정해진 하나의 패만 내고 상대가 전략을 수정할 수 있다면 쉽게 간파당할 것이다. 이에 반해 정책 기반 에이전트는 확률적 정책을 취할 수 있다.
2. 액션 공간이 연속적인 경우 대처 가능
또한 액션 공간이 연속적일 경우(0에서 1사이의 모든 실수 값이 액션으로 선택 가능한 상황)
연속적 액션 공간에서는 액션이 무한이기 때문에 일일이 넣어볼 수 없고 결국 최적화 문제를 하나씩 푸는 셈
= 즉 Q(s,a) 기반 에이전트가 작동하기 힘들다.
그러나 정책 기반 에이전트는 (s)가 주어져 있다면 바로 액션을 정할 수 있기에 문제가 없다.
즉, 뉴럴넷을 이용해 정책을 강화하는 것이 목적이다.
정책 네트워크를 \(\pi_{\theta} (s,a)\)라고 하자. 그라디언트 업데이트를 위해서는 손실함수가 필요하다. 손실함수를 어떻게 정의하지?
정답을 모르기 때문에 정책 네트워크를 업데이트할 때는 손실 함수를 줄이는 방향이 아닌 정책을 평가하는 기준을 세워서 그 값을 증가시키도록 하는 방향으로 그라디언트 업데이트를 하고자 한다.
평가함수 :
정책을 어떻게 평가할까?
보상의 합이 큰 정책이 좋은 정책일 것이다. (에피소드마다 서로 다른 보상이기에 기댓값 연산자 필요)
\(J(\theta) = \mathbb{E}_{\pi_{\theta}} \left [ \sum_t r_t \right ]\)
그리디언트 기반으로 \(J(\theta)\)를 최대화
\(\theta' \gets \theta + \alpha * \nabla_{\theta} J(\theta)\)
1) REINFORCE 알고리즘
이론적 배경
\(\nabla_{\theta}J(\theta) = \mathbb{E}_{\pi_{\theta}} [ \nabla_{\theta} \log \pi_{\theta}(s, a) * G_t ]\)
- \(Q_{\pi_{\theta}} (s, a)\)자리에 리턴 G가 들어갔다.
- 리턴의 샘플을 여러 개 얻어서 평균을 내면 액션-밸류인 \(Q_{\pi_{\theta}} (s, a)\)에 근사해지기 때문에
2) 액터 크리틱
정책 네트워크와 밸류 네트워크를 함께 학습하는 액터-크리틱 방법론에 대해 배워보자.
그중 Q 액터-크리틱, 어드밴티지 액터-크리틱, TD 액터-크리틱을 설명한다.
Q 액터-크리틱
REINFORCE 알고리즘은 \(Q_{\pi_{\theta}} (s, a)\)자리에 그 샘플인 리턴 \(G_t\)를 사용한다. 그대로 \(Q_{\pi_{\theta}} (s, a)\)를 사용하면 그게 곧 Q 액터-크리틱이다.
학습: \(\theta\)로 파라미터화된 정책 네트워크 \(\pi_{\theta}\)와 w로 파라미터화 된 밸류 네트워크\(Q_w\)
- \(\pi_{\theta}\)는 실행할 액션 a를 선택하는 액터 역할
- \(Q_w\)는 선택된 액션 a의 밸류를 평가하는 크리틱 역할
학습 시에는 Q 함수의 TD 오차를 최소화하여 액터와 크리틱을 동시에 학습.
어드밴티지 액터-크리틱
만약 운 좋게 밸류가 아주 높은 상태 s'에 도달했다고 가정하자. 어떤 액션을 취하든 리턴이 높다.
\(Q(s', a_0)\) = 1000, \(Q(s', a_1)\) = 1500
--> 이 둘의 차이를 학습하기 위해서는 무수히 많은 샘플이 필요할 수 있음.
대안
\(\nabla_{\theta}J(\theta) = \mathbb{E}_{\pi_{\theta}} \left [ \nabla_{\theta} \log \pi_{\theta}(s, a) * \{Q_{\pi_{\theta}} (s, a) -V_{\pi_{\theta}}(s)\} \right ]\)
위와 같이 모든 상태에서 업데이트할 때, 각 상태의 밸류인 \(V_{\pi_{\theta}}(s)\)를 빼주고자 한다.
\(Q_{\pi_{\theta}} (s, a) -V_{\pi_{\theta}}(s)\)는 상태 s에 있는 것보다 액션 a를 실행함으로써 추가로 얼마의 가치를 더 얻게 되느냐 하는 것이다.
TD 액터-크리틱
액터-크리틱은 3쌍의 뉴럴넷을 필요로 한다. TD 액터-크리틱은 \(Q_w\)를 필요없게 해준다.
TD 에러 =
δ는 A(s,a)의 불편 추정량
δ는 같은 상태 s에서 같은 액션 a를 선택해도 상태 전이가 어떻게 일어나느냐에 따라 매번 다른 값을 얻게 된다. 이 값을 여러개 평균내면 그 값이 A(s,a)로 수렴한다는 뜻이다.
존 어드벤티지 액터-크리틱에서의 policy gradient 수식을 다음과 같이 변형 가능
\(\nabla_{\theta}J(\theta) = \mathbb{E}_{\pi_{\theta}} \left [ \nabla_{\theta} \log \pi_{\theta}(s, a) * \delta \right ]\)
- Q 액터-크리틱: 크리틱이 상태-행동 쌍에 대한 Q 함수를 평가하며, 학습 목표는 Q 함수의 TD 오차를 최소화하는 것이다.
- 어드밴티지 액터-크리틱: 크리틱이 어드밴티지 함수를 평가하며, 정책 그래디언트 방법을 사용하여 정책을 최적화한다.
- TD 액터-크리틱: 크리틱이 TD 오차를 평가하며, 학습 목표는 TD 오차를 최소화하고 액터는 정책을 업데이트한다.
'바닥부터 배우는 강화 학습' 카테고리의 다른 글
[ 바닥부터 배우는 강화 학습 ] 10. 알파고와 MCTS (1) | 2024.01.09 |
---|---|
[ 바닥부터 배우는 강화 학습 ] 09. 정책 기반 에이전트 (2) | 2024.01.08 |
[ 바닥부터 배우는 강화 학습 ] 08. 가치 기반 에이전트 (1) | 2024.01.08 |
[ 바닥부터 배우는 강화 학습 ] 05. MDP를 모를 때 밸류 평가하기 (3) | 2024.01.02 |
[ 바닥부터 배우는 강화 학습 ] 06. MDP를 모를 때 최고의 정책 찾기 (0) | 2023.11.23 |