작성자 : 건국대학교 응용통계학과 강재영
이전에 저희는 기존의 Backpropagation과 조금 다른 RNN의 BPTT(Backpropagation through time)에 대해 배웠습니다.
이처럼 순환하는 과정을 펼친 후에 편미분을 취해서 에러를 구하게 됩니다. 이 때 실제로는 하나의 Edge를 편의상 펼친 것이므로 모두 같은 가중치를 가져야 한다는 것을 잊으면 안됩니다.
따라서 모든 update가 동일하게 이루어져야 하고 이를 위해 각 레이어마다 동일한 위치의 weight에 해당하는 모든 error 미분값을 다 더한 다음, 그 값을 backpropagation하여 weight를 한 번 업데이는 하는 방법이 BPTT입니다.
(동일한 위치의 Weight에 해당하는 모든 미분값을 더한다는 의미를 처음에 이해하지 못해서 제가 이해한 그림을 추가로 넣어드립니다. 이해가 안가시는 분 참고하면 좋을듯해요.)
위 그림은 RNN의 t시점의 히든스테이트와 t시점의 히든스테이트를 이전 히든스테이트로 편미분한 결과입니다. 위 식을 토대로 아래와 같이 그래디언트를 일반화할 수 있습니다.
이 때 보라색으로 상자가 그려진 부분이 가중치행렬 W_h를 의미하며 가중치 행렬이 작아지면 항 전체가 작아지게 됩니다. 가중치 행렬이 작아지는 때를 고려해보면, i와 j의 차이가 클수록 작아진다는 것을 확인할 수 있습니다.
( Sequence 간의 거리가 멀수록 ) 이를 좀더 수식으로 확인해보면,
Norm의 성질에 의해서 W_h 의 L2 norm은 W_h의 가장 큰 고유값(eigenvalue)이라는 것을 확인할 수 있습니다.
저희는 RNN 역전파시 체인룰에 의해 Hidden state의 Gradient를 지속적으로 곱해주어야 합니다.
그런데 위 수식을 보면 Hidden state의 Gradient의 L2 norm은 절대적으로 W_h의 L2 norm 크기에 달려 있습니다.
(L2 norm을 '크기'라고 바꿔서 보면 이해가 더 쉽습니다.)
따라서, 가장 큰 고유값(L2 norm)이 1보다 작다면, Gradient가 기하급수적으로 감소하게 되고(Gradient Vanishing), 가장 큰 고유값(L2 norm)이 1보다 크다면, Gradient가 폭발적으로 증가하게 됩니다.(Gradient exploding)
그렇다면 Gradient Vanishing이 발생하는 이유는 이해했는데, 그게 왜 문제라는걸까요?
Vanishing Gradient가 실제 Language Model에서 발생시키는 문제들을 확인해보겠습니다.
또 다른 예시를 확인해보겠습니다.
- Gradient Cliping
이전에 Gradient Vanishing 외에 Gradient가 기하급수적으로 커지는 Gradient exploding이 있었는데, 이를 해결하기 위한 방법으로 Gradient Cliping이 있습니다.
만약에 Gradient의 Norm 값이 임계값보다 크다면, Scale down을 적용하는 간단한 알고리즘입니다.
Gradient Exploding을 Cliping으로 해결할 수 있었는데 Vanishing은 어떻게 해결할 수 있을까요?
LSTM의 Main idea
" Gradient가 레이어를 지날수록 0에 가까워지는게 문제라면, 정보를 Save하는 메모리를 따로둬서 Gradient를 살릴 수 있지 않을까? "
Forget gate : 어떤 정보를 잊고 어떤 정보를 Cell State에 흘려넣을지 결정하는 Gate
input gate: 새로운 정보가 Cell State에 저장될지를 결정하는 Gate
Cell State를 업데이트 하는 과정을 살펴보면,
이 두 값이 더해져서 다음 cell state의 입력값으로 들어가게 된다.(Update)
Output gate
마지막으로, 최종적으로 Cell State 정보를 tanh를 통해 가공하고, 이를 다음 hidden State 얼마나 반영할지에 대해 Output gate를 통해 결정하게 됩니다.
최종 아웃풋은 Ot * tanh(Ct)
수식을 살펴보면, forget gate가 1이고, input gate가 0 일때 Cell의 정보가 완전하게 보존되서 장기의존성 문제를 해결할 수 있게됨을 확인할 수 있다. 하지만 여전히 Gradient Vanishing의 완전한 해결을 보장하지는 않는다.
GRU의 Main idea
" LSTM은 좋긴 좋은데 구조가 복잡하기 때문에 조금 더 단순화할수 없을까? "
GRU는 LSTM의 변형으로,
다음과 같은 특징들이 있다.
Vanishing gradient 문제가 RNN만의 문제는 아니다. 다른모델에서 어떻게 이를 극복하려 했는지 확인해보자
1) Residual connections "ResNet"의 Skip connection
Convolutional Layer를 지나고 나온 결과에 input x를 다시 더해줘서 기존 정보 + 새로운 학습정보를 모두 고려할 수 있도록 했다.
2) Dense connections "DenseNet"의 Dense connectivity
위 기존 모델들과 비교한 그림을 보면 이해가 더 쉬운데, ResNet이 이전 레이어의 정보만 다시 더해준다면, Dense connectivity는 이전 모든 레이어 정보를 쌓는다고 생각하면 된다.
추가그림 및 수식
Multi-layer RNN : RNN을 여러층으로 사용한 모델
Q1. LSTM에서 왜 forget gate에서 previous cell state가 아니라 previous hidden state와 input에 대해서만 고려하여 계산되는지?
Q2. HighwayNet에 대한 설명이 부족한거같아요.
HighwayNet은 이처럼 Layer 결과값과 input x 값의 반영비를 조절하면서 학습하여 ResNet처럼 기존정보(input) + 새로운 학습정보(H)를 모두 고려할 수 있도록 하였다.
Reference
Stanford CS224n Lecture 7 강의 & 강의자료
13-14기 정규세션 13기 이예지님 모델심화2 강의자료
https://excelsior-cjh.tistory.com/89
https://ratsgo.github.io/deep%20learning/2017/10/10/RNNsty/
https://jeongukjae.github.io/posts/cs224n-lecture-7-vanishing-gradients-fancy-rnns/
https://yjjo.tistory.com/18?category=881892
https://velog.io/@tobigs-text1314/CS224n-Lecture-7-Vanishing-Gradients-And-Fancy-RNNs#multi-layer-rnns 투빅스 13-14기 텍스트 세미나 자료
https://jayhey.github.io/deep%20learning/2017/10/13/DenseNet_1/
https://lazyer.tistory.com/8
투빅스 14기 한유진
LSTM의 작동방식을 세세하게 짚어주시고 질문에도 잘 답변해주셔서 쉽게 이해할 수 있었습니다. 좋은 강의 감사합니다!
투빅스 15기 이수민
Vanishing gradient 문제의 발생과 해결에 대해 다양하고 깊이 있게 알게 된 강의였습니다. 특히 어렵게 느껴졌던 LSTM에 대해 자세하게 설명해 주셔서 좋았습니다. 감사합니다!
투빅스 15기 김동현
Vanishing gradient 문제와 이를 해결하기 위한 RNN, LSTM, GRU 등 다양한 변형 모델들에 대해서 자세히 알아볼 수 있는 강의였습니다.
투빅스 15기 조준혁
RNN과 RNN 변형 모델들에 대해 학습하고 개념을 잡을 수 있었던 강의였습니다. 감사합니다.
투빅스 14기 정재윤
RNN에서 vanishing gradient는 필연적으로 발생하게 됩니다. 특히 vanishing gradient가 발생하면 long-term effects를 무시한다는 점, gradient가 무엇때문에 0이 되었는지 구분할 수 없다는 문제가 말생하는데, 이를 보완하기 위해 나온 모델이 LSTM입니다.
LSTM은 이전 정보를 지속적으로 흘려주는 cell state는 forget, input, output gate들을 이용합니다. forget gate는 어떤 정보를 잊고 어떤 정보를 cell에 흘려넣을지 결정하는 gate, input gate는 새로운 정보가 cell에 저정될지 결정하는 gate, output gate출력값을 반환하는 gate입니다.
이 후, 나온 모델이 GRU입니다. GRU는 LSTM보다 더 간단한 형태로, cell state가 존재하지 않는 대신 hidden state에 정보를 유지합니다.
최근에는 여러 RNN모델들이 나왔는데 대표적으로 Bidirectional RNN과 Multi layer RNN등이 만들어졌을 뿐만 아니라, skip connection 등의 이미지에서 사용되는 기법들도 도입되면서 더 다양한 모습들을 보여주고 있습니다.
투빅스 15기 이윤정
gradient vanishing 문제를 해결하기 위한 다양한 변형 모델을 이미지와 곁들여 상세히 설명해주셔서 더욱 이해하기 쉬운 강의였던 것 같습니다. 감사합니다.
투빅스 15기 조효원
RNN의 한계점에는 여러 가지가 있지만 가장 대표적인 문제는 time step이 흐를수록 정보가 소실, 즉 기울기가 소실되는 것이다. 언어의 특정 상 long-term dependecy가 발생하는데, 기울기가 소실되면 이를 포착 및 표현할 수 없다. 뿐만 아니라 기울기가 소실된 이유가 구고적인 문제인지 혹은 의존성이 없어서 , 즉 없어져야하기 때문에 없어진 것인지 파악할 수가 없다.
이를 해결하기 위해 다양한 종류의 gate가 추가된 LSTM 모델이 등장했다. LSTM 모델은 forget gate, input gate, output gate를 이용해서 이전의 time step의 정보중, 잊을 정보와 기억할 정보를 구분해 중요한 정보는 뒤의 시간까지 기억할 수 있도록 하였다. 이로서 기울기 소실 문제를 완화했다.
LSTM 모델을 구조가 복잡하고 연산이 많을 수밖에 없었는데, 이를 경량화한 것이 GRU이다. GRU는 더 빠르지만 유사하거나 때로는 더 좋은 성능을 보였다.
투빅스 14기 강의정
Lecture 7 – Vanishing Gradients, Fancy RNNs를 주제로 발표해주셨습니다.
투빅스 15기 김재희
RNN의 한계에 대해 배우고, 이를 개선한 LSTM, GRU, Bi-RNN 등에 대해 공부했습니다. 강의보다 더 다양한 자료들이 있어서 더 이해할 수 있었던 것 같습니다. 감사합니다.
RNN의 문제점은 시점이 길어질수록 그래디언트가 0에 가까워지는 vanishing grandient가 발생한다는 점입니다. 이는 미분식에서 W 행렬의 l2 norm이 1보다 작으면 연속적으로 곱해지면서 발생하게 됩니다 .
LSTM은 여러 게이트와 cell state를 추가하여 이를 개선한 모델입니다. 장기 기억과 단기 기억으로 정보를 분리하여 vanishing grandient 문제를 해소할 수 있었습니다.
GRU는 LSTM을 단순화하여 파라미터 수를 줄이면서도 일부 태스크에서 비슷한 성능을 보이는 모델입니다. LSTM을 기본으로 하되, GRU 역시 시도해볼만하다고 합니다.
NLP의 정보는 사실 어느정도 양방향성을 가지고 있습니다. 이를 고려하여 RNN류 모델들은 양방향으로 정보를 고려해서 모델링되어야 합니다. 이것이 Bi-RNNs입니다.
RNNs 레이어 하나를 통해 복잡한 함수가 표현되지는 않습니다. 만약 태스크가 복잡하여 단일 레이어로 해결할 수 없다면, 모든 시점의 hidden state를 입력값으로 하는 RNNs 레이어를 추가하여 문제를 해결할 수 있습니다.
투빅스 14기 정세영
RNN의 vanishing gradient와 여러 변형된 모델에 대해 개념을 자세히 짚을 수 있는 강의였습니다. 여러 시각적인 자료를 추가해주셔서 이해하기 수월했습니다.