오늘은 딥러닝 모델의 파인튜닝을 하면서 만나게 되는 난제, 망각증상 (catastrophic forgetting) 에 대해 다뤄보려고 합니다. 주로 참고한 논문은 아래와 같습니다.


Reawakening knowledge: Anticipatory recovery from catastrophicinterference via structured training

https://arxiv.org/abs/2403.09613



모델을 학습하다보면 이전에 학습한 내용을 까먹는 현상이 문제가 됩니다. 이게 단순히 모델의 용량을 넘는 너무 많은 정보를 넣어서 이전정보를 까먹는게 아니라, 학습의 순서에 따라서 최근에 학습한거 중심으로 기억하고 이전에 학습한 것은 까먹게 되는 경향이 있는게 문제입니다.


다국어로 가면 한국어를 가르치면 영어를 까먹고, 영어를 가르치면 또 한국어를 까먹고 하는 식입니다. 코딩을 가르치면 롤플레이를 까먹고, 롤플레이를 가르치면 코딩을 까먹고...


이렇게 까먹는 증상이 점점 스무스하게 드러나는 것도 아니고 갑자기 어느 순간 헤까닥하고 까먹는다는게 체감되어 사람들이 파국적 망각이라는 다소 무서운 이름까지 붙여주었습니다.


그러한 증상을 극복하기 위해서 여러가지 해결책을 시도했는데, 그중 한가지 방법은 모델의 레이어를 추가한 다음에 나머지 레이어들을 얼려놓고 그부분만 따로 학습을 시키는 방법입니다. llama2 에 한국어를 성공적으로 학습시킨 야놀자 eeve 같은 모델이 이러한 방법을 사용했습니다.


또 다른 방법으로는 학습이 진행되면서 까먹기 전에 다시 원래 지식을 넣어줘서 까먹는 것을 방지하는 방법입니다. 비유하자면 우리나라에 살던 사람이 미국에 가서 영어만 쓰고 살게 되면 한국어를 까먹기 쉬운데, 가끔씩 한국에 돌아와서 원래 친구들을 만나서 우리말을 쓰면서 놀다보면 한국어를 까먹지 않게 되는 느낌이지요.


사실 후자의 방법이 어떻게 보면 당연하긴 합니다. 언어모델을 프리트레이닝을 할 때에는 여러가지 지식을 혼합하고 순서가 랜덤화되게 해서 (반드시 시드값을 주입) 넣어주는게 기본입니다. 


또한 최근에 배운 학습내용을 더 잘 기억한다라는 편향성을 이용해서 전체적인 트레이닝을 단계로 나눠서 접근하는 것도 요즘에는 보편화된 방식입니다. 처음에는 다양한 기본적인 어휘들을 먼저 학습시키고, 그 다음에 좀 더 난이도가 있는 개념들이 들어있는 텍스트를 학습시키고, 그 다음에는 더욱 구체적인 질문과 답변 (이전에 학습한 개념들에 관련된) 을 학습시키는 식으로 접근하는거죠. 이미지 생성모델의 경우 처음에는 이미지의 형태를 다양하게 익힐 수 있도록 다양한 해상도의 단순한 이미지들 (주로 단일 소재) 을 학습시켰다가, 나중에 갈 수록 고퀄리티의 이미지 (예: 만화 모델이라면 최신 그림체에 유명 캐릭터들의 고퀄리티 일러스트) 을 학습시키는 식으로 단계를 짜는 식입니다. 이러한 학습 방식을 '커리큘럼 학습' 이라는 개념으로 부릅니다

http://dmqm.korea.ac.kr/activity/seminar/338



그런데 저는 이런 학습의 개념과 망각증상의 관계가 궁금해졌습니다. 파국적 망각이란게 정말 까먹는걸 의미하는가? 라는 것이지요. 아무리 생각해봐도 완전한 '망각'이 일어난다면 LLama3의 경우처럼 15T 토큰이나되는 방대한 양의 지식을 8B 같은 비좁은 공간에 넣는다는게 말이 안된다는 느낌이 들었습니다. 학습이 계속되다보면 한참 전에 학습한 정보는 망각할 수 밖에 없을텐데 말이죠.


좀 더 구체적으로 표현하자면 보통 사람들이 '망각증상' 이라고 부르는 현상이 실은 완전한 망각은 아니고 기억속에 잠재되어있긴 하지만 그것을 쉽게 꺼내지 못하게 되는 상태가 아닌가 하는 것입니다.


위에 소개한 논문은 그러한 가정을 실험으로 증명한 연구를 소개합니다.


실험의 편의를 위해 작은 파라메터의 언어모델 pythia-1b 모델을 준비했고, 25가지의 문서를 이용해서 순서대로 학습을 시켜본 결과입니다. 문서들의 순서를 섞지 않고 1번 문서를 학습시킨다음 2번 문서, 3번문서, .. 차례로 25번까지 학습시키고 나면 다시 1번문서로 돌아가서 학습을 반복하는 식이지요. 위의 그래프는 그렇게 학습이 이루어지는 과정에서 1번 문서에 대한 loss 값을 측정한 것입니다. loss 가 높으면 1번문서에 나타나는 문장의 흐름을 잘 예측하지 못한 것입니다.


두 그래프 모두 같은 내용을 담고 있는 것이니 편의상 오른쪽의 그래프를 보자면 처음에 1번 문서가 학습되고 나면 loss 값이 1 아래로 떨어지지만, 다른 문서들에 대한 학습이 진행되면서 1번 문서에 대한 loss 는 다시 증가하는 양상을 보이다가 다시 1번 문서를 또 학습하게 되면서 loss 가 줄어들고, 다시 다른 문서들을 학습하면서 늘어나고.. 하는 양상을 보여줍니다.


특기할만한 사항

 - 한번 망각증상이 일어난 후에 다시 그 문서를 배우게 되면 loss 는 예전보다 더 아래로 떨어지고, 망각이 반복되고 처음처럼 심하게 망각하진 않는다

 - 망각과 재학습, 재망각과 재재학습을 반복하면서 점점 망각의 정도가 완화된다

 - 망각의 완화는 심지어 학습을 하기 약간 이전에 일어난다. 1번 문서에 대한 망각의 완화가 1번문서를 재학습할 때 일어나는게 아니라 25번 문서나 그 이전 문서를 재학습할 때 일어난다 (!?) 이것을 논문에서는 (anticipatory behavior) 라고 불렀습니다. 마치 파블로프의 개를 보는게 아닌가 하는 생각이 드네요. 위의 로스 그래프를 보면 u 자가 뒤집어진 모양으로 된 것을 확인할 수 있습니다. 학습의 패턴 자체를 모델이 학습하고 있다는 증거입니다.


이러한 학습/망각의 효과는 그 베이스가 무엇이냐에 따라서, 모델의 크기에 따라서도 다소 다른 모습을 보입니다.


일단 프리트레이닝이 잘 된 모델일 수록, 망각후 재학습의 효과가 더 큽니다. 결국 기억과 이해라는 것은 불가분의 관계라는 것이 인간과 비슷하게 딥러닝모델에서도 통한다는 의미로 해석할 수 있습니다.


유명한 사례로 체스 게임의 고수들은 체스판의 내용들을 잠깐 보고난 후에 그 말의 위치를 보통사람보다 훨씬 잘 기억한다고 알려져 있습니다. 다만 이러한 기억력은 체스판의 배치가 정상적인 게임의 흐름에 속할 때에만 가능하고, 아무런 규칙없이 기물들을 배치한 경우 일반인과 다를바 없는 기억력을 보였다고 합니다 

https://m.blog.naver.com/cp6445/149152545


이제 내용을 정리해보겠습니다

- 파인튜닝을 잘 하고 싶다면? 원 데이터의 지식들을 간간히 섞어준 데이터셋을 만드는 것이 좋습니다

- 프리트레이닝을 잘 하고 싶다면? 데이터들을 개념적인 복잡도와 구체적인 출력 형태에 따라 단계를 나눠 학습하는 것이 좋습니다. 또한 각 단계별 데이터는 잘 섞여져 있고 다음 단계로 넘어가기 전까지 충분한 분량의 학습을 시켜주는 것이 좋습니다.

- 언어모델은 인간과 비슷하게 반복적인 재학습을 통해 더 심층적인 개념을 이해하게 되고, 그 이해가 뒷받침되었을때 학습/재학습시 높은 효율을 보입니다.


위의 그림과 같이 학습이 계속될 수록 개념의 이해라는 본질에 점점 수렴하는 모습을 기대할 수 있습니다



또 다른 연구에서는 새로운 지식이 추가적으로 학습되었을때 판단의 경계선 (decision boundary) 이 옮겨가는 현상때문에 망각증상이 나타나는 것으로 보인다는 점을 밝히고 있습니다. 적절하게 기존의 정보를 데이터셋에 섞어주는 것은 위와 같은 경계선을 예전과 호환되도록 유지하는데 도움을 주고 결과적으로 망각증상을 억제할 수 있다는 것이지요.



마지막으로 덧붙이자면, 지금까지 다룬 망각증상에 대한 케이스는 어디까지나 모델의 파라메터 규모에 따라 학습할 수 있는 대강의 정보량 이내에서 학습될 때를 전제로 한 것입니다. 너무 작은 모델에 너무 많은 정보를 넣으려고 하면 어떤 방법으로 동원하더라도 기억력의 한계는 극복할 수 없을 것입니다.


이상입니다. 읽어주셔서 감사합니다