상세 컨텐츠

본문 제목

[강화학습] 2. MDP와 벨만 방정식

인공지능/강화학습

by Na느님 2023. 9. 20. 18:54

본문

  • 이 포스트는 '파이썬과 케라스로 배우는 강화학습'이라는 책을 바탕으로 스스로 공부한 내용을 정리한 포스트입니다.
MDP와 벨만 방정식에 대해 공부한다. 여기를 제대로 이해해야 다음 내용들을 쉽게 이해할 수 있다. 이 부분은 특히 충분한 시간을 가지고 공부하자.

 

 

MDP

MDP는 강화학습을 위한 문제(Problem)를 표현하기 위한 구성요소이다.

-> 순차적 행동 결정 문제를 수학적으로 엄밀하게 정의한 것이다.

MDP는 다음과 같은 요소로 이루어져 있다.

1. 상태

2. 행동

3. 보상 함수

4. 상태 변환 확률

5. 할인율

 

(중요!) MDP를 정해주고 설계하는 존재는 사람이다. 사람과는 달리 에이전트는 스스로 문제를 정의할 수 없기 때문이다.

즉 하이퍼파라미터인 셈이다.

 

상태

S는 특정 요소에 대하여 가질 수 있는 상태값들의 집합이다.

-> 예를 들어 S가 위치를 뜻하는 집합이라면 S의 원소들은 점들의 좌표가 될 수 있다.

내가 정의하는 상태가 에이전트에게 충분한 정보를 주는가?를 따져야 한다.

 

(주의!) 특정 순간에서 에이전트가 집합에서 어떤 원소를 뽑는가는 확률적이다. 즉 집합의 원소는 확률변수이다

 

행동

A는 에이전트가 할 수 있는 모든 행동들의 집합이다.

 

보상 함수

보상 함수란 환경이 에이전트의 상태, 행동을 바탕으로 에이전트에게 정보를 주는 함수이다.

특정 상태 s에서 특정 행동 a를 했을 때 보상값을 받게 될 텐데 이 보상값들의 확률변수를 R이라고 한다.

1. 보상함수는 현재 상태, 현재 행동을 입력으로 하여 계산된다.

2. 특정 상태, 행동에 대한 보상값 확률변수 R의 기댓값을 출력으로 사용

3. 보상을 주는 타이밍은 현재+1 시점이다. 즉 다음 timestep에 보상이 지급된다.

 

(주의!) R도 하나의 확률변수이다. 즉 특정 상태에서 특정 행동을 취했을 때, 각각의 값은 특정 확률로 지급된다. R이라는 확률변수의 확률분포는 시간, 상태, 행동에 따라 결정된다.

 

(주의!) 보상값 R과 보상함수 r(s, a)를 혼동하지 말아야 한다! R은 확률변수이고 그것의 기댓값이 r이다.

 

상태 변환 확률

현재 상태와 현재 행동을 기준으로 각각의 특정한 상태로 변환될 확률이다.

상태 변환 확률값은 에이전트가 아닌 환경의 일부이다.

 

할인율

똑같은 보상을 받더라도 나중에 받는 보상은 가치를 더 낮게 매기는 개념이다.

할인율은 보상값 R에 하나의 timestep마다 한 번씩 곱하는 형식이다. (등비수열처럼)

-> 당연히 0과 1 사이의 값이다.

 

정책

정책은 모든 상태에서 에이전트가 할 각각의 행동이다.

-> 쉽게말해 상태집합의 모든 상태들의 원소를 행동집합에 매핑(1대1매핑은 아님)시켰다고 보면 된다.

(주의!) 하나의 상태가 반드시 하나의 행동으로 매핑되어야 하는 건 아니다! 하나의 상태에 대해 여러 행동들이 확률적으로 매핑될 수도 있다.

 

(중요!) 강화학습의 목표는 이 정책을 꾸준히 수정해서 최적정책으로 만드는 것이다!

최적정책은 하나의 상태마다 하나의 행동만(1에 가까운 확률) 매핑된 상태이다.

 

요약

에이전트가 특정 시간대에 행동을 취하면, 다음 시간대에 환경이 보상다음 상태를 주입한다.

 

 

가치함수

에이전트가 다음 시점에서 받으리라 기대하는 보상을 계산하는 함수이다.

 

반환값

반환값이란 에이전트가 특정 시간 t에서 특정 상태가 될 때까지 행동을 계속하여 받는 보상들의 합이다. 보상을 받는 시점을 고려한(할인율 적용) 보상값들의 합이다.

감마 기호는 할인율이고 반환값은 G로 표현한다.

 

가치함수의 구성

가치함수는 특정 시간 t에서 특정한 상태 s에 있다고 가정할 때, t시점의 반환값 G의 기댓값이다.

-> 그러니까 가치함수를 좀 더 쉽게 말하자면 현재 어떤 상태로 있을 때, 시간에 따른 연속적인 행동의 모든 경우의 수를 다 계산한 뒤 그것에 대한 기댓값을 구하는 것이다.

확률변수인 R이 들어가 있기 때문에 G역시 확률변수이다.

가치함수에서 식을 변형하여 가치함수 안에 가치함수가 있는 recursion방식으로 고치면 벨만 기대 방정식이 나온다.

벨만 기대 방정식

파이 기호가 있는 것은 해당 연산을 할 때, 확률로써 정책을 사용하겠다는 의미이다.

벨만 기대 방정식은 현재 상태의 가치함수와 다음 상태의 가치함수 사이의 관계를 말해주는 방정식이다.

-> 현재 상태가 s일 때, '모든' 확률적인 다음 상태에 대한 가치함수들의 기댓값이라고 생각하자.

->-> 여기서 확률적인 다음 상태에서 '확률적인' 이라는건 상태 변환 확률을 말한다. 만약 어떤 행동을 하기로 했을 때, 그 행동이 무조건 보장된다면(상태변환확률 = 1) 다음상태는 '모든'이 아닌 '바로 그' 상태가 된다.

->->-> 계산 가능한 벨만 기대 방정식을 참고하자.

 

(중요!) '모든 상태'는 각각의 가치함수를 가지고 있다. 후술할 큐함수도 마찬가지다.

'다음' 가치함수를 통해 현재 가치함수를 계산한다.

-> 다음 timestep에 가능한 모든 상태들의 가치함수를 통해 현재의 가치함수를 업데이트한다.

 

강화학습은 결국 벨만 방정식을 어떻게 다루느냐가 이슈이다.

-> 에이전트는 가치함수를 통해 특정 상태에 있을 때 이 상태가 얼마나 좋은 상태인지를 인지할 수 있다. 기댓값이 높을 수록 좋은 상태라고 여긴다.

 

큐함수

상태 가치함수(위에서 설명한 가치함수)가 각 상태에 대한 가치를 알려주는 것처럼, 각 행동에 대해 가치를 알려주는 함수가 있다면 어떨까?

특정 상태에서 어떤 행동이 얼마나 좋은지 알려주는 함수를 행동 가치함수, Q함수라고 부른다.

 

큐함수는 벨만 기대 방정식의 형태로 표현이 가능하다. 단 행동이라는 조건이 하나 추가된 것이 차이점이다.

큐함수 역시 기댓값을 출력한다.

큐함수의 식

큐함수와 가치함수 사이의 관계는 다음과 같다.

Q함수와 가치함수 사이의 관계

특정 상태에서 모든 행동에 대해, 큐함수에 정책에 의한 확률을 곱한 값을 전부 합하면 그것이 가치함수이다.

-> 특정 상태 s에서 할 수 있는 모든 행동들의 큐함수(행동가치)에 대한 기댓값이 가치함수이다.

 

 

벨만 방정식

벨만 방정식 계산 방법

벨만 방정식을 계산하려면 특정 t시간에 대해 앞으로 받을 모든 보상에 대해 다 고려해야 한다. 그러나 이것은 상태 갯수가 많아질 수록 연산량이 너무 많아진다.

-> 따라서 모든 시간에 대해 미리 다 계산하는게 아니라, 다이나믹 프로그래밍처럼 시작점(최근 시간)으로부터 계속해서 벨만 방정식의 결과값을 갱신하는 방식으로 한다. (이것을 iteration이라고 한다)

(중요!) 가치함수의 갱신은 한번에 '모든' 상태에 대해 동시에 이루어진다.

 

따라서 계산 가능한 형태의 벨만 기대 방정식은 다음과 같다.

계산가능한 벨만 기대 방정식

기댓값은 확률x변량의 합이기 때문에 앞에 시그마 기호와 정책인 파이가 들어간다. 그리고 나머지는 변량(값)을 의미하는데, r은 특정 s와 a에 대한 보상값이다.

다음 상태의 가치함수는 시그마기호에 상태 변환 확률이 곱해진 형태인데, 그 이유는 어떤 행동을 취했을 때 어떤 상태로 가는 것 또한 확률이기 때문이다.

 

(중요!) 상태 변환 확률환경의 일부로써, 환경을 세팅하는 사람이 설정할 수 있다. 모든 상태가 각각 가지고 있는 가치함수의 초깃값 또한 마찬가지다.

 

(주의!) 정책과 상태 변환 확률을 혼동하지 말자! 어떤 행동을 할 확률정책이고, 그 행동이 실제로 이루어 질 확률상태 변환 확률이다!

 

참 가치함수와 최적 가치함수

참 가치함수계속적인 가치함수 업데이트의 결과 최종적으로 수렴하게 되는 가치함수를 말한다.

최적 가치함수는 수많은 정책 중에서 가장 높은 보상을 얻게되는 정책을 따랐을 때의 가치함수를 말한다.

최적 가치함수에서 행동 a를 추가로 가정한다면 그것이 최적 큐함수이다.

 

좋은 정책과 최적 정책

특정 상태는 고유의 가치함수를 가지고 있는데 이 가치함수는 계속 업데이트 되면서 변한다.

(정확히 말하자면 정책이 변한다)

이 때 변할 수 있는 가장 높은 값(기댓값)을 출력하는 가치함수를 최적 가치함수 라고 한다.

그리고 최적 가치함수 상태일 때의 정책을 최적 정책이라고 한다.

특정 상태에 대해서, 좋은 정책이란 높은 큐함수(기댓값)를 가지는 것을 말한다.

최적 큐함수가 되었을 때, 최적 정책에서 가장 높은 확률을 가지는 행동이 가장 좋은 행동이다.

최적 정책. 출처: https://wnthqmffhrm.tistory.com/5

최적 정책에서 행동 a가 가장 좋은 행동이라고 할 수 있다.

 

 

벨만 최적 방정식

최적 가치함수와 최적 큐함수. 출처: https://wnthqmffhrm.tistory.com/5

최적 가치함수란 위에서 말했듯이 변할 수 있는 가장 높은 값(기댓값)을 출력하는 가치함수를 말한다.

최적 큐함수란 마찬가지로 변할 수 있는 가장 높은 값(기댓값)을 출력하는 큐함수를 말한다.

 

최적 가치함수와 최적 큐함수의 관계는 다음과 같다.

출처: https://wnthqmffhrm.tistory.com/5

저런 식이 나온 이유는, 가장 좋은 행동 a만 파이값이 1이고 나머지는 0이기 때문에, a가 아닌 모든 항들은 지워지고 a인 행동 항 하나만 남기 때문에 v* = q*이 된다. 그래서 위의 식은 시그마 기호와 파이 기호가 없어져 있는 것이다.

 

벨만 최적 방정식은 다음과 같다.

출처: 파이썬과 케라스로 배우는 강화학습

벨만 기대 방정식에서 약간의 변형이 있는데, 현재상태 s뿐만 아니라 현재 할 행동 a까지 고려하며, a를 고려했을 때 가능한 a값 중 출력이 가장 큰 a를 고르는 것이다.

주변 상태들 역시 '최적' 방정식을 가지고 있다.

 

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

출처: 파이썬과 케라스로 배우는 강화학습

 

 

 

 

 

 

관련글 더보기