본문 바로가기
AI

DL : RNN (Recurrent Neural Network)

by 월곡동로봇팔 2020. 3. 10.

1. RNN 등장 배경

피드 포워드 신경망은 입력의 길이가 고정되어 있어 자연어 처리를 위한 신경망으로는 한계가 있었습니다.

결국 다양한 길이의 입력 시퀀스를 처리할 수 있는 인공 신경망이 필요 (RNN의 재귀함수 같은 동작때문, time_step...)하게 되었는데, 자연어 처리에 대표적으로 사용되는 인공 신경망인 RNN, LSTM 이 생긴다.


2. RNN 정의

FFNN vs RNN

다양한 길이의 입력 시퀀스를 처리할 수 있는 인공 신경망이다.

또한 은닉층의 노드에서 활성화함수를 통해 나온 결과값을 출력층 방향으로 내보내면서,

다시 은닉층의 노드의 다음 계산의 입력을 보내지는 특징을 가진다.

RNN cell, Memory cell

은닉층에서 활성화함수를 통해 결과를 내보내는 역할을 하는 노드를 cell이라 한다.

 

Hidden state, 은닉상태

메모리 셀이 출력층 방향으로 또는 다음 시점 t+1의 자신에게 보내는 값을 은닉상태, ht 라고 한다.

 

Time Step

하나의 NN을 이루는 것을 1 Time Step이라고 한다.

따라서 time_step의 크기는 sequence의 길이와 상응하는 의미를 가진다.


3. RNN 구조

  • RNN에서는 뉴런이라는 단위보다는 입력층과 출력층에서는 각각 입력 벡터 x와 출력 벡터 y, 은닉층에서는 은닉 상태(ht)라는 표현을 주로 사용합니다.

  • RNN은 입력과 출력의 길이를 다르게 설계해서 다양한 용도로 사용이 가능하다.
  • ex 1) 일 대 다 : image captioning, 하나의 이미지 입력에 대해서 사진의 제목을 출력
  • ex 2) 다 대 일 : 감성 분류, spam mail 분류, text 분류
  • ex 3) 다 대 다 : 챗봇과의 대화, 번역기, 개체명 인식, 품사 태깅

4. BPTT (Backpropagation Through Time)

Backpropagation은 말 그대로 역전파를 의미한다.

우리가 한 번 training을 하는데 cost가 너무 커서 weight와 bias를 거꾸로 줄여나가는 방법이다.

이는 여러개의 방법 중, BPTT는 입력층부터 다시하는 단계를 줄일 뿐만 아니라, cost까지 줄일 수 있다.

 

이를 RNN에도 적용을 한 것이 바로 BPTT이다.

 

N time 만큼 step back 하여 BPTT를 적용하였지만, 10 step 뒤 까지 적용하는 것은 사실상 vanishing gradient problem 으로 인하여 효과가 없다. -> LSTM으로 해결.

 

https://m.blog.naver.com/infoefficien/221210061511

 

Lesson 1: Recurrent Neural Network - 18. Backpropagation Through Time (part b)

BPTT를 학습하기 위하여 model를 펼쳐보겠습니다. 시간의 흐름에 따른 model 전개(unfold type)는 BP...

blog.naver.com


5. Deep RNN


6. Bidirectional Recurrent NN

Bidirectional RNN의 목적

RNN이 과거 시점(time step)의 데이터들을 참고해서, 찾고자하는 정답을 예측하지만 실제 문제에서는 과거 시점의 데이터만 고려하는 것이 아니라 향후 시점의 데이터에 힌트가 있는 경우도 많습니다.

그래서 이전 시점의 데이터뿐만 아니라, 이후 시점의 데이터도 힌트로 활용하기 위해서 고안된 것이 양방향 RNN입니다.

 

Bidirectional RNN 구조

Bidirectional RNN

model = Sequential()
model.add(Bidirectional(SimpleRNN(hidden_size, return_sequences = True), 
          input_shape=(timesteps, input_dim)))

양방향 RNN은 하나의 출력값을 예측하기 위해 기본적으로 두 개의 메모리 셀을 사용합니다. 첫번째 메모리 셀은 앞에서 배운 것처럼 앞 시점의 은닉 상태(Forward States)를 전달받아 현재의 은닉 상태를 계산합니다.

위의 그림에서는 주황색 메모리 셀에 해당됩니다. 두번째 메모리 셀은 앞에서 배운 것과는 다릅니다.

앞 시점의 은닉 상태가 아니라 뒤 시점의 은닉 상태(Backward States)를 전달 받아 현재의 은닉 상태를 계산합니다.

위의 그림에서는 초록색 메모리 셀에 해당됩니다. 그리고 이 두 개의 값 모두가 출력층에서 출력값을 예측하기 위해 사용됩니다.

물론, 양방향 RNN도 다수의 은닉층을 가질 수 있습니다.

아래의 그림은 양방향 순환 신경망에서 은닉층이 1개 더 추가되어 은닉층이 2개인 깊은(deep) 양방향 순환 신경망의 모습을 보여줍니다.

 

다른 인공 신경망 모델들도 마찬가지이지만, 은닉층을 무조건 추가한다고 해서 모델의 성능이 좋아지는 것은 아닙니다. 은닉층을 추가하면, 학습할 수 있는 양이 많아지지만 또한 반대로 훈련 데이터 또한 그만큼 많이 필요합니다.


RNN의 장점

  1. 데이터들끼리 서로 연관성이 존재하는 데이터라면 RNN에 적합하다
  2. 시간에 따라 전 데이터에 영향을 받는 시계열 데이터
  3. 문맥이 존재하는 자연어처리

댓글