> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sifi.life/llms.txt
> Use this file to discover all available pages before exploring further.

# 순환 신경망의 시대 (2014~2017)

> 이 문서는 **[GenAI 개념](/blog/guides/genai-concepts/overview)** 섹션의 일부입니다.

## RNN (Recurrent Neural Network)

### 등장 배경

Word2Vec은 단어 수준의 표현은 해결했지만, **문장이나 문서 전체** 를 이해하려면 단어의 **순서(sequence)** 를 처리할 수 있는 모델이 필요했습니다.

### 핵심 원리

RNN은 **이전 시간 단계의 출력을 다음 시간 단계의 입력에 연결** 하는 순환 구조입니다:

| 시간 단계 | 입력 (x) | 은닉 상태 (h)    | 출력 (y) |
| ----- | ------ | ------------ | ------ |
| t=1   | "나는"   | h₁           | y₁     |
| t=2   | "오늘"   | h₂ (← h₁ 반영) | y₂     |
| t=3   | "회사에"  | h₃ (← h₂ 반영) | y₃     |
| t=4   | "간다"   | h₄ (← h₃ 반영) | y₄     |

> 핵심: 각 시간 단계의 은닉 상태 h\_t는 이전 은닉 상태 h\_\{t-1}을 입력으로 받아, 순차적으로 정보를 전달합니다.

각 시간 단계에서:

```
h_t = tanh(W_hh · h_{t-1} + W_xh · x_t + b)
```

이전 은닉 상태 `h_{t-1}`이 현재 계산에 참여하므로, 이론적으로는 **과거의 모든 정보** 를 기억할 수 있습니다.

### 치명적 문제 — 기울기 소실 (Vanishing Gradient)

실제로는 역전파(Backpropagation) 과정에서 기울기가 시간을 거슬러 올라갈수록 **기하급수적으로 작아집니다**:

```
문장: "서울에서 태어나고 부산에서 자란 김철수는 ... (50단어) ... 한국어를 유창하게 말한다"

RNN이 "한국어"를 예측할 때, "서울"이라는 단서는 50단계 전에 있음
→ 기울기가 50번 곱해지면서 0에 수렴 → "서울" 정보가 학습에 반영되지 않음
```

## LSTM (Long Short-Term Memory, Hochreiter & Schmidhuber, 1997)

RNN의 기울기 소실 문제를 해결하기 위해 고안된 아키텍처입니다. 실제로 널리 활용된 것은 2014년 이후입니다.

### 핵심 아이디어 — 게이트 메커니즘

LSTM은 **세 개의 게이트** 로 정보의 흐름을 정교하게 제어합니다:

| 게이트                     | 역할                 | 비유               |
| ----------------------- | ------------------ | ---------------- |
| **Forget Gate**(망각 게이트) | 이전 정보 중 버릴 것을 결정   | 불필요한 기억을 삭제하는 기능 |
| **Input Gate**(입력 게이트)  | 새로운 정보 중 저장할 것을 결정 | 중요한 새 정보만 기억에 추가 |
| **Output Gate**(출력 게이트) | 현재 출력에 사용할 정보를 결정  | 상황에 맞는 기억만 꺼내 사용 |

| 경로                         | 역할                   | 특징                                             |
| -------------------------- | -------------------- | ---------------------------------------------- |
| **Cell State**(장기 기억)      | 정보가 직통으로 전달되는 고속도로   | Forget Gate가 불필요한 정보를 삭제, Input Gate가 새 정보를 추가 |
| **Hidden State**(단기 기억/출력) | h\_\{t-1} → h\_t로 전달 | Output Gate가 Cell State에서 현재 출력에 필요한 정보만 추출    |

> **성공**
> **비유**: RNN이 "메모장 한 장"에 모든 것을 적다 보니 앞 내용이 지워지는 것이라면, LSTM은 **서류 캐비닛** 입니다. 어떤 서류를 보관하고(Input Gate), 어떤 서류를 폐기하고(Forget Gate), 어떤 서류를 꺼낼지(Output Gate)를 판단합니다.

## GRU (Gated Recurrent Unit, Cho et al., 2014)

LSTM의 **경량화 버전** 입니다. 세 개의 게이트를 **두 개(Reset, Update)** 로 줄여 더 빠른 학습을 가능하게 했습니다.

| 비교     | LSTM                       | GRU                |
| ------ | -------------------------- | ------------------ |
| 게이트 수  | 3개 (Forget, Input, Output) | 2개 (Reset, Update) |
| 파라미터 수 | 더 많음                       | \~25% 적음           |
| 학습 속도  | 느림                         | 빠름                 |
| 성능     | 긴 시퀀스에서 약간 우세              | 짧은 시퀀스에서 동등 또는 우세  |
| 실무 선택  | 복잡한 의존성이 중요한 작업            | 빠른 실험, 리소스 제한 환경   |

## CNN 기반 NLP — TextCNN (Yoon Kim, 2014)

RNN/LSTM이 시퀀스 처리의 주류로 자리잡던 시기에, **합성곱 신경망(CNN)** 으로도 텍스트를 효과적으로 처리할 수 있다는 연구가 등장합니다. 컴퓨터 비전에서 이미지 패턴을 포착하던 CNN을 NLP에 적용한 것입니다.

### 핵심 아이디어

TextCNN은 다양한 크기의 **1D 합성곱 필터** 를 텍스트 위로 슬라이딩하여, **로컬 N-gram 패턴** 을 포착합니다.

```
입력: "이 영화는 정말 재미있다"
      [이] [영화는] [정말] [재미있다]
       ↓      ↓      ↓      ↓
      임베딩 벡터들 (행렬)

필터 크기 2: [이, 영화는] [영화는, 정말] [정말, 재미있다]  ← bigram 패턴
필터 크기 3: [이, 영화는, 정말] [영화는, 정말, 재미있다]   ← trigram 패턴

→ 각 필터의 최대값(Max Pooling) → 최종 분류
```

### RNN vs CNN for NLP

| 비교 항목       | RNN/LSTM         | TextCNN                    |
| ----------- | ---------------- | -------------------------- |
| **처리 방식**   | 순차적 (한 토큰씩)      | **병렬적**(모든 필터 동시 적용)       |
| **학습 속도**   | 느림 (순차 의존성)      | **빠름**(GPU 병렬화 용이)         |
| **장거리 의존성** | LSTM으로 부분 해결     | **약함**— 필터 크기 내의 로컬 패턴만 포착 |
| **강점 태스크**  | 번역, 텍스트 생성, 요약   | **텍스트 분류, 감성 분석**          |
| **시퀀스 생성**  | 가능 (Decoder로 활용) | 부적합 — 순서 정보 약함             |

> **참고**
> **TextCNN의 의의**: RNN만이 텍스트를 처리할 수 있다는 고정관념을 깨고, **분류 태스크에서는 CNN이 더 빠르고 동등한 성능** 을 보일 수 있음을 입증했습니다. 다만 CNN은 **시퀀스 생성(번역, 요약)** 에는 적합하지 않아, RNN이 생성 태스크에서는 주류를 유지했습니다. 이 "병렬 처리가 가능한 모델이 더 효율적"이라는 통찰은 이후 **Transformer의 Self-Attention** 으로 완성됩니다.

## 성과와 공통 한계

**성과**:

* 기계 번역, 감성 분석, 음성 인식 등에서 획기적 성능 향상
* Google 번역이 2016년 통계 기반에서 LSTM 기반 신경망 번역으로 전환
* 가변 길이 시퀀스를 자연스럽게 처리

**공통 한계**:

RNN, LSTM, GRU, TextCNN 모두가 공유하는 근본적 한계입니다. 이 세 가지 문제를 동시에 해결한 것이 바로 **Transformer** 입니다.

| 한계              | 설명                         | 영향                      |
| --------------- | -------------------------- | ----------------------- |
| **순차 처리**       | 토큰을 하나씩 순서대로 처리해야 함        | GPU 병렬 처리 불가 → 학습 속도 느림 |
| **장거리 의존성**     | LSTM도 수백 토큰 이상에서는 정보 손실    | 긴 문서 처리에 한계             |
| **고정 차원 은닉 상태** | 아무리 긴 문장도 하나의 고정 크기 벡터에 압축 | 정보 병목 (bottleneck)      |
