DL/개념정리

[파이토치 딥러닝 프로젝트] 심층 순환 신경망(RNN)

SanL 2024. 2. 13. 10:43

‣ 해당 블로그는 ⌜실전! 파이토치 딥러닝 프로젝트⌟를 공부하며, 배운것들을 토대로 정리되었음을 알려드립니다.

순환 신경망(RNN, recurrent neural network)

X(혹은 y)가 단일의 독립 데이터 포인트뿐 아니라 데이터포인트의 시간 순서 [X1,X2..Xt] 또는 [y1,y2,,yt]인 순서를 모델링할 수 있는 종류의 신경망

 

X2(시간 단계 2에서 데이터 포인트)는 X1에 종속되고, X3는 X2와 X1에 종속되는 과정

→ 이러한 네트워크가 순환 신경망(RNN)

이와 같이 네트워크에서 주기를 생성하는 모델에 추가적인 가중치를 포함해 데이터의 시간적 측면을 모델링 할 수 있음.

신경망

데이터 셋의입력(X)과 출력(Y) 사이의 복잡한 패턴을 학습하는 데 사용되는 강력한 머신러닝 도구

주기(Cycle)

주기의 개념은 순환(Recurrence)이라는 용어를 설명하고, 이 순환은 RNN에서 기억(Memory)의 개념을 수립하는 데 도움이 됨.

RNN에서는 숨겨진 내부 상태를 유지하면서 시간 단계 t에서 중간 출력을 시간 단계 T+1의 입력으로 쉽게 사용할 수 있다.

RNN 다양한 종류

  • LSTM(long short-term memory)
  • GRU(게이트 순환 유닛, Gated recurrent unit)

해당 페이지에서는 위와 같은 종류를 중점으로 다뤄봄

 


 

순환 신경망 유형

'지도 머신러닝' 모델은 대체로 일대일 관계를 모델링하지만, RNN은 다음유형의 입출력 관계를 모델링할 수 있다.

  • 다대다(동시적인)

   EX) 명명된 개체 인식: 문장/텍스트가 주어지면, 이름, 조직, 위치 등과 같이 명명된 개체 범주로 단어를 태깅

  • 다대다(인코더-디코더)

   EX) 기계 번역(영어→한글): 자연어로 된 문장/텍스트를 가져와 통합된 고정 크기의 표현으로 인코딩하고, 해당표현을 디코딩해 다른

          언어로 된 같은 뜻의 문장/텍스트를 생성

  • 다대일

   EX) 감정 분석: 문장이나 텍스트 일부가 주어졌을 때, 긍정적인 표현인지, 부정적인 표현인지, 중립적인 표현인지 등을 분류

  • 일대다

   EX) 이미지 캡션 생성: 이미지가 주어지면, 이를 설명하는 문장/텍스트 일부를 생성

  • 일대일 → 그다지 유용하지는 않음

   EX) 이미지분류(이미지 픽셀을 순차적으로 처리함으로써)

 

일반적인 NN  모델과 RNN 모델 유형 비교

 

위 구조를 보게되면, 순환 신경망에는 일반적인 신경망에는 없는 "순환 연결"이 있다. 이 "순환 연결"은 이전 다이어그램에서 시간 차원따라 펼친다. 

 

이번 다이어그램을 보게 되면 RNN 구조를 시간으로 펼친(time-unfolded)모습펼치치 않은(time-folded)모습을 보여주고 있다.

이어서 RNN 아키텍처를 설명할 떄는 시간으로 펼친 버전을 사용하여 전개하겠다. 앞의 다이어그램에서 RNN 게층은 신경망의 은닉 계층으로 빨간색으로 표시했다. 이 네트워크에서는 은닉 계층이 하나만 있지만, 이 은닉 게층을 시간 차원을 따라펼치면 이 네트워크에는 실제로 T개의 은닉 계층이 있다는 것을 알 수 있다. (T = 순차 데이터에서의 전제 시간 단계의 수)

 

RNN의 막강한 특징 중 하나는 다양한 길이(T)의 순차 데이터를 다룰 수 있다는 것이다. 길이가 서로 달라도 처리할 수 있는 방법은 길이가 짧은 데이터에 패딩을 추가하고 길이가 긴 데이터는 잘라내는 것이다. 

 

양방향 RNN

RNN이 순차 데이터에서 성능이 좋지만, 언어 번역 같은 일부 순서가 중요한 작업은 과거와 미래 정보를 모두 살펴봄으로써 더 효율적으로 수행할 수 있었다. 

 이와 같은 예시가 있다고 할 때 , 영어 'I see you' -> 프랑스어 'Je te vois' / 'te' = 'you' , 'voi = 'see'

영어를 프랑스어로 올바르게 번역을 하기 위해서는 프랑스어 두 번째와 세 번째 단어를 쓰기 전에  영어 세 단어 모두를 알아야한다.

 

양방양 RNN은 내부적으로작동하는 2개의 RNN이 있다는 것을 제외한다면, 일반적인 RNN과 매우 비슷하다. 2개의 RNN은 다음 다이어그램처럼 하나는 처음부터 끝가지 순서대로 실행되고, 다른 하나는 끝에서 처음으로 가는 순서대로 실행된다.

 

 

 

LSTM

RNN은 순차 데이터를 다룰 수 있고, 정보를 기억할 수 있지만, 경사가 폭발하거나 소실되는 문제(Long term dependency)를 안고 있다. 이 문제는 순환 신경망을 시간 축에 따라 펼치면 네트워크가 극단적으로 깊어지기 때문에 일어나는 현상이다. 추가적으로 이 문제에 대해서는 나중에 LSTM에 관해 따로 정리하겠다.

 

LSTM은 위와 같은 문제를 해결하기 위해서 RNN 셀이 더 정교한 메모리 셀인 LSTM(장단기 메모리) 셀로 교체한것. RNN 셀에는 일반적으로 시그모이드(SIgmoid)나 tanh 활성화 함수가 사용된다. 이 두 활성함수는 다음 다이어그램처럼 현재 시간 단계의 입력과 이전 시간 단계의 은닉 상태를 결합할 때 적용된다.

시간 축을 따라 펼쳐진 RNN 셀에서 경사 항을 곱하기 때문에, 경삿 값은 '역전파'되는 동안 이 RNN 셀에서 지속적으로 소실하거나 계속 증가한다. 따라서 RNN이 짧은 길이에서 순차적 정보를 기억할 수 있어도 길이가 길어지면 '곱셈'이 많아져 기억하기 힘들어진다. 'LSTM'은 게이트로 입력과 출력을 제어함으로써 이 이슈를 해결한다.

 

LSTM 계층은 시간에 따라 여러 셀로 구성되는데, 정보는 하나의 셀에서 다른셀로 셀 상태의 형태로 전달된다. 이 셀 상태는 게이트의 메커니즘을 통해 곱셈과 덧셈을 사용해 제어되거나 가공된다. 이 게이트는 다음 다이어그램에서 보듯, 이전 셀에서 오는 정보를 보존하거나 잊어버리면서 다음 셀로 흐르는 정보를 제어할 수 있다.

이러한 형태는 매우 긴 순차 데이터를 효율적으로 다룰 수 있다는 점에서 순환 신경망에 큰 혁신으로 다가왔다.

 

 

적층 LSTM

단일계층의LSTM 네트워크에서도 경사가 소실되거나폭발하는 문제를 극복하는 것 같지만, LSTM 계층을 여러 개 쌓으면 음성 인식처럼 다양한 순차 처리 작업에서 상당히 복잡한 패턴을 학습하는 데 더 많은 도움이 된다. 이러한 모델을 '적층 LSTM(Stacked LSTM)'

LSTM 셀은 본래 LSTM 계층을 시간 차원으로 쌓은 것이다. 공간 차원에서 그런 계층을 몇 개 쌓으면 공간상에 필요한 추가적인 깊이를 제공하게 된다. 

 

☑︎ 단점

  • 길이와 순현 연결이 늘어남에 따라 훈련 속도 매우 느림
  • LSTM 계층이추가되면서 모든 훈련 이터레이션에서 시간 차원으로 펼쳐주어야함
  • 여러 겹 쌓인 순환망 모델을 훈련시키는 것은 보편적으로 병렬 수행 불가

GRU

GRU(Gated Recurrent Unit)는 순차 데이터를 처리하는 데 사용되며, LSTM(Long-Term Memory) 네트워크를 개선하기 위한 모델이다.

다이어그램을 보게되면 GRU는 '라셋 게이트(입력 게이트와 망각 게이트의 조합)'와 '업데이트 게이트'를 가지고 있다. 첫번째의 리셋 게이트를 이용하여 현재 상태에서 얼마나 이전 상태의 정보를 유지할 것인지 결정하고, 두번째 업데이트 게이트에서 이전 상태 정보와 새로운 정보를 결합하는 것 사이의 균형을 결정한다. GRU의 가장 큰 변화는 셀 상태를 두지 않고, RNN과 마찬가지로 하나의 출력만 한다는 것

 

 이러한 구조는 LSTM보다 계산적으로 더 효율적이며, 학습 속도 또한 더 빠른 성능을 보여주고 있다.

 

 


 

RNN을 이용한 감성분석 : Pytouch

해당 실습은 IMDb 감성 분석 데이터 셋을 사용하고, Pytouch를 사용하여 RNN 모델을 훈련을 진행했다.

 

텍스트 조각(단어 시퀀스)을 입력받아  1(긍정적인 감정) 또는 0(부정적인 감정)을 출력하고, 순차데이터에 대해 이진 분류 작업을 위해 "단반향 단층 RNN"을 사용한다.

 

 

 


LSTM을 이용한 감성분석 : Pytouch

RNN에 비해서 학습에 오랜 시간이 필요하지만, 중요한 정보는 보존하고 최근 정보라도 관련 없는 정보는 '망각'하는 데 도움이 되는 메모리 셀 게이트 덕분에 더 긴 시퀀스를 잘 처리할 수 있기에 이전 실습에서 나타난 과적합 부분을 'Drop out'을 사용하여 학습을 진행해보았다.