
7강 : Recurrent Neural Networks
지난 강의에서는 CNN의 구성요소와 학습방법의 가중치 초기화와 하이퍼파라미터 탐색 방법 그리고 컴퓨터비전의 분류 데이터셋인 ImageNet을 통해서 딥러닝 모델이 본격적으로 도입이 되었다.
이번 강의에서는 현대 AI의 핵심인 Transformer의 이전에 사용되었던 Recurrent Neural Networks[RNN]을 알아보면서 번역기나 GPT처럼 입력이 순차적으로 들어올 때 딥러닝 모델은 어떻게 처리하는지 살펴볼 것이다.
기존 Non-recurrent Neural Networks 학습
Recurrent의 뜻이 반복된다라는 뜻이기 때문에 RNN[Recurrent Neural Networks]가 아닌 딥러닝 모델을 Non-recurrent Neural Networks라고 하며 반복되지 않은, 싸이클아닌[acyclic] 모델이며 흐름이 단일 방향으로만 간다는 특징이 있다. 이러한 Network를 Feedforward Neural Networks [FNN]으로도 불리운다.
이러한 Non-recurrent 신경망은 Multilayer Perceptron[MLP], 합성곱 신경망[CNN] 그리고 트랜스포머 등이 이에 해당하며 주요한 특징은 다음과 같다.
- 직선 흐름 : RNN의 경우에는 싸이클이 존재하지만 입력을 독립적으로 처리함
- 입력 크기 고정 : 입력 사이즈가 미리 정해져 있어 변하지 않음 [e.g. 224x224 이미지]
입력-출력 관계에 따른 모델 구분
- 입력과 출력이 모두 1개인 경우 : CNN, MLP 등

- 입력 1개 출력 여러개인 경우 : image captioning[이미지를 요약하여 단어로 변환]

- 입력 여러개 출력 1개인 경우 : 연속적인 동영상의 프레임에서 동작을 포착함

- 입력 여러개 출력 여러개인 경우 : video captioning [영상의 내용을 정리, 요약, 분류]

one-to-one을 제외한 나머지는 Recurrent 신경망이다.
Recurrent Neural Networks 구조
RNN을 핵심 아이디어는 간단하다. 연속적인 입력이 들어올 때마다 내부에 있는 가중치를 업데이트를 한다는 아이디어이다.

위의 형태는 압축되어있는 형태로 펼처서 보았을 때는 다음처럼 볼 수 있다:

가장 처음의 입력값을 x1이고 RNN의 신경망을 거쳐서 y1을 결과값으로 출력하고 이후 다음 입력값인 x2를 받아서 RNN을 업데이트하고 y2를 출력하는 것을 반복하는 구조이다.
현재 상태 (h_t)는 다음과 같이 표현할수 있다.

이전 상태를 불러와서 가중치를 적용하고 똑같이 가중치를 적용한 입력값을 더한 값을 활성화 함수를 거쳐서 t시점인 현재 상태를 구할 수 있다.
여기에 t시점에서의 output (y_t)를 구하려면 현재상태 (h_t)에 가중치를 곱하여 결과값을 구할 수 있다.
(y_t = W_{hy} h_t)
손실 역시 새로운 상태일때마다 업데이트
예제로 살펴보는 RNN
단어 "hello"를 한 글자씩 나누어서 RNN 그리고 언어모델이 어떻게 동작하는지 살펴보자.
다음은 hello에서 hell을 통해서 다음 글자인 e를 예측하는 시퀀스이다. hello는 총 4개의 종류의 글자가 있으며 [h,e,l,o] 이를
h-> [1,0,0,0]
e-> [0,1,0,0]
l-> [0,0,1,0]
o-> [0,0,0,1]
각 글자별로 벡터로 변환하여 해당하는 타켓을 1 나머지를 0으로 표현한 one-hot encoding을 표현하였다.

우선 맨처음으로 글자 h가 입력값으로 들어왔을 때를 보면 [1,0,0,0]으로 입력층을 표현할 수 있고 hidden state (h_t)의 식에서 이전 상태인 (h_{t-1})은 없으므로 입력값 (x_t)과 가중치의 곱만 활성화 함수를 통과시켜서 구할 수 있다.

이후 output (y_t)는 아래 식을 통해서 구할 수 있으며 output의 값을 softmax를 통해서 각 글자 클래스 별 확률를 구할 수 있다.
(y_t = W_{hy} h_t)

클래스 확률 [0.03, 0.84, 0.00, 0.13]으로 h 다음 글자로 e를 예측하고 있는 모습을 볼 수 있다.
현재 사용되는 언어 모델

학습을 거듭할수록 더 자연스로운 문장을 생성함

RNN의 장단점
장점
- 입력의 길이가 다르더라도 처리가 가능함
- 과거의 정보를 활용가능함
- 입력의 크기가 커지더라도 모델이 커지지 않음
- 모든 타음스텝에서 동일한 가중치를 반복하여 대칭성이 존재함
- 입력 시퀀스가 길어져도 학습해야할 가중치의 갯수는 일정함
- 다양한 길이의 시퀀스 처리를 가능하게 함
단점
- recurrent 계산이 느림
- 과거의 정보를 접근하는 것이 어려움
RNN의 단점은 추후의 attention과 transformer가 탄생하게되는 계기가 되었다.
Image Captioning
이전에 보았던 one to many의 예시로 image captioning이 있는데 이는 하나의 이미지에 상황을 요약하여 여러 단어로 출력하는 방법이다.

예를 들어 다음 사진과 같이 하나의 이미지를 입력으로 받아서 바닥위에 있는 가방에 앉아있는 고양이라는 여러 단어의 문장으로 결과가 나온다.

image captioning은 다음과 같이 구현할 수 있다. CNN을 통해서 이미지의 특징을 추출하고 나서 이를 RNN의 첫번째 hidden state에 추가한다.

Image Captioning에 사용하는 CNN은 기존 CNN과 다른 점이 존재하는데 기존 CNN은 완전연결층 [fully-connected]과 softmax를 통해서 분류[classification]하지만 이 CNN은 완전연결층과 softmax를 제거하여 오직 이미지의 특징을 추출하도록 설계되었다.
LSTM (Long Short Term Memory)
RNN의 구조상 1보다 작은 singular value이면 기울기 소실되는 vanishing gradient 문제가 발생한다. 이를 해결하기 위해서 hidden state만 존재하던 RNN 구조 대신 forget, input, output gate를 추가한 LSTM 모델이 소개된다.
각각의 게이트의 역할은 다음과 같다:
- forget gate : 이전 상태인 $C_{t-1}$을 얼마나 유지할지(잊어버릴지) 결정한다.
- input gate : forget gate와 동일한 구조로 $C_{t-1}$에 얼마나 새로운 정보를 추가할지 정한다.
- output gate : 업데이트된 상태 $C_t$를 얼마나 셀의 출력으로 보낼 것인지 정한다.
LSTM을 사용하여 gradient vanishing/exploding을 완전히 막을 수 있다고 보장할 수는 없지만 긴 문맥을 학습하는데 있어서 매우 쉽고 강력한 방법을 제공하였다.
강의자료
CS231n 강의 공식사이트 - cs231n.stanford.edu
CS231n Spring 2025 유튜브 강의 - youtube
CS231n 강의 슬라이드 - cs231n.stanford.edu/slides/2025
CS231n 과제 및 자료 - cs231n.stadford.edu.github.io