강화학습

coticoger·2025년 8월 31일

강화학습

목록 보기
1/2

※이 내용은 "파이토치와 유니티 ML-Agents로 배우는 강화학습" (민규식,이현호,김영록,정유정,정규열)책을 토대로 정리하였다.

강화학습은 에이전트가 환경과 상호작용하고, 이 환경에는 보상이라는 기준이 있어 다양한 시행착오를 겪어가며 보상을 최대화하는 방향으로 학습함.

강화학습은 순차적으로 행동들을 선택하면서 보상을 최대화하는 의사 결정 전략인 순차적 결정 문제임. 이런 순차적 결정 문제를 수학적으로 정의한 것이 MDP(Markov decision process)이다.

MDP는 상태(state), 행동(action), 보상 함수(reward fucntion), 감가율(discount factor), 상태 변환 확률(state transition probability)로 구성되어 있음.

✅ 에이전트(agent)

강화학습에서 의사결정을 하는 대상

✅ 환경(environment)

에이전트의 의사 결정을 반영하고 에이전트에게 정보를 주는 역할

✅ 관측(observation)

환경에서 제공해주는 정보. 현재 스텝의 관측은 OtO_t로 표기함.

GridWorld

✅ 상태(state)

에이전트는 상태를 기반으로 의사 결정을 함. 상태는 에이전트가 의사 결정하는 데 사용하기 위해 관측, 행동 등을 가공한 정보임. 현재 스텝의 상태는 sts_t라고 표기함.

 - 이전 스텝의 관측값들을 저장했다가 이 정보를 상태로 넘겨 줄 수 있음
 - 이전 스텝의 관측값과 이전 스텝의 행동을 같이 합쳐서 줄 수 있음
 - 관측 정보 모두를 상태로 에이전트에게 넘겨 줄 수 있음
 - 원하는 정보만 골라서 상태로 넘겨 줄 수 있음

✅ 행동(action)

에이전트가 의사 결정을 통해 취할 수 있는 행동. 현재 상태에서 취하는 행동을 ata_t라고 표기함.

- 이산적인(discrete) 행동 : 선택지가 있고, 그중 하나를 선택함
- 연속적인(continuous) 행동 : 선택지마다 특정양을 수치로 입력하여 행동함

✅ 스텝(step)

에이전트가 특정 상태에서 한번 행동을 취하여 다음 상태가 되는 경우를 1 스텝이라한다

✅ 에피소드(episode)

에이전트가 1 스텝씩 계속 행동으 취해서 게임 한판이 종료되는 경우 1 에피소드

이산적인 행동에서는 에이전트는 위쪽, 아래쪽, 왼쪽, 오른쪽 중 하나를 선택하여 한 칸을 이동함.
연속적인 행동에서는 x축으로 -2.3, y축으로 0.9만큼 이동하는 것처럼 해당 수치만큼 이동이 가능함.

✅ 보상 함수(reward function)

에이전트가 특정 상태에서 특정 행동을 했을 때 보상을 받게 되고, 에이전트는 이 보상 정보를 통해 학습을 진행함. 현재 상태 ss에서 특정 행동 aa를 했을 때 얻는 보상의 기댓값을 RsaR^a_s라고 표기함. 보상 함수 수식은 다음과 같음

Rsa=E[Rt+1St=s,At=a]R^a_s = E\left[R_{t+1} \mid S_t=s,A_t=a\right]

수식에서 tt는 현재 스텝을 의미함. 따라서 RsaR^a_s는 현재 상태 ss에서 행동 aa를 취해서 얻을 수 있는 보상 Rt+1R_{t+1}의 기댓값을 의미함

에이전트가 오른쪽 행동을 선택하면 다음 상태는 현재 상태의 오른쪽 칸이 됨. 현재 상태에서 에이전트가 왼쪽으로 이동하면 보상으로 1을 얻음. 즉, 다음과 같은 함수의 형태로 표현할 수 있음

Rsa={1if a=left0otherwiseR^a_s = \begin{cases} 1 & \text{if } a = left \\ 0 & \text{otherwise} \end{cases}

✅ 상태 변환 확률(state transition probability)

상태 ss에서 행동 aa를 했을 때 다음 상태가 ss'이 될 확률을 의미함. 상태 변환 확률은 PssaP^a_{ss`}으로 표기함

에이전트가 현재 상태에서 왼쪽으로 이동하는 행동을 선택했을 때 특정 확률에 따라 다음 상태가 왼쪽으로 한 칸 이동한 경우(s)(s'), 바닥이 빙판이라 왼쪽으로 2칸 이동한 경우(ss''). 왼쪽으로 한 칸 이동하는 행동(aa)를 선택했을 때 왼쪽으로 한 칸(ss') 이동할 확률이 90%이고 왼쪽으로 2칸(ss'') 이동할 확률이 10%라면 상태 변환 확률은 Pssa=0.9,Pssa=0.1P^a_{ss'}=0.9,P^a_{ss''}=0.1이 된다.

✅ 정책(policy)

정책은 특정 상태에서 취할 수 있는 행동을 선택할 확률 분포를 의미함. π\pi라고 표기하며, 아래 그림과 같이 현재 상태에서 취할 수 있는 행동들에 대한 확률을 의미함.

현재 상태 ss에서 정책을 이용하여 가능한 행동들에 대한 확률을 수식적으로 표현하면 다음과 같다

π(as)={0.4  if a=up0.4  if a=left0.1  if a=down0.1  if a=right\pi(a\mid s) = \begin{cases} 0.4 \ \ if \ a = up \\ 0.4 \ \ if \ a = left \\ 0.1 \ \ if \ a = down \\ 0.1 \ \ if \ a = right \end{cases}

강화학습에서는 에피소드가 끝나면 지나왔던 상태에서 했던 행동에 대해 정보를 기록함. 그리고 그 정보를 이용하여 그 다음 에피소드에 의사 결정을 함. 또 에피소드가 끝나면 이 에피소드를 통해 얻었던 정보로 기록을 업데이트하는 과정을 반복함.

어떤 정보를 기록하면 좋은 의사 결정을 할 수 있을까? 미래에 대한 정보를 미리 알면 좋은 의사 결정을 할 수 있다. 따라서 tt 스텝에서 받았던 보상 Rt+1R_{t+1}부터 에피소드가 끝날 때까지 받았던 보상들을 더한 것을 정보로 이용함.

기록정보 초기화

에피소드 종료 후 보상의 합 기록

에이전트는 자신의 상태에서 기록한 값이 높은 행동만 하게 된다면 사과에 도착할 수 있지만 현재 빨간색 루트는 불필요한 경로를 포함하고 있음. 그러므로 아래 파란색 경로가 효율적이라고 할 수 있음

✅ 감가율(discount factor)

에이전트는 현재 기록하는 정보로는 어느 경로가 더 효율적인지 알 수 없음. 이를 보완하기 위해 감가율이라는 개념을 도입함. γ\gamma라고 표현함. 0 ~ 1 사이의 값으로 설정 하며, 1에 가까울수록 미래의 보상에 많은 가중치를 두는 것임. 감가율이 반영된 보상 정보를 기록하기 위해 tt 스텝에서 받았던 보상 Rt+1R_{t+1}부터 에피소드가 끝날 때까지 받은 보상에 감가율을 스텝 차이만큼 곱해서 더해줌.

Rt+1+γRt+2+γ2Rt+3++γTtRT1R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3}+ \cdot \cdot \cdot + \gamma^{T-t}R_{T-1}

예를 들어 t+3t+3 스텝에서 의사 결정을 통해 받은 보상 Rt+4R_{t+4}에는 감가율 γ\gamma을 3번을 곱하여 γ3Rt+4\gamma^3 R_{t+4}를 더해줌

✅ 반환값(return value)

보상에 감가율을 곱한 값. tt 스텝에서의 반환값은 GtG_t라고 표기함.

Gt=Rt+1+γRt+2+γ2Rt+3+G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdot \cdot \cdot

반환값을 기록할 때는 종료된 상태로부터 처음 상태까지 거꾸로 계산하는 것이 쉬움. 예시 환경에서 보상은 사과에 도착할 때만 얻기 때문에 각 tt 스텝의 반환값 GtG_tγTt1\gamma^{T-t}\cdot 1이다. 여기서 TT는 에피소드가 종료된 스텝을 의미한다.

하지만 에이전트가 첫 에피소드에서 빨간색 루트를 찾고 반환값이 높은 상태로만 이동하게 되면 빨간색 루트로만 이동하고 파란색 루트는 찾을 수 없게된다. 그래서 가끔 무작위로 움직여 여러 경로를 탐허해보는 것이 중요함.

앞에서 강화학습의 목적은 보상을 최대화하는 의사 결정 방법을 학습하는 것이라고 했다. 즉, 에이전트가 특정 상태에서 보상을 최대화할 수 있는 행동을 선택해야 한다. 여기서 보상을 최대화할 수 있는 행동이란 현재 상태에서 이동할 수 있는 다음 상태 중에서 가장 가치가 높은 상태로 이동할 수 있는 행동을 의미한다. 그렇다면 가치가 높은 상태란 무엇일까? 가치가 높은 상태는 그 상태의 반환값에 대한 기댓값이 높다는 것을 의미한다. 그리고 이 가치를 수식으로 표현하기 위해 가치 함수라는 개념을 도입한다.

✅ 가치 함수(value function)

가치 함수는 특정 상태에 대한 가치를 도출하는 함수이다. 이 함수는 입력으로 상태를 받고 그 상태의 가치를 출력한다. V(s)V(s)라고 표기한다.

V(s)=E[GtSt=s]V(s)=E[Rt+1+γRt+2+γ2Rt+3+St=s]V(s) = E\left[G_t\mid S_t = s\right] \\ V(s) = E\left[R_{t+1}+\gamma R_{t+2}+ \gamma^2R_{t+3}+ \cdot \cdot \cdot \mid S_t=s\right]

큐 함수를 이용하여 가치 함수를 수식으로 나타낸 결과는 다음과 같다

vπ(s)=aAπ(as)qπ(s,a)v_{\pi}(s) = \sum_{a\in A}\pi(a\mid s)q_{\pi}(s,a)

현재 상태 ss에서의 가치 함숫값은 각 행동 aa에 대한 큐 함수의 값에 해당 행동을 할 확률 π(as)\pi(a\mid s)을 곱해서 더한 값이다.

현재 상태 ss에서 가치 함수를 표기하면 V(s)=0.1V(s) = 0.1이 된다. 위 그림과 같은 상황에서 에이전트 주변의 가치가 높은 상태로만 이동하면 사과에 도착할 수 있다.

즉, 최적의 행동을 가치 함수를 통해 표현하면 다음과 같다

a=argmaxaAV(s)a^* = argmax_{a\in A}V(s')

현재 상태 ss에서 취할 수 있는 행동들 AA 중에서 최적의 행동 aa^*는 가장 높은 가치를 얻을 수 있는 다음 상태 ss'으로 이동할 수 있는 행동 aa를 의미한다.

✅ 큐 함수(Q function)

상태에서 특정 행동에 대한 가치를 도출한다. 따라서 큐 함수는 입력으로 상태와 행동을 받고 해당 상태에서 행동에 대한 가치를 출력한다.

Q(s,a)=E[GtSt=s,At=a]Q(s,a) = E\left[G_t\mid S_t=s,A_t=a\right]

현재 상태 ss에서 행동 aa를 통해 얻을 수 있는 반환값들의 평균을 의미함.

큐 함수를 가치 함수를 이용해 수식을 나타내면 다음과 같다

qπ(s,a)=Rsa+γsSPssavπ(s)q_{\pi}(s,a) = R^a_s + \gamma\sum_{s'\in S}P^a_{ss'}v_{\pi}(s')

qπ(s,a)q_{\pi}(s,a)는 현재 상태 ss에서 행동 aa를 통해 얻은 보상 RsaR^a_sγsSPssavπ(s)\gamma \sum_{s'\in S}P^a_{ss'}v_{\pi}(s')을 더한 것이다. sSPssavπ(s)\sum_{s' \in S}P^a_{ss'}v_{\pi}(s')는 가능한 다음 상태 ss'에 대한 가치 함수 vπ(s)v_{\pi}(s')에 현재 상태 ss에서 행동 aa를 했을 때 다음 상태 ss'로 넘어갈 상태 변환 확률 PssaP^a_{ss'}을 곱한 것들의 합이다.

가치 함수는 각 상태에 대해서 하나의 값만 가졌지만, 큐 함수의 경우 상태마다 취할 수 있는 행동들 각각에 가치가 정해져 있음을 볼 수 있다. 상태마다 큰 가치를 가지는 행동들을 선택하여 게임을 한 스텝씩 진행하다 보면 사과에 도달할 수 있는 것을 확인할 수 있다.

즉, 최적의 행동을 구하는 식을 큐 함수를 이용해 표현하면 다음과 같다

a=argmaxaAQ(s,a)a^* = argmax_{a\in A}Q(s,a)

현재 상태 ss에서 취할 수 있는 행동들 AA 중에서 최적의 행동 aa^*는 가장 높은 큐 함숫값을 얻을 수 있는 행동 aa로 설정하는 것을 의미한다.

✅ 벨만 방정식

가치 함수는 벨만 방정식을 이용해 업데이트함. 벨만 방정식은 현재 상태의 가치 함수와 다음 상태의 가치 함수 사이의 관계를 표현한 것이다.

vπ(s)=Eπ[GtSt=s]v_{\pi}(s) = E_{}\pi\left[G_t \mid S_t = s\right]

가치란 특정 상태에서 반환값의 기댓값을 의미함. 반환값은 감가율을 고려한 보상들의 합이므로 다음과 같이 표현된다

vπ(st)=Eπ[Rt+1+γRt+2+γ2Rt+3+St=s]v_{\pi}(s_t) = E_{\pi}\left[R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3} + \cdot \cdot \cdot \mid S_t = s\right]

위 식에서 Rt+2R_{t+2} 이후로 나오는 식을 감가율 γ\gamma로 묶어보자

vπ(st)=Eπ[Rt+1+γ(Rt+2+γRt+3+)St=s]v_{\pi}(s_t) = E_{\pi}\left[R_{t+1}+ \gamma(R_{t+2} + \gamma R_{t+3}+ \cdot \cdot \cdot) \mid S_t = s\right]

이렇게 되면 괄호 안의 부분, Rt+2+γRt+3+R_{t+2}+\gamma R_{t+3}+ \cdot \cdot \cdot 이후 부분은 다음 상태인 St+1S_{t+1}에서의 가치 함수의 식과 같아짐.

가치 함수에 대한 벨만 기대 방정식은 다음과 같음

vπ(s)=Eπ[Rt+1+γvπ(St+1)St=s]v_{\pi}(s) = E_{\pi}\left[R_{t+1}+\gamma v_{\pi}(S_{t+1}) \mid S_t = s\right]

이를 통해 현재 상태의 가치 함수를 다음 상태의 가치 함수를 이용하여 표현할 수 있다.

큐 함수에 대한 벨만 기대 방정식은 다음과 같다.

qπ(s,a)=Eπ[Rt+1+γqπ(St+1,At+1)St=s,At=a]q_{\pi}(s,a) = E_{\pi}\left[R_{t+1} +\gamma q_{\pi}(S_{t+1},A_{t+1})\mid S_t = s, A_t = a\right]

벨만 기대 방정식으로 업데이트하다 보면 양변의 차이가 0으로 수렴하게 된다. 즉 현재 정책 π\pi에 대한 가치 함수 혹은 큐 함수를 구할 수 있지만 강화학습의 목적은 최적의 의사 결정을 하여 보상을 최대화하는 것이다. 이를 위해 현재 정책에 대한 가치 함수가 아닌 최적 가치 함수를 찾아야 함.

최적의 가치 함수는 모든 가능한 정책 중 제일 높은 가치를 반환하는 가치 함수를 의미함.

v(s)=maxπvπ(s)v_*(s) = \max_{\pi}v_{\pi}(s)

이와 마찬가지로 최적의 큐 함수는 다음과 같다

q(s,a)=maxπqπ(s,a)q_*(s,a) = \max_{\pi}q_{\pi}(s,a)

최적의 가치 함수에 대한 벨만 최적 방정식은 다음과 같다.

v(s)=maxaE[Rt+1+γvπ(St+1)St=s,At=a]v_*(s) = \max_a E\left[R_{t+1}+\gamma v_{\pi}(S_{t+1}) \mid S_t = s, A_t = a\right]

최적의 큐 함수에 대한 벨만 최적 방징식은 다음과 같다

q(s,a)=E[Rt+1+γmaxaq(St+1,a)St=s,At=a]q_*(s,a) = E\left[R_{t+1} + \gamma \max_{a'}q_* (S_{t+1}, a')\mid S_t = s, A_t = a\right]

✅ 탐험

에이전트가 다양한 경험을 할 수 있도록 에이전트의 행동을 결정하는 기법

만약 에이전트가 아래로 이동하여 +1 보상을 받았다고 가정하자. 그러면 에이전트가 다시 초기 상태로 되면 +1 보상을 받기 위해 아래로 이동할 것이다. 하지만 이는 좋은 선택이 아니다. 다른 방향으로 이동하면 더 좋은 보상을 받을 수 있기 때문이다.

하지만 에이전트가 너무 다양한 경험을 추구한 경우 다양한 상태와 행동이 존재하는 환경에서 에이전트가 모든 경험을 다 해보려면 많은 시간이 필요하다. 그러므로 어느 정도 에이전트가 학습된 대로 행동하는 것도 필요하다.

✅ 이용

학습된 결과에 따라 에이전트의 행동을 결정하는 기법
기본적인 방법 중 하나는 탐욕적 방법(greedy method)로 주어진 시점에 에이전트가 가장 큰 보상을 줄 것이라고 기대하는 행동만을 선택한다.

상하좌우 네 방향의 큐 함숫값을 알고 있을 경우, 가장 큰 큐 함숫값을 가지는 행동을 선택하는 것이다. 이를 통해 해당 시점까지 학습된 큐 함숫값을 이용하여 에이전트가 행동할 수 있다.

ϵ\epsilon-greedy 기법

탐험과 이용이 적절한 밸런스를 맞춰 수행된다.
학습 초기에는 탐색을 수행할 확률을 높게 설정하고, 학습이 진행될수록 이용을 수행하는 확률을 늘려가는 방식이다.
여기서 ϵ\epsilon은 각 기법을 선택할 확률을 결정하는 값이며, 무작위 행동을 취할 확률을 의미한다. 이에 따라 1ϵ1-\epsilon은 가장 높은 큐 함숫값을 가지는 행동을 취하도록 하는 탐욕적 행동을 수행할 확률을 의미함.

ϵ\epsilon 값에 따라 어떤 행동을 취할지 결정하는 예시

ϵ\epsilon-greedy 기법은 어떻게 사용할까?

학습 초반에는 ϵ\epsilon의 값을 1로 설정함. 따라서 에이전트는 100% 무작위 탐색을 수행함. 그리고 학습이 진행됨에 따라 조금씩 ϵ\epsilon의 값을 줄여나감. 이에 따라 무작위 탐색을 수행할 확률은 조금씩 줄어들고 탐욕적 행동을 수행할 확률이 조금씩 늘어난다. 그리고 학습의 마지막 단계가 되면 ϵ\epsilon의 값을 점점 줄여나가다 일정 값으로 고정해 학습을 수행한다. 마지막으로 학습을 마무리하고 학습된 성능을 테스트할 때는 ϵ\epsilon의 값을 0으로 하여 완전히 학습된 대로 에이전트가 행동하도록 설정함.

0개의 댓글