일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 운영체제
- 밑바닥부터 시작하는 딥러닝
- Network layer
- 신경망
- Linux
- 인터럽트
- 모두를 위한 딥러닝
- 신경망 첫걸음
- function call
- Router
- demultiplexing
- Transport layer
- LED
- GPIO
- 3분 딥러닝
- Class Activation Map
- 디바이스 드라이버
- 스위치
- 텐서플로우
- 모두를 위한 딥러닝]
- LED 제어
- file descriptors
- TensorFlow
- Interrupt
- 펌웨어
- Generalized forward
- 리눅스
- 딥러닝
- Switch
- RDT
- Today
- Total
건조젤리의 저장소
7-1. DQN 본문
김성훈 교수님의 강의내용을 정리한 내용입니다.
출처 : http://hunkim.github.io/ml/
Q-Table의 한계를 극복하기 위해 Q-Nets을 이용했지만 성능이 매우 떨어지는 현상이 나타났다!
처참한 결과...
위의 2가지 문제를 어떻게 해결해야 할까?
문제점
1. 유사한 샘플들
매번 루프를 돌때마다 받아오는 환경은 서로 유사하다!
각각의 환경이 유사하다! (차이가 거의 없다)
학습시에 서로 유사한 샘플들로 회귀과정을 수행하게 되면, 전체적인 특징을 잘 파악하지 못한다!
2. 불안정한 목표(움직이는 타겟)
목표값과 예측값을 동일하게 만드는 것이 목표이다.
목표값과 예측값을 구하는데 같은 모델을 사용하게 된다.
따라서 네트워크가 업데이트 되면 목표값 또한 달라지게 된다.
DQN을 이용하여 이 문제를 해결하자
네트워크를 구성할때 깊게 구성한다!
먼저 반복문을 돌며 바로 학습하는게 아닌 상태값들을 버퍼에 저장시킨다.
그 다음 버퍼에서 무작위로 샘플을 뽑아 학습시킨다.
D라는 버퍼에 값을 쌓는다.
학습을 시킬때 D버퍼의 값들을 무작위 추출하여 미니배치 학습을 한다.
서로 가까이 있는 값들이 아닌 전체 데이터에서 무작위로 뽑기 때문에
전체 데이터의 분포를 잘 볼 수 있다.
계속 학습을 시키다 보면 수렴하게 된다.
예측값을 토대로 모델을 변경시키게 되면 목표값 또한 변경된다!
이를 해결하려면 어떻게 해야 할까?
목표값을 얻어오는 네트워크와 예측값을 얻어오는 네트워크를 분리시키자.
네트워크를 학습시킬 때 예측값을 얻어오는 네트워크만 학습시킨다.
일정 step이 지나게되면 목표값을 얻어오는 네트워크에 학습된 네트워크를 붙여넣는다.
- 버퍼 D생성
- 2개의 동일한 Q네트워크 생성
- 액션 선택
- 액션 실행, 상태 받아오기
- 버퍼에 상태 저장하기
- 버퍼에서 랜덤한 샘플 추출 및 학습
- 목표값 네트워크와 예측값 네트워크의 값을 비교 및 예측값 네트워크 학습
- 목표값 네트워크에 예측값 네트워크를 붙여넣기
'공부 기록 > 모두를 위한 딥러닝 (RL)' 카테고리의 다른 글
7-3. DQN 구현 (Nature 2015) (0) | 2019.11.22 |
---|---|
7-2. DQN 구현 (NIPS 2013) (1) | 2019.11.22 |
6-3. Q-Network 구현 (Cart Pole) (0) | 2019.11.21 |
6-2. Q-Network 구현 (Frozen Lake) (0) | 2019.11.20 |
6-1. Q-Network (0) | 2019.11.19 |