본문 바로가기
Book Review/[혼공머신] 리뷰

순환 신경망(RNN)의 개념

by 3n952 2023. 5. 10.

RNN이란 순환 신경망을 일컫는 말로, recurent neural network의 약자입니다.

 

순환 신경망은 순차 데이터, 시계열 데이터를 이용하는 인공 신경망의 한 유형입니다.

이미지 데이터를 다루는 인공 신경망은 CNN인 것 처럼요!

CNN는 이미지 데이터를 다루는 딥러닝 알고리즘으로 이미지 분류, 분할, 탐지 등 다양한 분야에서 쓰이지만,

반면 RNN은 순차 데이터를 다뤄 언어 변환, 자연어 처리, 음성 인식 등의 분야에 쓰입니다.

CNN이 인간의 눈과 같은 역할이면, RNN은 인간의 뇌와 같은 역할을 한다고 볼 수 있습니다.

 

이번 포스팅에서는 RNN의 개념과 관련된 내용에 대해 알아보겠습니다.


 

1. 순차 데이터

앞서 말씀드린 것 처럼 RNN은 순차 데이터 혹은 시계열 데이터를 학습하는 딥러닝 알고리즘입니다. 따라서 

순차 데이터, 시계열 데이터가 무엇인지 알 필요가 있습니다.

순차, 시계열 데이터는 순서에 의미가 있는 데이터로 이를 통합적으로 순차 데이터로 일컫습니다.

그림1. 순차 데이터의 예시(주식 데이터)

가령 i am a boy와 같은 텍스트 데이터, 일년 동안의 강수량 관련 데이터(습도, 온도, 강수량 등등..)가 순차 데이터에 해당됩니다.

순차 데이터는 순서가 굉장히 중요하기 때문에, 인공 신경망에 주입될 때 순서가 유지되어야 합니다.

CNN에서 어떤 샘플(배치)이 먼저 학습되어도 모델 학습에는 영향이 없지만 RNN은 그렇지 않습니다.

 

 

2. 순환 신경망 RNN

순차 데이터는 순서가 중요하다는 것을 잊으면 안됩니다. 그렇다면 순환 신경망은 어떻게 순서를 중요하게 파악할 수 있을까요?

바로 순환 연결(recurrent)을 통해 순서를 파악하는 것 입니다.

 

완전 연결 신경망(DNN)과 합성곱 신경망(CNN)은 입력 데이터를 신경망 내에서 앞의 노드로만 전달되도록 합니다. 

이를 피드 포워드(feed forward)신경망 이라고 부릅니다.

그림2 피드포워드 신경망 예시

가중치가 계산되고 활성화 함수를 거쳐 최종 output이 나오는 방향으로 입력 데이터 포인트가 전달됩니다.

(학습에서 이뤄지는 backpropogation은 신경망에서 전달되는 것으로 간주하지 않습니다.)

 

이와 비슷하지만 순환 신경망은 데이터 흐름이 앞으로 전달되는 것에 더하여 자기 자신 노드에게 동시에 전달합니다.

그림3 순환 신경망 예시

입력 x를 받은 [A]노드는 출력을 자기 자신에게 되먹이고, 동시에 출력h를 반환합니다.

자기 자신에게 되먹인다는 것의 개념은 새로운 샘플을 처리할 때  이전에 사용했던 데이터의 정보를 재사용하는 것입니다.

위의 그림3의 예시에서 보면 x2입력이 h2의 출력이 되면서 동시에 a노드(자기자신)에게 되먹입니다. 그 상태에서 x3를 입력받아 h3을 출력하는 것입니다. 이렇게 순환 신경망의 h2의 출력에는 x1과 x2의 정보가 들어있다고 볼 수 있게 되는 것입니다.

이 때, 입력을 처리하는 한 단위를 타임스텝(time step), 노드나 층을 셀(cell)이라고 부릅니다. 또한 출력h를 은닉 상태(hidden state)라고 합니다. (A = 'cell' , h = 'hidden state')

 

은닉 상태와 자기 자신에게 되먹이기 전에, 다른 신경망과 마찬가지로 활성화 함수를 통과합니다.

즉 셀을 통과하면 활성화 함수를 통해 다음 층으로 내보는 것 입니다. (입력 -> 셀 -> 활성화 함수 -> 되먹임, 은닉 상태)

이 때,  순환 신경망에서 자주 사용하는 활성화 함수는 tanh 함수입니다.

하이퍼볼릭 탄젠트라고 불리는 이 함수는 시그모이드와 비슷하지만 -1 ~ 1의 범위를 가졌습니다.

다른 포스팅에서 각각의 활성화 함수에 대해 다뤄보도록 하겠습니다. 이번 포스팅에서는 순환 신경망의 활성화 함수로 tanh함수를

자주 사용한다 라는 것을 알면 될 것 같습니다!

 

 

3.순환 신경망의 흐름 구조: 가중치와 절편/ 입력과 출력에 대하여

피드포워드 신경망에서 뉴런은 입력과 가중치를 곱하여 절편을 더하는 식으로 출력을 만들어 냅니다.

순환 신경망도 이와 같습니다. 하지만 가중치가 하나 더 존재한다는 점에서 차이가 있습니다.

 

그림4 순환 신경망의 가중치와 절편 예시(출처: 혼자공부하는 머신러닝)

위의 순환 신경망처럼 Wx와 Wh의 가중치 두 개를 갖습니다.

타임스텝으로 unfold하게 살펴보면, 입력에 가중치 wx를 곱하고 자기 자신에 되먹일 때 Wh를 곱합니다.

즉, 타임 스텝1의 시점에서 보면 입력 X(위의 그림에서는 표현되지 않음)에 셀로 주입될 때, Wx가 곱해지고

이전 셀의 출력 h0이 Wh(표현되지 않음)과 곱해져서 활성화 함수를 통과하면 h1의 은닉 상태로 넘어가고 h1이 또 타임 스텝2의 셀로

넘어갑니다. 이를 반복하는 것이라고 보면 됩니다.

또한 알아야 하는 점은 모든 타임스텝에서 사용되는 Wh가중치는 하나라는 점입니다. 

 

수식으로 나타내면 다음과 같습니다.

hidden state : hy = tanh(Wx​ * Xt+ Wh * ​H(t1​) + b)

 

그렇다면 순환 신경망이 학습해야할 모델 파라미터 수는 어떻게 계산할 수 있을까요?

예를 들어, 순환 신경망층에 입력으로 들어오는 특징(표현)이 4개이고, 뉴런이 3개라고 가정해보겠습니다.

wx의 개수, wh의 개수, 절편의 개수를 구하면 될 것 입니다.

wx의 개수 = 입력층 4 * 순환층 3 = 12

wh의 개수 = 순환층의 출력 3 * 3개의 순환층 = 9

절편의 개수 = 순환 셀(뉴런)의 개수 = 3

즉, 12 + 9 + 3 = 24개.

 

샘플의 입력은 2차원 배열입니다. 가령 i am a boy를 3개의 표현으로 나타낸다고 치면,

1 * 4 * 3의 배열을 갖습니다. i / am / a / boy (time step = 4), 표현법 (3).

샘플이 순환층의 셀을 통과하면 모든 타임스텝을 처리하고 난 후 최종 은닉상태만 출력됩니다.

 

 

이번 포스팅에서는 순환 신경망의 기본 개념에 대해 배웠습니다.

 

'Book Review > [혼공머신] 리뷰' 카테고리의 다른 글

K-Means clustering  (2) 2023.01.31
GBM기반 앙상블: XGboost, LightGBM  (0) 2023.01.16
트리 앙상블  (1) 2023.01.16
트리 알고리즘: 결정 트리  (0) 2023.01.10
확률적 경사 하강법  (2) 2023.01.04