본문 바로가기

Sim2Real/Acrobot

Simulation to Real. #6 [Acrobot-IsaacGym : Inverted Pendulum Balance]

728x90

# Intro

이전 글을 이어서 적는다.

 

Solution 2 - Sin 함수 (실패)

​0 ~ 1로, 그중 가장 친근한 방법인

sin과 cos으로 아이디어를 짜 봤다.. sin과 cos은 시작점만 다르기 때문에 그냥 sin으로 통합시켜서reward를

설계 해 보았다.


1. 단순한 페널티 설정

​처음엔 reward의 숫자에만 관점을 두고

"reward 패널티를 어떻게 과감하게 설계할까?"를 생각해 봤다. 

그림 1. sin을 통한 reward 설계

단순하게 1을 최대한 깎을 방법만 고려하고 마지막에 Total Reward를 계산하는 방식으로 문제를 접근했는데,

Total Reward 수식을 쓰려고 할 때 앞선 reward 페널티의 값들을 보고 이건 뭔가 아니다는 걸 느꼈다.

 

물론 다른 radians값이 나올 때, 더 큰 숫자로 보상이 깎여 나가겠지만, 그런다고 해도 뭔가 예측하기 힘든 접근 방법이라고 여겼다.

그래서 간만에 고등학교 책을 피고 삼각함수 형태를 지긋이 들여다보게 됐다.


2. 그래프로 해석

그림 2. Sin 그래프로 설계 방향 설정

그래프를 봤을 때 단순하게 sin값이 0이 되는 값들을 찾아야 한다, 또한 radian은 ± 둘 다 존재하므로 절댓값을 씌워준다.

그리고 과도한 회전은 현실에서 위험하기도 하고, 애초에 비효율 적인 면이 있기 때문에 강화학습에서는 고려할 대상이 

아니라고 생각하고 설계하는 방향에서 x축의 범위를 줄일 수 있었다.

 

그래서 ( 그림 2. 초록색 영역) 내가 갖게 되는 패널티 값들을 정리할 수 있었는데,

직관적으로 봐도 해당 구간으로 학습을 하면 (0,0)의 위치를 찾아가기란 굉장히 험난한 여정이 될 거 같다. 

최고의 보상 포인트 주변으로 과도한 패널티들이 분포돼 있는데, 이렇게 되면 이전 장에서 언급한 Radian 설계 방식처럼

reward가 순식간에 팍팍 깎여나가는 문제가 생겨 또 모델이 정책에 갇힌다고 해석했다.

 

하지만, DRL은 우리가 예측하지 못한걸 할 때도 있는 법, 나는 과감하게 sin으로 reward를 설정해 봤다. 

그림 3. Sin - Reward 설계

Line 10의 방식으로 reward를 설계 하였다. 

 

처음 θ1은 원하는 목표 값이 π 값이 므로 link1_ang에서 x축으로 좌표를 이동시켰다.

(다시 생각해보니 이러면 초기위치가 0이 됐다. 설계 자체가 잘못 됐었다.)

 

그리고 θ2는 원하는 값이 0이므로 좌표를 이동하지 않고 그대로 뒀다.


3. 학습 진행

이 상태로 학습을 시켰더니 각 epoch마다 도드라지는 특징들이 있었다. (epoch = 1000) 

simulation에서 진동하는 듯 한 모습은, 빠른 학습을 위해 sim의 1초를 0.166초로 설정했다.

 

1) sin - epoch 100회

sin - epoch 100

처음 sin으로 해석한 방법은 희한하게 Link1 (초록색)이 애매한 90도를 유지하는 모습을 보였다. 

다른 radian으로 해석할 때도 위와 같은 모습으로 학습을 하는 경우가 많았는데, 이런 경우는 대부분

페널티가 과도하게 클 때 주로 나타나는 모습이었다.

 

radian 페널티에서는 이런 현상이 반복되다가 계속 최대속도로 회전하면서 탐험에만 신경을 쏟는 모습을 보였었다.

 


2) sin - epoch 400회 

sin - epoch 400

300회나 더 지났는데 아직 마땅한 해결책을 찾지 못했지만, 그래도 조금 더 역동적으로 탐험하는 모습을 보인다. 

도드라진 특징은 없다고 생각한다.


3) sin - epoch 600회

sin - epoch 600

역동적인 해결책을 찾아보다가, 결국 다시 돌아는 모습을 보인다.

위에서 그린 삼각함수 그래프의 완만하지 못한 gradient의 특징이 여기서 드러난다고 생각한다.

적절한 탐험을 하다가도 과도한 페널티를 통해 reward가 급격히 감소하여, model의 학습 방향이 갇혔다고 해석을 했다.


 

4) sin - epoch 750회

sin - epoch 750

150회 이후에 갑자기 다른 방향으로 학습을 시작하더니 어느 정도 보상을 축적하는 듯 보였다.

하지만 일전의 특징인 90도 부근에서 정지하는 모습은 꾸준히 포착됐다.


5) sin - epoch 900회

sin - epoch 900

아이고 두야, 다시 모델이 탐험을 멈추고 제자리로 돌아가는 모습이 보인다. 

아마 내 생각에는 저 자세가 페널티는 받지만, 패널티 가장 작은 값이라고 해석이 된다.

 

그리고 난 뒤에 test를 해보면 어김없이 sin - epoch 900의 자세가 나온다. 

 

배달이 와서 먹고 바로 다시 써보려 한다.