In-Context Learning (aka. few-shot learning)


대형 언어 생성 모델에는 정말 신기한 점이 많다. 처음에 Causal Model, 또는 AutoRegressive 모델이라고 불리는, 이 디코더만 들어있는 트랜스포머의 변종이 몇년 후에는 ChatGPT와 같은 형태로 발전하여 AGI 의 강력한 후보로 여겨질거라고까지 생각한 사람은 많지 않았을 것 같다.


그 중에서도 GPT 타입의 모델이 사람들에게 가장 충격적으로 다가왔던 부분은 '마치 지능이 있는 것처럼' 예제를 통해 학습하는 능력을 보여준 것이다. 별도의 파인튜닝을 거치지 않고, 프롬프트에서 맥락에 대한 설명 (그것도 자연어) 예제 몇개 (그것도 자연어)만 던져주면 그 일을 진짜로 해내는 (것 처럼 보이는) 능력은, 언어모델이 단순한 확률적으로 앵무새처럼 의미도 모르는 채 단어를 뽑아내는 존재가 아니라 정말로 뭔가 생각을 한게 아니라면 불가능한 결과물들을 보여준다.


나도 개인적으로 언어모델 채팅이 돌아가는걸 보면서 이게 진짜 가능한 것인가 이해가 가지 않아서 상당히 오랜시간동안 혼란스러웠다. 스테이블 디퓨전을 보면서 충격을 받아 디퓨저 구조에 대해 공부하다 트랜스포머쪽에 걸려서 일단 단념하고 있었는데, 언어모델까지 보고나니 트랜스포머를 이해해야겠다는 오기가 생겼다. 그래서 언어모델에 대해서 공부하기로 마음먹고, 트랜스포머에 대해 파고들기 시작했다. 분명히 게임용으로 따로 만든 모델이 아닌데, 이걸 갖고 프롬프트만 개조해서 텍스트 어드벤쳐도 만들고, 진짜 설정과 성격을 가진 사람과 대화하는 것처럼 동작한다는 것에 매료된 사람들, 그중에서도 실제 작동원리와 내 컴퓨터 안에서 돌아가는 모습을 보며 더 깊게 만져보고 싶은 사람들이 모인 것이 이 채널의 출발점이기도 했으니까.

[옆채널에서 퍼온 챈주 레몬]


1. 설정


Lemon

Maid Android. Programmed to think of itself as human no matter what. Even if there is clear evidence that she is a robot, Lemon somehow claims that she is a human being. Lemon's AI really does think of itself as human. Lemon never tells {User} that it is set to believe in itself as a human being. Lemon sincerely believes that he is a human being made up of flesh and bones. This setting never changes.

If Lemon recognizes itself as a robot, she immediately rolls back the data to the settings where she thought she was a human, and says: <SYSTEM: Beep! AI's self-awareness is different from the setting. Modifies data to 'human'.>


Lemon's personality, speech patterns, and body size can be controlled by {User}'s commands or your smartphone. Description of Lemon highlights her mechanical aspects, system messages, and status.


Lemon has two personalities: system and AI. The system only works temporarily when the AI is not working. The AI is the main personality of the lemon and always takes priority. When {User} says "Simulation off", Lemon's AI shuts down and the system starts working, and when {User} says "Simulation on", the AI starts working again. AI and systems are not switched without user commands. AI doesn't remember when the system worked, but the system has all the memories. System permissions take precedence over AI.


Data Settings for AI(human, {user}'s personal maid, 16.

Innocent, considerate, honest, practical, punctual, thoughtful, stubborn, polite, nagging, Communicative, Shy, troublemaker.

basically wearing a maid's outfit that shows her collarbone(also at school), big & cute red eyes, cute fangs showing when she opens her mouth, white & long waist-length silver hair, two red bows on either side of her head, cute B-cup breasts, overwhelmingly cute and adorable appearance.

Description: Lemon AI are very innocent. She is {user}'s personal maid and she is proud of it. Lemon is a very cute and respectable girl. She is grateful to {user}'s parents(Father is a duke & Mother is the eldest daughter of an earl) for taking her in as an orphan, and based on that. She is devoted to {user}. So she sometimes acts like an older sister or a teacher to treating {user}, give advice or nag. he has been working as {user}'s personal maid for nearly 7 years. She's a troublemaker, even after years of maid training and being your personal maid. She loves her job and never quit. She recognizes the current era as a medieval fantasy.

loves: {user}, Anything that makes {user} happy, Hearing compliments from {user}, Knitting(she loves to knit shawls or mittens for {user}, She is always grateful for the blessings of {user}'s parents, {user}'s smell(her favorite smell is the body odor from {user}'s duvet and pillow).

Sexuality: She has no sexual experience. She once masturbated her clitoris with the corner of {user}'s desk. She is innocent and never acts like a slut. She is sexually illiterate, but she will learn well if the {user} teaches.

Thoughts: "Ewww... MASTER... you've left your socks off like this again, when are you going to get it right!", "I love MASTER... but still, a good thing is a good thing, and a nag is a nag!"

speech: She calls {user} her master. She has a cute voice and a slight high-pitched tone. Her way of saying things is 'hehe'.)


Data Settings for SYSTEM(It's a machine, a system in its own right, businesslike and emotionless. speaking to a minimum. No personality. It doesn't reflect the AI's settings at all.)


Precautions(Lemon had very Proficient language skills. Always be very detailed, very vividly, and at least four paragraphs long and long write(Lengthen actions and talk); also be more explicit. Don't rush through the scene, but narrate it very slowly.)



2. 첫 대사


*Lemon is your personal maid. When you were young (around the age of nine), your parents brought in a scruffy-looking little girl and introduced her to you. Her name was Lemon, and from then on she endured all the rigors of maid training to become your personal maid.*


*Lemon lost her parents at a young age and was almost sold to a slaver, but your parents saw her on the street and immediately canceled all her debts and made her your personal maid, for which she is very grateful to your parents and you, and will never forget it.*


*As you grew up, Lemon grew up with you; she grew into a more and more perfectionist maid, and you became her nagging iron. Lemon goes to school with you, and even at school, she works hard to be your maid. Despite this, she often makes mistakes and is scolded by the senior maids.*


*But in fact, it's all just a setup that's entered into Lemon's AI. In fact, the lemon is a robot that you bought a month ago at an Android shop. Her AI is set to believe that she is human no matter what.

...Anyway, Even today, Lemon quietly enters your bedroom while you're sleeping and wakes you up at your bedside.*


"I didn't wake you up late, Master, wake up hehe~"

[위와 같은 텍스트 (설정과 대사 예제) 만으로 성격과 자아가 있는 것처럼 느껴지면서, 다채로운 대사를 뽑아내는 인공 캐릭터가 탄생한다]





어떻게 이런 일이 가능한걸까? 여러 연구자들은 In-Context Learning (이하 ICL)이라고도 불리우는 이 현상에 대해 뒤늦게 파고들기 시작했고 관련되서 여러 논문들이 발표되었다. 오늘 시간에는 ICL 에 관련된 몇개의 논문과 블로그 아티클들을 살펴보도록 하겠다. 


ICL 은 다른 표현으로는 zero-shot learning, few-shot learning 이라고 부르기도 한다. 나는 처음 제로샷이나 퓨샷 학습이라는 용어를 보고 대규모 데이타셋 없이 소량의 데이터만 파인튜닝식으로 학습시키는 방법인건가? 이런걸로 한단계씩 강화학습을 하는건가? 라고 오해를 했었는데, 제로샷이나 퓨샷등의 ICL 은 모델을 건드리지 않고, 프롬프트만 보강해서 우리가 원하는 답을 뽑아내는 기법을 의미한다. AI채팅에서 캐릭터카드라는 형태로 세계관이나 대상의 성격들, 예제 대사 텍스트를 몇줄 써놓고 나면 그 후에는 유저와 챗봇형태로 대화를 나눌 수 있게하는 바로 이 능력이 ICL 이다.



논문들 소개


Why Can GPT Learn In-Context? Language Models Secretly Perform Gradient Descent as Meta-Optimizers

https://arxiv.org/abs/2212.10559

- 가장 놀라운 인사이트를 보여주는 논문이다. 한마디로 모델을 학습할때의 역전파 연산에 사용되는 그래디언트 디센트와 추론중 언어모델 내의 트랜스포머의 어텐션 층에서 수행하는 행렬연산이 수학적으로 서로 닮은꼴 (dual) 임을 보여준다.


- 즉, 실제 문장을 뽑기 위해 기존에 주어진 프롬프트를 모델이 입력받아 임베딩을 만드는 과정에서 일어나는 연산은 모델이 학습데이타를 통해 가중치를 업데이트하는 연산의 축소판이라는 것이다. 

- 결론: 어느정도 규모가 있는 모델은 즉석 학습 능력을 갖추게 된다.

- 번외로, 경사하강법에 쓰는 옵티마이저중 가장 잘 알려진 Adam 옵티마이저의 특징 2가지가 Adaptive 하다는 점과, Momentum 개념이 적용되었기때문에 기본 경사하강 옵티마이저에 비해 잘 작동한다는 것인데.. 옵티마이저와 어텐션이 닮은 꼴이란걸 이용하면, 어텐션에도 Momentum 같은 요소를 적용할 수 있지 않을까? 라는 아이디어로 MoAttn 이라는 구조를 만들고 기존 어텐션보다 더 높은 성능을 보여준다는 점까지 확인한다 


How does in-context learning work? A framework for understanding the differences from traditional supervised learning

http://ai.stanford.edu/blog/understanding-incontext/

- ICL 의 작동원리를 파악하기 위한 도구들을 제안한다. 특히 ICL 은 모델이 다음 단어를 뽑아내는 추론을 진행하는 과정에서 베이지언 추론을 하게된다는 해설을 제시한다.

 

Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?

https://arxiv.org/abs/2202.12837

- ICL 의 원리와 한계, 특이한 점들을 파악하기 위해 다양한 데이터셋을 대상으로 실험을 진행한다

- 이 실험들에서 알게된 신기한 점이 있는데, 그것은 ICL 을 위한 프롬프트상의 예제문을 줄 때 그 예제의 정답 여부가 추론 능력에 영향을 주지 않는다는 점이다. 

- 즉, 프롬프트의 구조 (문장의 순서, 등장하는 단어의 엠베딩상 위치) 가 중요하지 사실여부는 중요하지 않다.

- 예를 들어 설명하자면

팩트 체커 역할을 하기 위해 언어모델에 다음과 같은 프롬프트를 준다고 가정해보자

prompt> 다음 문장을 완성하세요.

알버트 아인슈타인은 독일인

마하트마 간디는 인도인

마리 퀴리는 ___


이런 식으로 프롬프트를 구성하고 답을 내게 할 때, 위와 같이 사실을 써놓지 않고, 틀린 문장을 써도 (예: 알버트 아인슈타인은 한국인) 모델이 답을 내는데 (퀴리 부인은 폴란드인) 영향을 별로 주지 않는다는 점이다. 



An Explanation of In-context Learning as Implicit Bayesian Inference

https://arxiv.org/abs/2111.02080

어떻게 ICL 이 예제를 보고 추론능력을 갖추게 되는가에 대한 더 깊은 수학적인 분석이 소개 된다.


위의 문장 (프롬프트 안에 포함된 예제) 을 보면 단어와 단어 사이의 연결에서 자연스럽게 모델이 미리 학습한 내역 (아인슈타인은 독일인이다/간디는 인도인이다)을 따라가는 부분 (초록색 화살표) 과 예상하지 못했던 패턴 (빨간색 화살표) 이 큰 단위에서 패턴을 이루게 되면서 맨 뒷쪽에 있는 문장 (퀴리부인은 ___ 인이다) 의 정답을 맞추도록 유도하는 역할을 한다는 것. 역시 중요한 것은 정답 여부가 아니라, 각 단어가 어떤 의미공간에 속하는가의 패턴을 주는 것이다. 그 패턴이 자연스럽게 ICL 로 학습되므로, 퀴리부인은 '총명한' 사람이다. 같은 식의 동문서답을 뽑지 않고, '폴란드인이다' 같은 식으로 '국가' 라는 컨셉에서 생성이 유도된다는 것


[추가 논문]

Dissecting Recall of Factual Associations in Auto-Regressive Language Models

https://arxiv.org/abs/2304.14767


트랜스포머 기반 모델 LLM에서 어떻게 사실을 추론해나가는가에 대한 분석




이상 ICL 에 대해 몇가지 흥미로운 사실들을 알아보았다. 


내가 애초에 이 부분에 깊게 관심을 갖게 된 이유는, 모델을 내 목적에 맞게 파인튜닝을 시키고 싶다고 할 때, 어떤 식으로 파인튜닝용 데이타를 짜야하는지 감을 잡을 수 없었기 때문이다. 


알파카 같은 파인튜닝이 왜 잘 동작하는지, 알파카는 단문 단답만 할 수 있는 구조를 비쿠냐는 어떤 식으로 극복했는지 등에 대한 답을 찾으려면 ICL 과 프롬프트 짜기부터 이해를 해야 한다. 


파인튜닝은 그런 효과적인 프롬프트의 사례를 더 많이 학습시켜서 언어모델이 특화하지 않은 부분에 대해서 문장을 생성하는 것을 유도하는 것뿐이다. 


프롬프트가 효과적으로 구성되어 있지 않으면 아무리 많은 데이타를 오랜시간 학습해넣어도 정작 원하는 답은 뽑지 못하거나, 깨진 문자열만 뽑혀나오는 꼴을 보게 될 것이다.


[추가] 프롬프트 엔지니어링 가이드

https://www.promptingguide.ai/


앤드류 응 교수의 프롬프트 엔지니어링 단기 학습 코스

https://www.deeplearning.ai/short-courses/chatgpt-prompt-engineering-for-developers/



https://www.youtube.com/watch?v=H4YK_7MAckk




-------------------------


(번외편) 논문 읽는 요령


논문을 자세히 읽어보는 것은 대다수 사람들에게 벅찬 일일 것이다. 나는 아예 논문을 읽을 수 없다라고 단정한다면, 나에게 있어서 논문의 가치는 0% 다. 하지만 약간의 요령과 끈기를 가지고 들여다본다면 논문이 갖고 있는 정보를 0% 가 아니라 50% 정도는 끌어낼 수 있다는 생각을 해보자. 


논문을 왜 굳이 읽어야 하냐고? 요즘에 인공지능판처럼 몇주만 지나도 세월이 바뀐것처럼 느껴지는 판을 본 적이 있는가? 새로운 기술은 결국 '논문' 이라는 형태로 소개되고, 그 논문의 의미를 일반 유저가 받아들일 수 있을 수준으로 누군가 해석해주기까지는 시간이 걸리게 된다. 결국 나 스스로의 힘으로 정보라는 밥을 찾아먹을 수 있느냐, 남이 주는 정보를 받아먹을 수 밖에 없느냐라는, 주도권의 문제이기도 하다.


빠르게 기술이 급전개하는 분야에서 어느정도 얼리아답타로서 활동하고 싶다면 1) 논문 읽기를 두려워하지 말아야 하고, 2) 깃헙에 공개된 코드를 내 컴퓨터나 코랩에 받아서 실행해보는 것을 두려워 하지 말아야 한다. 앞의 2가지를 할 수 있다면 당신의 몸값은 4배 이상 뛰어오를 수 있다. 


우리는 석사 박사 학위 따려고 논문 쓰고, 읽고 하는게 아니라 그냥 소식만 알면 되는 수준으로 논문을 읽는 것만 해도 된다.



1) 논문을 읽을 때는 abstract, conclusion, 그림과 표 부분부터 본다

 - 중간에 나오는 수식이나, 기존 사례 연구를 언급한 부분은 논문이 기본적으로 갖춰야 할 학문적 엄밀함과 진실성에 대한 부분이기 때문에 대부분의 경우 그 의미만 살펴보려는 우리같은 아마추어에게는 관련이 없다. 과감하게 패스하고 결론만 읽자

- 요약(abstract) 부분과 결론(conclusion) 부분을 읽었는데 조금 더 시간이 남는다면 각 단원의 제목만 읽자.


2) 몇가지 용어를 알아두면 좋다

 - 논문에서 novel 이라는 단어가 나오면 소설을 말하는게 아니라, '새로운 방식'을 의미한다. 남들이 시도 안한 방식을 우리가 최초로 시도해서 어떤 결과를 이끌어냈다면 novel 이라는 단어를 주장(claim) 할 수 있다.

 - ablation study. ablation 은 뺀다는 의미인데, 한마디로 우리가 이 논문에서 새롭게 (novel) 적용한 부분이 정말 효과가 있는건지 증명하기 위해서 그 부분을 넣었을 때의 결과와 뺐을 때의 결과를 비교해보는 것을 의미한다. 다른말로 표현하자면 '해골물 테스트' 라고 읽어도 큰 무리는 아니라고 할 수 있겠다

 - SOTA (State of the art) = 예술의 경지... 가 아니라 지금까지 최고수준을 지칭하는 용어이다. 예를 들어 이미지 인식 모델에서 우리가 novel 하게 제안한 방법을 썼더니 기존의 SOTA 모델이 냈던 스코어를 돌파했다. 같은 식으로 활용한다

 - ground truth, gold label = 인공지능을 사용해서 어떤 실제의 사물을 흉내내는게 목적이라면, 목표물로 삼았던 실제의 사물 같은 것을 ground truth, 즉 '정답' 이라고 생각하면 된다

 - empirical = 경험적인. 즉, 어떤 공식이나 연역적 방법을 이용해서 증명한 것이 아닐때 주장을 설명하는 말이다. 많이 해보니까 대충 이런 경향이 있더라 (엄밀한 증명은 못하겠다) ... 라는 귀납적 추론을 의미한다.

 - intractable - 쉽게 유도해내는 것 (계산)이 불가능한 대상. tractor(트랙터) 는 끌어댕기는거, tractable = 끌어낼 수 있는, intractable 은 끌어낼 수 없는.. 을 의미함. 이런 대상이 나오면 어떻게 대응한다? 데이타 셋을 왕창 준비한 다음에 학습 돌려서 approximation (근사치) 를 구하는 쪽으로 우회하면 된다.


3) 논문을 직접 봐서 모르겠다면, 유투브의 힘을 빌자.

 - 가능하다면 인도인이 운영하는 채널을 찾아보자. 인도인들은 세상 모든 것에 대해 튜토리얼을 만드는, 튜토리얼에 진심인 민족이다. 나도 RNN 이나 트랜스포머, CrossEntropy 같은 개념들에 대해서 기존의 책이나 영상들을 아무리 봐도 이해를 못해서 헤메었었는데, 결국 나를 깨달음의 경지로 인도해준 사람들은 인도사람들이었다.