본문 바로가기
머신러닝

RNN(Recurrent Neural Networks)이란?

by 프로그래밍하겠습니다 2024. 12. 30.
728x90
반응형

🎶 RNN에 대해 알아보자!

 

지난 포스트에서는 CNN을 파이썬으로 직접 구현해보고 MNIST 데이터셋으로 테스트를 해봤다.

CNN구현 in python - MNIST 데이터셋을 활용하자!

 

CNN구현 in python - MNIST 데이터셋을 활용하자!

🎶 파이썬에서 CNN을 구현해보자! 지난 포스트에서는 CNN의 정의와 구조에 대해 알아봤다.CNN(합성곱신경망)이란? CNN(합성곱신경망)이란?🎶 Convolutional Neural Network 이하 CNN 에 대해 알아보자! 이

ybbbb.tistory.com

 

 

앞서 설명한 DNN과 CNN같은 신경망들은 모든 신호가 오직 출력층 방향으로만 향하는 신경망이기에 '피드포워드 신경망'이라고도 불린다. 이러한 신경망은 한 시점의 이미지나 정보만을 이용해서 학습하기 때문에 시간에 따라 누적된 정보를 활용하는 분야에서는 적절치 못하다는 문제점이 있다.

 

이번에 소개할 'RNN'은 순환 신경망으로써, 시간에 따라 순차적으로 제공되는 정보를 다룰 수 있는 신경망이다. 대표적인 응용 사례로는 네이버의 파파고와 같은 기계번역 프로그램인데, 입력과 출력 모두 글자나 단어들이 순서를 가지고 연속적으로 나타나는 시퀀스라는 점이 특징이다.

(🎃기계번역은 n개의 단어들이 순차적으로 입력될 때, 이를 번역한 m개의 단어들을 순차적으로 나열하는 것을 의미한다. 아것은 순환 신경망 기법 중 n:m 방식의 기법이며, 시퀀스-대-시퀀스(seq2seq) 매칭이라고도 부른다.)

rnn
[그림 1] 순환 신경망 구조

 

위에서처럼 순환 신경망은 n개의 입력을 받을 수 있는데, 오른쪽으로 한 칸씩 이동할 때마다 시간이 한 단계씩 증가하여 새로운 신호를 받거나 자기 자신에게 신호를 되먹임(feedback)하여 출력을 만들어낸다.

rnn
[그림 2] feedforward 신경망 vs RNN

 

일반적인 feedforward 신경망이 왼쪽처럼 입력을 출력으로 연결하는 역할을 한다면, 순환 신경망은 오른쪽처럼 출력 신호가 지속적으로 신경망에 되먹임되는 구조이다. 즉, 순환하는 에지(recurrent edge)가 있다는 것이 RNN의 가장 큰 특징이다.

 

순환 에지는 이전 순간(t-1)에 발생한 정보를 다음 순간(t)에 전달할 수 있기 때문에 순환 신경망 이하 RNN의 뉴런은 일정한 지속시간을 갖고, 길이가 가변적이며, 문맥 의존적인 입력을 처리할 수 있다.

 

순환 신경망에서 주의할 점은 바로 이 신경망이 시간의 흐름에 따라 새로운 벡터를 입력받지만, 모든 순간마다 동일한 U, W, V 라는 연결강도를 공유하고 있다는 점이다.

rnn
[그림 3] 시간의 흐름에 따른 RNN 구조

 

즉, 순환 신경망의 기본적인 구조는 다음과 같이, 자신의 이전 상태로부터 얻은 입력과 새롭게 제공된 입력을 합하여 하나의 활성화 함수에 제공하는데, 이렇게 단순한 순환 신경망을 바닐라 순환 신경망 이하 'vanilla RNN'이라고 한다!

(🎃RNN에서는 일반적으로 tanh 활성화함수를 사용한다.)

rnn
[그림 4] RNN 수식

 

순환 신경망에서 활성화함수로 하이퍼볼릭 탄젠트 함수를 사용하는 이유는,

  1. ReLU를 사용하는 경우 되먹임 구조 때문에 신호가 지나치게 커지는 오버플로우가 발생할 수 있지만, tanh의 경우 값이 특정한 범위를 넘지 못하게 되어 있어 이러한 문제를 피할 수 있다.
  2. 시그모이드 함수에 비해 tanh 함수가 사라지는 기울기 문제를 더 잘 해결할 수 있다.

(🎃사라지는 기울기 문제에 대해 설명한 포스트를 첨부하겠다.)

사라지는 기울기(Vanishing Gradient) 문제란?

 

사라지는 기울기(Vanishing Gradient) 문제란?

🎶 기울기 소실 이라고도 불리는 사라지는 기울기 문제, 어떻게 해결할까? 지난 포스트에서 경사 하강법의 종류에 대해 다뤄보면서, 사라지는 기울기 문제에 대해 언급한 적이 있다.경사 하강

ybbbb.tistory.com

 

 

하지만 이러한 단순한 구조의 RNN에는 한계가 존재하는데, 바로 '장기 의존성 문제'이다.

 

입력으로 들어오는 시퀀스에서 연관성이 높고 매우 중요한 두 단어의 입력 간격이 매우 길 경우, 단순한 RNN에서 이를 기억해 연관지을 방법이 없다. 즉, 아주 오래 전에 나타났던 신호를 기억하고 있어야 하는데 vanilla RNN에서는 그 방법이 묘연한 것이다. 이것을 바로 장기 의존성(long-term dependency) 문제라고 한다.

 

⚔️ 정리하자면, RNN은 기존 피드포워드 신경망에 비해 시간에 따른 순차적인 입력을 처리할 수 있는 신경망으로써, 새로운 입력 뿐만 아니라 순환 에지를 통해 이전의 자신의 출력도 입력으로 받는 특징이 있다. 단, 단순한 구조 때문에 장기 의존성 문제를 해결하지 못하는 단점이 있어 차후 소개할 LSTM과 GRU가 개발됐다!

 

다음 포스트에서는 이 장기 의존성 문제를 해결하는 LSTM과, GRU에 대해 알아보도록 하겠다.

728x90
반응형