Ordinary day

강화학습 스터디 5주차 본문

Study/ML 이론

강화학습 스터디 5주차

minung14 2017. 10. 19. 01:41

(파이썬과 케라스로 배우는 강화학습을 읽고 요약정리 한 것입니다.)


1. 근사함수 Function Approximation

앞에서 봤던 문제들은 간단한 문제였지만 대부분은 상태가 다양하고 환경이 변한다.

그럼 이런 경우엔 에이전트는 강화학습을 통해 어떻게 학습할까?


이전에 봤던 다이내믹 프로그래밍은

  1. 계산 복잡도: 상태 공간의 크기가 커지는 경우
  2. 차원의 저주: 상태의 차원이 늘어나는 경우
  3. 환경에 대한 완벽한 정보 필요: 보상, 상태변환확률(모델)을 정확히 알아야 함

이런 한계가 존재했었고, 몬테카를로, 살사, 큐러닝으로 3번의 문제를 해결할 수 있었다.

(몬테카를로, 살사, 큐러닝은 model-free로, 샘플링을 통해 학습)

그렇다면 1과 2는 어떻게 해결해야 할까?


기존의 강화학습 알고리즘에서는 각 상태에 대한 정보를 테이블 형태로 저장했다.

(모든 상태에 대해 테이블을 만들어놓고, 각 칸에 큐함수를 적는 형태)

이를 근사치로 나타낸다면 상태 공간의 크기가 크고 환경이 변해도 학습할 수 있을 것이다.


근사함수로 나타내는 이유는 부정확하더라도 그 함수의 식을 가지고 있는 것이 더 효율적이다. 

또한, 일부 노이즈 데이터가 있을 수 있기 때문에, 모든 데이터를 메모리에 담는 것 보다 데이터의 경향을 파악하는 것이 더 중요할 때가 많다.


사용할 수 있는 근사함수는 여러가지가 있는데, 여기서는 인공신경망을 공부할 것이다.

2. 인공신경망 Artificial Neural Network

인공신경망은 인간의 뇌를 구성하는 신경세포에서 영감을 받아 만든 수학적 모델이다.

여러개의 뉴런이 연결되어 복잡한 기능을 수행하는 것 처럼 인공신경망도 여러 층을 쌓을 수 있다.

 

    • node: 인공신경망의 기본 단위
    • input: 들어오는 신호
    • activation function: 입력을 처리하는 함수
    • output: 나가는 정보
    • weight: 가중치
    • layer: 노드로 만든 각 층
    • input layer: 입력층
    • hidden layer: 은닉층, 2개 이상의 은닉층을 가질 경우 deep neural network 로 부름
    • output layer: 출력층

가중치는 input의 영향을 미치는 정도라고 생각하면 된다. 즉, 활성함수의 입력은 각각의 입력과 해당 가중치를 곱한 값을 모두 더한 후 bias까지 더한 값이 되고, 이 값은 활성함수를 통과해 출력이 된다. 그리고 이 값은 다음 층에 있는 노드의 입력이 되고, 이 과정은 반복된다.


현재 neural network에서 사용하는 활성함수는 대표적으로 ReLU, tanh, sigmoid 함수가 있다.


이처럼 활성함수로 비선형함수를 사용하는데, 비선형함수의 경우 층을 넓히고 쌓을 수록 새로운 함수의 형태로 변형된다.

따라서 복잡한 문제를 풀기에 적합하다.

3. 딥러닝 Deep learning

Deep Neural Network를 통해 가능한 것은 다양하고 복잡한 데이터에서 특징feature 를 추출해 높은 추상화가 가능한 것이다.

복잡한 상황에서 추상화를 통해 판단을 내리기 위해서는 수많은 데이터로부터 학습해야 하고, 학습한 내용을 담기에 충분히 커야한다.


추상화를 하려면 우선 특징 추출 Feature Extraction 이 중요한데, 이 feature라는 것은 뭘까?

집을 산다고 가정해보면, 

집을 선택하는 기준은 집 값, 위치(역세권?), 평수, 방향(남향?) 등이 있을 것이다. 이런 것이 바로 feature가 된다.


딥러닝에서 각 노드는 각자 다른 특징을 추출한다. 

잘 설계되고 학습된 딥뉴럴넷은 여러가지 복잡한 특징을 스스로 추출할 수 있다.


딥러닝에서 학습은 결과적으로 weight, bias를 학습하는 것이다.

Supervised Learning의 경우 학습데이터는 입력과 정답이고, 여기서 뉴럴넷이 해야할 일은 input이 들어갔을 때 output으로 정답이 나오게 하는 것이다. (이때 output을 예측, 학습데이터의 정답을 타겟이라고도 함)

그 다음 뉴럴넷이 해야할 일은 타겟과 예측의 오차를 계산하는 일이다.

    • 이 때 오차를 계산하는 역할을 하는 것이 오차함수 Loss Function이다.
    • 대표적인 loss function은 MSE(평균제곱오차 Mean Squared Error)가 있다.

loss function을 통해 계산한 오차를 최소화하도록 weight와 bias를 업데이트해야하는데, 이는 Back-propagation 알고리즘으로 할 수 있다.

오차를 계산했다면 뉴럴넷 내의 weight와 bias가 그 오차에 얼만큼 기여했는지 계산하는데

결국 weight와 bias가 업데이트 될 값은 오차와 오차 기여도(오차에 대한 편미분 값)의 곱에 비례한다.

(출력에서 오차를 계산하고, 이로 오차 기여도를 계산하는 것이 오차가 거꾸로 전파되는 것 같다고 해서 Back-propagation이라고 함)


오차 기여도, 즉 오차에 대한 편미분 값으로 weight와 bias를 얼마나 증가 혹은 감소시켜야 하는지에 대해 정보를 얻을 수 있는데,

이런 업데이트 방법을 다른 말로 하면 경사하강법 Gradient descent 이다.

경사하강법에는 SGD, RMSprop, Adam과 같은 방법이 있고, learning rate라는 변수로 얼마나 업데이트 할 것인지 결정할 수 있다.

'Study > ML 이론' 카테고리의 다른 글

강화학습 스터디 6주차  (2) 2017.10.26
강화학습 스터디 4주차  (0) 2017.10.09
강화학습 스터디 3주차  (0) 2017.09.28
강화학습 스터디 2주차  (0) 2017.09.18
강화학습 스터디 1주차  (0) 2017.09.12
Comments