[Reinforcement Learning] Q Network
Q Network 개념
실제 문제를 풀어가기에는 Q Table 구성 사이즈가 너무나 크다. 따라서 Network을 구성해서 푼다. 주어진 입력, 출력을 사용자가 조절하면서 State, Action주어 원하는 Output을 얻어낸다. 적은 table을 사용해서 원하는 결과를 얻어내는 것
Gym Game에서 출력을 Action 4개로 보면 다음과 같다.
상태만 주고 모든 가능한 액션을 얻어내자. 앞으로 아래 모델을 사용한다.
비용에 대한 최소화를 공식화 하면
- W: Weight,
- y: 실제값
- cost: 비용
목표는 Optimal Q인 Q* 즉, y값을 구한다. Ws는 네트워크가 만들어낸 Q prediction이라 할 수 있다.
Q hat을 붙이면 hat이 prediction을 의미한다. "시타 = 세타"를 weight 이다.
이 알고리즘을 문장으로 풀어쓰면
- 초기 weight을 random하게 준다.
- 첫번째 상태를 준다. @(s) == 파이(에스) - one hot을 해준다.
- E-greedy를 사용해 가장 좋은 action을 취한다.
- 결과로 상태랑 reward를 준다.
- 학습을 한다.
해당 알고리즘은 deep mind의 핵심 알고리즘이다. 코드화 하면
다음으로 학습을 시킨다.
Yj값으 두개인데, Done이면 Rj이고, 중간 진행은 Rj + rmaxxQ(@=1,a:세타)이다.
Q Network의 결과는 Q Table 보다 성능이 안좋다. 이를 좀 더 빠르게 할려면?
diverge(다이버즈): 분산되어 결과가 안 좋다의 뜻
DQN 개념
강화학습의 가장 중요한 알고리즘이다. (강좌) 두가지 큰 문제는 2가지 이다.
- 샘플데이터간의 correlation: 샘플이 다양하지 않고 연관성(correlation)이 있다.
- target이 흔들린다. target은 Y Label 이다. 예) 화살을 쏘자 과녁이 움직이는 경우
DQN의 3가지 솔루션
1) Go deep
네트워크가 깊게 갈 수록 좋다.
2) Experience replay
action의 state를 buffer에 저장한후 사용한다. D = buffer
buffer에서 random하게 가져오면 sample의 correlation을 해결할 수 있다.
3) non-stationary targets
타겟이 움직인다. 세타 Weight을 update하면 target도 움직인다. Target의 세타를 그대로 둔다. 두개의 Network에서 첫번째 Network에서 target을 가져와서 두번째 Network에서 사용한다.
2015년 Deep Mind가 Nature에 연재한 논문 알고리즘
참조