본문 바로가기

인공지능/이론

(19) RNN 구조

인공신경망에는 다양한 신경망 아키텍처가 존재합니다.
그 중에 이번 글에서는 RNN(Recurrent Neural Network)이라는 신경망 아키텍쳐를 알아보도록 하겠습니다.

RNN 구조는 시계열 데이터를 쉽게 다룰 수 있는 구조입니다.
예를 들어 주가 예측을 할 수 있고, 또 자연어처리 분야에서 번역을 할 수도 있겠네요.
RNN은 기대하는 input의 길이가 없습니다. 즉 임의의 길이를 가진 sequence를 다룰 수 있다는 것입니다.

첫번째로 RNN 구조에 대해 알아보도록 하겠습니다.

위의 사진은 한 개의 뉴런으로 이루어져 있는 RNN 구조입니다.
x(input)와 y(output) 그리고 그 다음 타임스텝에 전해지는 h(state)가 있습니다.

오른쪽은 RNN구조를 시간에 따라 펼친 모습입니다.

수식적으로는 다음과 같습니다.

다음 타임스텝으로 전해지는 state h를 구하고, 그에 가중치를 곱하여 output y를 출력합니다.

RNN은 여러가지 구조를 가지고 있습니다.
1. 시퀀스 투 시퀀스
- 시퀀스 데이터를 input x로 넣고, 출력된 시퀀스 output y를 사용하는 것입니다.
2. 시퀀스 투 벡터
- 시퀀스 데이터를 input x로 넣고, 마지막으로 출력된 output y만 사용하는 것입니다.
3. 벡터 투 시퀀스
- 벡터 데이터를 타임스텝 첫번째에 input x로 넣고, 출력된 시퀀스 output y를 사용하는 것입니다.
4. 인코더 디코더
- 인코더와 디코더 두 부분이 존재합니다. 인코더에는 시퀀스 데이터를 input x로 넣고, 인코더의 마지막 타임스텝의 state h를 디코더의 번째 타임스텝 state h에 넣습니다. input x는 모두 0입니다. 그렇게 디코더에서 출력된 시퀀스 output y를 사용하는 것입니다.

지금까지 RNN의 구조에 대해 알아보겠습니다.
일반적인 RNN에서는 state h에 대해 문제점이 있습니다.
오래된 기억은 빨리 잊는다는 것입니다. 예를 들어 n번째 타임스텝과 n+20번째 타임스텝이 있다고 가정해봅시다.
n번째 타임스텝은 n+20번째 타임스텝에 큰 영향을 주지 않을 것입니다. 20개 이상의 단어로 이루어진 긴 글의 경우를 같이 생각해보면 꽤나 큰 문제가 될 수 있습니다. 첫번째 단어가 21번째 단어에 영향을 주기 충분하기 떄문이죠.

이런 단기기억 문제를 해결하기 위해 LSTM이라는 RNN 변형구조가 나타나게 되었습니다.

LSTM 구조는 다음과 같습니다.

C는 장기기억의 역할을 합니다.
forget gate에서 지워야 하는 장기기억을 지웁니다.
input gate에서 추가해야하는 기억을 장기기억에 추가합니다.
output gate에서 출력결과를 내보냅니다.
(LSTM에서는 output y와 state h가 같습니다.)

LSTM 구조는 실제로 RNN에서 가장 많이 쓰이고 있는 구조입니다.
(이를 간소화한 GRU 구조도 존재합니다. 자랑스러운 한국인 조경현 교수님이 이 연구를 진행하셨습니다.)

이번 글에서는 자연어처리 분야에서 정말 많이 쓰이는 RNN에 대해 알아보았습니다.

'인공지능 > 이론' 카테고리의 다른 글

(21) 오토인코더와 GAN  (0) 2022.01.08
(20) 어텐션과 트랜스포머  (0) 2022.01.06
(18) 컴퓨터 비전  (0) 2021.11.12
(17) 심층 신경망  (0) 2021.10.26
(16) 인공 신경망  (0) 2021.10.24