RL with Python and Keras

7 minute read

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]
      γk1Rt+kγk1Rt+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)=ΣaAπ(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)=ΣaAπ(a|s)(Rt+1+γΣsSPassvπ(s)) : 계산 가능한 벨만 기대 방정식
    vπ(s)=ΣaAπ(a|s)(Rt+1+γvπ(s)) : 상태 변환 확률이 1인 벨만 기대 방정식

  • 벨만 최적 방정식
    vk+1(s)=ΣaAπ(a|s)(Ras+γvk(s)) : 계산 가능한 형태의 벨만 기대 방정식
    v(s)=maxπ[vπ(s)] : 최적의 가치함수
    q(s,a)=maxπ[qπ(s,a)] : 최적의 큐함수
    π(s,a)={1 if a=argmaxaAq(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+γmaxaq(St+1,a)|St=s,At=a] : 큐함수에 대한 벨만 최적 방정식

3. 강화학습 기초 2: 그리드월드와 다이내믹 프로그래밍Permalink

  • 정책 이터레이션
    vπ(s)=Eπ[Rt+1+γvπ(St+1)|St=s] : 벨만 기대 방정식을 통한 효율적인 가치함수 계산
    vπ(s)=ΣaAπ(a|s)(Rt+1+γvπ(s)) : 합의 형태로 표현한 벨만 기대 방정식
    vk+1(s)=ΣaAπ(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+Σn1i=1Gi)
    =1n(Gn+(n1)1n1Σn1i=1Gi)
    =1n(Gn+(n1)Vn)
    =Vn+1n(GnVn)
    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)

π(s)=argmaxaA[Ras+γPassV(s)] : GPI의 탐욕 정책 발전
π(s)=argmaxaAQ(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=argmaxaAQ(s,a),1εaa,ε : ε-탐욕 정책
  • 살사 코드
  • 에이전트 작동 방식
    • 현재 상태에서 ε-탐욕 정책에 따라 행동 선택
    • 선택한 행동으로 환경에서 한 타임스텝 진행
    • 환경으로부터 보상과 다음 상태 받음
    • 다음 상태에서 ε-탐욕 정책에 따라 다음 행동 선택
    • (s,a,r,s,a)을 통해 큐함수 업데이트
  • 강화학습과 알고리즘 2: 큐러닝
    • 살사
      • 온폴리시 시간차 제어 (On-Policy Temporal-Difference Control) 때문에 자신이 행동하는대로 학습
      • 탐험을 위해 선택한 ε-탐욕 정책때문에 에이전트가 최적 정책을 학습하지 못하는 문제 발생
    • 큐러닝
      • 오프폴리시 시간차 제어 (Off-Policy Temporal-Difference Control), 또는 큐러닝으로 해결 가능

Q(St,At)Q(St,At)+α(Rt+1+γmaxaQ(St+1,a)Q(St,At)) : 큐러닝을 통한 큐함수 업데이트
q(s,a)=E[Rt+1+γmaxaq(St+1,a)|St=s,At=a] : 큐함수에 대한 벨만 최적 방정식

비슷한 수식들이 여러개 있어 확실한 이해&개념정리 필요!

5. 강화학습 심화 1: 그리드월드와 근사함수Permalink

  • 근사함수
    • 몬테카를로, 살사, 큐러닝의 한계
      • 계산 복잡도
      • 차원의 저주
      • 환경에 대한 완벽한 정보 필요
    • 근사함수를 통한 가치함수의 매개변수화
  • 인공신경망
    • 노드와 활성함수
      • 노드의 종류
        • 입력층 (Input Layer)
        • 은닉층 (Hidden Layer)
        • 출력층 (Output Layer)
      • 활성함수의 종류
        • Sigmoid 함수
          11+ex
        • ReLU 함수
          f(x)={x,x00,x<0
    • 딥러닝
      • 특징 추출 (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]

6. 강화학습 심화 2: 카트폴Permalink

  • 알고리즘1: DQN
    • Playing Atari with Deep Reinforcement Learning
    • 경험 리플레이 : 에이전트가 환경에서 탐험하며 얻은 샘플 (s,a,r,s) 을 메모리에 저장
    • 리플레이 메모리 : (과거) 샘플을 저장하는 메모리 → 오프폴리시 알고리즘
    • 타깃 신경망
      Q(St,At)Q(St,At)+α(Rt+1+γmaxaQ(St+1,a)Q(St,At)) : 큐러닝의 큐함수 업데이트 식
      MSE=()2=(Rt+1+γmaxaQ(s,a,θ)Q(s,a,θ))2 : DQN의 오류함수
      MSE=()2=(Rt+1+γmaxaQ(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)

7. 강화학습 심화 3: 아타리Permalink

  • 브레이크아웃 DQN
    • 브레이크아웃의 컨볼루션 신경망
      • 필터의 개수
      • 필터의 크기
      • 컨볼루션 연산시 필터가 이동하는 폭 (Strides)
      • 활성함수
    • DQN 학습 전 준비사항
      • Preprocessing
      • Frame Skip
    • DQN 코드
    • 에이전트가 환경과 상호작용하는 방법
      • 상태에 따른 행동 선택
      • 선택한 행동으로 환경에서 한 타임스텝 진행
      • 환경으로부터 다음 상태와 보상 받음
      • 샘플 (s,a,r,s) 을 리플레이 메모리에 저장
      • 리플레이 메모리에서 무작위로 추출한 32개의 샘플로 학습
      • 50,000 타임스텝마다 타깃 네트워크 업데이트
        MSE=()2=(Rt+1+γmaxaQ(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) : 가치신경망의 오류함수

참고자료Permalink

Updated:

Comments