초기화 및 변수 선언


DQN 모델을 실행하기 위해 초기화 및 변수 선언 과정은 DQN 모델의 학습하는 과정과 동일하나 학습과 하이퍼파라미터 설정이 필요 없기 때문에 모델 실행에 필수적인 요소만 가져오면 된다.


네트워크 구성


DQN 모델을 실행하기 위해서는 학습 과정에서 생성한 네트워크를 동일하게 구성해야 한다. 여기서 주의할 점은 노드 개수가 학습 모델과 같은 수로 설정해야 한다. 학습 과정에서 노드 개수는 계속 변경이 되기 때문에 모델 실행할 때 학습할 때 주의하지 않으면 의도치 않은 오류가 발생하기 때문이다.


텐서플로우 모델 학습은 네트워크를 구성할 때 사용한 변수(가중치와 편향) 값을 찾아내는 과정이다. 학습이 완료되면 이 변수는 파일 형태로 저장된다. 모델을 실행하기 위해서는 파일로 저장된 변수를 다시 로드해서 네트워크에 그대로 적용해 주면 된다. 따라서 DQN 모델을 사용할 때 학습 모델을 구성할 필요는 없고 네트워크만 구성하면 된다


모델 로딩


학습된 모델은 cartpole 디렉토리에 cartpole_model.ckpt 라는 이름으로 저장되어 있다. 모두 4개의 파일이 생성되는데 data 파일에는 변수가 가지고 있는 값이 저장되어 있다. index 파일에는 data 파일에서 필요한 데이터를 가져오기 위한 인덱스 정보 등이 저장되어 있다. meta 파일에는 텐서플로우 그래프 구조가 저장되어 있다. 마지막으로 checkpoint 파일에는 가중치와 편향 등이 저장된다.


저장된 모델을 사용하기 위해서는 Saver클래스를 생성해서 restore 함수를 호출하면 학습된 모델의 그래프와 가중치가 그대로 복구된다.


모델 실행


모델을 이용한 카트폴 프로그램 실행은 take_action_and_append_memory 함수 기능과 유사하다. (1) 카트폴 프로그램은 총 50번의 에피소드 동안 실행한다. (2)  카트폴 게임을 실행하는 동작은 env.render 함수를 통해 수행한다. (3) 프로그램을 실행할 때는 엡실론 탐욕정책이 아닌 단순한 탐욕정책에 따라 모델에서 판단한 최적의 정책에 따라 카트를 움직이다.


로그 분석


카트폴을 실행할 때는 매 에피소드마다 로그를 찍는다. 로그에서 유심히 봐야할 부분은 reword avg이다. 강화 학습의 목적은 카트폴을 실행하면서 얻은 모든 보상에 대한 평균 값이 최대가 되는 것이기 때문에 학습 과정에서 확인한 reword avg 값과 유사한 패턴을 보여야 모델이 정상적으로 학습된 것이라 판단할 수 있다.


cartpole_run.py


+ Recent posts