안녕하세요! 거의 3주만에 블로그 포스팅으로 돌아왔습니다. 요즘 블로그 글 쓰는게 뜸해졌는데 별로 바쁘지 않았던거같은데 공부할 틈이 안나서 이제서야 글을 쓰는 것 같네요.
오늘은 few shot (이하 퓨샷)의 동작 원리에 대해서 공부해보고 내용을 정리해보도록 하겠습니다. 이런 주변 개발자분들은 이런저런 기술도 써보시고 요즘 핫하다는 에이전트 개발에 힘쓰고 계시던데 저는 그런 것 보다는 어째 동작 원리같은게 더 궁금한지 모르겠네요..
그런 의미로 이번 포스팅은 다음과 같은 순서로 이어집니다!
- 퓨샷이란?
- 퓨샷의 발견
- 퓨샷의 동작 원리
- 퓨샷의 증명
첫 번째 챕터에선 퓨샷이 무엇인지 가볍게 이야기 해보고 두 번째 챕터부터 본격적으로 퓨샷이 어떻게 탄생하게 되었는지를 시작으로 세 번째 챕터인 퓨샷의 동작 원리를 파악합니다. 그리고 마지막으로 이런 동작 원리를 기반으로 어떻게 이 원리가 퓨샷이 되는지 증명까지 알아보면서 포스팅 마치도록 하겠습니다.
그럼 본격적으로 시작해보죠!
Few Shot이란?
흔히 프롬프트 엔지니어링에서 퓨샷이라는 개념이 있는데 이는 흔히 LLM에게 답지를 제공해줘서 LLM이 미처 학습하지 못한 부분에서 패턴을 새롭게 학습하게 하거나 엔지니어링 관점에서는 할루시네이션을 줄여주기도 합니다.
AI 엔지니어링에서 RAG라고 부르는 것도 큰 틀에서 보면 퓨샷의 범주에 들어가는데요. 요즘은 순수한 RAG가 아닌 구조화된 RAG를 사용하면서 RAG is Dead라고 얘기하지만 이전, 개발자들이 RAG에 열광했던 이유는 RAG를 통해 LLM이 헛소리하는 빈도를 획기적으로 줄여준다는 데에 큰 의미가 있었습니다.
퓨샷은 특정 인물의 말투를 따라해달라고 하거나 특정 포맷으로 답변해야하거나 이런식으로 사용하여 LLM이 학습하지 않은 특정 패턴을 학습하게 하여 LLM에게 문맥을 주입해주는데 꽤나 다양한 방면으로 퓨샷을 사용하기도합니다.
그런데 이건 좀 이상하죠? 어떻게 LLM이 학습하지 않은 영역에서 내가 제시해준 패턴을 이렇게 기가막히게 따라할까요?
Few Shot의 발견
퓨샷은 페르소나의 주입과 어느정도 비슷한 맥락을 가지는데, 특정 패턴대로 움직이도록 주입한다는 점은 비슷하지만 페르소나는 "너는 20년차 베테랑 개발자야"와 같이 일반적인 상황을 주입하지만 퓨샷은 특정 캐릭터의 말투를 흉내내게 하거나 특정 포맷으로 답변을 요구하는 경우 (e.g. JSON)에 주로 사용됩니다.
또한, 페르소나의 주입은 Transformer 알고리즘에서 Attention 레이어를 처음 통과하는 프롬프트의 앞부분에 의해 다음 답변이 가야하는 방향이 강제되면서 높은 가중치를 얻게 되는 것으로 발현되지만, 퓨샷은 Attention 레이어가 이전 토큰과 다음 토큰의 연관관계를 이용해서 패턴을 주입하는 형식으로 발현됩니다.
기계론적 해석학
당시 GPT-2가 한창 개발중이던 OpenAI에서 안전한 AI를 만들자는 일념하에 모인 똑똑한 연구원들이 AI 블랙박스를 연구하기 위해 '해석 가능성'이라는 팀을 창립하게 되었습니다. 기계론적 해석학의 출발은 정말 순수했는데요. "AI가 어떻게 동작하는지도 모르는데 우리가 어떻게 안전한 AI를 만들겠다는 말이냐"라는 연구원의 작은 꿈에서 시작했습니다.
2019년 OpenAI가 마이크로소프트에게 10억달러라는 어마어마한 투자를 받으면서 OpenAI 내부에 있던 연구원들의 반응은 둘로 나뉘었습니다.
"비영리 기업이라며! 안전한 AI를 만들자며!" vs "그래도 회사가 유지되려면 투자를 받아야해!"
이에 뜻이 맞지 않던 일부 개발자들이 Anthropic이라는 비영리 회사를 세우고 Claude라는 AI를 만들기 시작했습니다. Claude의 슬로건은 "안전한 AI, 통제 가능한 AI를 만들자"인데요. 이에, 최초의 한 뜻을 가지고 모였던 연구원들이 다시금 AI 블랙박스를 연구하기 시작했고 그것이 "기계론적 해석학"의 탄생이었습니다.
퓨샷의 발견
'크리스 올라', 당시 기계론적 해석학이라는 단어를 탄생시키고 연구를 진두지휘하던 Anthropic의 연구원이 2020년 12월과 다음 해 3월에 두개의 논문을 발표합니다.
https://transformer-circuits.pub/2021/framework/index.html
A Mathematical Framework for Transformer Circuits
Contents Transformer language models are an emerging technology that is gaining increasingly broad real-world use, for example in systems like GPT-3 , LaMDA , Codex , Meena , Gopher , and similar models. However, as these models scale, their open-endedne
transformer-circuits.pub
https://transformer-circuits.pub/2022/in-context-learning-and-induction-heads/index.html
In-context Learning and Induction Heads
Contents As Transformer generative models continue to scale and gain increasing real world use , addressing their associated safety problems becomes increasingly important. Mechanistic interpretability – attempting to reverse engineer the detailed comp
transformer-circuits.pub
첫 번째 논문은 트랜스포머 알고리즘을 수학적 회로로 분해한 이 분야의 '창세기'같은 논문이 되었습니다. Attention 레이어들이 단순히 순차적으로 연산되는 것이 아니라 '잔차 스트림'이라는 거대한 공용 메모리 공간에서 각자의 결괏값을 독립적으로 읽고 쓴다는 것을 증명한 것인데요.
또한, 모델의 가중치 행렬인 Q, K, V가 단순한 행렬의 곱셈 덩어리가 아니라 각각 고유한 로직을 수행하는 모듈임을 시각화하여 AI 블랙박스를 화이트박스로 바꿔보는 시야를 제공했습니다.
이어 두 번째 논문에서는 LLM이 프롬프트의 문맥을 파악하고 '퓨샷 러닝'을 수행하는 근본 원리를 밝혀냈습니다. 두 번째 논문의 제목에서 알 수 있듯이 당시 연군원들은 퓨샷이라는 단어를 쓰지 않고 'In-Context Learning'이라는 단어를 썼는데 말 그대로 '문맥 학습'이라는 단어를 만들어낸 것입니다.
이 다음 포스팅은 트랜스포머 알고리즘과 Attention 레이어에 대한 이해가 선행되어야합니다! 아래의 링크를 꼭 참고하고 오셔야합니다. 전체적인 단어 설명이나 맥락이 급진전될 수 있습니다.
https://coding-review.tistory.com/614
Transformer 알고리즘은 과거와 다르게 어떻게 발전했을까?
안녕하세요. 요즘 AI 엔지니어링 업무를 하면서 관련된 것들을 공부를 하니 더 재밌는 것 같네요. 이번 포스팅에선 Transformer 알고리즘이 담긴 논문이 출판됐을 당시부터 있었던 근본 개념들을 알
coding-review.tistory.com
Few Shot의 동작 원리
이 챕터에선 퓨샷의 동작 원리에 대해서 다루는데 수학적인 내용은 최대한 배제하고 (저도 수학은 몰라서..) 공학적인 의미로 풀어서 최대한 직관적으로 풀어보겠습니다.
Attention Layer 분해
연구원들은 우선 Attention 레이어의 앞부분에 집중했습니다. 0층 레이어, 1층 레이어, 2층 레이어 이렇게 앞부분 레이어만 남겨두고 MLP레이어를 제거한 Attention 전용 '장난감 모델'부터 분석했습니다. 이때 연구원들은 Attention 레이어에서 다음과 같은 요소들을 발견했습니다.
- 잔차 스트림 (Residual Stream) : 트랜스포머의 각 계층이 정보를 읽고 쓰는 선형적인 통신 채널로 이해하게 되는 스트림입니다.
- QK 회로 : 어느 위치의 토큰에 주의를 기울여 정보를 가져올지 정하는 회로입니다.
- OV 회로 : 주의를 기울인 토큰부터 어떤 정보를 가져와서 출력에 반영할지 결정하는 회로입니다.
- 인덕션 헤드 : 2층 레이어에서 나타나는 헤드이고 과거의 문맥에서 현재 토큰과 동일한 토큰을 찾은 뒤 그 다음에 왔던 토큰을 예측하고 복사하는 패턴을 보이는 퓨샷을 설명하는 가장 결정적인 요소입니다.
이제 개요는 이정도만 하고 본격적으로 동작 원리에 대해서 정리해보겠습니다.
QK 회로와 OV 회로
일반적으로 Attention 메커니즘은 Query, Key, Value를 사용해서 설명하지만 연구원들은 이를 두 개의 독립적인, 낮은 수준의 행렬로 결합해서 설명했습니다.
- QK 회로 : QK회로는 Query와 Key가 동작하는 회로이고 "어디서 정보를 가져올 것인가?"라는 물음에 답하는 회로입니다. 이 회로는 정보의 '이동 경로'를 결정합니다. 네트워크 통신에 비유하자면 현재 토큰이 과거 문맥 속에서 어떤 토큰에게 정보를 요청할지 IP주소를 찾는 과정과 같습니다.
- OV 회로 : OV회로는 Output과 Value가 동작하는 회로이고 "어떤 정보를 가져와서 어떻게 출력할 것인가?"라는 물음에 응답하는 회로입니다. 이 회로는 이동할 정보의 '내용'을 결정합니다. QK회로가 통신 채널을 열어주면 OV회로는 그 채널을 통해 어떤 데이터를 전달하여 최종 예측 값을 바꿀 것인지 결정합니다.
이 두 회로가 결합되면, 1층 트랜스포머 모델의 각 Attention 헤드는 특정 형태로 구현되는데 예를 들어서 keep in mind 처럼 keep 이라는 단어를 봤을 때 현재 단어가 in 이라면 다음 단어로 mind를 출력하도록 하는 거대학 통계적 룩업 테이블처럼 작동합니다.
K-결합
0층 레이어와 1층 레이어에서 각 회로들이 생성되고 결합하면서 2층 레이어에서는 K와 V가 서로 결합하면서 퓨샷의 전체적인 그림이 완성됩니다.
2층 레이어에서 인덕션 헤드는 1층 레이어에서 '결합'이라는 현상이 발생하면서 이전 층의 출력이 다음 층의 입력으로 이어지고 훨씬 복잡한 알고리즘이 구현됩니다.
우선 K-결합의 공학적인 의미는 다음과 같습니다. 토큰 ABC가 있다고 가정하다면 (e.g. keep in mind) 현재 토큰인 B가 이전 토큰인 A의 정보로 덮어 띄워져 있다는 것입니다.
이를 조금 더 풀어서 이야기하면 현재 토큰이 A일 때, QK회로는 과거의 A를 찾는게 아니라 과거의 A 바로 다음에 있던 B의 위치를 완벽하게 찾아내어 그 정보를 복사해올 수 있다는 의미입니다.
이것을 쉬운 예시로 알기 쉽게 서술해보겠습니다. 예를 들어서 이전에 '해리 포터'라는 단어가 있었고 현재 토큰이 '해리'를 출력하려고 한다면 이전에 있었던 '해리'를 보는게 아니라 이미 이전 '해리'와 연결된 '포터'를 바라보고 있어서 '해리'를 출력함과 동시에 '포터'를 출력할 수 밖에 없다는 의미입니다.
즉, 만약 '해리 포터'라는 단어가 언제 한번쯤 등장했다면 다음 '해리'를 출력할 때 '포터'도 줄줄이 사탕처럼 저절로 따라 나오게 되는 효과가 생기며 "해리가 등장하면 다음은 포터일 확률이 높아!"라는 패턴을 인식하게 되는 것입니다.
V-결합
1층의 Attention 헤드의 출력이 2층의 Attention 헤드로 얽혀 들어가는 현상이 바로 V-결합인데 Attention 패턴 행렬끼리 곱해지고 OV 행렬끼리 곱해지는 것이 수학적인 의미이고, 공학적인 의미는 두 개의 Attention 헤드가 마치 컨베이어 벨트처럼 정보를 두 번 이동시키면서 물리적으로는 두 개의 헤드이지만 수학적으로는 완전히 새로운 기능을 하는 하나의 '가상 헤드'가 탄생하는 것과 같습니다. 그래서 V-결합을 '가상 어텐션 헤드'라고 부르기도 합니다.
V-결합을 예로 들어서 쉽게 서술하자면, "현재 문장의 시작 부분으로 이동해!"라고 가리키는 헤드와 "주어로 이동해!"라는 헤드 두개가 V-결합을 하면 "이전 문장의 주어를 찾아 그 정보를 현재로 가져와라"라는 고차원적인 문법적 추론을 수행할 수 있게 되는 것이죠.
K-결합이 이전 토큰의 패턴을 읽고 현재로 적용해 다음 토큰을 예측하는데에 쓰인다면 V-결합은 헤드들이 서로 정보를 주고 받으면서 단일 헤드로는 불가능한 복잡하고 먼 거리의 정보 처리를 가능하게 만드는 메커니즘입니다.
Few Shot의 증명
이것이 퓨샷의 기본적인 골자이지만 그래서 인덕션 헤드가 퓨샷의 증명이 될 수는 없었습니다. 이건 이론일 뿐 실제 적용해서 증명이 되어야 그것이 곧 퓨샷의 동작 원리로서 설명할 수 있었으니까요. 때문에, 연구원들은 재밌는 가설을 세웠습니다.
인덕션 헤드는 모델의 크기가 작던 크던간에 2층 레이어에서 발현된다는 것을 이미 발견한 연구원들은 0층 레이어에선 인덕션 헤드가 없으므로 일반적인 0층 레이어에선 모델이 문제를 파악하지 못한다는 사실도 발견했습니다.
"그럼 인덕션 헤드만 똑 떼내어 0층 레이어에 가져다 놓는다면 어떻게 될까?"가 궁금했던 연구원들은 실험을 진행했고 놀라운 결과를 보여줬습니다.
0층 레이어에만 존재하는 단순 레이어에서 모델이 패턴을 학습하는 현상이 발생한 것입니다. 이로써 연구원들은 '인덕션 헤드'가 Few Shot Learning을 일으키는 주된 요소라고 판단하게 되었고 이를 논문에 작성하게 되었습니다.
마치며
이번 포스팅에서는 퓨샷에 대해 깊이있게 공부해보고 이를 정리해보는 시간을 가졌습니다. 기계론적 해석학이라.. 정말 이름부터 제 가슴을 뛰게하는 무언가가 있네요. 어릴 때 항상 기계의 동작 원리가 궁금했던 저는 커서 AI의 동작 원리 공부에 눈을 떠 재밌게 공부하고 있습니다.
최근 아는 개발자 분들과 작게 모임을 가졌는데 한 2~3년 정도 저를 옆에서 바라보고 있었던 개발자 분들이 "너는 진짜 연구원 재질이다"라는 얘기를 할 정도가 되었는데 속으로 '그렇게 별난가..?' 싶어서 조금 어리둥절 했었습니다.
여러분 중에서도 혹시 기계론적 해석학에 관심이 있으시다면 '크리스 올라'의 블로그를 적극 추천드립니다!
오늘은 여기서 마무리 짓고 다음 포스팅으로 찾아뵙겠습니다. 오늘 하루도 고생하셨습니다! 다음 포스팅에서 뵈어요!
'AI Engineering > 기계론적 해석' 카테고리의 다른 글
| LLM한테 페르소나를 적용하면 어떻게 이를 수행하는걸까? (0) | 2026.01.24 |
|---|