🐰 Dongyoung:
GPT에게 기억이란 무엇인가?🦄 ChatGPT:
AI 언어 모델인 GPT(Generative Pre-trained Transformer)는 메모리에 크게 의존하여 수신되는 입력과 일관되고 관련된 텍스트를 생성합니다.GPT에는 " 모델이 입력 텍스트의 이전 단어 또는 문장에서 중요한 정보를 기억할 수 있도록 하는 주의 메커니즘"입니다. 이 메커니즘을 통해 GPT는 입력의 특정 부분에 주의를 기울이고 텍스트 컨텍스트에 대한 각 단어 또는 구의 관련성을 결정할 수 있습니다.
또한 GPT에는 사전 언어의 패턴과 관계를 캡처하는 수십억 개의 매개변수로 구성된 학습된 언어 모델입니다. 이 메모리를 통해 GPT는 문맥상 적절하고 구문적으로 올바른 텍스트를 생성할 수 있습니다.
요약하면 메모리는 모델이 입력에서 관련 정보를 기억할 수 있도록 하여 고품질 텍스트를 생성하는 GPT 기능의 중요한 구성 요소입니다. 텍스트를 입력하고 선행 학습된 언어 모델을 활용하여 일관되고 상황에 맞는 응답을 생성합니다.
🐰 Dongyoung:
그렇다면 네가 기억하는것은 사실인가? 거짓인가?🦄 ChatGPT:
AI 언어 모델로서 개인적인 신념이나 경험이 없기 때문에 인간이 기억하는 방식으로 사물을 기억하지 못합니다. 대신 훈련 과정에서 기억에 입력된 내용을 기반으로 정보를 기억합니다.훈련 중에 책, 기사, 웹사이트 등 다양한 출처에서 방대한 양의 텍스트 데이터를 받았습니다. . 이 입력을 기반으로 단어와 구문 사이의 패턴, 관계 및 연관성을 인식하는 방법을 배웠고 수신한 입력을 기반으로 일관되고 상황에 맞는 응답을 생성할 수 있습니다.
하지만 유의해야 할 사항이 있습니다. 내가 제공하는 정보의 정확성은 전적으로 내가 받는 입력의 정확성과 완전성에 달려 있습니다. 입력 내용에 오류나 잘못된 정보가 포함된 경우 내 답변에도 부정확성이나 거짓이 포함될 수 있습니다. 따라서 내가 제공한 정보를 확인하고 이를 기반으로 결정을 내릴 때 비판적 사고를 사용하는 것이 항상 중요합니다.
앞선 두 post 에서 OpenAI 의 api를 이용한 fine-tuning 방법에 대해 살펴보았습니다.
다만 이렇게 해놓고 보면 생각보단 그 답변의 퀄리티라던지, 결과가 chatGPT 의 그것만큼 만족스럽지는 않은것 같습니다. 그리고 대체 이 fine tuning 은 무엇을 하는것인지에 대한 의문도 생깁니다.
OpenAI 에서는 fine-tuning 의 목적을 크게 두가지 정도로 이야기 합니다. (https://platform.openai.com/docs/guides/fine-tuning/introduction)
그리고 이를 가능케 하는건 few-shot learning 을 통해서라고 하며 의도를 직관적으로 파악해서 그럴듯한 답변을 만들수 있다고 설명합니다 (it can often intuit what task you are trying to perform and generate a plausible completion).
다만 GPT-3 논문 (https://arxiv.org/abs/2005.14165) 에서 설명되어 있듯 few-shot learning 과 fine-tuning 은 전혀 다른 작업이고, OpenAI 의 그것이 어떤작업을 하는것인지? 에 대해 공개된 내용은 찾지 못하였습니다. 이에 GPT 의 사용에 있어 기억력(memory) 와 fine-tuning 에 대해 조사해보고자 합니다. 본 article 은 기억에 대한 내용 입니다.
뉴런을 모사한 인공뉴런으로 구성된 딥러닝 모델에 있어서의 "기억" 은, 어쩌면 인간의 뇌에서 기억하는것보다도 더 추상적일지도 모르겠습니다. 인간의 기억과 딥러닝의 기억을 비교해서 주관적으로 해석해본다면 다음과 같습니다.
생물학 텍스트북에서 인간의 장기기억은 인간의 뇌 안쪽에 있는 "해마(hippocampus)" 를 통해 생성되는것으로 설명합니다. 전두엽 피질의 신호들을 단기기억으로 형성하고, 단기 기억적 신호들이 해마를 통해 장기기억으로 변환되어 저장된다는 것입니다. 해마가 손상되면 "기억" 에 문제가 생기는데, 해마가 손상되어 오는 치매, 음주로 인해 해마가 정지되어 생기는 black out 등이 그 예 입니다.
다만 위의 내용은 기억의 "생성"에 대한 것이며, 기억의 "회상"하는 방식에 대해서는 생물학 텍스트북 수준에서는 설명하지 못합니다. 다만 어떤 형식이든 전두엽 피질에 장기기억의 형태로 저장된 무언가를 어떤 방식으로 연결시켜 기억해내고, 기억해낸 정보들을 인간이 가진 각 기관 - 근육, 시각, 청각 등, 에 맞게 변환하여 느껴지게 한다는것입니다. 연상의 과정에서도 해마가 activation 되며 메모리 맵으로의 역활을 할수도 있다는 의견도 있습니다 (Eichenbaum, H., Dudchenko, P., Wood, E., Shapiro, M., & Tanila, H. (1999). The Hippocampus, Memory, and Place Cells. Neuron, 23(2), 209–226. https://doi.org/10.1016/S0896-6273(00)80773-4). 생물 기계적 해석 외에도, 심리학적으로 발견된 내용중 기억을 생성함에 있어 컴퓨터의 "memory" 처럼 직접적으로 꺼내 쓰는 방식이 아닌 "연상" 또는 "점화(priming)" 을 통해 "생성" 되는것으로 설명하기도 합니다.
이를 보면 사람의 뇌는 명시적인 메모리 구조를 가진다고 보기 어려운것 같습니다. 해마를 통한 장기 기억과 단기 기억은 구분되며 메모리 라우터로서 역활을 할수는 있으나, 장기든 단기든 기억된 내용은 명시적 기억 저장소와 다르게 잊혀질수 있습니다. 또한 기억을 회상 및 생성을 통해 출력이며, 기억의 내용이 사실일 지라도 이는 면밀히 "명시적 사실" 과는 다르다 생각합니다.
일반적으로 딥러닝 모델에서의 기억은 parametric memory 라고 불리며 이는 weight 와 bias 에 저장되는 값을 기반으로 합니다. 다만 딥러닝 모델의 구조에 따라 명시적 기억형태가 존재합니다.
"장기 기억"을 딥러닝구조에 녹여내기 위한 노력들이 있었습니다. LSTM(long short term memory) 의 경우 RNN 의 단기기억력을 선택적으로 늘이기위해 cell state 개념을 도입해 기억을 보존하려 하였으며, 2014년 딥마인드의 Neural Turing Machines (NTM) 논문을 통해 명시적 기억공간이 구체화 되었습니다. 이는 명시적인 메모리를 두고 이에 대한 입출력을 뉴럴넷으로 구성한 컨트롤러를 통해 수행하는것으로, 인간의 뇌 보다는 컴퓨터의 메모리 구조와 유사합니다 (https://www.deepmind.com/publications/neural-turing-machines). 이후 Differentiable Neural Computers (DNC) 의 다양한 mapping 방법들이 제안되었습니다.
GPT 는 transformer decoder 로 그 구조상 명시적인 메모리는 존재하지 않습니다. 또한 인간의 해마나 NTM 의 컨트롤러와 같은 별도의 메모리 라우팅을 제공하는 모듈도 없습니다. GPT가 생성하는 데이터가 기억에 의존적인가에 대한 간접적 실험을 GPT-3 논문에서 수행하였으며, 이는 테스트에 대해 테스트 데이터가 그 학습 데이터에 포함된 경우와 아닌경우 모두에 한해서 그 결과가 다르지 않음을 보여주었습니다 (아래 그림 참조). GPT-3 의 파라메터수가 1750억개이나 그 데이터가 45TB 이기에 over-fitting 할수 없다라는 의견도 있습니다.
즉 GPT-3 에서의 기억은 parametric memory 형태의 기억만을 기대할 수 있으며, 이는 inference 라는 회상의 과정을 통해 생성되어지는 형태 입니다. 이러한 GPT 의 특성에 따라 GPT 로 부터 기억하게 하는 다음의 두가지 접근방법이 나타나고 있는것 같습니다.
ChatGPT 가 화재가 되면서 Prompt engineering 에 대한 다양한 내용들이 인터넷이 공유되고 있습니다 (https://github.com/dair-ai/Prompt-Engineering-Guide). 프롬프트 엔지니어링은 같은 내용이라도 다른 방식으로 프롬프트를 작성하면 더 좋은 결과물이 나온다 라는 것으로 GPT 의 성능을 끌어올리기위한 중요한 기술입니다. 이 프롬프트 엔지니어링의 효과는 상상이상으로, 단순 채팅으로 사용하는 유저부터 사업계획서를 만들어주는 서비스까지, 하나의 GPT 모델에서부터 프롬프트 엔지니어링을 통해 수행가능한 그 역량의 차이는 어마어마하기에, ChatGPT 사용 팁 정도로 흘러 넘길 내용은 아닙니다 (White, J., Fu, Q., Hays, S., Sandborn, M., Olea, C., Gilbert, H., Elnashar, A., Spencer-Smith, J., & Schmidt, D. C. (2023). A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT. https://doi.org/10.48550/arxiv.2302.11382).
기억 관점에서 prompt engineering 은, 수많은 데이터를 학습한 초거대 모델의 인공뉴런 어딘가에 기억되어있을 내용을 마법처럼 회상시킬수 있는 방법론일것 같습니다. 우리가 어떤 뉴런에 어떤 기억을 어떻게 불러낼지 정할수는 없어도, 사람의 뇌와 같이 기억할수 있도록 유도하는 심리학적 방법인 연상, 점화 등과 프롬프트 엔지니어링이 상당히 align 되어 있음을 볼수 있습니다. 예를 들면 프롬프트 엔지니어링의 방법중 하나로, 답을 얻고자 하는 연관된 내용을 함께 상세하는 것은, 심리학에서의 priming effect나 연상효과와 유사한 접근법입니다.
parametric memory 는 모델의 뉴런에 각인된 기억을 기반으로 생성는것으로, 그 내용이 사실임을 확정하기는 어려울 것 같습니다. 즉 GPT의 성능에 어찌되었던 이를 정보 검색이나 기업 챗봇으로 활용하기에는 주의가 필요합니다 (수많은 GPT 거짓말에 대한 뉴스와 유튜브들은 이를 반증합니다). parametric memory 에 의존하기 보단 non-parametric memory 를 사용하여 GPT 를 검색이나 챗봇에 활용하고자 하는 다양한 시도가 있으며, bing 에 들어간 WebGPT, deepmind 의 RETRO, Meta의 blenderbot 등이 있습니다.
GPT 와 같은 생성모델에서의 non-parametric memory 의 사용 방법은 다음과 같습니다. 우선 기억이 존재하는 명시적 메모리가 있다고 가정합니다. 그리고 이러한 명시적 메모리로부터 프롬프트에 대한 답변을 포함하는 데이터를 추출할 수 있다고 가정합니다. 이에 prompt 및 그에 대한 관련 정보(non-parametric memory)를 생성모델에 주고 해당 조건 하에 답변을 생성하게 한다면 parametric memory 보다 그 정확도가 높을것입니다. 여기서 명시적 메모리는 인터넷 또는 별도의 데이터베이스가 될 수 있고, 데이터의 추출은 검색엔진 또는 별도의 데이터베이스 검색 (sementic search) 등이 될 수 있습니다. 효과적인 non-parametric memory 사용에 대한 연구 또한 진행되고 있습니다. (Mallen, A., Asai, A., Zhong, V., Das, R., Hajishirzi, H., & Khashabi, D. (2022). When Not to Trust Language Models: Investigating Effectiveness and Limitations of Parametric and Non-Parametric Memories. https://doi.org/10.48550/arxiv.2212.10511)
parametric memory 의 위험성과, non-parametric memory 의 효과를 모델에 녹여내기 위한 방법론들도 제시되었으며, memory transformer 와 같은 모델이 제시되었습니다. 이는 transformer 내에 key-value 형태의 메모리 및 이를 search 하기위한 layer / machanism 을 함께 두고 training 함으로 long-term 기억을 할수 있도록 합니다 (Burtsev, M. S., Kuratov, Y., Peganov, A., & Sapunov, G. v. (2020). Memory Transformer. https://doi.org/10.48550/arxiv.2006.11527). 소규모 모델에서는 그 효과성이 입증되었으나, memory 를 위한 layer 또한 학습과정에서 생성되는 parametric memory 라는 한계는 여전히 존재하는것 같으며, 여기서 목표로 하는 GPT fine-tuning 을 통해 할수 있는 내용은 아닙니다.
이렇게 보면 GPT 를 내가 의도하는대로 움직이는데 있어 non-parametric memory 를 사용해야 할것만 같습니다. 하지만 효과적으로, 원하는대로 문장을 생성하는 방법에 있어서는 non-paramaetric memorty 와 parametric memory 를 모두 사용해야 하며, parametric memory 를 의도된 방향으로 이끌어내는 fine-tuning 과정이 필요합니다. 이에 다음 포스트에서는 fine-tuning 에 대한 이야기를 해보고자 합니다.