[딥러닝] 기억하는 신경망 : RNN, 그리고 개선 모델 (LSTM, GRU)

2024. 6. 8. 21:32
반응형

 

이번에는 RNN의 개념과 이를 기반으로 하는 LSTM, GRU에 대해서 살펴보려고 한다. 해당 포스팅에서는 아래의 내용들을 다룬다.


1. RNN

  • RNN의 구조
  • RNN의 활용 예시
  • RNN의 등장 배경과 한계점

2. LSTM

  • LSTM의 등장 배경과 구조

3. GRU

  • GRU의 등장 배경과 구조

4. 시계열 데이터 학습 실습 : RNN 기반 모델 비교

 


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

 

과거의 정보를 사용해서 현재 및 미래의 입력에 대한 신경망의 예측 성능을 개선하는 인공 신경망 구조이다. 즉 순차적인 문맥을 파악하는 신경망이다.

순차적 구성 요소가 복잡한 의미와 구문 규칙에 따라 상호 연관되는 단어, 문장 또는 시계열 데이터 등의 순차적 데이터의 처리에 강점을 가지고 있다.

 

 


RNN의 구조

 

RNN은 순차적 데이터에서 이전 순서의 데이터의 상태를 참고한다고 하였다.

예를 들어서 생각해보면 만약 내일 주식 가격을 예측해야 한다고 생각해보자. 아무 정보 없이 예측해야 한다면 예측이 어려울 것이다.

하지만 이전 7일동안 10000원대였다면 내일의 주식도 10000원일 확률이 높을 것이라는 것을 알 수 있다.

 

이를 기반으로 RNN의 구조를 살펴보자.

 

x는 Input Layer의 입력 벡터, y는 Output Layer의 출력 벡터이다. 중간의 h는 Hidden Layer이자 Memory Cell이다.

 

Hidden Layer은 현재의 State를 기억해 두었다가 다음 순서의 데이터를 처리할 때 Hidden Layer에 이전 State의 값을 활용한다.

따라서 Memory Cell이라고도 불린다.

 

이처럼 현재 Hidden Layer의 상태를 기억하고 다시 다음 Hidden Layer의 연산에서 활용한다는 점에서 순환 신경망이라는 이름이 붙었다.

 

 

RNN은 이전 단계의 출력을 현재 단계의 입력으로 포함하여, 데이터 간의 시간적 관계와 종속성을 학습하고 유지할 수 있다!

 


시점에 따른 RNN 구조

 

 

위의 RNN 구조를 시간에 따라서 펼쳐보면 위의 그림과 같다.

입력 𝑥1를 처리할 때를 살펴보면 은닉층의 상태(State) ℎ1를 출력층으로 보낼 뿐만 아니라 다음 입력 𝑥2의 Hidden State ℎ2의 입력으로도 활용되는 것을 알 수 있다.

따라서 입력 𝑥2를 처리할 때 이전 입력에 대한 결과 ℎ1를 활용하게 되고, 𝑥3를 처리할 때에는 ℎ1과 ℎ2를 활용하게 된다는 것을 알 수 있다.

 


파라미터(가중치)의 공유

 

\(W_{xh}\) (입력에서 은닉 상태로의 가중치), \(W_{hh}\) (은닉 상태에서 은닉 상태로의 가중치), \(W_{hy}\) (은닉 상태에서 출력으로의 가중치)가 공유된다.

이것은 RNN의 핵심 아이디어 중 하나로서 시간 스텝마다 동일한 파라미터를 사용하여 다음과 같은 장점이 있다.

 

1. 파라미터 수의 감소와 정규화
가중치를 공유함으로써 모델이 학습시켜야 하는 파라미터의 수가 줄어든다.또한 파라미터의 수가 적기 때문에 과적합을 방지하고 일반화 능력을 향상시킬 수 있다.

2. 순차 구조 포착 가능
각 시점의 입력에 동일한 가중치를 적용함으로써 일관된 방식으로 데이터를 처리할 수 있게 된다. 따라서 순차적인 데이터 구조에 집중하여 학습할 수 있으며 시간적 패턴과 의존성을 효과적으로 포착할 수 있다.

3. 가변 길이 데이터 처리
입력 길이에 상관 없이 동일한 가중치를 사용하기 때문이다. 예를 들어 길이가 10인 시퀀스와, 20인 시퀀스에서 \(W_{xh}\), \(W_{hh}\), \(W_{hy}\)가 공유된다.

 

 

 


출력과 Hidden State의 값

 

\(t\)시점의 출력 : \(y_t = W_{hy}h_t\)

\(t\)시점의 Hidden State : \(h_t = tanh(W_{hh}h_{t-1} + W_{xh}x_t)\)


RNN의 활용

 

 

 

왼쪽 사진과 같이 4개의 문장을 RNN을 통해서 학습시켰다고 생각해보자.

이후 사용자가 "I",  "play"까지 입력한 3번째로 올 단어를 예측한다고 가정해보자.

 

만약 전통적인 Feed Foward 모델을 사용했다면 3번째로 올 단어를 예측하기 어려울 것이다. 왜냐하면 각 입력이 독립적으로 처리되며 이전 입력을 고려하지 않기 때문이다. 즉 문맥을 이해하지 못하기 때문이다.

 

RNN은 "I play"까지의 입력을 통해 \(h_1\)Hidden State \(h_2\)를 계산했다. \(h_2\) 기반으로 다음에 올 단어의 확률 분포를 계산하여 가장 가능성이 높은 단어를 선택하게 된다.

 


 

출력 \(y_2\)

 

  • 높은 확률 단어: "soccer", "basketball"
  • 낮은 확률 단어: "eat", "love", "chicken", "you"

입력 "I play" 후, RNN은 다음 단어로 "soccer"와 "basketball"을 높은 확률로 예측할 것이다.

이는 RNN이 학습된 문장들에서 "I play" 다음에 "soccer"와 "basketball"이 나온 적이 있기 때문이다.

결과적으로 이전 시퀀스의 Hidden State를 활용하여 다음 단어의 확률 분포를 계산하고, 이를 통해 가장 가능성 높은 단어를 예측한다.

 


RNN 아키텍쳐 유형

 

일대다 : 하나의 입력을 여러 출력으로 채널링한다. 단일 키워드로 문장을 생성하여 이미지 캡션과 같이 사용할 수 있다.

 

다대일 : 입력 문서가 긍정적인지 부정적인지를 판별하는 감성 분류, 메일이 스팸 메일인지 판별하는 분류 등에 사용할 수 있다.

 

다대다 : 여러 입력이 출력에 매핑된다. 사용자가 문장을 입력하면 대답 문장을 출력하는 챗봇, 입력 문장으로부터 번역된 문장을 출력하는 번역기 등에서 활용될 수 있다.

 


기존의 한계점과 RNN의 등장 배경

 

1. 고정된 입력 크기

  • 고정된 크기의 입력 데이터만 처리 가능, 가변 길이의 시퀀스 데이터 처리에 어려움
  • RNN: 시퀀스의 각 요소를 순차적으로 처리하며, 가변 길이의 데이터에서도 유연하게 작동할 수 있는 구조를 가짐

2. 시간 종속성 무시

  • 각 입력 데이터가 독립적이라 시간적 종속성이나 순서를 반영하지 못함
  • RNN: 이전 단계의 출력을 현재 단계의 입력으로 포함하여, 데이터 간의 시간적 관계와 종속성을 학습하고 유지할 수 있음

3. 연속 데이터 처리의 어려움

  • 시계열 데이터나 자연어와 같은 연속 데이터에서 패턴을 효과적으로 학습하지 못함
  • RNN: 순환 구조를 통해 시퀀스 데이터의 연속적인 패턴을 학습하고, 과거 정보를 기억하여 다음 예측에 활용

RNN의 문제점과 한계

 

1. 긴 문장을 처리할 때 Gradient 제어가 어렵다.

  • 자연어는 그 길이를 예측하기 힘들고 RNN은 Weight가 누적되어 State에 반영한다는 특성이 있다.
  • \((W_{hh})^l\), \(l\)(Input의 길이)가 길어질수록 문제가 발생할 수 있다 
  • \(W_{hh}\) > 1  : 소수를 계속 곱하면 0에 수렴한다.
    • Gradient Vanishing :초기 gradient가 작을 경우 sequence의 마지막에는 gradient가 소실될 수 있음
  • \(W_{hh}\) < 1 : 수를 계속 곱하면 수가 매우 커진다.
    • Gradient Exploding : 초기 gradient가 클 경우 sequence의 마지막에는 gradient가 너무 커질 수 있음

2. 장기 의존성 문제(Long-term Dependency problem)

  • Gradient Vanishing으로 인해서 문장이 너무 길어지면 문장의 첫부분의 의미가 남아있지 않게 된다.

 

 

 

 

 

 


LSTM (Long Short Term Memory)

1997년 Hinton이 제안한 RNN의 개선 모델.

RNN의 Gradient 소실 및 폭발에 의한 장기 의존성 문제(Long-term dependency problem)를 완화하기 위해 고안된 신경망. 중요한 정보를 기억하고 불필요한 정보를 잊는 기능(Forget)을 통해 긴 시퀀스에서 효과적으로 학습이 가능하도록 하였다.

  • 장기 의존성 문제의 "완화", 해결이 아니다.

 

 

LSTM은 셀의 연결체로 모델을 구성하였으며 Hidden State와 함께 장기 기억을 위한 Cell State의 개념을 사용하였다.

 

 


LSTM의 구조

셀 상태 (Cell State) : 장기 기억

  • 추가적인 가중치 연산 없이 정보가 흐를 수 있게 하여 중요한 정보를 장기간 유지할 수 있다.
  • 시퀀스의 길이에 관계없이 정보를 계속 전달할 수 있는 경로로서 그래디언트 소실 문제를 완화한다.
  • Cell State는 이전 Cell State의 일부를 잊고(Forget Gate)와 새로운 정보를 추가하여(Input Gate)를 통해 업데이트된다. 

은닉 상태 (Hidden State) : 단기 기억

  • 현재 시점에서 LSTM의 출력으로, 다음 시점의 입력으로도 사용된다.
  • 단기적인 정보를 유지하고, Cell State와 결합하여 시퀀스의 각 단계에서 중요한 정보를 출력한다.
  • Hidden State는 Output Gate를 통해서 현재 Cell State의 정보를 기반으로 결정된다.

  • Forget Gate 이전 Cell memory \(C_{t-1}\)의 영향도, 즉 얼마만큼 삭제할지 결정
  • Input Gate : 입력 \(x_t\)를 Cell memory \(C_{t-1}\)에 추가할지 말지를 결정하고 추가할 거라면 얼마만큼 추가할지 결정
  • Output Gate : 이전 Cell의 Hidden state \(h_{t-1}\), 입력  \(x_t\), Cell memory \(C_{t-1}\)을 취합해서 이 Cell의 Hidden state \(h_t\)를 결정

Forget Gate

 

이전 Cell memory \(C_{t-1}\)의 영향도, 즉 얼마만큼 삭제할지  결정

입력: 이전 Cell의 Hidden state \(h_{t-1}\)와 입력 \(x_t\) 

과정 : Sigmoid 함수를 이용해서 0 (삭제) 또는 1 (유지)를 출력

→ \(W_{h}h_{t-1} + b_h + W_{x}x_t + b_x\)

→ W와 b는 입력과 이전 Hidden State에 대한 가중치와 Bias

출력 : \(f_t\) = 0~1 사이의 값

→ \(if\) \(f_t\) = 0, 이전 cell memory \(C_{t-1}\) 을 완전 삭제

→ \(if\) \(f_t\) = 1,이전 cell memory \(C_{t-1}\)을 완전 보존

 

 


Input Gate

입력 \(x_t\)를 Cell memory \(C_{t-1}\)에 추가할지 말지를 결정하고 추가할 거라면 얼마만큼 추가할지 결정

입력: 이전 Cell의 Hidden state \(h_{t-1}\)와 입력 \(x_t\)  

→ \(W_{h}h_{t-1} + b_h + W_{x}x_t + b_x\)

과정

1. Sigmoid 함수 : 입력을 추가할지 말지를 결정 (0 or 1)

2. tanh 함수 : 출력을 (-1, 1 )사이의 값으로 변환 (얼마만큼 추가)

출력: Sigmoid 함수 결과 * tanh 함수 결과

 

 

 

 


Output Gate

 

이전 Cell의 Hidden state \(h_{t-1}\), 입력 \(x_t\)  , cell memory \(C_{t-1}\)을 취합 이 Cell의 Hidden state \(h_{t}\)를 결정

 

입력: 이전 cell의 hidden state \(h_{t-1}\),와 입력 \(x_t\), cell memory \(C_{t}\) 

→ \(W_{h}h_{t-1} + b_h + W_{x}x_t + b_x\)

과정

1. Sigmoid 함수: \(h_{t}\)를 출력할지 말지 결정 (0 or 1)

2. tanh 함수: \(C_{t}\) 를 (-1, 1)로 대응

출력: (-1, 1)로 대응된 \(C_{t}\) 

 

 

 


 

GRU (Gated Recurrent Unit)

 

조경현 박사가 제안한 LSTM의 간소화 모델. LSTM의 매개변수가 많기 때문에 계산이 오래 걸린다는 단점을 극복하기 위해 제안

 

1. Cell state가 없음 : Hidden State가 Cell State의 역할을 함께 수행한다.

  • Hidden State : 장기, 단기 기억 모두 담당

2. Update gate : Forget gate + Input gate를 통합

3. Reset gate 추가

 

 


Reset Gate

 

 

이전 State의 입력  \(h_{t-1}\)을 삭제할지 말지 결정

 

입력: \(x_{t}\)와 \(h_{t-1}\)의 선형조합

→ \(W_{x}x_{t} + b_x + W_{h}h_{t-1} + b_h\)

 

과정: \(x_{t}\)와 \(h_{t-1}\)의 선형 조합에 대한 Sigmoid 함수 적용

출력: 0 (Reset) or 1 (Not reset)

→ 0이라면 \(h_{t-1}\)을 무시하고 연산을 진행함 (reset)

 

 

Update Gate

LSTM의 Forget gate와 Input Gate의 역할을 수행

hidden state를 업데이트할지 말지를 결정

 

입력 : \(x_{t}\)와 \(h_{t-1}\)의 선형조합

→ \(W_{x}x_{t} + b_x + W_{h}h_{t-1} + b_h\)

과정 : 입력 -> → sigmoid \(x_{t}\)  \(\tan h\)

1. LSTM의 Forget gate : Sigmoid 함수의 출력이 1이면,  \(h_{t-1}\)에는 0이 곱해지지만,   \(\tan h\)의 결과에는 1이 곱해짐

2. LSTM의 Input gate : Sigmoid 함수의 출력이 0이면,  \(h_{t-1}\)에는 1이 곱해지고,   \(\tan h\)의 결과에는 0이 곱해짐 

출력

Forget일 경우 : \(h_{t-1}\)

Input일 경우 : (-1, 1) 사이의 \(x_{t}\) 

 



 

 


RNN 기반 모델들의 사용

 

1. 자연어 처리 (NLP)

  • 텍스트 생성: 특정 스타일이나 주제에 맞춰 텍스트 생성
  • 번역: 기계 번역 시스템에서 소스 언어를 타겟 언어로 변환
  • 감정 분석: 텍스트 데이터에서 감정 추출

2. 음성 인식

  • 스피치 투 텍스트: 음성 신호를 텍스트로 변환
  • 명령어 인식: 음성 명령을 이해하고 처리

3. 시계열 예측

  • 주가 예측: 과거 주가 데이터를 기반으로 미래 주가 예측
  • 날씨 예측: 기상 데이터 분석 및 예측

4. 이미지 캡셔닝

  • 이미지 설명: 이미지 내용을 설명하는 텍스트 생성

 

 

 


시계열 데이터 학습 : RNN 기반 모델들의 비교

 

이제 앞에서 살펴본 내용들을 바탕으로 임의의 시계열 데이터를 세 개의 RNN 기반 모델들을 이용해서 학습시켜보고 학습 속도, Loss 등을 비교해보면서 성능을 비교해보려고 한다.

 

DL05_RNN,_LSTM,_GRU_시계열데이터회귀

 

 


해당 포스팅의 내용은 "상명대학교 민경하 교수님 "인공지능" 수업, 상명대학교 김승현 교수님 "딥러닝"수업을 기반으로 작성하였으며, 포스팅 자료는 해당 내용을 기반으로 재구성하여 만들어 사용하였습니다.
반응형

BELATED ARTICLES

more