The research paper for this work can be found here.
Proximal Policy Optimization (PPO) (2017)
* 자세한 이론/사항은 구글에 PPO 라고 검색하면 관련 튜토리얼 자료들이 많이나오니, 참고하시면 될듯합니다.
- Agent: 강화학습을 하는 '주체'. (게임으로 치면, 게임플레이어)
- Environment: 강화학습이 진행되는 '환경'. (게임으로 치면, 플레이어가 돌아다니는 세상(환경) 정도)
- : 시간 t일때의 상태 (state)
- : 시간 t일때의 보상 (reward)
- : 시간 t일때의 행동 (action)
- : 행동을 결정하는 정책 (행동정책)
agent가 현재 상태(state)를 고려하여, 현재의 행동정책(policy)에 따라, 현재 상태에서의 행동(action)을 결정한다.
결정된 행동으로 환경(environment)와 상호작용을 한다. (= 시뮬레이션 상에서 한 타임스텝 넘어간다는 얘기)
보상(reward)과 다음상태(next state)를 얻는다.
위 루프를 계속해서 반복하여, maximum 보상을 받을 수 있도록, 행동정책을 업데이트 해나간다.
여기서 actor, critic이란 각각의 딥뉴럴네트워크(Deep Neural Network, DNN)이다. actor-critic에 대한 자세한 사항은 구글에 수많은 자료가 있으니 참고하시면 좋을듯 합니다.
- state where denote
an x-axial ship position, y-axial ship position, distance to a port/harbor, speed in a surge direction, speed in a sway direction, and angular speed in a yaw direction
- actor는 정책을 mapping하는 DNN. 즉, actor가 action을 output함.
- where are
a target propeller rps
andtarget heading angle
- critic은 Q-value를 output하는 DNN 이다. Q-value란 현재 상태(state)에서 미래에 얼마만큼의 보상을 받을수 있는지를 나타내는 값이다. 즉, 현재 상태가 얼마나 좋은지를 나타내는 값이다.
위의 figure에서 보상 가 interaction with environment
으로부터 output된다. 이 보상은 보상함수
로부터 얻어진다. 강화학습-기반 자동접안 시스템의 트레이닝에 사용된 보상함수는 다음과 같이 계산된다:
arrivial zone
의 개념은 아래의 그림에서 쉽게 설명되어져있다.heading condition
은 선박의 헤딩각도에 대한 조건을 얘기한다.arrival zone
에서 240-300 deg 정도가 이상적인 헤딩각도로 여겨진다.- [UPDATE] should be replaced with . Typo correction.
- 첫번째로 actor과 critic을 초기화한다.
- 매 epoch마다 초기 선박 포지션 를 랜덤하게 선정한다. 이때, 랜덤하게 선정되는 의 범위는 다음과 같이 선정하였다:
where [deg] and 는 선박헤딩이 port/harbor을 향할때의 각도이다.
위의 내용은 다음의 figures들에 잘 설명되어져있다:
4. 한 epoch내의 매 타임스텝마다, action을 취하고 interaction with the environment을 수행하고, n번째 타임스텝마다 actor, critic을 업데이트(트레이닝)한다.
Same as Here
- Parameters 아래에
class stable_baselines.ppo2.PPO2(...)
가 있는데,(...)
안의 default argument값들을 트레이닝에 사용하였음. - hyper-parameter 세팅이 PPO논문과 유사하므로, 보고서작성시 논문에 있는 hyper-parameter을 참고하였음 이라고 적어도 무난할 듯 합니다.
사용된 선박은 중형컨테이너선
이다.
선박 프로펠러와 러더에 걸리는 제약은 다음과 같다:
- [rps]
- [deg]
- [deg/s]
- 에는 시간변화율에 따른 제약을 두지않았다. 현 연구는 강화학습-기반 자동접안시스템 의 초기 연구이므로, 제약이 덜 걸린상태에서 학습이 가능한지를 먼저 확인하기위해서 이렇게 하였다.
위에서 언급했던대로, 강화학습의 최종목표는 보상(reward)을 maximize하는 것이다. 위의 그래프에서 볼 수 있듯이, 트레이닝이 진행되면서 agent가 획득하는 reward가 점점더 높아지는것을 확인할 수 있다.
Google Colab allows users to use Python on Chrome. Therefore, no installation is required for users.
Click the following link: https://colab.research.google.com/drive/1aIaVj3iYTQVR0WzTayTkqp6cFnJeW98V?usp=sharing
사용법
- 위의 링크를 따라 Google Colab을 실행시켜보면
RL-based-automatic-berthing.ipynb
가 웹상으로 켜진다.
크게 목차는 다음으로 구성된다:
a) Pre-settings
b) Import dependent libraries/packages
c) Version check
d) Load a trained model
e) Test the trained model
f) Manipulate the resultant data
- 목차
a), b), c)
에 있는 code block을 왼쪽 실행버튼을 클릭해서 순서대로 실행시킨다. (shift+enter
로도 실행가능) - 목차
d)
에서 유저가 조절할수있는조절변수
가 존재한다. 여기에서의조절변수
는 다음과 같다:training stage
training stage
: 강화학습의 시간에 따른 성능은 다음과같다: 학습초기에 성능이 낮고, 시간이 지날수록 학습이 진행되면서 성능이 향상된다. 여기서 성능의 향상정도는reward(보상) history
를 통해 알수있다. 여기서training stage
을 예를 들어설명하면 다음과같다: 전체 학습의training stage
가 100이라고하면,training stage
가 10일때는 학습초기,training stage
가 90일때는 학습후기 정도로 인식될 수 있다.
- Google Colab에서
training stage
조절은loading_section_num=...
조절을 통해 할 수 있다.training stage
는 아래의 figure을 참고하여 조절하면 된다:
- 목차
e)
에서도 유저가 조절할수있는조절변수
가 존재한다. 여기에서의조절변수
는 다음과 같다:ship's initial position (x/LBP, y/LBP, heading-angle)
ship's initial position
: 주어진 Google Colab에서는 이미 학습이 완료된 강화학습을 테스트할수있도록 구축되어져있다. 학습된 강화학습 알고리즘이 성공적으로 접안을 할 수 있는지 테스트를 할때, 유저는 선박의 초기위치를 바꿔가며 테스트를 해보고싶을것이다. 선박의 초기위치를 조절할 때 한가지 유념해야할 사항은 트레이닝시에 랜덤하게주었던 ship's initial position의 랜덤범위(range) 이다. 위의 내용을 재참조하면 다음과 같다:머신러닝을 테스트할때, 트레이닝된 데이터의 범위내에서는 좋은 성능을 발휘하지만, 범위밖에서는 성능이 떨어지는 경향을 보인다. 내삽(트레이닝데이터 범위내)이 외삽(트레이닝데이터 범위밖)보다 더 쉽기때문이다. 이말은 즉슨, 을 조절할때 트레이닝시의 랜덤범위안에서 조절하면 좋은 성능을 기대할 수 있고, 랜덤범위밖에서 조절하면 외삽이 되기때문에 외삽에 정도에 따라서 어느정도의 성능저하가 예상될 수 있다.
- Google Colab에서
ship's initial position
은norm_init_coords
과extra_angle_deg
을 통해 조절가능하다.
setting은 다음과 같다:
training stage
: 12ship's initial position
: (12, 9, 10) // (x/LBP, y/LBP, epsilon[deg])
결과는 다음과 같다: