일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DataProcessing
- 프레딧
- express
- 흥미붙이기
- socket.io
- RL
- pandas
- 강화학습
- NLinear
- MPRO
- de
- 엠프로
- TimeSeries
- DLInear
- transformer
- 불법마약특별단속 #부산지방경찰청
- 프로바이오틱스
- 제발쉽게좀가르치자
- LTSF
- DL
- ML
- mlflow
- AI
- node.js
- 도커로 깃블로그 만들기
- 벨만방정식
- 강화학습으로주식하기
- HY7714
- YOLO
- 오토트레이딩
- Today
- Total
상황파악
[Q-learning] 데이터로 설명하기 본문
나는 추상적인 개념은 어렵다
그래서 계산할 수 있는 데이터로 봐야 이해가 쉽다
난 개발자니까 수식과 추상적인 개념만 가득했던 Q-learning을 임의의 값을 통해 어떻게 변화하는지 살펴보겠다
도대체 Q-learing이 뭐냐?
내가 하는 행동에 대한 가치가 얼마인지를 배우는 것이다
Q = Quality
가치를 배운다 라는게 정확히 무슨 뜻인지 알기위해 강화학습의 기본 개념을 다시 짚어보자
강화학습의 기본 골조는 상황이 주어지고, 그에 맞는 행동을 하고, 보상을 받으면서 배우는 것이다
OX게임을 예시로 들면, 사람은 한줄에 동일한 기호를 채우면 이긴다는 것을 알고 있지만
에이전트는 알지못한다
그냥 알려준 행동에서 고르는 것이다
물론 위 같은 경우는 로직자체가 잘못되어서 이상한 에러를 뱉은 것이다
하지만 중요한 것은 여러 시도를 하면서 그에따른 보상을 받는 과정을 반복하면서 배워나가는 것이다
어쨋든 큰 틀은, 결국 행동에 따른 평가를 받는다는 것이다
에이전트는 결국 이러한 평가를 받으면서 '어떻게 하면 좋은 평가를 받을 수 있을지'를 고민해야 한다
상태와 보상은 환경이 에이전트에게 주는 정보다
그렇다면 에이전트가 고민해야 할 부분은 이렇게 볼 수 있을거다
내가 한 행동이 보상을 받는데 과연 도움이 될까?
도움이 된다는 것을 수치로 표현해서, 얼만큼의 가치가 있는 것일까?
그걸 계산하는 것이 가치함수인 것이다
행동의 가치를 계산하는 가치함수라는 존재는 인지했다
그렇다면 그 함수는 어떤 식으로 가치를 평가한다는 것일까?
오늘도 어김없이 등장하는 AI 선생님의 도움을 받아보자
Q-learning을 위해서는 4가지 준비물이 필요하다
상태 및 보상을 알려주는 환경, 동작을 수행 할 에이전트, 에이전트가 수행할 행동, 그리고 Quality (가치) 가 얼마인지 계산해서 저장해둘 Q-Table
AI 선생이 (1,1) 에서 시작해서 한칸씩 탐색해가며 (4,4)로 이동하는 과정을 그려보자
이때 난 몇가지 정의를 할 것이다
에피소드 | AI 선생이 (4,4) 에 도착할 때 까지 (1 Epoch라고 보면 이해가 쉽다, 물론 이동 횟수를 제한하는것도 가능하다) |
보상 | (4,4) 도착 : 10 이외 모든 행동 : -1 |
학습률 | 0.1 (보상을 얼만큼 적용할 것인지, learning rate) |
Q-Table | 모든 상태에 따른 행동의 가치 값 |
감가율 | 0.9 (0~1 사이의 값) 미래시점으로 갈 수록 현재랑 얼만큼 동떨어저 있는 정도 (10년전 1억이랑 지금 1억이랑 같냐? 의 맥락) |
최초 (1,1) 상태에서의 수행할 수 있는 행동은 (상, 하, 좌, 우) 4가지이다
하지만 아무런 시도를 하지 않았기 때문에 보상을 받은 내용이 없으므로 0으로 초기화 된 값들이다
그러면 아무거나 고른다 (무작위 행동)
참고로 이 행동 선택 단계에 입실론 그리디가 사용된다
(매 행동 선택 직전에 생성한 랜덤 값이, 사전에 정의한 입실론 값 보다 작으면 랜덤 선택.
이렇게 하면 탐색을 조금 더 많이 함 = 다양하게 배움)
[에피소드 1] 첫번째 행동으로 '하' 를 골랐다고 가정하자
그렇다면 AI의 위치는 (1,1) -> (1,2) 로 이동했다 (인덱스 개념은 잠시 빼두자)
이때의 '하' 라는 행동의 상태값은 (1,2) 가 될 것이고, 그에 따른 보상값은 -1 이다. ((4,4) 도달 외 모든 행동의 보상값은 -1)
최초 (1,1) 에서의 '하' 액션의 가치는 0 인 상태에서, -1의 보상을 받게되었을 때 즉시 그 행동의 가치를 업데이트 할 수 있다
개인적으로 Q-learning이 어렵게 느껴졌던 이유가 Policy Gradient에서는 에피소드가 끝나고 일괄 업데이트를 했었는데 여기서는 step 단위로 이전 행동에 대한 평가를 한다는 차이가 있어서 였다.
그게 어떻게 가능한거지? 하는 생각이 머릿속을 떠나지 않았기 때문이다
Update 로직은 아래와 같다
아래에서 상세히 설명할 테니 간단하게 맥락만 훑고 가자
기존의 현재 가치 (현재 상태에서 수행한 행동의 가치) +학습률 x (보상 + 시간가치(0~1 값) x 미래가치 - 현재 가치) 로직으로 업데이트가 된다
쉽게말해 받은 보상을 보고 잘 했냐 못했냐를 즉각적으로 기록한다고 보면 된다
다시 예시로 돌아와서
0이었던 (1,1) 상태에서의 '하' 의 행동은 위 수식에 따라
0 + 0.1 x (-1 + 0.9 x 0 + 0} = 0.1 x ( -1) = -0.1
의 값을 가진다
그래서 위의 Q-Table의 (1,1)의 '하' 행동의 가치는 보상 -1을 받음으로써 -0.1의 가치로 업데이트 된다
다음 스텝에서 (1,2) 에서 보상이 0 밖에 없으니 랜덤으로 골랐는데 다시 (1,1)로 갔다고 가정하자
그럼 아까와 같은 맥락으로 (1,2) 상태에서 '상' 행동의 가치는 -0.1로 업데이트 된다
(1,1) 에서 (2,1) 로 이동하면 '우' 행동의 가치는 -0.1로 업데이트 된다
아니 그럼 무슨 행동을 하기만 하면 마이너스로 되어버리는데, 언제 저 행동들이 좋은 행동이었는지 알 수 있는가 하면
(4,4) 에 도착했을때 +10 만큼의 보상을 받는데, 이 보상이 계속 반복적으로 학습을 하면서 모든 상태에 영향을 미치게 된다
AI가 (4,3) 상태에서 '하' 행동을 고르면서 (4,4) 에 도착했다고 가정하자
이 과정동안 많은 액션을 수행했을 것이고 동시에 step 마다 Q-table이 업데이트 되었을 것이다
이제 +10의 보상을 받았으니 (4,3) 상태에서 '하' 행동의 가치는
0 + 0.1 x { 10 + 0.9 x 0 + 0} = 1
(4,3) 상태에서 '하' 행동의 가치는 1로 업데이트 된다
(3,4) 상태에서 '우' 행동을 했다면 동일하게 1로 업데이트 되었을 것이다
AI가 (4,4)에 도달함으로써 한번의 에피소드가 마무리 되었다
자 이제 예시를 봤으니 Q-value가 어떻게 업데이트 되는지 조금 더 자세히 알아보겠다
똑같은 수식을 예시로 설명하기 위해 조금 중복적으로 표시했다
첫번째 New Q(s,a). 업데이트 대상 (타겟값)이다
s 상태에서 a 행동을 하는 것의 가치를 업데이트 하려는 수식인 것이다
아까의 예시로 보자면 (1,1) 상태에서의 '하' 행동인 "0" 이 업데이트 대상인 것이다
두번째인 Q(s,a) 도 동일한 값이다. 왜냐하면 현재 값에다가 변화를 더해야 하기 때문이다
아래 alpha는 학습률, 우리가 흔히 사용하는 learning rate 이다
R(s,a)는 내가 상태 s ((1,1)이었던 것) 에서 행동 a ('하' 행동 이었던 것) 을 했을 때, 환경이 에이전트에게 알려준 보상 값 (-1) 이다
gamma는 감가율 (학습률) 로, 미래 가치를 감소시키기 위한 수치다
만약 강화학습의 기본적인 개념을 어느정도 이해했다면 여기까지의 컨셉은 어렵지 않을 것으로 생각된다
그 다음 max Q ~ 이 부분이다
여기는 (1,1) 상태에서 '하' 행동을 하면 (1,2) 라는 새로운 상태가 되는데,
이때 역시 마찬가지로 에이전트가 수행할 수 있는 행동은 (상, 하, 좌, 우) 4가지이다
"새로운 상태에서 할 수 있는 행동들의 가치들 중에서 가장 큰 가치값은 얼마인가?" 를 찾는 부분이다 (argmax 아님)
결국 내가 다음상태에 진입했을 때 얻을 수 있는 최선의 행동은 어느정도 가치가 있냐 라는 부분이다
이후 시간가치 x 미래가치 로 어느정도 현시점 가치로 환산을 한 후, 현재의 가치를 빼주는 것인데
이 부분의 정확한 이유는 논문을 안읽어서 잘 모르겠지만 감히 추측을 해보자면
에이전트가 수행한 행동이 좋은 결과를 기대할 수 있는 상태로 안내해준 것이라면, 뭐가 되었든 칭찬받아 마땅하다 라는 것이 아닐까 싶다
(강화학습은 정답은 몰라도 해답은 안다 - 출처 : 내 생각)
물론 좋은 상황에서 죽을 쑤는 경우는 강화학습 뿐만 아니라 일상생활에서도 어렵지 않게 목격할 수 있기에 그렇게 이상한 논리는 아닐 것이다
자, 결국 이러한 수식을 통해 어떤 상태에서의 행동의 가치는 계산할 수 있게 된다
갑자기 뜬금없이 등장한 수식
벨만 방정식이다
그렇게 이해가 안되던 벨만 방정식이었는데, 다시 보니 이해가 될 것 같다
현재의 가치는 현재의 정책을 따랐을때의 가치는 주어진 보상과 다음 시점의 값으로 계산할 수 있다는 것이다
다시 돌아와서
아마 보면서 느껴지겠지만 Q-learning 역시 모든 상태에 대한 행동들이 매핑된 테이블이 필요하다
상태와 행동이 많아지면 필요한 메모리가 늘어난다
그렇기에 바둑과 체스같은 경우의 수만 해도 Q-learning으로 풀어내기 어려운 것이다
이러한 메모리 문제를 해결한 것이 신경망을 사용한 Deep Q-learning 이다.
신경망을 쓰면 해결이 된다고 하는데, 아직까지는 공부중이라 원리는 잘 모르겠다
그래도 해당 내용 역시 예시를 통해 이해하기 쉽게 설명하도록 하겠다
최단경로를 학습하는데 총 57번의 episode가 수행되었다
'AI > 강화학습' 카테고리의 다른 글
Toy Proj. 강화학습으로 주식하기 (0) | 2023.12.28 |
---|---|
제발 좀 쉽게 가르치자 - 강화학습 1편 (0) | 2023.10.09 |
파이썬과 케라스로 배우는 강화학습 #2. MDP와 벨만 방정식 (0) | 2023.08.26 |
파이썬과 케라스로 배우는 강화학습 #1. 개요 (0) | 2023.08.26 |