RL with Python and Keras
1. 강화학습 개요Permalink
- 순차적 행동 결정 문제의 구성요소
- 상태 (State)
- 행동 (Action)
- 보상 (Reward)
- 정책 (Policy)
- MDP (Markov Decision Process)
2. 강화학습 기초 1: MDP와 벨만 방정식Permalink
- MDP의 구성요소
- 상태
St=sSt=s : 시간 t에서의 상태 - 행동
At=aAt=a : 시간 t에서의 행동 - 보상 함수
Ras=E[Rt+1|St=s,At=a]Ras=E[Rt+1|St=s,At=a] : 시간 t에서 상태가 s이고 행동이 a일때 에이전트가 받을 보상 - 상태 변환 확률 (State Transition Probability)
Pass′=P[St+1=s′|St=s,At=a]Pass′=P[St+1=s′|St=s,At=a] : 상태 s에서 행동 a를 취했을 때 다른 상태 s’에 도달할 확률 - 감가율 (Discount Factor)
γ∈[0,1]γ∈[0,1]
γk−1Rt+kγk−1Rt+k : 현재 시간 t로부터 k가 지난후의 보상 - 정책
π(a|s)=P[At=a|St=s]π(a|s)=P[At=a|St=s] : 시간 t, 상태 s의 에이전트가 있을 때 가능한 행동 중에서 행동 a를 할 확률
- 상태
-
가치함수
Rt+1+Rt+2+Rt+3+Rt+4+Rt+5+⋯Rt+1+Rt+2+Rt+3+Rt+4+Rt+5+⋯ : 시간 t로부터 에이전트가 행동을 하면서 받을 보상들의 합
Gt=Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+γ4Rt+5+⋯Gt=Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+γ4Rt+5+⋯ : 시간 t로부터 에이전트가 행동을 하면서 받을 보상들의 반환값
ex) 에피소드를 t=1 ~ 5까지 진행했을 경우, 아래와 같은 5개의 반환값이 생김
G1=R2+γR3+γ2R4+γ3R5+γ4R6G1=R2+γR3+γ2R4+γ3R5+γ4R6
G2=R3+γR4+γ2R5+γ3R6G2=R3+γR4+γ2R5+γ3R6
G3=R4+γR5+γ2R6G3=R4+γR5+γ2R6
G4=R5+γR6G4=R5+γR6
G5=R6G5=R6
v(s)=E[Gt|St=s]v(s)=E[Gt|St=s] : 반환값의 기대값으로 표현된 가치함수
v(s)=E[Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+γ4Rt+5+⋯|St=s]v(s)=E[Rt+1+γRt+2+γ2Rt+3+γ3Rt+4+γ4Rt+5+⋯|St=s]
v(s)=E[Rt+1+γ(Rt+2+γRt+3+γ2Rt+4+γ3Rt+5+⋯)|St=s]v(s)=E[Rt+1+γ(Rt+2+γRt+3+γ2Rt+4+γ3Rt+5+⋯)|St=s]
v(s)=E[Rt+1+γGt+1|St=s]v(s)=E[Rt+1+γGt+1|St=s]
v(s)=E[Rt+1+γv(St+1)|St=s]v(s)=E[Rt+1+γv(St+1)|St=s] : Gt+1 은 앞으로 받을 보상에 대한 기대값이기 때문에 가치함수로 표현 가능
vπ(s)=Eπ[Rt+1+γvπ(St+1)|St=s] : 정책을 고려한 가치함수의 표현 (벨만 기대 방정식) - 큐함수
- 행동 가치함수 (큐함수) : 어떤 상태에서 어떤 행동이 얼마나 좋은지 알려주는 함수
vπ(s)=Σa∈Aπ(a|s)qπ(s,a)
qπ(s,a)=Eπ[Rt+1+γqπ(St+1,At+1)|St=s,At=a]
- 행동 가치함수 (큐함수) : 어떤 상태에서 어떤 행동이 얼마나 좋은지 알려주는 함수
-
벨만 기대 방정식
vπ(s)=Eπ[Rt+1+γvπ(St+1)|St=s] : 벨만 기대 방정식
vπ(s)=Σa∈Aπ(a|s)(Rt+1+γΣs′∈SPass′vπ(s′)) : 계산 가능한 벨만 기대 방정식
vπ(s)=Σa∈Aπ(a|s)(Rt+1+γvπ(s′)) : 상태 변환 확률이 1인 벨만 기대 방정식 - 벨만 최적 방정식
vk+1(s)=Σa∈Aπ(a|s)(Ras+γvk(s′)) : 계산 가능한 형태의 벨만 기대 방정식
v∗(s)=maxπ[vπ(s)] : 최적의 가치함수
q∗(s,a)=maxπ[qπ(s,a)] : 최적의 큐함수
π∗(s,a)={1 if a=argmaxa∈Aq∗(s,a)0 otherwise : 최적 정책
v∗(s)=maxa[q∗(s,a)|St=s,At=a] : 큐함수 중 최대를 선택하는 최적 가치함수
v∗(s)=maxaE[Rt+1+γv∗(St+1)|St=s,At=a] : 벨만 최적 방정식
q∗(s,a)=E[Rt+1+γmaxa′q∗(St+1,a′)|St=s,At=a] : 큐함수에 대한 벨만 최적 방정식
3. 강화학습 기초 2: 그리드월드와 다이내믹 프로그래밍Permalink
- 정책 이터레이션
vπ(s)=Eπ[Rt+1+γvπ(St+1)|St=s] : 벨만 기대 방정식을 통한 효율적인 가치함수 계산
vπ(s)=Σa∈Aπ(a|s)(Rt+1+γvπ(s′)) : 합의 형태로 표현한 벨만 기대 방정식
vk+1(s)=Σa∈Aπ(a|s)(Ras+γvk(s′)) : k번째 가치함수를 통해 k+1번째 가치함수 계산
- 다이나믹 프로그래밍의 한계
- 다이나믹 프로그래밍 : 순차적 행동 결정 문제를 벨만 방정식을 통해 푸는 것
- 계산 복잡도
- 차원의 저주
- 환경에 대한 완벽한 정보 필요
4. 강화학습 기초 3: 그리드월드와 큐러닝Permalink
- 강화학습과 정책 평가 1: 몬테카를로 예측
vπ(s)∼1N(s)ΣN(s)i=1Gi(s) : 반환값(G)의 평균으로 가치함수(v)를 추정
Vn+1=1nΣni=1Gi=1n(Gn+Σn−1i=1Gi)
=1n(Gn+(n−1)1n−1Σn−1i=1Gi)
=1n(Gn+(n−1)Vn)
=Vn+1n(Gn−Vn)
V(s)←V(s)+1n(G(s)−V(s))
V(s)←V(s)+α(G(s)−V(s)) - 강화학습과 정책 평가 2: 시간차 예측
vπ(s)=Eπ[Rt+1+γvπ(St+1)|St=s] : 정책을 고려한 가치함수의 표현 (벨만 기대 방정식)
V(St)←V(St)+α(R+γV(St+1)−V(St)) : 시간차 예측에서 가치함수 업데이트
R+γV(St+1) : 업데이트의 목표
α(R+γV(St+1)−V(St)) : 업데이트의 크기 - 강화학습과 알고리즘 1: 살사
- 정책 이터레이션 (GPI : Generalized Policy Iteration)
- 정책 이터레이션 (GPI : Generalized Policy Iteration)
π′(s)=argmaxa∈A[Ras+γPass′V(s′)] : GPI의 탐욕 정책 발전
π(s)=argmaxa∈AQ(s,a) : 큐함수를 사용한 탐욕 정책
Q(St,At)←Q(St,At)+α(R+γQ(St+1,At+1)−Q(St,At)) : 시간차 예측에서 큐함수 업데이트
[St,At,Rt+1,St+1,At+1] : 시간차 제어에서 사용하는 샘플
- 탐욕정책 : 초기의 에이전트는 탐욕 정책으로 잘못된 학습을 하게 될 가능성이 큼
π(s)={a∗=argmaxa∈AQ(s,a),1−εa≠a∗,ε : ε-탐욕 정책
- 살사 코드
- 에이전트 작동 방식
- 현재 상태에서 ε-탐욕 정책에 따라 행동 선택
- 선택한 행동으로 환경에서 한 타임스텝 진행
- 환경으로부터 보상과 다음 상태 받음
- 다음 상태에서 ε-탐욕 정책에 따라 다음 행동 선택
- (s,a,r,s′,a′)을 통해 큐함수 업데이트
- 강화학습과 알고리즘 2: 큐러닝
- 살사
온폴리시
시간차 제어 (On-Policy Temporal-Difference Control) 때문에 자신이 행동하는대로 학습- 탐험을 위해 선택한 ε-탐욕 정책때문에 에이전트가 최적 정책을 학습하지 못하는 문제 발생
- 큐러닝
오프폴리시
시간차 제어 (Off-Policy Temporal-Difference Control), 또는 큐러닝으로 해결 가능
- 살사
Q(St,At)←Q(St,At)+α(Rt+1+γmaxa′Q(St+1,a′)−Q(St,At)) : 큐러닝을 통한 큐함수 업데이트
q∗(s,a)=E[Rt+1+γmaxa′q∗(St+1,a′)|St=s,At=a] : 큐함수에 대한 벨만 최적 방정식
비슷한 수식들이 여러개 있어 확실한 이해&개념정리 필요!
5. 강화학습 심화 1: 그리드월드와 근사함수Permalink
- 근사함수
- 몬테카를로, 살사, 큐러닝의 한계
- 계산 복잡도
- 차원의 저주
- 환경에 대한 완벽한 정보 필요
- 근사함수를 통한 가치함수의 매개변수화
- 몬테카를로, 살사, 큐러닝의 한계
- 인공신경망
- 노드와 활성함수
- 노드의 종류
- 입력층 (Input Layer)
- 은닉층 (Hidden Layer)
- 출력층 (Output Layer)
- 활성함수의 종류
- Sigmoid 함수
11+e−x - ReLU 함수
f(x)={x,x≥00,x<0
- Sigmoid 함수
- 노드의 종류
- 딥러닝
- 특징 추출 (Feature Extraction)
- 신경망의 학습
오차=(타깃−예측)2
업데이트값∝오차∗오차기여도
- 경사하강법의 종류
- SGD
- RMSprop
- Adam
- 경사하강법의 종류
- 노드와 활성함수
- 케라스
- 딥살사
- 살사의 큐함수 업데이트 식
Q(St,At)←Q(St,At)+α(Rt+1+γQ(St+1,At+1)−Q(St,At)) - 살사의 큐함수 업데이트 식에서 정답
Rt+1+γQ(St+1,At+1) - 살사의 큐함수 업데이트 식에서 예측
Q(St,At) - 딥살사의 오차함수
MSE=(정답−예측)2=(Rt+1+γQ(St+1,At+1)−Q(St,At))2 - 딥살사의 활성함수 : 선형함수
- 딥살사 코드
- 살사의 큐함수 업데이트 식
- 정책신경망 (Policy Gradient)
- 정책신경망의 활성함수 : Softmax
s(yi)=eyiΣjeyj - 정책의 표현
정책=πθ(a|s):θ=가중치 - 정책 기반 강화학습의 목표
maximizeJ(θ) - 목표함수의 경사에 따라 정책신경망 업데이트
θt+1=θt+α∇θJ(θ) - 가치함수로 표현한 목표함수의 정의
J(θ)=vπθ(s0) - 목표함수의 미분
∇θJ(θ)=∇θvπθ(s0) - Policy Gradient
∇θJ(θ)=∑sdπθ(s)∑a∇θπθ(a|s)qπ(s,a)
∇θJ(θ)=∑sdπθ(s)∑aπθ(a|s)∇θπθ(a|s)πθ(a|s)qπ(s,a)
∇θJ(θ)=∑sdπθ(s)∑aπθ(a|s)∇θlogπθ(a|s)qπ(s,a) - 기댓값의 형태로 표현한 목표함수의 미분
∇θJ(θ)=Eπθ[∇θlogπθ(a|s)qπ(s,a)] - Policy Gradient의 업데이트 식
θt+1=θt+α∇θJ(θ)≈θt+α[∇θlogπθ(a|s)qπ(s,a)] - 강화학습의 업데이트 식
θt+1≈θt+α[∇θlogπθ(a|s)Gt] - 강화학습 코드
- 에이전트가 환경과 상호작용하는 방법
- 상태에 따른 행동 선택
- 선택한 행동으로 환경에서 한 타임스텝 진행
- 환경으로부터 다음 상태와 보상 받음
- 다음 상태에 대한 행동 선택 (에피소드가 끝날 때까지 반복)
- 환경으로부터 받은 정보를 토대로 에피소드마다 학습 진행
- 보상들의 정산 (반환값)
G1=R2+γR3+γ2R4+γ3R5+γ4R6
G2=R3+γR4+γ2R5+γ3R6
G3=R4+γR5+γ2R6
G4=R5+γR6
G5=R6 - 효율적인 반환값 계산
G5=R6
G4=R5+γR5
G3=R4+γR4
G2=R3+γR3
G1=R2+γR2 - 네트워크 업데이트를 위한 오류함수
∇θlogπθ(a|s)Gt
∇θ[logπθ(a|s)Gt] - 엔트로피
엔트로피=−∑ipilogpi - 크로스 엔트로피
크로스엔트로피=−∑iyilogpi:yi=정답 - Policy Gradient의 크로스 엔트로피
크로스엔트로피=−∑iyilogpi=−log paction - 강화학습의 업데이트 식
θt+1≈θt+α[∇θlogπθ(a|s)Gt]=θt−α[∇θ−logπθ(a|s)Gt]
- 정책신경망의 활성함수 : Softmax
6. 강화학습 심화 2: 카트폴Permalink
- 알고리즘1: DQN
- Playing Atari with Deep Reinforcement Learning
- 경험 리플레이 : 에이전트가 환경에서 탐험하며 얻은 샘플 (s,a,r,s′) 을 메모리에 저장
- 리플레이 메모리 : (과거) 샘플을 저장하는 메모리 → 오프폴리시 알고리즘
- 타깃 신경망
Q(St,At)←Q(St,At)+α(Rt+1+γmaxa′Q(St+1,a′)−Q(St,At)) : 큐러닝의 큐함수 업데이트 식
MSE=(정답−예측)2=(Rt+1+γmaxa′Q(s′,a′,θ)−Q(s,a,θ))2 : DQN의 오류함수
MSE=(정답−예측)2=(Rt+1+γmaxa′Q(St+1,a′,θ−)−Q(St,At,θ))2 : 타깃 네트워크를 이용한 DQN 오류함수 - DQN 코드
- 에이전트가 환경과 상호작용하는 방법
- 상태에 따른 행동 선택
- 선택한 행동으로 환경에서 한 타임스텝 진행
- 환경으로부터 다음 상태와 보상 받음
- 샘플 (s,a,r,s′) 을 리플레이 메모리에 저장
- 리플레이 메모리에서 무작위 추출한 샘플로 학습
- 에피소드마다 타깃 모델 업데이트
- 알고리즘2: 액터-크리틱
- Reinforcement Learning: Introduction
θt+1=θt+α∇θJ(θ)≈θt+α[∇θlogπθ(a|s)qπ(s,a)] : 폴리시 그레디언트의 정책신경망 업데이트 식
θt+1≈θt+α[∇θlogπθ(a|s)Gt] : Reinforce 알고리즘의 업데이트 식
θt+1≈θt+α[∇θlogπθ(a|s)Qw(s,a)] : 액터-크리틱 업데이트 식
오류함수=정책 신경망 출력의 크로스 엔트로피∗큐함수(가치신경망 출력)
A(St,At)=Qw(St,At)−Vv(St) : 어드밴티지 함수의 정의
δv=Rt+1+γVv(St+1)−Vv(St) : 어드밴티지 함수의 정의
θt+1≈θt+α[∇θlogπθ(a|s)δv] : 액터-크리틱 업데이트 식
MSE=(정답−예측)2=(Rt+1+γVv(St+1)−Vv(St))2 : 가치신경망의 업데이트를 위한 오류함수 - A2C (Advantage Actor-Critic)
- 액터-크리틱 코드
- 에이전트가 환경과 상호작용하는 방법
- 정책신경망을 통해 확률적으로 행동을 선택
- 선택한 행동으로 환경에서 한 타임스텝 진행
- 환경으로부터 다음 상태와 보상 받음
- 샘플 (s,a,r,s′) 을 통해 시간차 에러를 구하고 어드밴티지 함수 구함
- 시간차 에러로 가치신경망을, 어드밴티지 함수로 정책신경망을 업데이트
θt+1≈θt+α[∇θlogπθ(a|s)δv] : 액터 업데이트 식
θt+1≈θt+α∇θ[logπθ(a|s)δv] : 액터 업데이트 식 변형
MSE=(정답−예측)2=(Rt+1+γVv(St+1)−Vv(St))2 : 크리틱 오류함수
- A3C (Asynchronous Advantage Actor-Critic)
- Reinforcement Learning: Introduction
7. 강화학습 심화 3: 아타리Permalink
- 브레이크아웃 DQN
- 브레이크아웃의 컨볼루션 신경망
- 필터의 개수
- 필터의 크기
- 컨볼루션 연산시 필터가 이동하는 폭 (Strides)
- 활성함수
- DQN 학습 전 준비사항
- Preprocessing
- Frame Skip
- DQN 코드
- 에이전트가 환경과 상호작용하는 방법
- 상태에 따른 행동 선택
- 선택한 행동으로 환경에서 한 타임스텝 진행
- 환경으로부터 다음 상태와 보상 받음
- 샘플 (s,a,r,s′) 을 리플레이 메모리에 저장
- 리플레이 메모리에서 무작위로 추출한 32개의 샘플로 학습
- 50,000 타임스텝마다 타깃 네트워크 업데이트
MSE=(정답−예측)2=(Rt+1+γmaxa′Q(St+1,a′,θ−)−Q(St,At,θ))2 : DQN의 오류함수 식
- 후버로스 오류함수
- 텐서보드 사용방법
- 브레이크아웃의 컨볼루션 신경망
- 브레이크아웃 A3C
- DQN의 한계
- 학습에 사용된 샘플끼리의 연관성에 영향을 받음 (경험 리플레이 기반 한계)
- 메모리 사용량 높음 (느린 학습속도 유발)
- A3C (Asynchronous Advantage Actor-Critic) 학습 과정
- 글로벌신경망의 생성과 여러개의 (환경 + 액터러너) 생성
- 각 액터러너는 일정 타임스텝 동안 환경에서 자신의 모델로 샘플 수집
- 일정 타임스텝이 끝나면 각 액터러너는 수집한 샘플로 글로벌 네트워크 업데이트
- 글로벌 네트워크를 업데이트 한 액터러너는 다시 글로벌 네트워크로 자신을 업데이트
- 멀티스레딩
- 하나의 프로그램에서 여러개의 프로세스 생성 : 멀티 프로세싱
- 하나의 프로세스에서 여러개의 스레드 생성 : 멀티 스레딩
- 파이썬에서는 GIL (Global Interpreter Lock) 장치 사용
- A3C 코드
- 액터러너의 Run 함수 순서
- 액터러너의 로컬 네트워크에 따라 액션 선택
- 환경으로부터 다음 상태와 보상 받음
- 샘플 저장
- 에이전트가 목숨을 잃거나 t_max 타임스텝 동안 반복
- 저장한 샘플을 글로벌 네트워크로 보냄
- 글로벌 네트워크는 로컬 네트워크로부터 받은 샘플로 자신을 업데이트
- 업데이트 된 글로벌 네트워크로 액터러너 업데이트
Advantage=Rt+1+γVv(St+1)−Vv(St) : 액터-크리틱에서의 어드밴티지 함수
Advantage=Rt+1+γRt+2+⋯+γkVv(St+k)−Vv(St) : k-타임스텝 어드밴티지 함수
엔트로피=−Σipilog(pi)
오류함수=Rt+1+γRt+2+⋯+γkVv(St+k)−Vv(St) : 가치신경망의 오류함수
- DQN의 한계
Comments