본문 바로가기

AI & ML

[DL] RNN, Recursive Neural Network

RNN이란?

RNN은 Recurrent Neural Network의 약자로 순환 신경망을 의미하며 hidden layer에서 나온 값이 다시 hidden layer로 돌아가 연산을 수행하는 순환 구조를 띈다.

CNN은 hidden layer의 결과가 출력층 방향으로 이동하지만 RNN은 다시 layer로 순환한다는 차이점이 있다.

RNN은 시계열 데이터나 자연어와 같은 데이터 처리를 위해 설계되었으며 시간 별로 같은 weight를 공유한다는 것이 특징이다.

구조

위 그림은 RNN의 순환 구조를 나타낸 그림이다. 그림에서 RNN계층은 모두 같으며 시점만 다르다고 할 수 있다. 입력 x1…xt를 순차적으로 입력했을 때 결과 h0…ht가 출력되고 출력을 시점 k에서의 은닉 상태라고 한다.

이처럼 출력이 같은 계층에서 계속 weight값으로 쓰이기에 RNN은 시계열 데이터, 텍스트 데이터에 적합한 구조라고 할 수 있다.

계산

계층 수행

RNN계층 수행을 수식으로 살펴보면 다음과 같다.

$$h_t=tanh(h_{t-1}W_h+x_tW_x+b)$$

수식을 보면 두 개의 weight를 이용하는데 $W_h$는 입력을 출력으로 변환하는데 사용되고, $W_h$는 출력을 다음 시각의 출력으로 변환하는데 사용된다.

RNN에서 hidden layer는 일반적으로 tanh를 activation function으로 사용한다.

출력

출력층의 경우는 보통 softmax를 이용한다.

$$y_t=softmax(W_hh_t)$$

Backpropagation

RNN에서도 ANN, CNN처럼 backpropagation을 통해 weight값을 조정한다. propagation를 먼저 진행하고 이어서 backpropagation을 수행해 원하는 gradient를 도출하는 것인데 RNN에서는 보통 BPTT(Backpropagation Through Time)을 이용한다.

BPTT는 현재 시점의 출력이 이전 시점의 출력에 의존하는 RNN의 특성을 반영해 시간에 따라 backpropagation을 진행해 weight를 조정한다.

그러나 BPTT는 sequence 길이에 따라 계산 복잡성이 증가하는 문제가 발생하고 장기 의존성 문제 또한 발생할 수 있다. 또한 gradient vanishing 문제도 발생할 수 있다.

장기 의존성

장기 의존성 문제는 sequence의 현재 상태가 먼 과거 상태에 의존하는 경우 발생한다.

Gradient Vanishing

gradient vanishing 문제는 기울기가 0에 가까워지는 문제이다. 신경망을 통과할 때마다 기울기값이 점점 작아지는 것으로 이런 문제를 해결하기 위해 Truncated BPTT를 사용한다.

Truncated BPTT

sequence 길이의 증가에 따른 BPTT의 문제점을 해결하기 위한 방법이다. 신경망을 적당한 지점에서 잘라 여러개로 분할하는 방법으로 propagation의 연결은 유지하고 backpropagation의 연결만 끊어낸다.

유형

RNN의 유형은 입력과 출력의 수에 따라 분류된다.

  • 일대일
  • 일대다
  • 다대일
  • 다대다

위 그림을 보면 조금 더 직관적으로 이해할 수 있을 것이다.

그림을 보면 한가지 의문점이 생길 수 있다. 바로 다대다의 경우 두가지 그림이 존재한다는 것이다. 4번째 그림의 경우 모든 입력이 처리된 후부터 출력이 발생하고 마지막 그림의 경우 바로바로 출력이 되는 것을 볼 수 있다.

이는 각각 Time-Distributed model, Sequence-to-Sequence(S2S) model이라고 불린다.

모델에 대한 설명은 다음 게시물에서 자세히 다뤄볼 예정이다.

'AI & ML' 카테고리의 다른 글

[DL] CNN, Convolution Neural Network  (0) 2024.02.24
[ML] Logistic Rrgression, 로지스틱 회귀  (1) 2024.01.21
[ML] Linear Regression, 선형회귀  (0) 2024.01.20