일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- text embedding
- 티스토리챌린지
- 파이썬
- metric learning
- 순열
- 문서 파싱
- document layout analysis
- Python
- MTBE
- 강화학습
- permutations
- 대조학습
- 딥러닝
- Monte Carlo
- pytorch
- OCR
- 스터디미니
- pytorch hook
- 오블완
- 스페인어학습지
- feature vector
- 알파고
- pytorch forward 디버깅
- 환급기원
- AlphaGo
- document parsing
- pytorch forward
- MCTS
- pytorch forward 연산
- TensorFlow
- Today
- Total
Learn And Earn
tf-agents - 데이터들(1) 본문
이번 포스팅에서는 tf-agents 요소들을 조립하여 강화학습 문제를 해결할 때, 필연적으로 등장하는 데이터들의 종류와 그 데이터를 어떻게 다루는지에 대해서 간략하게 설명해보겠습니다. 크게 두 가지 관점에서 데이터를 바라볼 건데요,
하나는 데이터가 이 강화학습 문제에서 갖는 의미이고 또 다른 하나는 데이터의 모양입니다.
tf-agents의 큰 그림에 대해서는 이 포스팅에서 다뤄놓았으니 참고하시면 되겠습니다.
데이터의 의미
정말 순수하게 발생한 장소로만 따지면 2개, 실제로 쓰이는 데이터를 따지면 3개입니다.
- TimeStep - environment에 agent가 action을 가함으로써 얻게 되는 변화한 환경의 모습, 그리고 얻는 reward signal, 추가로 제공되는 discounted factor, step_type의 4가지 정보를 담는 4차원 named tuple입니다.
- PolicyStep - agent는 관찰한 현재 환경의 모습을 기반으로 하여 가장 합리적인 판단을 하려 노력합니다. 이 observation등을 포함하는 TimeStep 데이터를 입력받아 policy 객체는 action을 포함한 3차원 named tuple을 반환합니다.
- transition sample - 이는 존재하는 명칭은 아닙니다. 하지만 agent가 궁극적으로 모으는 데이터를 지칭합니다.
RL은 data-driven method로써, 학습에 쓰이는 데이터는 (s, a, r, s')들의 모임입니다. 각 원소를 transition이라고도 부릅니다. 이는 당연히도 agent가 on/off policy로 환경과 직접 상호작용을 하며 얻은 데이터입니다.
이제 어떠한 데이터가 등장하는지는 개략적으로 알았으니, 이제 각 데이터를 자세히 살펴보도록 하겠습니다.
그에 앞서 데이터의 모양은 왜 굳이 살펴보는 것인지 짚고 넘어가겠습니다.
데이터의 모양 - 왜 알아야 하나?
데이터의 모양은 선택이 아닌 필수적으로 알아야 합니다. 이는 agent를 정의하는데에 쓰이는 네트워크를 정의할 때 이 데이터의 모양을 명시하게 되어있기 때문입니다.
이는 tf.keras.layers 모듈을 떠올리면 바로 납득이 가실겁니다. 입력층의 데이터의 노드가 몇개인지, 내지는 어떠한 모양인지를 분명히 하는 경우가 대다수였습니다.
뿐만 아니라, 이후에 설명하겠지만 문제상황에 따라 데이터의 모양이 특이할 수 있습니다. 그 데이터를 우리가 원하는 출력 형태로 계산하고 근사하기 위해서는 필연적으로 데이터의 전처리가 필요합니다. tf_agents.networks.Network 객체는 preprocess_layers, preprocess_combiner을 keyword argument로 갖고 있기 때문에, 이 모양을 잘 고려하여 그 전처리 layer을 구성하는 것은 문제 상황에 맞게 네트워크의 구성을 customize할 때에 있어 첫단추입니다.
첫 번째 데이터 - TimeStep
TimeStep(step_type, reward, discount, observation)
의 named-tuple 형태입니다.발생장소는 environment입니다. 강화학습을 가장 직관적으로 바라볼때 나오는 두 요소가 바로 env와 agent입니다.그리고 agent는 제 나름대로 기준을 갖고 현재 본인이 인식한, 또는 인식하기로 한 정보를 토대로 최선의 결정을 내립니다. 이 내린 결정을 실행에 옮김으로써 환경에 action을 가합니다. 그 결과 environment는 agent에게 새롭게 갱신된 state과 reward signal을 함께 보내줍니다. 이게 직관적으로 발생할 것으로 보이는 정보입니다.
그런데 구현 측면에서 볼 때는 지금 새로나온 이 state이 episode의 terminal state인지, 아니면 episode를 시작하는 첫 state인지, 둘다 아닌 중간 단계인지를 알아야 합니다. 이는 step_type으로써 각각 정수형 0,1,2에 해당됩니다.
또, MDP를 정의할 때 5-tuple중 하나가 바로 discounted factor였습니다. 그렇다면 env를 정의할 떄 discount를 상수로 정의하면 discount는 굳이 따로 데이터로 저장하고 관리할 필요가 없지 않냐고 물을 수 있겠습니다. 하지만 이는 step_type을 기반으로 discount를 0으로 해야하는 경우도 있는데, 그를 위해 굳이 추가적인 코드를 작성하느니, discount도 그 데이터의 하나로 관리하자는 것입니다.
TimeStep 모양 엿보기
openai에서 구현한 가장 간단한 환경인 cartpole을 예시로 어떻게 TimeStep의 모양을 살펴볼 수 있는지 알아보겠습니다. 결론부터 말하자면 .action_spec() 메소드와 .time_step_spec()메소드를 활용하라는 것입니다.
env = suite_gym.load('CartPole-v0')
print('action_spec:', env.action_spec())
print('time_step_spec.observation:', env.time_step_spec().observation)
print('time_step_spec.step_type:', env.time_step_spec().step_type)
print('time_step_spec.discount:', env.time_step_spec().discount)
print('time_step_spec.reward:', env.time_step_spec().reward)
이렇게 .time_step_spec()이 반환하는 객체에는 4-tuple TimeStpe이 담고있는 정보들을 각각 attribute으로 갖고 있어 위의 코드를 그대로 써도 될정도로 아주 간단하게 확인할 수 있습니다.
이번 포스팅에서는 tf-agents workflow에서 발생하는 데이터들의 종류와 그 데이터가 어떠한 의미를 갖고 어디서 발생하는지에 대해서 알아보았습니다. 또, 이 데이터들이 어떠한 모양을 갖는지 부분적으로 살펴보았습니다. 다음 포스팅에서 이어서 policystep과 transition_sample과 그 모양 agent_collect_spec에대해서 살펴보겠습니다. 감사합니다.
======================================================================
같이 보면 좋은 포스팅 :
파이썬 permutations 구현 방법 - recursion
파이썬 permutations 구현 방법 - recursion
이번 포스팅에서는 순열과 조합중, 순열 함수를 직접 구현을 함께 해보겠습니다. 파이썬의 itertools 모듈에는 combinations, permutations함수가 이미 정의되어 있습니다. 이를 단순히 사용하기만 하는
learnandearn.tistory.com