[CS231n] 14. Deep Reinforcement Learning
📗강의노트/CS231n

[CS231n] 14. Deep Reinforcement Learning

728x90
반응형




강화학습은 에이전트의 보상을 최대화할 수 있는 행동이 무엇인지를 학습하는 것이다. 




강화학습의 대표적인 방법인 Q-LearningPolicy Gradients에 대해서 배워볼 것이다. 




에이전트와 환경이 있다. 그리고 환경에서 에이전트에게 상태가 주어진다.  그리고 에이전트는 행동을 하게된다. 그러면 환경은 행동에 따라 에이전트에게 보상을 주고 다음 상태를 부여한다. 계속 반복이된다. 




고전적인 문제이다.




게임을 학습시켜 높은 점수를 따게 할 수 있다. 

과연 수학적으로는 어떻게 나타낼까?




Markov Decision Process를 통해서 강화학습 문제를 수식화 시킬 수 있다. 

Markov property란 현재 상태만으로 전체 상태를 나타내는 성질이다. 




환경은 초기 상태 분포인 p(s_0)에서 상태 s_0을 샘플링한다. 

그리고 t=0에서부터 완료 상태가 될 때 까지 아래를 반복한다. 

1. 에이전트의 행동 a_t
2. 환경은 어떤 분포로부터 보상을 샘플링
3. 환경은 다음 어떤 분포에서 상태인 s_t+1도 샘플링
4. 에이전트가 보상을 받고 다음 단계를 수행함.

정책(파이)는 각 상태에서 에이전트가 어떤 행동을 취할지를 명시해주는 기능을 수행한다. 

목적은 최적의 정책 pi*을 찾는 것이다. Cumulative discounted reward를 최대화시키는 것이다. 




한 번 움직일 때마다, 음의 보상. ( R = -1 )




무작위와, 최적화 정책




보상의 합에 대한 기댓값을 최대화 하는 것이 무작위성을 해결하기 좋다!

초기 상태(s_0)는 어떤 상태분포를 따르며, 취하는 행동은 어떤 상태가 주어졌을 때, 정책이 가지는 분포로부터 샘플링된다. 마지막으로 다음 상태는 전이 확률 분포로부터 샘플링된다. 




가치함수( value function ) & Q-가치 함수 ( Q-value function ) 

임의의 상태 s에 대한 가치 함수는 상태 s와 정책 pi가 주어졌을 때, 누적 보상의 기댓값이다. 




상태 s에서 어떤 행동 a를 취하는게 좋은 것 일까?  

이를 Q-가치 함수를 통해서 정의할 수 있다. 




벨만 방정식.

최적의 Q-value function Q*는 벨만 방정식을 만족할 것이다. 

어떤 (s,a)가 주어지더라도, 받을 수 있는 r과 에피소드가 종료될 s_prime까지의 보상을 더한 값이다.  

그리고 어떤 상태인지에 대한 무작위성이 존재하기 때문에 여기에도 기댓값을 취한다. 

또한 Q*를 통해서 특정 상태에서의 최상의 행동을 취할 수 있는 최적의 정책을 구할 수 있다. ( Q*= 어떤 행동을 취했을 때, 미래에 받을 보상의 최대치 ) 




각 스텝마다 Q*를 조금씩 최적화시키면 된다.

이 방법이 scalable하지 않다는 것이 문제가 된다. 

해결책으로는 Q(s,a)를 근사시킬 수 있다.  




NN을 이용하는 Deep Q-Learning




Forward pass에서는 학습시켜서 벨만 방정식의 에러가 최소가 되도록하면 된다. 

Backward pass에서는 계산한 손실을 기반으로 파라미터 theta를 업데이트 한다. 




아타리 게임, 높은 점수를 획득하는게 목표!




Q-function의 네트워크.

네트워크의 입력은 상태 s.




한 번의 forward pass 만으로 현재 상태에 해당하는 모든 함수에 대한 Q-value를 계산할 수 있다. 




연속적인 샘플들을 이용하는 것은 좋지 않다. 모든 샘플들이 상관관계를 가지기 때문이다. 이는 학습에 아주 비효율적이다. 

그리고 Q-network의 파라미터를 보면 네트워크는 우리가 어떤 행동을 해야할지에 정책을 결정한다는 것은 우리가 다음 샘플들도 결정하게 된다는 의미이다. 이는 학습에 좋지 않은 영향을 미친다. 




Experience Replay를 계속 전이테이블을 업데이트 해가면서 학습한다. 연속적인 샘플을 사용하는 대신 전이 테이블에서 임의로 샘플링된 샘플을 사용하는 것이다. 

또한 각각의 전이가 가중치 업데이트에 여러 차례 기여할 수 있다는 점이다. 
(데이터 효율의 증가)




Replay memory 초기화로 시작, 임의의 가중치로 Q도 초기화

M번의 에피소드를 진행할 것. 따라서 학습은 총 M번의 에피소드까지 진행됨.

그리고 각 에피소드마다 상태를 초기화 시켜야한다. 상태는 게임 시작화면 픽셀이 될 것.  

게임이 진행중인 매 다음 스텝마다 정책을 따르지 않고, 적은 확률로 임의의 행동을 취할 것 ( 충분한 탐사 )

이렇게 행동(a_t)을 취하면 보상(r_t)과, 다음 상태(s_t+1)를 얻는다. 

그리고 나서 전이를 Replay memory에 저장한다. 

Experience replay를 이용하여 네트워크를 학습시킨다. Replay memory에서 임의의 미니배치 전이들을 샘플링한 다음에 이를 이용하여 업데이트한다.

이것이 전체 학습의 반복과정이다. 

Q-Learning에는 문제가 있었는데, Q-function이 너무나도 복잡하다는 것이다. 
모든 (state, action) 쌍을 학습해야하기 때문이다. 




정책 자체는 학습시킬 수 있을까??




J는 미래에 받을 보상들의 누적 합의 기댓값으로 나타낼 수 있다. 

이제는 보상의 기댓값을 최대로 하는 정책 파라미터를 찾으면 됨.  

Policy parameter에 대해 gradient ascent하면 된다. 




미분을 하긴해도 intractable하다. 

1을 곱하는 것과 같이 위, 아래에 곱해준다. 두 번째, 세 번째 수식을 보시면 이 둘은 동치이다.

Log(p)의 그레디언트는 (1/p)*p의 그레디언트이기 때문이다. 




우리는 p(tau:theta)를 전이확률을 모르는 채로 계산할 수 있을까? 

이들을 모두 곱하면 경로에 대한 확률을 얻어낼 수 있을 것이다. 



모두 합의 형태도 바뀐다. 

그리고 미분시 첫 항은 theta와 관련이 없기에 두 번째 항만을 이용한다. 우리는 이를 통해서 전이확률은 전혀 상관하지 않아도 된다는 사실을 알았다. ( = 그레디언트를 계산할 때, 전이확률은 필요하지 않다.)




π(a|s)는 우리가 취한 행동들에 대한 우도(likelihood)이다. 그레디언트는 파라미터 조정에 쓰이고, 우도를 높히려면 어떻게 해야하는지를 알려준다. 행동들이 얼마나 좋았는지에 대한 그레디언트를 통해 파라미터를 조정하는 것이다. 

하지만 높은 분산으로 문제가 된다. 신뢰할당(credit assignment)가 아주 어렵기 때문이다. 하지만 우리는 구체적으로 어떤 행동이 최선이었는지를 알고 싶을 수도 있지만, 이 정보는 average out 된다. 




분산을 줄이는 것은 policy gradient에서 아주 중요한 분야이다. 샘플링을 더 적게 하면서도 estimator의 성능을 높힐 수 있는 방법이기도 하다! 

첫 번째 생각으로는, 해당 상태로부터 받을 미래의 보상만을 고려하여 어떤 행동을 취할 확률을 키워주는 방법이다. 이 방법은 해당 경로에서 얻을 수 있는 전체 보상을 고려하는 것 대신에 맨 처음부터가 아닌, 현재의 time step에서 부터 종료 시점까지 얻을 수 있는 보상의 합을 고려하는 것이다. 

두 번째로는, 지연된 보상에 대해서 할인율을 적용하는 것이다. 당장 받는 보상 / 조금 더 늦게 받는 보상간의 차이이다. 




분산을 줄이는 마지막 방법으로는 Baseline이라는 것이다. 

상태를 이용하는 방법이다. 해당 상태에서 우리가 얼마 만큼의 보상을 원하는지 이다. (기준)

미래에 얻을 보상들의 합을 특정 기준이 되는 값 (baseline)에서 값을 빼주는 형태가 되며 이를 통해 보상이 좋은지 아닌지에 대한 “상대적”인 값을 얻을 수 있다. 




Moving average를 이용함. 




현재 행동이 얼마나 좋은 행동이었는지를 해당 상태에서의 Q-function과 value function의 차이를 통해 나타낸다. 




“Actor” = policy / “Critic” = Q-function이다. 




Policy parameter theta & critic parameter phi를 초기화시킨다. 그리고 매 학습 itelation 마다 현재의 정책을 기반으로 M개의 경로를 샘플링한다. 각 경로마다 보상 함수를 계산할 것이다. 그리고 그 보상함수를 이용한다. 이를 이용해서 gradient estimator를 계산하고 이를 전부 누적시킨다. 

critic parameter phi 또한 학습시켜야 한다. 가치 함수를 학습시켜야 하는데, 보상 함수를 최소화 하는 것과 동치이다. 

이런 식으로 반복적으로 학습시킨다. 




RAM : Recurrent Attention Model

전체가 아닌 지역을 보고 예측한다. 계산자원 절약 가능 ( 저해상도 -> 고해상도 )




입력 이미지가 들어가고 glimpse를 추출한다. NN을 통과시키고, 지금까지 있었던 glimpses를 전부 결합시켜 줘야 한다. 출력은 x-y 좌표이다.  이 행동 분포로부터 특정 x,y 위치를 샘플링한 후에 이 좌표를 통해 다음 glimpse를 얻어낸다. 

RNN모델은 다음 위치의 glimpse에 대한 분포를 출한다. 이를 반복한다. 

분류가 목적이기에 마지막에는 softmax를 통해 클래스의 확률분포를 출력한다. 




요약

Gradient descent / ascent를 통해 policy parameters를 직접 업데이트했다. 

High variance문제가 대두되었고, 이로 인해 아주 많은 샘플이 필요해졌다. Sample-efficiency에 관한 문제가 대두된 것이다. 


















728x90
반응형