본문 바로가기
인공지능 개발하기/Machine Learning

[Tensorflow] 29. RNN(Recurrent neural network)

by 선의공 2024. 2. 3.
반응형

 

 

이번 포스팅에서는 CNN에 이어 

RNN(Recurrent neural network)에 대해서

더욱 이해하기 위해서

학습해보겠습니다. 

 

 

해당 포스팅들을 참고가며

학습해보겠습니다.

 

https://boardmix.com/kr/skills/what-is-time-series-data/#:~:text=%EC%8B%9C%EA%B3%84%EC%97%B4%20%EB%8D%B0%EC%9D%B4%ED%84%B0(Time%2Dseries%20data,%EC%A0%90%EA%B3%BC%20%EC%97%B0%EC%86%8D%EC%84%B1%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.

 

대박! 시계열 데이터 분석, 이렇게 하는 거였다구요?

시계열 데이터(Time-series data)란, 시간 순서에 따라 관측된 데이터를 의미합니다. 주식 가격, 기상 정보, 웹사이트의 사용자 트래픽 등 다양한 분야에서 사용됩니다. 시계열 데이터의 주요 특징은

boardmix.com

https://velog.io/@yuns_u/%EC%88%9C%ED%99%98-%EC%8B%A0%EA%B2%BD%EB%A7%9DRNN-Recurrent-Neural-Network

 

순환 신경망(RNN, Recurrent Neural Network)

인공 신경망 언어모델에서 사용되는 RNN(순환 신경망)은 연속형 데이터를 처리하기 위해 고안된 신경망 구조이다.

velog.io

https://hi-guten-tag.tistory.com/85

 

[머신러닝 - 이론] RNN과 LSTM

1. 시계열 데이터 시계열 데이터란 시간, 순서 정보가 들어 있는 데이터를 말합니다. 문장이 있다면 단어가 나타나는 순서가 중요합니다. 또한 일별 온도를 기록한 데이터가 있다면 날짜의 순서

hi-guten-tag.tistory.com

 

 

 


 

1. 시계열 데이터란?

 

시계열 데이터는 데이터에 시간 , 순서 정보가 들어있는 데이터입니다.

3년간의 삼성전자 주가라던가

일별 온도 등 시간에 따른 데이터 라던가

모두 시계열 데이터입니다.

 

또한, "I am a boy"를 순서를 읽어 다음 단어를 예측하는 등의

 자연어 처리 방식도 시계열 데이터에 포함됩니다.

 

시계열 데이터의 종류에는 

시간에 따른 반복적인 패턴이나 추세를 보이는 계절성 데이터와

패턴이 없는 일정한 추세가 없거나 불규칙적인 패턴이 없는 데이터가 있다고 합니다.

 

아래 그래프는 시간에 따른 반복적인 패턴을 보이는

시계열 데이터 그래프입니다.

이미지 출처:https://www.mathworks.com/

 

 


 

2. RNN( Recurrent neural network) 이란?

 

RNN은 순환 신경망이라고 합니다.

 

위에서 설명한 시계열 데이터에 최적화 된 

딥러닝 모델입니다.

 

대표적인 응용은 시계열 데이터를 이용해 미래를 예측하는 것입니다.

3년치의 삼성전자 데이터를 이용해

내일의 삼성전자 주가를 예측하는 것과 같이요.

 

또한 언어번역, 음성인식 등에도 이용됩니다.

 "I am a boy" 라는 시계열 데이터를 이용해 번역하거나,

음성인식을 할 수 있다는 거죠.

 

 

 

 

2-1. RNN 의 구조

 

RNN은 DNN의 구조에 은닉층이 추가된다고 합니다.

 

이게 필요한 이유는 이전 데이터와

입력값을 모두 받아 출력값을 만들어야 하기 때문입니다.

(이때 이전 데이터의 개수를

TimeSteps라고 합니다.)

 

RNN 구조를 그림으로 살펴보겠습니다.

 

 

왼쪽을 보면 아까 말한듯이 DNN 구조에

가운데 순환 은닉층이 존재하는 구조입니다.

 

은닉층을 펼쳐보면 오른쪽 그림으로 나열됩니다.

은닉층의 출력이 다음 시점의 입력 벡터로 들어갑니다.

 

각 노드는 출력레이어의 개수와 비례하며,

출력 레이어를 3이라고 가정하고

RNN의 가중치를 연산하는 과정을 설명하면 아래와 같습니다.

 

 

-첫번째 노드에서-

o1 = w1*x1 + w2*h0 + b

h1 = w1*x1 + w2*h0 + b

(h0 의 입출력값은 모델이 추출한 랜덤 값)

 

-두번째 노드에서-

h1의 값을 받아 사용

o2 = w1*x2 + w2*h1  + b

h2 = w1*x2 + w2*h1 + b

(h1=o1 이고, 가중치와 bias는 공유됨)

 

-세번째 노드에서-

h2의 값을 받아 사용.

o3 = w1*x2 + w2*h2  + b

(h2 = o2 이고, 가중치와 bias는 공유됨)

 

 

-Folded 상태 -

bias와 가중치가 공유됨은 타임 스텝에 걸쳐

상태를 보존하는 메모리셀로 가능하며,

Floded 된 그림에서는 모두 같은 가중치와 bias를 가지므로

펼쳐진 연산마다에서도 같은 값을 유지합니다.

 

 

 

RNN의 default 활성화 함수(activation)는

tanh(하이퍼볼릭 탄젠트)입니다.

위에서는 생략되었지만, 활성화 함수를 사용한다면 

계층에서 각 h를 전달할때 tanh 함수가

연산되어 전달됩니다. 

 

 

 

 

 

 

 

 

2-3. RNN 형태

 

 

 

 

(sequence: 연속된 순서를 가진 데이터, 예)텍스트형식.)

 

1) one to one

1개의 벡터를 입력받아 1개의 벡터를 반환함

하나의 글자를 넣어서 하나의 글자를 예측하는 경우

 

2) one to many

1개 벡터를 입력받아 여러개의 sequence의 출력을 반환함.

하나의 그림 파일을 넣어서 어떤 그림인지 (여러 종류의) 찾아냄.

 

3) many to one

수의 sequence 를 입력받아 한개의 출력을 반환함.

여러개의 단어를 입력으로 학습한 후 하나의 종류(예를들어 부정적인 감정) 을 예측함. 

 

4) many to many 1

다수의 sequence를 입력받아 여러 sequence의 출력값을 반환함.

기계 번역이 이에 해당된다고 합니다.

(여러 영어문장을 입력받아 여러 한글문장으로 출력함.)

 

5) many to many 2

 

이 many to many는 입력을 받고 출력 값이

다음 입력의 출력값에 영향을 주는 형태라고 합니다.   

프레임 단위로 나뉜 비디오 분석에서 주로 사용한다고 합니다.

(이전 프레임 장면의 출력 값을

다음 프레임의 결과를 도출하는 데에 참고하면서

학습을 진행하는 경우로 이해했습니다. )

 

 

 

 

2-4. RNN의 단점

 

 

1) 병렬화(paralleization) 불가능

 

순서가 중요한 데이터 처리 방식이므로,

병렬화가 불가능 하다고 합니다.

GPU의 장점인 멀티테스킹 연산 처리가 불가능해서

GPU의 연산 이점이 거의 없다고 합니다..!

 

 

2) 장기 문맥 의존성 

 

정확한 이유는 역전파 시 미분을 할때 activation 함수인 tanh로 인해

큰 값은 엄청 커지고, 작은 값은 엄청 작아지는

기울기 소실(Gradient Vanishing), 기울기 폭주(Exploding)이라는

현상이 발생한다고합니다.

 

즉, 연산이 길어질수록

초반의 데이터 값이 훈련 결과에 영향을 미치지 못하는 문제라고 합니다.

 

이 문제를 해결하기 위해서 LSTM(long short-term memory)

라는 구조가 나왔습니다.

 

 

 


 

 

 

RNN이라는 모델이 이해가 정리가 안된 부분이 있었는데

아주 조금은 정리가 된 것 같습니다.

부족한 부분은 꾸준히 더 채워나가겠습니다.

 

 

 

 

 

틀린점 있으면 지적 부탁드립니다!

 

 

 

 

 

 

반응형