클래스를 사용하여 해야하는데 아직 객체지향에 익숙하지 않아서 그냥 절차지향식으로 코딩을 해버렸다.


위와 같은 알고리즘을 사용했다.


아마 그대로 알고리즘과 똑같이 보면 될거같다.


1. 리플레이를 저장할 수 있는 리플레이 메모리와 네트워크를 구성하고


2. state를 초기화하고 전처리를 해준다(이 코드에서 전처리는 state 값을 2차 배열로 만들어 주는 것이다)


3. 한 개의 에피소드를 시작하고 e-greedy 으로 랜덤하게 action을 선택하거나 Q-value 값(Weight를 이용한)으로 action을 선택하여 실행한다.


4. action을 통한 reward와 다음 state를 받는다.


5. 위 받은 값들(state, action, reward, next_state, done)을 메모리에 저장한다.


6. 저장된 메모리의 값들 중에 몇 개를 가져와서 미니배치로 학습을 한다.


7. 위 과정을 반복한다.


로 보면 된다.


Replay memory를 사용하는 이유는 Linear Regression을 하는데 있어서, 전체적인 값으로 학습을 못하고 근처에있는 값으로 학습이 되기때문에 전체적인 분포의 Linear Regression을 할 수 없다. 그래서 일정 step 만큼의 값을 저장해두었다가 랜덤으로 값을 뽑아내면 전체적인 값을 학습할 수 있다.



+ Recent posts