RNN이 시간(time) 축을 따라“항상 동일한”가중치 행렬 $W$를 쓰는 이유는 크게 두 가지입니다.
1. 파라미터의 공유(shared parameters)
2. 은닉 상태(hidden state)에 쌓인 문맥(context)
이 두 가지가 결합되면, “주어(명사)를 받아 다음에 올 동사(verb)를 예측”할 때나 “동사를 받아 다음에 올 목적어(object)를 예측”할 때 모두 같은 $W$로 충분히 다른 문장 구조를 학습할 수 있습니다.
RNN의 기본 수식과 가중치 공유
가장 단순한 형태의 RNN(예: Vanilla RNN)에서는 매 시점 $t$에 다음 수식으로 은닉 상태 $h_t$를 계산합니다.
$
\begin{aligned}
h_t &= \phi\bigl(W_{xh}\,x_t \;+\; W_{hh}\,h_{t-1} \;+\; b_h \bigr), \\
y_t &= \mathrm{softmax}\bigl(W_{hy}\,h_t \;+\; b_y \bigr).
\end{aligned}
$
$x_t$ : 시점 $t$에 네트워크에 들어오는 입력 벡터 (보통은 단어 임베딩)
$h_{t-1}$ : 바로 전 시점의 은닉 상태 (이전까지의 문맥을 요약한 벡터)
$W_{xh},\,W_{hh},\,W_{hy}$ : 모든 시점에 “공유(shared)”되는 가중치 행렬
$\phi$ : 보통 $\tanh$ 또는 $ReLU$ 같은 비선형 활성화 함수
$y_t$ : 예측 확률 분포 (예를 들어 어휘사전(vocabulary)에 대해 다음 단어를 예측)
여기서 포인트는:
매 시점 $t$마다 전부 같은 $W_{xh},\,W_{hh},\,W_{hy}$를 사용한다는 것
입력 $x_t$만 달라지고, 또한 은닉 상태 $h_{t-1}$가 이전 시점의 정보를 담고 있기 때문에, 시점별 “역할”(예: 주어 다음에 동사, 동사 다음에 목적어 등)은 은닉 상태가 달라져서 자연스럽게 구분이 된다.
“주어→동사”와 “동사→목적어”를 같은 $W$로 처리해도 되는 이유
1. 단어 임베딩(Embedding)의 차별화
각 단어(예: “고양이(cat)”, “먹다(eat)”, “밥(rice)”)는 고정 크기 $d$차원 임베딩 벡터(예: $e_{\text{고양이}}, e_{\text{먹다}}, e_{\text{밥}}$)로 매핑됩니다.
따라서 “주어가 ‘고양이’일 때 입력벡터 $x_t = e_{\text{고양이}}$”, “동사 ‘먹다’일 때 입력벡터 $x_t = e_{\text{먹다}}$”처럼, 단어의 종류에 따라 $x_t$가 달라집니다.
같은 $W_{xh}$를 쓰더라도, “입력 임베딩” 자체가 다르므로 계산 결과 $ \,W_{xh} \,x_t\,$가 달라지고, 그 위에 이전 은닉 상태 $h_{t-1}$가 합쳐져서 전혀 다른 은닉 상태 $h_t$가 나옵니다.
2. 은닉 상태($h_{t-1}$)에 누적된 문맥 정보
예컨대 시점 $t-1$까지 “고양이 (주어)” 패턴을 보았다면, $h_{t-1}$에는 “주어 역할을 하는 명사(고양이)가 왔었다”는 정보가 어느 정도 반영되어 있습니다.
이 상태에서 $x_t=e_{\text{고양이}}$라면, 네트워크는 그 은닉 상태($h_{t-1}$)와 함께 “다음에 동사(먹다, 자다, 좋아하다 등)가 올 가능성이 높다”는 패턴을 학습하게 됩니다.
반대로, 만약 시점 $t-1$까지 문맥이 “고양이가 먹다”까지 진행되었다면, $h_{t-1}$에는 이미 “주어→동사” 구성이 반영되어 있고, 시점 $t$의 입력 $x_t=e_{\text{먹다}}$가 들어오면, 이 은닉 상태를 기반으로 “다음에 목적어(밥, 생선, 사료 등)가 올 가능성이 높다”는 식으로 학습됩니다.
왜 굳이 “시점마다 다른 가중치”를 쓰지 않는가?
1. 파라미터 수 폭발 방지
만약 문장에서 위치(position)마다, 또는 품사(part-of-speech)마다 다른 $W$를 둔다면, 파라미터 수가 단어집합 크기나 시퀀스 길이에 비례해서 폭발적으로 커집니다.
반면 모든 시점에 같은 $W$를 쓰면 모델 크기가 일정하게 유지되며, 다양한 길이의 문장에 유연하게 대응할 수 있습니다.
2. 패턴의 일반화 가능
“동사가 온 뒤에 목적어가 온다”는 패턴은 문장 전체에 걸쳐 반복되는 일반 규칙입니다. 이런 규칙을 학습할 때 매번 다른 가중치를 사용하면, 해당 패턴을 전사적으로 학습(heavy parameterization)해야 해서 과대적합이 될 위험이 큽니다.
반대로 같은 가중치를 쓰면, “이제까지 쌓인 문맥” + “지금 들어온 단어 임베딩” 만으로 모든 위치에 걸쳐 공통적인 언어 패턴(예: 주어→동사, 동사→목적어)을 알아서 학습하게 됩니다.
3. 은닉 상태에 문맥을 요약해 두므로 국소 위치 정보를 명시적으로 가질 필요 없음
RNN/LSTM/GRU 같은 순환 네트워크는 각 시점에 은닉 상태 $h_t$가 “지금까지 지나온 전체 정보”를 압축해서 담고 있습니다.
따라서 굳이 “지금 이게 몇 번째 위치이고, 품사는 뭔지” 같은 것을 따로 분리된 가중치로 두지 않아도, $h_{t-1}$ 자체가 과거 문맥과 시점에 대한 정보를 어느 정도 포함합니다.
구체적 예시로 살펴보기
예를 들어, 다음과 같은 아주 단순한 문장 데이터가 있다고 가정해 봅시다.
1) 고양이 (주어) → 먹다 (동사) → 밥 (목적어)
2) 나는 (주어) → 달리다 → 마당
3) 학생이 (주어) → 공부하다 → 시험
각 단어는 임베딩 벡터로 바뀌어 RNN에 입력됩니다.
시점 $t=1$:
$x_1 = e_{\text{고양이}}$, $h_0 = \mathbf{0}$ (초기 은닉 상태)
$h_1 = \phi\bigl(W_{xh}\,e_{\text{고양이}} + W_{hh}\,h_0 + b_h\bigr).$
여기서 $h_1$에는 “주어: 고양이”라는 정보가 압축됨.
시점 $t=2$:
$x_2 = e_{\text{먹다}}$, $h_1$에 “주어: 고양이” 정보가 들어 있음.
$h_2 = \phi\bigl(W_{xh}\,e_{\text{먹다}} + W_{hh}\,h_1 + b_h\bigr).$
이때 RNN은 “$h_1$에는 ‘고양이가 주어로 왔다’는 정보가 있으니, 다음에 올 단어(목적어)는 먹이/밥 등일 확률이 높겠다”라고 학습하게 됩니다.
시점 $t=3$:
$x_3 = e_{\text{밥}}$, $h_2$에 “고양이→먹다”라는 문맥이 쌓여 있음.
$h_3 = \phi\bigl(W_{xh}\,e_{\text{밥}} + W_{hh}\,h_2 + b_h\bigr).$
그리고 출력 $y_3 = \mathrm{softmax}(W_{hy}\,h_3 + b_y)$로부터 이 자리엔 목적어 “밥”이 와야 한다는 확률을 높게 예측하도록 학습됩니다.
이 예시에서 언제나 세 시점 내내 같은 $W_{xh}, W_{hh}, W_{hy}$를 사용해도,
“$주어 \to 동사$” 단계
“$동사 \to 목적어$” 단계
각각 모두 올바른 예측이 가능합니다. 왜냐하면
1. $x_t$ (즉, “고양이” vs “먹다”) 자체가 달라서,
2. 앞서 쌓인 은닉 상태 $h_{t-1}$에 이미 “이전까지 어떤 품사/어휘가 왔는지” 정보가 충분히 반영되어 있기 때문입니다.
결론
은닉 상태 $h_{t-1}$가 “앞서 어떤 품사/어휘가 왔는지”를 요약해 주고, 입력 $x_t$가 어떤 역할(주어인지 동사인지)을 결정하므로, 같은 $W$를 써도 문맥별 판단이 가능하다는 점입니다.
따라서 RNN(혹은 LSTM/GRU 같은 순환 구조)에서는 매 시점마다 가중치를 공유(shared)하는 것이 일반적이며, “위치나 품사마다 완전히 다른 $W$”를 둘 필요는 없습니다.
이렇게 해서 RNN이 시간 축을 따라 파라미터를 공유해도, 문맥과 입력이 다르면 자연스럽게 다른 예측을 할 수 있으므로 “항상 같은 $W$를 써도 괜찮다”고 이해하시면 됩니다.
'AI 및 Data Analysis > Deep Learning' 카테고리의 다른 글
Pretrained model vs. Transfer learning (0) | 2025.06.09 |
---|---|
LSTM (0) | 2025.06.06 |
[Cost Function] Linear Regression & Logistic Regression (0) | 2025.06.05 |
[Linear Regression] Hyperplane (0) | 2025.06.05 |
[scGPT] pre-training data sets (0) | 2025.05.30 |