Andrej Karpathy가 LLM(대형 언어 모델) 학습에 있어 기존 프리트레이닝, 파인튜닝 외에 '시스템 프롬프트 러닝'이란 새로운 주요 패러다임의 필요성을 제시합니다. 인간의 학습과 더 닮은, 노트 필기나 전략 습득과 유사한 이 방법의 중요성과 가능성, 그리고 향후 연구 과제를 짚습니다.
우리는 LLM(대형 언어 모델) 학습에 있어 (최소한 하나의) 주요한 패러다임을 놓치고 있습니다. 이걸 뭐라고 불러야 할지 잘 모르겠지만, 아마 이미 이름이 있을 수도 있겠죠 – 저는 임시로 '시스템 프롬프트 러닝(system prompt learning)'이라 부르겠습니다.
프리트레이닝(pretraining)은 지식을 위한 것입니다. 파인튜닝(finetuning, 지도학습/강화학습)은 습관적 행동을 위한 것입니다.
이 두 과정 모두 파라미터(가중치)의 변화가 일어나지만, 인간이 배우는 경험의 상당 부분은 마치 '시스템 프롬프트'를 바꾸는 것과 더 비슷하게 느껴집니다. 새로운 문제를 만나고, 스스로 뭔가를 알아내고, 다음에 같은 문제를 만났을 때는 비교적 명시적인 방식으로 "기억"합니다. 예를 들어, "이런저런 문제가 나오면, 이런저런 방식의 접근이나 해결법을 시도해야겠다" 같은 식입니다.
이건 일종의 자기 자신을 위한 노트 필기에 가깝습니다. 흔히 말하는 '메모리(Memory)' 기능과 비슷하지만, 단순히 사용자별 무작위 정보를 저장하는 것이 아니라, 보다 일반적이고 보편적인 문제 해결 지식과 전략을 저장하는 데 가깝죠.
현행 LLM들은 마치 영화 멤토(Memento)의 주인공처럼, 아직 자기만의 '스크래치패드(임시 메모장)'가 없는 상태와 비슷합니다.
이런 시스템 프롬프트 기반의 러닝은 기존의 보상 신호(스칼라) 기반 강화학습보다 훨씬 더 강력하고 데이터 효율성도 높을 수 있습니다. 이유는, 지식에 기반한 "리뷰(review)" 단계가 강화학습의 스칼라 보상보다 훨씬 더 높은 차원의 피드백 채널이 될 수 있기 때문입니다.
사실 이런 생각을 하게 된 건, 최근 Claude LLM의 시스템 프롬프트(약 17,000 단어!)를 읽으면서 였는데요. 이 프롬프트에는 단순히 기본 동작과 스타일(예: 가사 요청 거절)만 적혀 있는 것이 아니라, 문제 해결을 위한 다양한 일반 전략도 기술돼 있습니다. 예:
"Claude가 단어, 글자, 문자 수를 세는 질문을 받으면, 답변 전 반드시 단계별로 생각한다. 각 단어/글자/문자마다 숫자를 지정하며 세고, 실제로 이 과정을 거친 뒤에만 답변한다."
이는 예를 들어 'strawberry에 r이 몇 개 들어있나요?' 같은 문제를 정확히 풀기 위한 전략입니다.
개인적으로 이런 문제 해결 지식은 강화학습(가중치에 박아넣는 걸로)을 통해 학습시키는 게 적합하지 않다고 봅니다. 적어도 즉각적이거나 배타적으로 그럴 필요는 없습니다. 또, 이런 규칙들을 인간 엔지니어가 일일이 손으로 작성하는 방식 역시 효율적이지 않습니다.
이런 지식이 시스템 프롬프트 러닝, 즉 LLM이 스스로 시스템 프롬프트를 편집하고 발전시키는, 어찌 보면 자기만의 '문제 해결책 서적'을 쓰는 듯한 방식으로 축적(학습) 될 수 있어야 한다고 생각합니다. 만약 이게 가능하다면, 완전히 새로운(그리고 강력한) 학습 패러다임이 될 것입니다.
물론 갈 길이 많이 남았습니다. 예컨대 프롬프트 편집은 어떻게 이뤄져야 하는가? 프롬프트 편집 시스템도 학습시켜야 할까? 인간처럼 명시적 지식(시스템 텍스트)에서 습관적 파라미터(가중치)로 어떻게 점진적으로 옮겨갈 수 있을까? 등등 아직 풀어야 할 숙제가 많습니다.