[LNF]RNN 원리

koyoon·2025년 3월 19일

Lost and Found

목록 보기
6/6
post-thumbnail

1. RNN 개론

본 글은 LSTM, GRU 등 확장적인 RNN계열 모델이 아니라, RNN에 대한 이해를 정리한 글임.

RNN은 Recurrent Neural Network으로 한글로 순환 신경망이다. 이는 순차적인 데이터 (Sequential Data)를 다루는데 특화되어있다.

이 사진을 보면, 왼쪽이 RNN을 표현한 것이다. 여기서 확인할 수 있는 특징은, 피드백 루프를 가져 이전 출력이 다음 시가의 입력으로 활용된다는 것이다. 입력(x), 은닉상태(h), 출력(y, 사진상의 o)이 핵심이다. x는 시퀀스 데이터로 특정 시점의 입력이다. 은닉 상태는 이전 상태의 정보를 저장하고 업데이트 하는 역할을 한다. 그리고 y는 특정 시점의 예측 값이다.

기본적인 로직은 특정 시점에 x를 입력한다면 이전까지의 정보가 담긴 h와 함께 반영하여, 알맞은 y를 예측한다는 것이다. 잘 생각해보면 h와 y 모두 이전 정보를 반영하여 담고 있다는 것을 알 수 있다.

그렇다면 왜 출력된 y를 x와 함께 그 다음에 전달하지 않고 h를 전달하는 것일까?

1-1. 은닉 상태와 출력

위의 수식이 이를 나타내는데, h는 이전 은닉 상태와 입력을 활성화 함수 f를 통해 통과시키는 것이고, y는 이 h를 g라는 활성화 함수에 투입할 꼴이다. 이때 f는 기울기 소실 문제를 해결할 수 있는 함수를 채택한다. 이 f의 역할은 정보를 잘 전달하는 것이기 때문이다. 주로 tanh를 사용한다.

반대로 y의 활성화 함수인 g는 일반적인 DNN의 출력층 활성화 함수를 생각하면 쉽다. 문제의 유형에 따라, 회귀인지 분류인지, 다중인지 이진인지 등의 상황을 고려하여 알맞은 것을 배치하면 된다. 용이한 형태로 지금까지 h를 기반으로 결과를 나타내는 것이 목표라고 이해하면 좋을 것이다.

부연하자면, 가중치 행렬이 3개(Wh, Wx, Wy)밖에 존재하지 않는다. RNN의 특징 중 하나이다.

이렇게 시간에 따른 이전 정보를 받고, 시점에 맞는 정보를 받아서 미래를 예측하는 것이 RNN의 로직이다.

2. seq2seq

RNN을 다루다 보면 seq2seq, seq2vec 등의 표현이 나온다. seq는 연속된 값인 시퀀스, vec은 하나의 고정된 벡터 값이다. 따라서 아래와 같이 정리된다.

  • seq2seq: 입력 시퀀스를 받아 출력 시퀀스 생성 (ex 기계번역)
  • seq2vec: 입력 시퀀스를 받아 단일 벡터값 생성 (ex 감성분석)
  • vec2seq: 단일 벡터값을 받아 출력 시퀀스 생성 (ex 텍스트 생성)

벡터는 단일 숫자 값이 아니다. 컨텍스트 벡터를 떠올리자

2-1. Encoder-Decoder

시퀀스에 대해 이야기하면 인코더-디코더 개념이 등장한다. RNN, LSTM, Transformer 등의 모델에 적용되는 개념이다.

Context Vector는 말그대로 이전까지의 문맥을 담는 벡터이다. 위의 사진에서 Context Vector는 앞의 모든 hidden state를 압축한 결과물이다. 따라서 압축 전까지 정보를 모으는 부분이 Encoder, 압축된 정보를 이용해 출력을 생성하는 부분이 Decoder가 될 것이다.

정보를 담고 있다는 관점에서 은닉 상태와 Context Vector는 유사해 보인다. 따라서 인코더의 마지막 은닉상태가 이것이 된다.

당연히 시퀀스가 너무 길어진다면 앞부분 정보의 손실이 일어나 제대로 Context Vector에 담기지 않는다. 이것이 장기의존성 문제이다.

3. RNN의 문제

가장 대표적인 것이 기울기 소실 문제이다. DNN과 달리 한정된 가중치로 체인 형태로 계속 연산이 이루어지다보니 기울기 소실 문제에 취약하다. 따라서 초기의 정보가 후반부로 갈수록 사라지는 경향이 있다. 이를 해결하기 위해 등장한 모델이 LSTM 등의 모델이다.

기울기 폭발 문제, 병렬 처리 문제 등의 다른 문제들도 존재하지만, 위의 기울기 소실이 가장 큰 문제라고 할 수 있다.

profile
neocortex

0개의 댓글