Recap: RNN
엄청 오랜만에 게시글을 작성한다. 지난 글에서는 RNN에서 간단히 알아보았다.
가중치 값 $W$ 를 이용하여 hidden state를 생성하고 해당 작업을 recurrent 하는 방식의 방법이었다.
이를 통해 얻을 수 있는 장점과 단점들은 아래와 같았다.
이번 RNN의 단점 중 두번째에 적혀있는 문제를 한번 알아보고자 한다.

Vanishing Gradient
기울기 소실 문제를 한번 살펴보자.
RNN의 연산 시퀀스가 끝난다면 우리는 전체 Loss 값을 얻게 된다. 여기선 4번의 스텝이 있었고 결국 최종적으로 loss 값이 $J^{(4)}(\theta)$ 값을 얻었다.


$timestep=1$일 때의 값을 얻고 싶기에 우리는 연쇄법칙을 이용하여 값을 구할 수 있다.
체인 규칙을 통하여 핑크색 박스로 표시한 각 값이 나오는데 hidden state 사이의 이런 곱들이 작아지는 경우가 많다.
결국 upstream의 기울기를 업데이트할 값을 얻지 못하면 매개변수를 업데이트 하지 않기에 전혀 변경하지 않는 문제가 발생한다.
이를 기울기 소실문제라고 한다. 해당 기울기 소실 문제는 RNN 뿐만이 아니라 CNN 과 같은 레이어를 여러겹 쌓는 모델에서도 발생하는 문제이다.
RNN의 수식을 다시 봐보자
$$h^{(t)}=\sigma (W_{h}h^{(t-1)} + W_{x}x^{(t-1)} + b_{1})$$
여기서 $\sigma$를 항등함수(identity function)라고 가정해보자
- $\sigma(x)=x$
이를 이용하여 이전 스텝의 미분 값을 구하게 되면
$$\frac{\partial h^{(t)}}{\partial h^{(t-1)}} = \text{diag} \left( \sigma' \left( W_h h^{(t-1)} + W_x x^{(t)} + b_1 \right) \right) W_h$$
- $=IW_{h}=W_{h}$
위와 같은 수식으로 표현될 것이다.
그럼 $i$ 시점의 손실함수 $J(\theta)$의 gradient를 j 시점의 hidden state를 계산해보자 $(\ell = i - j)$
$$\frac{\partial J^{(i)}(\theta)}{\partial h^{(j)}} = \frac{\partial J^{(i)}(\theta)}{\partial h^{(i)}} \prod_{j < t \leq i} \frac{\partial h^{(t)}(\theta)}{\partial h^{(t-1)}}$$
로 일단 표현이 되고 이는
$$= \frac{\partial J^{(i)}(\theta)}{\partial h^{(j)}} \prod_{j < t \leq i} W_h = \frac{\partial J^{(i)}(\theta)}{\partial h^{(j)}} W_h^{\ell}$$
와 같이 표현된다. 만약에 $W_{h}) 값이 "작은" 경우 $\ell$이 커짐에 따라 기하급수적으로 문제가 발생할 수 있다.
작은 $W_{h}^{\ell}$ 이 뭐가 문제일까?
만약 $W_{h}$ 의 고윳값(eigenvalues)가 1보다 작다고 가정해보자.
- $\sigma_{1}, \sigma_{2}, ... , \sigma_{n} < 1$
- $q_{1}, q_{2}, ... , q_{n}$ (eigenvectors)
$\frac{\partial J^{(i)}(\theta)}{\partial h^{(j)}} W_h^{\ell}$ 해당 수식의 $W_h$에 이를 적용하면 아래와 같은 수식으로 변경된다.
$$\frac{\partial J^{(i)}(\theta)}{\partial h^{(j)}} W_h^{\ell} = \sum_{i=1}^{n} c_i \lambda_i^{\ell} q_i \approx 0 \ ( \text{for large } \ell )$$
이렇다면 우리는 $\ell$ 이 커지면 커질수록 0으로 접근함을 알 수 있다. 그리고 이를 통해 기울기 소실이 발생함을 알 수 있다.
물론 현재 수식에서는 $\sigma$ 를 항등함수를 이용해서 그런 결과가 나오지만 cs224n 강의에서는 $\sigma$ 가 nonlinear activation 경우에도 거의 동일한 문제가 발생한다고 한다.
여기선 고유값이 1보다 작지만 1보다 클 경우에는 반대로 exploding gradient 문제가 발생한다고 한다.
Vanishing gradient가 왜 문제인가?
우리가 문장 초반 표현에 대해서 미래 시간 step의 영향을 보고싶다고 가정을 해보면 더 먼 거리에 있는 손실은 초반 step에 더 적은 영향을 끼치는 걸 알 수 있다.
즉 이 거리가 꽤나 늘어나면 영향을 거의 주지 못한다.

그렇기에 우리는 아래의 예문의 의존 관계를 쉽게 유추할 수 있지만 RNN 모델에서는 gradient가 너무 작기 때문에 이 dependency를 예측할 수 없다.
'AI,ML' 카테고리의 다른 글
| NLP - [4] Seq2Seq, Attention (0) | 2024.09.24 |
|---|---|
| NLP - [3] LSTM RNN (1) | 2024.09.23 |
| NLP - [2] Language Model, RNN - (2) (0) | 2024.06.21 |
| NLP - [2] Language Model, RNN - (1) (1) | 2024.06.17 |
| NLP - [2]Word Embedding (0) | 2024.03.29 |