강화 학습 ( DQN ) 튜토리얼 — PyTorch Tutorials 1 . 2 . 0 documentation 
 intermediate / reinforcement _ q _ learning 
 에이전트 는 연결 된 막대 가 똑바로 서 있 도록 카트 를 왼쪽 이나 오른쪽 으로 움직이 는 두 가지 동작 중 하나 를 선택 해야 합니다 . 다양 한 알고리즘 과 시각 화 기능 을 갖춘 공식 순위 표 가 Gym website 에 있 습니다 . 
 카트 폴 태 스 크 는 에이전트 에 대한 입력 이 환경 상태 ( 위치 , 속도 등 ) 를 나타내 는 4 개 의 실제 값 을 갖 도록 설계 되 었 습니다 . 그러나 신경망 은 순수 하 게 그 장면 을 보 고 태 스 크 를 해결 할 수 있 습니다 . 따라서 카트 중심 의 화면 패치 를 입력 으로 사용 합니다 . 이 때문 에 우리 의 결과 는 공식 순위 표 의 결과 와 직접 적 으로 비교 할 수 없 습니다 . 우리 의 태 스 크 는 훨씬 더 어렵 습니다 . 불행히 도 모든 프레임 을 렌더링 해야 되 므로 이것 은 학습 속도 를 늦추 게 됩니다 . 
 엄밀히 말 하 면 , 현재 스크린 패치 와 이전 스크린 패치 사이 의 차이 로 상태 를 표현 할 것 입니다 . 이렇게 하 면 에이전트 가 막대 의 속도 를 한 이미지 에서 고려 할 수 있 습니다 . 
 우리 는 DQN 학습 을 위해 경험 재현 메모리 를 사용 할 것 입니다 . 에이전트 가 관찰 한 전환 ( transition ) 을 저장 하 고 나중 에 이 데이터 를 재 사용 할 수 있 습니다 . 무작위 로 샘플링 하 면 배치 를 구성 하 는 전환 들 의 상관 성 이 제거 ( decorrelated ) 됩니다 . 이렇게 하 면 DQN 학습 절차 가 크 게 안정 되 고 향상 된다고 합니다 . 
 우리 의 환경 은 결정 론 적 이 므로 여기 에 제시 된 모든 방정식 은 단순 화 를 위해 결정 론 적 으로 공식 화 됩니다 . 강화 학습 문헌 에서 는 확률론 적 전환 에 대한 기대값 ( expectation ) 도 포함 할 것 입니다 . 
 그러나 세계 ( world ) 에 관한 모든 것 을 알 지 못하 기 때문 에 , \( Q ^*\) 에 도달 할 수 없 습니다 . 그러나 신경망 은 범용 함수 근사 자 ( universal function approximator ) 이 기 때문 에 간단 하 게 생성 하 고 \( Q ^*\) 를 닮 도록 학습 할 수 있 습니다 . 
 학습 업데이트 규칙 으로 , 일부 정책 을 위한 모든 \( Q \) 함수 가 Bellman 방정식 을 따른다는 사실 을 사용 할 것 입니다 : 
 오류 를 최소 화 하 기 위해서 Huber loss 를 사용 합니다 . Huber loss 는 오류 가 작 으면 평균 제곱 오차 ( mean squared error ) 와 같이 동작 하 고 오류 가 클 때 는 평균 절대 오류 와 유사 합니다 . 이것 은 \( Q \) 의 추정 이 매우 혼란 스러울 때 이상 값 에 더 강건 하 게 합니다 . 재현 메모리 에서 샘플링 한 전환 배치 \( B \) 에서 이것 을 계산 합니다 : 
 select _ action - Epsilon Greedy 정책 에 따라 행동 을 선택 합니다 . 간단히 말 해서 , 가끔 모델 을 사용 하 여 행동 을 선택 하 고 때로 는 단지 하나 를 균일 하 게 샘플링 할 것 입니다 . 임의 의 액션 을 선택 할 확률 은 EPS _ START 에서 시작 해서 EPS _ END 를 향해 지수 적 으로 감소 할 것 입니다 . EPS _ DECAY 는 감쇠 속도 를 제어 합니다 . 
 plot _ durations - 지난 100 개 에피소드 의 평균 ( 공식 평가 에서 사용 된 수치 ) 에 따른 에피소드 의 지속 을 도표 로 그리 기 위한 헬퍼 . 도표 는 기본 훈련 루프 가 포함 된 셀 밑 에 있 으며 , 매 에피소드 마다 업데이트 됩니다 . 
 아래 에서 주요 학습 루프 를 찾 을 수 있 습니다 . 처음 으로 환경 을 재 설정 하 고 state 텐서 를 초기 화 합니다 . 그런 다음 행동 을 샘플링 하 고 , 그것 을 실행 하 고 , 다음 화면 과 보상 ( 항상 1 ) 을 관찰 하 고 , 모델 을 한 번 최적 화 합니다 . 에피소드 가 끝나 면 ( 모델 이 실패 ) 루프 를 다시 시작 합니다 .