안녕하세요! 제이덥입니다. 최근에 기술 면접을 준비하며, 기초적인 내용부터 하나씩 정리하고 있는데요. 오늘은 Backpropation through time(BPTT)가 이루어지는 방법과 이 때 발생하는 Long-Term-Dependency문제에 대해서 정리해보았습니다.
1️⃣ Backpropagation through time(BPTT)란?
Backpropagation througth time(이하 BPTT)는 RNN에서 특정 Timestamp 구간마다 학습 과정 중에 Truncation을 적용하여 학습과정에서 이루어지는 Backpropagation을 말합니다. 일반적으로 딥러닝 모델은 순전파(forward propagation) 이후 예측값과 실제 값(Ground Truth)의 차이를 이용해 손실 함수(loss function)을 계산합니다. 이후, 손실 함수 기준으로 역전파(backpropagation)를 통해 기울기를 구하고, 옵티마이저(Optimizer)를 사용하여 가중치를 업데이트합니다. 그러나 RNN에서 수많은 Timestamp를 가진 데이터가 주어질 경우(예: Character 단위로 예측하는 모델에서 몇 천자의 글자가 데이터로 주어질 때), 제한된 리소스(메모리) 내에서 학습하는 것은 어렵습니다. 따라서 BPTT는 이와 같은 경우 특정 Timestamp 단위(예: 언어에서는 Chunking)를 기준으로 주어진 데이터를 잘라 손실함수를 구해 이런 문제를 개선한 것이죠.
예를 들겠습니다. "나는 오늘 블로그 글을 쓰기위해 카페에 왔다. 카페 사장님이 틀어주신 잔잔하고 아름다운 곡 덕분에 수월하게 글이 써졌다."라는 문장에서 다음 단어을 예측하는 모델을 만든다고 가정합시다. 이때, 전체 글을 이용하지 않고, 5개의 단어씩 끊어서 학습하는 것이죠. 이 경우 "나는 오늘 블로그 글을 쓰기위해" / "카페에 왔다. 카페 사장님이 틀어주신"/ 잔잔하고 아름다운 곡 덕분에 수월하게"/ "글이 써졌다." 이렇게 총 다섯 개의 chunk로 나누어져서 학습이 되겠죠. 즉 정리해서 말하면 전체를 학습하기 위해 작은 단계로 나눠서 학습을 했다고 보시면 됩니다.
2️⃣ Long-Term Dependency 문제
하지만 Vanila RNN에서는 위와 같은 방식으로 학습해도 Long-Term Dependency 문제가 발생합니다. Long-Term Dependency는 학습이 일어나며 Gradient Vanishing/Exploding 문제로 인해 상대적으로 과거에 존재하는 단어의 정보가 유실되는 문제를 말합니다.
예를 들어 언어 모델에서, 문장의 앞부분에 있는 단어는 뒷부분에 있는 단어보다 예측이 어려워지는 경향이 있습니다.
왜 그런 것일까요? 그 이유는 미분을 구하는 과정에서 동일한 수식을 이용하게 되서입니다. 이 때 특정 행렬의 미분값이 1보다 크게 되면 TimeStamp의 수만큼 제곱이 이루어져 기하급수적으로 커지게 되고, 1보다 작은 경우 0에 근접하게 수렴하여 소실되기 때문입니다.
이러한 문제를 해결하기 위해 LSTM(Long Short-Term Memory)과 GRU(Gated Recurrent Unit)와 같은 구조가 고안되었습니다. 그리고 최근에는 대부분의 언어모델에 활용되는 Transformer 모델이 등장하여 이러한 문제를 효과적으로 극복하고 있습니다.
출처 :
'NLP' 카테고리의 다른 글
[NLP] Recurrent Neural Network (Vanilla RNN) (0) | 2025.01.19 |
---|---|
[NLP] Word Embedding (Word2Vec, Glove) (0) | 2024.12.22 |
[NLP] Bags of Words & Naive Bayes Classifier for Document Classification (2) | 2024.11.10 |
HuggingFace 모델에 RAG 적용하기(Feat. langchain) (0) | 2024.03.17 |