정리 노트

RNN(Recurrent Neural Network) 본문

개념 정리/머신러닝 & 딥러닝 & A.I

RNN(Recurrent Neural Network)

꿈만 꾸는 학부생 2022. 12. 12. 23:20
728x90

이 포스트는 국민대학교 소프트웨어학부 '인공지능' 강의를 듣고 요약하는 포스트입니다. 원하시는 정보가 없을 수도 있습니다. 이 점 유의 바랍니다. 오류 지적은 매우 환영합니다!


RNN은 CNN이나 GAN과 다르게 순차 데이터(시간성 데이터)를 처리하는데 특화된 딥러닝 모델의 구조입니다. 순차 데이터는 동적이며 보통은 길이가 가변적입니다. 예를 들어 음성 신호, 주식 시세, 심전도 신호 등이 시간성 데이터라 할 수 있습니다. 순차 데이터를 표현하는 방법은 제가 저번에 적었던 글을 참고하셔도 됩니다.

2022.08.15 - [[TIL]국민대X프로그래머스 여름방학 인공지능 과정] - 31일 차(2022/08/15)

RNN(순환 신경망)의 3가지 필수 기능

순환 신경망에서는 기본적으로 3가지의 필수 기능들을 갖추어야 합니다.

  1. 시간성: 특징을 순서대로, 한 번에 하나씩 입력해야 합니다.
  2. 가변 길이: 길이가 N(가변적)인 샘플을 처리하려면 hidden layer가 N번 나타나야 합니다.
  3. 문맥 의존성: 이전 특징의 내용을 기억하고 있다가 적절한 순간에 활용해야 합니다.

RNN의 구조

RNN의 구조는 기존의 깊은 신경망과 똑같이 input layer, hidden layer, output layer를 모두 가지고 있습니다. 차이 점은 hidden layer에서 나타납니다. 순환 신경망에서의 은닉층은 순환 연결을 가지고 있습니다. 아래의 그림을 봅시다.

RNN의 구조 축약형(왼쪽)과 펼친 형태(오른쪽), source: [도서]Deep Learning by Ian Goodfellow, Yoshua Bengio, Aaron Courville

이 구조에서의 순환 연결은 (t - 1) 순간에 발생한 정보를 t 순간에 전달하는 역할을 수행합니다. 위의 그림을 수식으로 작성하면 다음과 같이 작성할 수 있습니다.

source: [도서]Deep Learning

일반적으로 t 순간에는 t - 1 순간의 은닉층 값(상태)인 \( h^{t-1} \)과 t 순간의 입력 \( x^t \)을 받아 \( h^t \)로 전환하는 일이 일어납니다.

t = 1일 때의 \( h^1 \)을 구하려면 \( f \left( h^0, x^1; \theta \right) \)을 계산해야 하고,

t = 2일 때의 \( h^2 \)를 구하려면 \( f \left( h^1, x^2; \theta \right) \)을 계산해야 하고,

이 반복을 t = N(시간성 데이터의 가변 길이)까지 반복해서 계산합니다. 따라서 t = N일 때의 \( h^N \) 은 아래의 식으로 표현됩니다.

$$ f \left( f \left( f \left( ...f \left( h^0, x^1; \theta \right), x^2; \theta \right),... , x^{N - 1}; \theta \right), x^N; \theta \right) $$

이 식에서 \( \theta \)는 RNN의 매개 변수입니다.

RNN의 매개 변수, \( \theta \)

순환 신경망의 매개 변수 \( \theta \)(가중치 집합)은 다음의 행렬들을 가지고 있습니다. \( \theta \) = {U, W, V, b, c}

  • U: input layer와 hidden layer를 연결하는 행렬(p x d 행렬)
  • W: hidden layer와 hidden layer를 연결하는 행렬(p x p 행렬)
  • V: hidden layer와 output layer를 연결하는 행렬(q x p 행렬)
  • b, c: bias(각각 p x 1, q x 1 행렬)
  • 입력: p x 1, 출력: q x 1

RNN에서는 매 순간, 같은 매개 변수를 공유해서 사용합니다. 같은 매개 변수를 공유하는 덕분에 학습할 매개 변수의 수가 줄어들고, 매개 변수의 수가 특징 벡터의 길이(N)와 무관하게 되며, 특징이 나타나는 순간이 뒤바뀌어도 유사한 출력을 만들 수 있게 됩니다. 예를 들어, "나는 이 책을 어제 샀다" 문장과 "나는 어제 이 책을 샀다" 문장을 비슷한 영어 문장으로 번역할 수 있게 됩니다.

RNN의 여러 가지 구조

RNN의 구조는 여러 가지가 있습니다.

source: https://yjs-program.tistory.com/164

각 구조는 다음과 같은 상황에 쓰입니다.

  • 일대일: 일반적인 신경망
  • 일대다: 이미지 캡션
  • 다대일: 텍스트 분류(스팸 분류 등)
  • 다대다: STT(Speech To Text)

RNN 동작 과정

은닉층에서는 아래와 같은 계산 과정이 이루어집니다.

$$ h^\left( t \right)  = \tau \left( a^\left( t \right) \right) $$

$$ a^\left( t \right) = Wh^\left( t - 1 \right) + Ux^\left( t \right) + b $$

t 순간에서의 은닉층에서는 t - 1 순간의 은닉층 값에 행렬 W가 곱해진 결과와 t 순간의 입력에 행렬 U가 곱해진 값을 더하고 편향(bias) b를 추가적으로 더해주는 작업이 일어납니다. 그리고 이 연산의 결과는 활성화 함수( \( \tau \) )를 거치게 됩니다.

 

은닉층에서의 계산이 끝나고 출력층에서는 다음과 같은 계산 과정이 이루어집니다.

$$ o^\left( t \right) = Vh^\left( t \right) + c $$

$$ y'^\left(t \right) = \text {softmax} \left( o^\left( t \right) \right) $$

t 순간의 은닉층 값에 행렬 V를 곱하고 편향 c를 더해줍니다. 그리고 결과가 softmax를 거쳐서 최종적으로 y'을 얻게 됩니다.

728x90

'개념 정리 > 머신러닝 & 딥러닝 & A.I' 카테고리의 다른 글

LSTM(Long Short Term Memory)  (0) 2022.12.13
GAN  (0) 2022.12.11
확률적 경사 하강법의 변형들  (0) 2022.12.10
배치 정규화(Batch Normalization)  (0) 2022.12.04
Computational Graph(연산 그래프)  (0) 2022.11.25