Intro
OpenAI를 기점으로 빅테크들은 자신들만의 거대 언어모델을 공개하고, 대화형 AI 관련 새로운 스타트업들이 여기저기 쏟아지기 시작했으며, GPU를 만드는 NVIDIA의 주가는 전세계 1위로 자리매김했습니다. 대화형 AI의 특징은 정말 사람처럼 대화가 가능하다는 점인데, 직접 사용해보면 이게 사람과 대화하는 게 아닐까 싶을 정도로 똑똑하게 묻는 말에 대답을 잘합니다.
2020년 OpenAI가 처음으로 chatGPT를 세상에 선보인 시점부터 지금까지 약 4년간 엄청난 속도로 발전해왔습니다. 거대 언어모델은 빠른 속도로 우리의 일상에 침투하고 있습니다. 이 글에서는 언어모델이 어떤 식으로 발전하고 있는지 알아볼 예정입니다.
LLM
Transformer의 등장과 컴퓨팅 연산의 발전 덕분에 서비스 상용화가 가능해졌습니다. GPT3를 기점으로 Google의 Bard, Gemini, Meta의 LLaMa, Anthropic의 Claude 등 다양한 거대언어 모델들이 등장했고, 앞다퉈 자신들의 모델들이 얼마나 성능적으로 우수한지 경쟁하기 시작했습니다.
여러 리더보드들이 만들어져 경쟁과 지식 공유의 장이 열렸고, 몇몇 회사들이 자신들의 모델을 오픈소스 모델로 공개하면서 더 빠른 발전이 이뤄질 수 있는 환경이 조성되었습니다.
그런데 초거대언어모델에는 몇 가지 치명적인 단점이 존재합니다. 그 중 하나는 학습되지 않은 정보에 대해서는 정확한 답변을 내놓지 못한다는 점입니다. 정확한 답변이 불가능한 경우, 모델이 답변이 불가능하다는 답변을 내놓으면 차라리 다행이지만, 확률적으로 가장 답변에 가깝다고 생각되는 오답을 늘어놓게 되는 경우도 발생합니다(언어모델이 사실이 아닌 정보를 사실인 것처럼 대답하는 현상을 hallucination이라고 합니다).
학습된 데이터 범위 밖의 질문이 들어왔을 때, 대응하는 방법은 두 가지로 나뉠 수 있습니다. 해당 언어 모델의 목적 또는 정보 제공 범위를 벗어난 질문이라고 인식하고 대답할 수 없다고 대응하거나, 아니면 새로운 데이터를 모델에 주입하는 방법입니다. 가장 먼저 생각해볼 수 있는 방법은 모델을 재학습하는 방법입니다. 매번 새롭게 업데이트되는 내용에 대해 매번 재학습한다는 것은 불가능에 가깝습니다.(1024개의 V100 GPU로 1750억 개의 파라미터를 가진 GPT3를 (570GB의 학습데이터) 학습시켰을 때, 약 34일 정도 걸렸고, 비용은 460만 달러정도 들었다고 합니다. 참조) 좀 더 학습 효율을 개선하기 위해 PEFT, QLoRA와 같은 방법이 존재하지만,이보다 먼저 데이터 주입을 위해 고려해볼 수 있는 방법이 있습니다. 바로 RAG입니다.
RAG
거대 언어 모델은 학습된 데이터를 기반으로 질문을 수치화하고, 다음 단어가 무엇이 올지(질문에 대한 답변) 확률적으로 예측합니다. 만약 학습된 데이터 중에 인풋을 처리하기 위해 참고할 데이터가 없다면, 그나마 가장 확률이 높은 정답을 내놓게 되면서 잘못된 정보 제공으로 이어집니다. 이를 해결하기 위해 RAG는 언어 모델이 참고할 수 있는 추가적인 맥락을 더 제공합니다. RAG란 용어는 2021년에 나온 Patrick Lewis의 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 논문에서 처음 사용되었는데, 검색 증강을 통한 생성이라고 해석할 수 있습니다.
동작방식을 살펴보면, 모델 엔진에 검색이 가능한 정보 테이블이 제공됩니다. 언어모델은 이 정보 테이블을 자기 나름대로의 해석을 통해 파악합니다(Embedding). 그리고 질문이 들어왔을 때, 답변을 도출하는 과정에서 이 정보테이블을 참고(look-up)합니다. 기존의 언어모델이 답변 도출을 위해 모델 자체의 웨이트만 사용했다면, 이제 외부의 소스를 활용하게 되었다고 할 수 있습니다. 이를 통해, 오늘 있었던 뉴스 말뭉치를 언어모델에 넘겨주면, 학습되지 않은 '오늘의 뉴스'에 대해서도 설명할 수 있게 됩니다.
RAG의 가장 큰 장점은 학습된 데이터 이외의 정보들을 적은 코스트로 모델에 주입할 수 있다는 점입니다. RAG는 LangChain 프레임워크와 정보테이블의 역할을 하는 Chroma, PineCone, Milvus와 같은 벡터 데이터베이스를 통해 구현할 수 있습니다. 거대언어모델을 활용하고 싶지만, 직접 학습하거나 fine-tuning하기 힘든 개인이나 회사들이 고려할 수 있는 가장 현실적이고 효과적인 접근방법이라고 할 수 있습니다.
Agent
우리는 외부 소스를 언어 모델에 장착시킴으로써 학습된 데이터 이외에는 답변이 어려운 언어 모델의 단점을 극복할 수 있다는 걸 알게 되었습니다. 그리고 언어모델은 어느정도 논리적인 사고 과정이 가능합니다. 그렇다면 언어모델에 기억장치를 넘어서서 직접 액션을 취할 수 있는 권한을 주면 어떨까요? 이런 생각에서 나온 것이 에이전트입니다. RAG가 기억장치(정보 테이브)를 언어모델에 장착하는 일이라면, Agent는 언어모델에 팔다리를 붙여주는 일이라고 할 수 있을 것 같습니다.
에이전트의 활용방법은 정말 다양합니다. 검색엔진을 연동한다면, 언어모델이 필요한 정보가 무엇인지 파악하고 검색하여 답변할 수 있습니다. 캘린더 앱과 연동한다면, 캘린더에 입력된 일정들을파악하고, 그에 맞춰 스케쥴을 조정해줄 수 있습니다. 지도앱과 연동한다면, 어떤 장소까지 어떻게 이동해야하는지 알려줄 수 있습니다. 코드 에디터와 연동한다면, 명령에 알맞는 코드를 작성하고 실행하여 프로그램을 실행시킬 수도 있습니다.
그리고 이런 도구를 활용한 에이전트들은 다른 에이전트들과 협력하여 더 큰 시너지 효과를 낼 수 있습니다. 만약 캘린더앱과 지도앱 에이전트를 협력시킨다면, 장소와 시간이 주어졌을 때, 일정 정보와 지도 정보를 모두 고려한 더 세밀한 정보를 제공할 수 있게 됩니다.
Agent는 CrewAI, AutoGen, Langraph와 같은 프레임워크를 사용하여 구현할 수 있습니다.
앞으로의 발전과정
지금까지 거대 언어 모델이 RAG와 Agent의 형태로 어떻게 단점을 극복하고 발전하는지 알아보았습니다. LLM은 모델의 발전과 개선된 접근성을 통해 우리의 생활에 점점 더 스며들 것입니다. 리더보드와 오픈소스 생태계를 통해 모델 측면의 지속적인 발전을 기대할 수 있고, 무수한 활용성을 가진 RAG와 Agent를 통해 좀 더 실생활에 접근성 좋은 서비스를 기대해볼 수 있습니다. 또한, 네트워크나 GPU, CPU 등 하드웨어 자체의 발전과 거대언어모델을 효율적으로 서빙하기 위한 소프트웨어 아키텍쳐의 발전 또한 주목할 포인트입니다.