이제 본격적으로 코드를 통해 DQN의 개념을 살펴보자. 먼저 DQN 기능을 수행하는
Agent 클래스를 정의하고, 그 구조와 흐름을 파악해보자. Agent 클래스는 총 8개의 함수로 구성되어 있으며, 각각의 함수는 DQN의 핵심 동작을 구현하고 있다.
DQN 알고리즘
Agent 클래스 기능 구성
(1) Agent 클래스를 생성하면 가장 먼저 build_model 함수가 호출되어 인공신경망 모델이 생성된다. 이
신경망은 Q함수를 근사하여 행동을 결정하는 데 사용된다.
(2) 이어서 train 함수가
호출되면 본격적인 학습이 시작된다. 이 함수 안에서는 여러 가지 동작이 반복적으로 수행되며, 학습의 전체 흐름을 조율하는 핵심 함수이다.
(3) 먼저
take_action_and_append_memory 함수가 호출되어 에이전트가 환경에서 행동을 수행하며 경험을 수집하고, 이를 재현 메모리에 기록한다. 이때 인공신경망을 사용해 Q값을 계산하고, 선택할 행동을 결정한다.
(3)-1 get_episilon 함수는 현재 에피소드에 따라 입실론
값을 계산한다. 입실론은 무작위 행동을 얼마나 시도할지 결정하는 데 사용되며, 탐험(exploration)의 비율을 동적으로 조정한다.
(3)-2 greed_search 함수는 입실론 값과 무작위 수치를
비교해 무작위 행동을 선택할지, 신경망의 예측에 따라 행동할지를 결정한다. 이로써 에이전트는 일정 확률로 탐험과 탐욕을 병행하며 학습하게 된다.
(4) train_mini_batch 함수는 재현 메모리에서 무작위로
샘플을 추출해 신경망을 학습시키는 함수이다. 이 함수는 인공신경망의 가중치를 업데이트하여 예측 성능을
점진적으로 향상시킨다.
train 함수는 지정된 횟수(episode_num)만큼 take_action_and_append_memory와
train_mini_batch 함수를 반복 호출하며, 환경에서의 경험을 축적하고 그 경험을
바탕으로 신경망을 지속적으로 학습시킨다. 이 과정에서 학습 경과를 확인하기 위해 로그도 함께 출력된다.
(5) moving_avg 함수는 최근 20회 실행 결과의 평균 값을 계산하여, 에이전트의 성능이 실제로
향상되고 있는지를 수치로 확인할 수 있도록 해준다.
(6) save_model 함수는 학습이 종료된 후, 학습된 인공신경망의 가중치와 구조를 파일로 저장한다. 이로 인해
나중에 테스트하거나 이어서 학습할 때 기존 모델을 불러와 사용할 수 있다.
이처럼 Agent 클래스는 DQN 학습
전 과정을 유기적으로 연결하며, 신경망 생성부터 모델 저장까지 전체 흐름을 하나의 구조 안에서 체계적으로
처리할 수 있도록 구성되어 있다.