수식이 나오지 않는다면 새로고침(F5)을 해주세요
모바일은 수식이 나오지 않습니다.
RNN(Recurrent Neural Network)이란??
RNN은 연속된 데이터(시계열, 문장, 음성 등)를 처리하기 위한 딥러닝 구조이다. 핵심 아이디어는 이전 시점의 출력을 현재 시점의 입력으로 다시 사용하는 것.
즉, 기억을 갖는 인공 신경망이라고 이해할 수 있다.
일반적인 인공신경망(ANN, CNN)은 입력 데이터가 정적이고 독립적이라는 가정을 기반으로 설계된다.
예를 들어, 이미지 분류는 픽셀 간 공간 관계를 이해하면 충분하고, 각 입력은 시간 순서와는 무관하다.
하지만 현실 세계의 데이터는 순서를 갖는 경우가 많다 예를 들어,
- 문장, 음성, 주가, 날씨, 센서 데이터 등의 시계열 데이터
이러한 순차적 정보(sequence data)를 처리하기 위해서는 과거의 정보가 현재에 영향을 주는 모델이 필요하고, 그 해답이 바로 순환 신경망(RNN)이다.
📌 1. RNN의 기본 구조
RNN의 핵심은 이전 시점의 출력을 현재 시점의 입력과 함께 고려한다는 점이다.
각 시점을 $t$라고 할 때 RNN shell은 다음과 같이 작동한다.
1) 구조적 흐름
- 입력 : $x_t$ ($t$ 시점의 입력 벡터)
- 이전 상태 : $h_{t-1}$ (이전까지 누적된 정보)
- 현재 상태 : $h_t$ (현재 시점까지의 요약 정보)
- 출력 : $y_t$ (선택적으로 출력에 사용)
2) 계산식
$$
h_t = tanh(w_{xh}x_t + W_{hh}h_{t-1} + b_h) \\
y_t = W_{hy}h_t + b_y
$$
먼저 첫 수식인 $h_t$의 경우 현재 시점 $t$의 은닉 상태인 $h_t$를 계산하는 것이다.
RNN의 핵심은 바로 이 '이전 상태 $h_{t-1}$ + 현재 입력 $x_t$'의 결합이다.
항목 의미 형태 (차원)
$x_t$ | 시점 tt의 입력 벡터 | $\mathbb{R}^{d_x}$ |
$h_{t-1}$ | 이전 시점의 은닉 상태 | $\mathbb{R}^{d_h}$ |
$W_{xh}$ | 입력 → 은닉 가중치 행렬 | $\mathbb{R}^{d_h \times d_x}$ |
$W_{hh}$ | 은닉 → 은닉(자기 순환) 가중치 행렬 | $\mathbb{R}^{d_h \times d_h}$ |
$b_h$ | 은닉 바이어스 벡터 | $\mathbb{R}^{d_h}$ |
- 1단계 : 입력 정보 처리
$$
W_{xh}x_t
$$
$x_t$는 현재 시점의 외부 입력으로 해당 벡터에 가중치 행렬 $W_{xh}$를 곱해 은닉 공간으로 변환한다.
즉, 입력의 정보가 은닉 상태의 차원으로 들어가는 단계
- 2단계 : 과거 정보 유지
$$
W_{hh}h_{t-1}
$$
$h_{t-1}$은 이전까지의 정보가 응축된 요약 벡터로 이 벡터에 자기 순환 가중치 $W_{hh}$를 곱한다.
즉, 과거 정보가 현재 상태로 반영되는 것.
- 3단계 : 입력 + 과거 결합
$$
W_{xh}x_t + W_{hh}h_{t-1} + b_h
$$
입력과 과거를 합산한 후, 편향(bias)인 $b_h$를 더한다. 선형 조합의 일종
- 4단계 : 비선형 변환
$$
h_t = tanh(...)
$$
$tanh$는 하이퍼볼릭 탄젠트 함수로 출력 범위가 -1 ~ +1이다. 이 비선형은 RNN이 복잡한 시계열 패턴을 학습하도록하고 과거와 현재가 결합된 정보를 압축해 다음으로 넘길 준비를 한다.
왜 굳이 tanh를 쓰는가?? 우선, 출력 범위를 -1~+1로 제한하여 값이 튀는걸 방지하고, sigmoid보다는 기울기 소실이 덜하다.
두 번 수식인 $y_t$는 현재 시점의 출력을 계산하는 방식.
📌 2. RNN의 구조 유형 정리
1) One to One
: 일반적인 완전연결 신경망 구조로 시간이나 순서가 고려되지 않은 것. 때문에 RNN의 일종으로 보기 어렵다. 그냥 은닉층이 1층인 신경망 모형
대표적으로 이미지 분류, 숫자를 범주화 하는 등의 사용 예시가 있다.
2) One to Many
: 하나의 입력 정보를 기반으로 시간 축을 따라 여러 개의 출력 시퀀스를 생성하는 구조. 초기 입력이 은닉 상태에 전달되고, 그 상태로부터 여러 시점에 걸쳐 반복적으로 출력을 생성. RNN의 생성적(generative) 특성이 잘 반영되는 구조이다.
대표적으로 이미지 캡셔닝, 음악 생성, 문장 생성(시작 토큰 -> 문장), 텍스트 요약 시작
3) Many to One
: 여러 시점의 입력 시퀀스를 받아 하나의 최종 출력으로 요약해내는 구조. RNN 셀들은 각 시점의 입력을 받아 상태를 갱신하고, 최종 은닉 상태 $h_T$가 전체 문맥을 대표하게된다.
대표적으로 감정 분석, 텍스트 분류, 시계열 이상 탐지, 주가 예측
4) Many to Many (동기식/Synchronized)
: 입력 시퀀스의 각 항목이 동일한 길이의 출력 시쿼스로 일대일 대응되는 구조. 각 시점의 출력은 해당 시점의 입력과 은닉 상태에 기반해 생성되므로, 시점별 정보가 보존되며 실시간 처리에 적합
대표적으로 품사 태깅, 네임드 엔티티 인식, 동작 인식, 멀티 스텝 예측
5) Many to Many (비동기식/Asynchronized, Sequence to Sequence)
: 입력 시퀀스 전체를 먼저 인코딩한 후, 별도의 디코더 구조에서 출력 시퀀스를 생성하는 구조. 입력과 출력의 길이가 다를 수 있으며, 문장 단위의 의미 추론, 번역 등에서 뛰어난 표현력을 가짐.
대표적으로 번역기, 질의 응답, 요약, 챗봇 응답 생
'👨💻 Deep Learning > Deep learning' 카테고리의 다른 글
[Deep Learning] CNN에 대한 기본 설명 (with pooling, padding) (0) | 2025.05.20 |
---|---|
[Deep Learning] ANN / DNN에 대한 기본 설명 (2) | 2025.05.20 |
[Deep Learning] 경사하강법과 역전파 알고리즘 (0) | 2025.05.13 |
[Pytorch] squeeze, unsqueeze 란? (0) | 2025.04.21 |
[Pytorch] ANN 구현과 용어 설명 (0) | 2025.02.12 |