Stats & AI tech blog - '일단 시도함'

[ML/DL] RNN, Recurrent Neural Network (순환신경망) 본문

Statistics & AI/Deep Learning

[ML/DL] RNN, Recurrent Neural Network (순환신경망)

justdoit ok? 2024. 5. 7. 13:31

 

1. 시계열 자료 (Time Series Data)
 

데이터가 어느 한 시점에서 획득된 것이 아니라 시간 순서에 따라 획득되어진 자료로 심전도나 기상 관측 자료, 주가 차트 등의 데이터를 시계열 데이터라고 한다. 시계열 데이터의 정의를 조금 확장하면 정적인 데이터도 시계열의 범주에서 다룰 수 있는데, 예를 들어 단일 흉부 촬영 영상은 정적 데이터지만 추적 관찰을 통해 연속 촬영된 흉부 촬영 영상의 집합은 시계열 데이터로 간주할 수 있다.
 
이 밖에도 유전체 배열은 시간이 아니라 공간적인 선후 관계를 가지지만 시계열 특성으로 간주할 수 있고, 단어의 순서로 이루어진 문장이나 음성 대화 같은 자연어 데이터도 대표적인 시계열 데이터에 속한다고 볼 수 있다.
 
시계열 데이터는 아래 3가지 특성을 가진다.

  1. 시간 의존성 : 시계열 데이터를 다룰 때는 지나간 과거의 시점에 대한 기억이 필요하다.
  2. 맥락 의존성 : 시계열 자료에서 앞으로 나타날 데이터는 시계열 흐름 전반에 의존하는 특징이 있다.
  3. 데이터 크기의 가변성 : 일반적으로 정적 데이터를 다룰 때는 데이터의 크기가 모두 동일했지만, 시계열 데이터는 크기를 고정하기 어려운 경우가 많아서 상황에 따라 데이터의 길이가 모두 다를 수 있는 가변성을 허용한다.

이런 특성을 가지는 시계열 데이터를 다룸으로써 데이터의 경향 또는 주기를 파악할 수 있고, 미래의 값을 예측할 수 있다.
또 음성 데이터를 문자열 타입의 새로운 데이터로 변환하는 것 같이 새로운 시계열 데이터를 생성할 수도 있다.
 

 
2. 순환신경망(RNN)

RNN은 시계열 데이터의 특성을 고려해서 학습을 진행할 수 있는 대표적인 신경망 기법이다.
일반적인 Feedforward 신경망은 input layer에서 한번에 데이터를 전달받은 다음 hidden layer를 거쳐 연산이 진행되고 output layer를 통해 결과가 출력되는 구조이다.


반면에, 순환신경망에서는 데이터가 한번에 입력되지 않고 시점 별로 순차적으로 입력되는 방식을 가진다.
또 시점들의 연관성을 표현하기 위해 node의 출력값이 다음 layer로 전달될 뿐만 아니라, 다음 시점의 자기 노드로 되돌아오는 구조를 가지는데, 이렇게 hidden layer내에서 데이터 값이 되돌아오는 경로를 Recurrent Edge라고 한다.

https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Recurrent_neural_network_unfold.svg/1280px-Recurrent_neural_network_unfold.svg.png

 
 
2.1 순환신경망 기본 단위 

Node라고 불리는 신경망의 기본 단위를 순환신경망에서는 Cell이라고 부른다. Recurrent edge를 비롯해서 정보 순환에 필요한 내부 구조가 Cell 단위마다 존재하기 때문에 Node와는 구분할 필요가 있다.
 
Cell은 출력값을 다음 layer의 Cell에게 전달하고, 다음 시점의 자신 또는 이웃 Cell에게 전달하는 역할을 가진다.
이것을 식으로 표현하면 
$$h^{(t)} = f(Ux^t + Wh^{(t-1)} + b)$$
이고, 여기서 U는 input layer와 cell의 연결 가중치, W는 cell의 가중치를 의미한다.
U와 W 값은 모든 시점에서 동일한 특성을 가지고, 이를 순환신경망에서의 가중치 공유 특성이라고 한다.
 
 

2.2 활성화함수

순환신경망에서 Cell은 주로 Hyperbolic tangent (tanh) 함수를 활성화 함수로 사용한다.

https://production-media.paperswithcode.com/methods/Screen_Shot_2020-05-27_at_4.23.22_PM_dcuMBJl.png

 
신경망 모델을 학습시킬 때 역전파(backpropagation) 과정에서 기울기 소실(Gradient vanishing) 현상이 흔히 발생하는데, 이 문제는 hidden layer가 깊어 역전파의 범위가 커질 수록 발생 확률이 증가하게 된다. 그런데 순환신경망에서는 깊은 hidden layer 외에도 시계열 데이터의 넓은 시간 범위가 기울기 소실의 또 다른 원인이 될 수 있다.
 
따라서 순환신경망은 일반적인 feedforward 신경망 구조보다 기울기 소실 문제가 발생할 가능성이 크고, 기울기 소실이나 발산에 대해 보다 안정적인 hyperbolic tangent 함수를 활성화 함수로 사용한다. 다만, tanh함수는 ReLU 등의 함수를 적용한 경우에 비해 학습 속도가 느리다는 단점도 존재한다.
 
 

2.3 데이터에 따른 신경망 설계

어떤 데이터를 다루냐에 따라 순환신경망의 구조가 달라질 수 있다.
 
예를 들어, 심전도 데이터로 진단을 하고자 하면, 입력은 시점 단위로 되어야겠지만 출력은 마지막 시점에 한 번만 (진단 결과니까) 이루어진다. 이런 구조를 순환신경망에서 다대일(many-to-one) 구조라고 한다.

 

반대로, 어떤 영상에 대한 판독문(시계열 자료)을 출력하는 문제를 다룰 때는 입력으로 영상을 한번에 받고, 출력은 시점단위로 이어지는 형태의 일대다(one-to-many) 구조를 가진다.
기계 번역이나 검색어 자동 완성 같이 입력과 출력이 모두 시계열인 경우는 다대다(many-to-many)구조이다.

https://cs231n.stanford.edu/slides/2018/cs231n_2018_lecture10.pdf

 
추가로, 시계열 데이터의 복잡도에 따라서 순환신경망 내에 recurrent layer를 갖는 hidden layer를 여러 개로 설계할 수도 있고, recurrent edge가 동일한 cell 내부가 아닌 앞선 layer의 cell로 순환하도록 설계할 수도 있다.

 
 

3. 순환신경망의 학습과 응용

3.1 역전파 학습

순환신경망의 학습에서도 feedforward와 동일하게 오차 역전파 방식을 따른다.
하지만 순환신경망에서는 input layer ~ output layer의 공간적인 정보 전달 뿐만 아니라 다음 시점으로 넘어가는 정보에 대한 시간적 흐름을 함께 고려할 필요가 있다. 이렇게 시간적 흐름을 함께 고려한 역전파 방식을 시간 기반 오차 역전파 (BPTT, Backpropagation through time)라고 한다.
 
공간 축 뿐만 아니라 시간 축도 함께 고려해야하는 BPTT는 계산 복잡도가 높고 병렬처리가 어렵다는 단점이 존재한다.

https://raw.githubusercontent.com/mmuratarat/mmuratarat.github.io/master/_posts/images/BPTT.png

 

 
3.2 Bidirectional 순환신경망

일반적인 순환신경망은 과거 시점의 정보로부터 출력을 생성하지만, 현재의 데이터가 현재보다 미래 시점의 정보에 영향을 받는 경우도 있다. 대표적으로는 문장 속 괄호 문제가 있는데, 괄호보다 뒤에 위치하는 단어들로부터 괄호 속 단어를 유추하게 된다.
 
이렇게 미래 시점의 정보를 활용하기 위해서 양방향 구조의 순환신경망이 제안되었는데,
Bidirectional RNN은 이전 시점의 데이터, 이후 시점의 데이터 그리고 현재 시점의 데이터를 모두 고려해서 출력을 생성하는 모델이다.
이 구조에서는 출력 생성을 위해 두 개의 Cell을 사용하는데, 하나는 현재와 이전 시점에 대한 정보를 포함하고, 다른 하나는 이후 시점에 대한 정보를 포함한다. 현재 시점의 output layer는 두 개의 cell로부터 정보를 전달 받아 최종 출력을 생성하게 된다.

 
 
 
 
 

 
* Reference
 - 인공지능, 보건의료 전문가를 위한 길라잡이