모두를 위한 Deep Reinforcement Learning 강의를 요약정리
http://hunkim.github.io/ml/
실습에 사용된 코드
https://github.com/freepsw/tensorflow_examples/tree/master/20.RL_by_SungKim
3. Lec 3. Dummy Q Learning
단순히 action에 대한 reward와 다음 단계 Q의 최대값을 더함
• 초기 아무것도 알지 못하는 상황에서 Q라는 대상에게
action을 전달하면,
• Reward와 새로운 state, 게임 종료여부를 반환함.
• 이를 기반으로 가장 보상이 큰 action을 선택하도록
하는 방식
5. Lec 3. Dummy Q Learning 학습 과정
초기에는 reward 0이 반복, 이후 성공하면서 Q값을 업데이트
• 게임에 성공했을 때만 1을 reward로
받음
• 이후 다음 action 선택시에 Q Table에
서 가장 큰 action을 선택함
• 최종 Q table이 업데이트 된 결과
6. Lec 4. Q-Learning Exploit & Exploration
Action 선택시 다양한 선택이 가능하도록 하는 방법
Decaying E-greedy Random noise
• 랜덤으로 선택한 값이 일정 값(e) 이하이면, action을 랜덤
으로 선택, 이상이면 Q의 최대값 선택
• è 기존 값과 상관없이 완전히 새로운 선택 가능
• Decaying : 시간이 지나면 e값이 작아져서 기존 Q를 많이
활용하도록 함
• 기존 Q값에 랜덤으로 생성된 값을 추가한 후 최대값을 선택하
도록 변경
• è 기존 값에 영향을 받음
8. Lec 5. Q-learning on Nondeterministic Worlds
선택한 action이 불규칙하게 다른 action으로 변경된다면?
• Frozen Lake 게임을 예로 들면 내가 LEFT
를 선택했는데, 실제 action은 아무것도 안
하거나, RIGHT를 실행하는 경우
• 이런 상황에서 기존 Code를 실행해 보면
게임의 성공률이 10%도 안되게 나온다.
• 기존에는 다음 상태 Q의 state를 100% 따라서 Q Table의 state를 업
데이트 하였으나,
• 이제는 나의 선택(현재 상태 Q)의 결정을 많이 반영하고, 다음 상태 Q
의 결정은 조금만 반영한다.
• 이때 반영할 기준(수치)를 learning_rate로 설정
9. • 위와 같은 80*80 size의 화면에 2가지 색상인 경
우 2의 80*80승만큼의 공간이 필요함. à 불가
• 상태를 입력으로 받고,
• 상태에 따른 모든 action에 대한 가능성을 출력으로 구성하는 네트워크
Lec 5. Q-Network
Q Table에는 한계가 있으므로, 이를 Neural Network를 활용해 보자
10. 1). 정답(y, target)은 기존 Q-learning으로 계산
2). 예측은 아래와 같은 NN을 이용하여 계산
à Ws(y)의 값이 정답이 되도록 학습
3). 정답(y)와 예측값(Ws, Q_pred, Q^)를 가능한 동일하게 해주는 Weight(𝛉)를
찾자
Q-pred
(Q^, 예측값)
4). Loss(Cost) 함수를 이용 𝛉하여 Weight 최적화
• Q^ : 𝛉가 주어졌을때 action, state에 대한 예측값
• Q* : Q-learnig에서의 출력값
Q-Network를 학습하는 방식
정답(Y)를 계산하는 함수를 제외하면 거의 동일하게 활용가능
11. • 초기 상태를 random 초기화
• 첫번째 상태를 저장
• ∅(s1)는 상태(s)를 전처리한다는 의미, 여기서는 별도의 전처리가
없으므로 s1과 동일
• Action 선택 (E-greedy 방식)
• Y(정답)은 2가지 방식으로 계산
• 목표(goad)에 도달 했을 때는 다음 상태가 없으므로 reward만 저장
• 다음 단계가 있을 때는 다음 단계에서의 가장 큰 값 (discount factor
적용)
그런데 왜 stochastic world에서 learing rate를 적용하여 target을 계산
하지 않을까?
Learning rate(α)가 아주 미세하게 변경되기 때문에 적용하지 않아도 결과적으로 큰 차이는 없음.
Q-Network알고리즘 정리
12. • 예측한 Y^의 Θ (Weight)를 업데이트하게되면, target의 Θ도 함께 변
경되게 된다.
• 즉 화살을 쏘는 순간 target도 함께 움직이게 되는 상황
Q Network는 network가 너무 적고, 변수간의 상관관계 및 고정되지 않는
Target으로 적용이 어렵다.
Lec 7. Q Network 문제점
13. • 저장된 상태 중에서 랜덤하게 몇개만 가져오면, 전체의 분포가 잘 반
영될 수 있음. (correlation이 제거될 수 잇음)
DQN의 해결방안
• Network의 깊이를 더 깊게하여 최적의 weight를 찾아가
도록 변경
14. • Target(Y)의 Θ (Weight)와 예측값(Y^)의 Θ를 분리한다
• 학습할때는 예측값의 Θ만 업데이트하고,
• 일정한 시간 후에 target의 Θ 에 복사한다.
DQN의 해결방안
Target Network가 현재 학습과정에서 영향을 받지 않도록 분리
15. DQN1 (NIPS 2013 적용)
위에서 제시한 3가지 중 2가지 해결방안을 적용
1단계. Go deep
• Layer를 추가하여 2개로 생성.
16. 2단계. Replay Memory
• Action에 대한 결과(state, reward.. )를 buffer에 저장
• 매 10번째 episode에서 buffer에 저장된 상태를 10개씩 50번 학습함.
• 메모리(buffer)에서 받아온 정보를 stack에 저장하고, 이를 학습한다.
• 일단 for문으로 minibatch(10건) 만큼씩 정답과 예측에 필요한 상태(state)를 저장한다.
• 10개가 채워지면 실제 학습을 수행하는 dqn.update함수를 호출한다.
17. DQN2 (Nature 2015 적용)
NIPS 2013 모델
Go Deep
Capture and Replay
• 학습초기에는 위와 같은 결과가 발생함.
Nature 2015 모델
Go Deep
Capture and Replay
Separate Network
• 학습초기 (3~400 episode)부터 10,000
18. • 상태를 저장할 버퍼를 생성한다.
• Target과 예측에 사용될 네트워크 (Θ, Weight)를 각각 생성한다.
초기에는 2개의 값이 동일하다.
• Action 선택 및 실행 후 reward, env를 받아온다.
• Action에 의해 받아온 상태, reward를 바로 학습하지 않고, 일단
버퍼(D)에 저장한다.
• 버퍼에 저장된 데이터를 랜덤하게 가져와서 학습을 한다.
• 분리된 Target 네트워크 (Θ, Weight)를 이용한 값(Yi)와 학습에서 사용한
네트워크 (Θ)를 이용한 값을 비교하고,
• 비교 결과에 따라서 학습에 사용된 네트워크(Θ)를 업데이트 한다.
• 분리된 Target 네트워크 (Θ, Weight)를 이용한 값(Yi)와 학습에서 사용한
네트워크 (Θ)를 이용한 값을 비교하고,
• 비교 결과에 따라서 학습에 사용된 네트워크(Θ)를 업데이트 한다.
• 그리고 일정 단계 후에 Target 네트워크 (Θ)를 업데이트 한다.
Nature 2015 전체 알고리즘
19. 1). 2개의 Network 생성 및 초기화 (2개 동일하게)
2). 학습 중에는 mainDQN만 업데이트 됨
--> 일정 간격마다 mainDQN = targetDQN으로 복사
3). 일정 간격마다 mainDQN = targetDQN으로 복사 (Weight 값을 복사)
Network를 분리하고, 복사하는 방식
초기 동일한 NW로 구성하고, 학습시에는 target NW를 변경하지 않고, 일
정 기간이후에 학습된 NW를 target NW에 복사