Gen AI RAG 실전 가이드, Langchain을 활용한 AI 챗봇 완전정복 강좌의 맛보기 강의입니다.
이번 시간에는 RAG의 개념과 필요성에 대해서 한번 알아보도록 하겠습니다. RAG의 필요성에 대해서 먼저 설명을 드리고자 하는데요. RAG가 왜 필요한지 이해를 하려면 LLM이 가지는 한계를 이해를 해야 되고요. LLM이 가지는 한계를 이해하려면 LLM이 무엇인지부터 알아야겠죠. 저희가 LLM이라고 하는 것은 사실 초거대 언어모델이라고 부르는 굉장히 복잡한 하나의 딥러닝 모델이라고 보시면 될 것 같아요. 그래서 저희가 LLM이라고 하는 것의 구조를 전부 다 파헤치기에는 시간이 너무 부족하고 간단하게 LLM이 어떤 특성을 가지고 있기 때문에 LLM이 이러한 한계를 가지고 있구나 라는 것을 이해하시는 것 이것만 가져가셔도 오늘 강의의 핵심은 다 챙겨 가시는 거라고 생각하시면 될 것 같습니다 LLM은 디코더라는 하나의 딥러닝 모델에다가 대규모 데이터를 학습해서 완성된 하나의 딥러닝 모델이라고 보시면 되겠는데요. 이러한 것의 원류는 트랜스포머 아키텍처로 거슬러 올라가게 됩니다. 여기 보시는 대로 두 개의 구조가 결합된 형태가 바로 트랜스포머 아키텍처라고 불리는데요 이 트랜스포머 아키텍처는 원래 특정 언어를 다른 나라의 언어로 번역하는 그런 작업을 수행하기 위해 만들어진 설계된 하나의 딥러닝 모델이라고 보시면 될 것 같아요 그래서 인코더와 디코더 이렇게 두 개의 구조로 나뉘어 있는 이유도 주어진 원문 하나의 원문 문장을 이해하는 역할을 인코더가 수행을 하고요 그리고 그 이해된 내용을 바탕으로 디코더가 다른 나라의 언어로 번역하는 역할을 맡고 있다고 보시면 될 것 같습니다 그래서 쉽게 생각을 하면 인코더는 사람이 소통할 수 있는 자연어 자연어 문장을 이해할 수 있는 역할을 맡고 있다고 보시면 되겠구요 디코더는 그 이해한 내용을 바탕으로 자연어 문장을 생성할 수 있는 능력을 갖췄다 라고 보시면 될 것 같습니다 여기서 생성형 AI 라는 말이 점점 나오기 시작하게 됐고 디코더가 자연어 생성에 대한 특성을 갖고 있기 때문에 이 부분에 집중을 한 회사가 하나 있었습니다 바로 OpenAI 인데요. OpenAI는 디코더 구조를 12개를 쌓아 가지고 자연어 생성에 특화된 딥러닝 모델을 하나 만들게 됩니다. 그 이름이 바로 GPT 인데요. GPT 라는 것은 저희가 지금 챗GPT 라고 하는 것의 원류가 되는 모델이라고 보시면 될 것 같습니다. 사실은 굉장히 간단한 거예요 이 트랜스포머 아키텍처 중에서 인코더 구조 떼고 디코더만 가져와서 자연어 생성에 특화된 모델을 만든 건데요 자연어 생성 뿐만 아니라 다양한 역할을 할 수 있어요 이게 텍스트 프레딕션이 다음에 나올 단어를 예측하는 것이기 때문에 자연어 생성에 해당하는 것이라고 보시면 되겠고요 Task Classifier라고 하는 것은 어떤 작업을 수행해야 할지 분류하는 역할도 할 수 있다고 보시면 될 것 같습니다 그래서 이렇게 생긴 디코더 구조를 12개를 반복해서 쌓아가지고 GPT라는 걸 만들었는데 이 디코더 12개를 쌓는 것 뿐만 아니라 12개의 디코더에다가 엄청나게 많은 데이터를 학습을 시키면서 자연어 생성을 거의 사람만큼 할 수 있을 정도로 학습을 시킨 것이 바로 GPT라고 보시면 되겠습니다 처음에 GPT-1이 발표됐을 때만 해도 자연어 생성 모델이라고 하기 민망할 정도로 굉장히 열악한 성능을 보여줬어요 그래서 지금 저희가 대화를 하고 있는 여러 LLM 대비해서는 굉장히 낮은 수준이었지만 이것이 기반이 되어서 더 많은 데이터를 학습시키고 더 큰 파라미터 수를 가진 모델을 만들고 또 더 많은 디코더를 쌓아서 GPT-2, GPT-3까지 오게 됩니다 GPT-1에서 GPT-3까지 가는 과정에서는 파라미터가 수백배, 수천배가 늘어나게 되고요 데이터 수도 굉장히 많이 늘어나고 디코더 수도 지금 8배가 된 것을 확인하실 수 있겠죠 이런식으로 모델의 구조와 데이터양을 엄청나게 늘려서 획기적으로 성능 향상을 할 수 있었습니다 그런데 저희가 지금 대화하고 있는 건 GPT-3 모델에서 강화학습이 추가된 모델이라고 보시면 될 것 같아요 그래서 OpenAI의 GPT-3.5가 공개되었을 때 굉장히 GPT-3.5가 이전 모델들 대비해서 사람들의 반응이 좋았던 이유는 챗GPT라는 플랫폼을 통해 홍보가 되었던 점도 있지만 그 모델의 성능이 이전 대비해서 훨씬 좋아졌기 때문이라고 볼 수 있겠습니다 GPT-3에서 GPT-4로 넘어가지 않고 GPT-3.5로 넘어간 이유는 모델의 어떤 부분을 뜯어고치거나 모델의 크기를 엄청나게 키운 모델이 아니라 이미 GPT-3로 학습이 되어 있는 모델에다가 파인튜닝 학습으로 강화학습을 결합한 거예요 그래서 사람이 좋아할 만한 대답을 하게끔 강화학습을 시켜서 GPT-3 모델을 업그레이드 시켰던 것이 바로 GPT-3.5라고 보시면 되겠습니다 대부분의 현재 저희가 대화하고 있는 LLM들이 그런 식으로 GPT 3.5로 넘어가는 과정과 같이 강화학습을 결합했기 때문에 저희가 좋아하는 대답을 많이 한다고 이해하시면 좋을 것 같습니다. 이렇게 저희가 짧게 트랜스포머부터 GPT 모델 발전까지 간단하게 알아봤는데요 여기서 저희가 알아봐야 할 것은 트랜스포머나 디코더, GPT 모델이 그 안에서 어떤 구조들이 있기 때문에 이러한 작용이 가능한 거구나를 이해하는 것도 중요하겠지만 더 중요한 것은 LLM이 마법과 같은 어떤 마술 정말 이 안에 뭔가 사람이 있는 것처럼 대답을 하는 눈속임 이런 게 아니라 정말로 저희가 간단한 이미지 분류나 또는 텍스트 분류와 같은 간단한 이런 작업들을 수행하는 딥러닝 모델과 그 원류가 모두 똑같다는 것을 이해하는 것이 중요할 것 같아요 그래서 LLM도 그냥 하나의 딥러닝 모델이라고 이해하시면 이 다음에 있을 저희의 설명에 대해서도 조금 더 이해하시기 편할 것 같아요 그래서 딥러닝 모델이 가지는 한계점이 곧 LLM의 한계라고 보시면 될 것 같아요. 첫 번째로 딥러닝 모델은 긴 길이의 문장을 입력 받거나 출력하는데 어려움이 있습니다. 왜냐하면 딥러닝 모델은 그 안에서 엄청나게 많은 파라미터가 있을 경우에 문장의 길이가 길어질수록 그 안에서 계산하게 되는 양이 어마어마하게 늘어나게 됩니다. 보통 기하급수적으로 늘어난다고 하는데 이러한 특징 때문에 LLM이 또 갖는 한계점들이 있고요. 두 번째로 학습된 데이터 이외의 것을 만들어내는 것에 취약하다는 한계점이 있습니다. LLM도 결국 하나의 딥러닝 모델이기 때문에 만약에 학습되지 않은 데이터에 대해서 묻는다거나 뭔가 작업을 요청하는 경우에는 저희가 흔히 환각현상이라고 하는 문제점을 마주하게 되는 거죠. LLM의 한계로 대표적으로 세 가지가 지목이 되는데요. 아까 말씀드린 환각현상이 첫 번째로 가장 많이 지목당하고 있는 문제점이라고 볼 수 있겠고요. 두 번째로 기억 불가, 세 번째로 토큰 제한이 있습니다. 첫 번째부터 살펴보면 환각현상은 학습된 데이터 이외의 정보에 대해서 물어봤을 때 거짓말을 하거나 엉뚱한 대답을 하는 경우라고 볼 수 있겠습니다. 예를 들어서 OpenAI의 최신 모델인 GPT-4o의 경우에는 2023년 9월까지 학습이 진행되었고 클로드 Sonnet 3.5의 경우에는 24년 4월까지의 데이터로 학습이 되어 있습니다 그래서 예를 들어서 올해 7월에 있었던 일에 대해서 Sonnet 3.5 모델에게 물어본다면 24년 4월까지 학습된 데이터를 기반으로 최대한 답변을 하려고 노력을 할 건데요 이렇게 될 경우에 내가 모른다 라고 답변을 하면 되겠지만 이 LLM의 특성상 어떤 질문이 들어왔을 때 최대한 답변을 하려고 노력을 하는 특성이 있습니다 그래서 24년 7월의 정보임에도 불구하고 24년 4월까지의 데이터를 기반으로 답변을 하려고 하다 보니까 저희가 예상하지 않은 엉뚱한 답변이 나오거나 거짓말 같은 답변이 나오는 것을 확인하실 수 있겠습니다 이러한 부분이 가장 크게 주목되는 한계점이라고 볼 수 있겠고요 두 번째로 기억을 할 수 없다는 점이 있습니다 이거는 딥러닝 모델의 특성상 학습이 될 때 들어갔던 데이터가 아니면 그 이후의 데이터는 딥러닝 모델에게 입력했다고 해서 그게 기억이 되는 게 아니에요 사람의 경우에는 저희가 예를 들어서 고등학교 기간 동안 쭉 교육을 하고 나서 그 이후에 어떤 새로운 지식을 배우거나 했을 때 그때그때 저희의 머릿속에 지식이 저장이 되잖아요 근데 LLM의 경우에는 한번 학습을 시킬 때 그 학습된 데이터 이외의 것은 그 이후에 알 수가 없는 거예요 그래서 오늘 나와 대화하고 있는 LLM은 어제 나와 대화했던 내용을 기억하지 못합니다 왜냐하면 LLM이 다시 한번 사전학습이 되는 게 아니라 LLM은 사전학습된 시점 이후로 계속 배우지 않아요. 계속 사전학습 때 배웠던 데이터로만 나와 대화를 하고 있는 것이기 때문에 오늘 나와 대화하고 있는 LLM은 어제 나와 대화했던 내용을 기억할 수가 없습니다. 마지막으로는 토큰 제한 이슈가 존재하는데요 이 부분은 LLM이 입력값의 길이가 길어지면 계산량이 크게 늘어나기 때문에 대부분의 모델이 길이를 제한하고 있기 때문에 나타나는 이슈입니다 그래서 OpenAI의 GPT-4o의 경우에는 12만 8천 토큰까지만 입력을 할 수 있고요 Anthropic의 클로드 Sonnet 3.5의 경우에는 20만 토큰까지 입력이 가능합니다 이 부분이 잘 안 와 닿으실 수도 있는데요 저희가 예를 들어서 굉장히 긴 길이의 책 한 권을 요약해 달라고 GPT한테 보냈다 라고 가정을 해봅시다 그러면 가뿐히 20만 토큰, 30만 토큰, 100만 토큰을 넘을 수도 있거든요 그런 경우에는 입력값 제한을 넘기기 때문에 이 모델이 답변을 할 수 없고 에러를 일으키는 한계점이 존재합니다 그래서 저희가 대량의 데이터를 처리를 한다던가 또는 굉장히 긴 문서를 저희가 요약하거나 분석해야 될 필요가 있을 때에는 LLM이 큰 한계를 가지고 있다고 보시면 될 것 같습니다 그래서 이 세 가지 문제점에 대해서 굉장히 많은 사람들이 해결하고자 노력을 하고 있고요 이 중에 환각현상을 해결하고자 고안된 것이 바로 RAG라고 보시면 될 것 같습니다 RAG는 Retrieval-Augmented Generation의 약자로 한국말로는 검색 증강 생성이라고도 말하는데요. LLM의 한계 중에서 특히 환각 현상 해결에 주요하게 기여를 하는 하나의 프레임워크라고 보시면 될 것 같습니다. 이 RAG라는 시스템이 어떤 식으로 동작을 하기 때문에 그러한 해결이 가능한지는 바로 어떤 질문을 할 때 사용자가 질문한 것에 대해 LLM이 답변을 할 때 힌트가 될 만한 문장을 함께 넣어줌으로써 환각현상을 방지하는 방식이라고 보시면 될 것 같습니다 그래서 이 밑에 대화를 보시면 사용자가 현재 갤럭시 Z 시리즈의 최신 모델은 뭐야? 라는 질문을 했을 때 LLM이 올바른 답변을 하는 것을 볼 수 있어요 근데 이게 원래 같았으면 이런 식으로 힌트가 주어지지 않았으면 갤럭시 Z 시리즈의 최신 모델을 찾기 위해서 LLM은 사전학습 때 배웠던 데이터 중에서 가장 최근 모델을 찾게 되는 거겠죠 예를 들어서 클로드 3.5 Sonnet 모델의 경우에는 자신이 배웠던 24년 4월까지의 데이터 기반에서 갤럭시 Z 시리즈의 최신 모델이 무엇인지 대답을 할 겁니다 원래는 그래서 Z 폴드5, 플립5 이런 식으로 대답을 했을 텐데 여기서 저희가 사용자의 질문과 함께 힌트를 사용자가 질문하는 것 뿐만 아니라 질문에 답이 될 수 있는 힌트 문장을 함께 넣어줘서 LLM은 힌트 문장을 참고해 올바른 답변을 할 수 있도록 만들어주는 것이 바로 RAG라고 이해하시면 될 것 같습니다. 그래서 굉장히 간단합니다. LLM에게 답지를 주고 답변을 하라고 만들어주는 게 RAG라고 보시면 될 것 같고요. 이 답지를 그러면 어떤 식으로 저희가 사용자의 질문과 결합하여 넘겨줄 것인지, 또 LLM은 이것을 받아서 답변을 처리할 때 어떻게 하면 힌트에 기반해서만 답변을 하도록 만들 수 있을 것인지, 이런 걸 고민하는 게 저희가 이후에 실습 시간에서 또 알아볼 내용이 될 것 같습니다.
