딥러닝

기존 언어 모델 부터 LLM 까지

세드릭_ 2023. 12. 5. 14:11

*한국 LLM Developer Day (2023.12.04) 자료를 기반으로 합니다.

 

 예전부터 언어 모델들은 텍스트 분류, 요약, 질의 응답과 같은 특정 목표를 위해 학습되었습니다. 그러다 2017년에 트랜스포머(transformer) 모델이 나오면서 언어 모델에 비약적인 발전이 가능해졌습니다. 트랜스포머 모델은 'self-attention' 이라고 하는 기법을 활용하며, 'Attention is All You Need' 논문에서 발표된 바 있습니다. 2023년 현재, 잘알려진 모델들은 대부분 트랜스포머 기반이라고 볼 수 있습니다. 그리고 엄청난 양의 데이터로 학습된, 보다 큰 모델이 생성형 AI의 핵심입니다.

 

Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond, 27 Apr 2023

 

트랜스포머 모델은 비지도 학습이면서 다음 단어(실제로는 token)를 예측하는 모델입니다. Foundation 모델과 Large Language Model(이하 'LLM')은 학습에 사용된 데이터의 양과 목적으로 구분할 수 있습니다. Foundation 모델 역시 방대한 양의 데이터로 학습을 하지만, 기존과 같이 특정 목적을 위해 일부 예제만으로 튜닝해서 경쟁력을 갖는 데에 그 목적이 있습니다. LLM 은 데이터의 양 뿐만아니라 아키텍처 자체도 크게 키워 언어 모델과 관련된 일련의 모든 작업을 가능하도록 하는데 그 목적을 둡니다. (간단한 설명만으로는 두 개념의 경계가 모호할 수 있으니 부연 설명을 하자면, 데이터의 양 측면에서 봤을 때 Foundation 모델은 Imagenet의 pretrained model 정도라고 생각하고 LLM은 그보다도 많다고 생각하면 좋겠습니다. 유저 관점에서 봤을 때 Imagenet 데이터셋도 충분히 많아 보이거든요.)

 

token prediction

 

 최근에는 chatGPT 외에도 Bing, Bard, Cue 등의 많은 LLM 기반 채팅 프로그램이 많습니다. 아래에는 가장 대표적인 LLM 기반 서비스인 OpenAI의 API를 활용한 추론(Inference)을 코드 레벨에서 수행한 내용입니다. chatGPT 에서 GPT3.5 모델은 무료이지만, API 호출을 통한 GPT3.5 (gpt-3.5-turbo) 는 유료입니다. (sk- 로 시작하는 API key를 발급받아야합니다.)

 

# !pip install openai
# !pip install python-dotenv

import os
import openai
from dotenv import load_dotenv, find_dotenv

load_dotenv(find_dotenv())
openai.api_key = "sk-XXX"

model = "gpt-3.5-turbo"
temperature = 0.9

prompt = "Write a haiku about large language models."
messages = [{
    'role' : 'user', "content": prompt
}]

response = openai.chat.completions.create(
    model = model,
    messages = messages,
    temperature= temperature,
)

print(response.choices[0].message.content)

 

 LLM에 대한 하이쿠(일본 정형시의 일종)를 작성해달라고 지시했을 때, 아래와 같은 결과물을 확인할 수 있습니다.

 

 

 지시 내용에 엉뚱한 답을 하는 모델은 miss-align 문제가 있다고 말합니다. (모델이 align 되지 않았다는 것은 충분한 임베딩이 되지 않아 벡터 공간에서의 clustering이 의도한 만큼 되지 않았다는 것으로 이해할 수 있습니다.) 이러한 문제가 어디서 기인했는가에 대한 원인 분석이 필요하다고 생각하겠지만 사용성 측면에 문제도 있을 수 있습니다. (지시 자체가 이상할 수도 있구요.) 따라서, 이런 문제를 해결하기 위해서는 크게 두가지 방법이 있을 수 있습니다. 모델 align이 잘되게 학습을 하는 방법과 지시를 잘 주는 방법이 있습니다.

 모델 align이 잘되게 학습하는 방법은 그 비용과 직결되는 복잡한 내용을 담고 있기에 다음 포스팅에서 서술하도록하겠습니다. 지시를 잘 주는 방법은 'prompt engineering' 이라고 합니다. 그리고 예제를 담은 내용에 따라 Zero-Shot, One-Shot, Few-Shot 으로 구분할 수 있습니다. Zero, Few 의 예시를 보자면,

 

NVIDIA 자료 발췌

 

 우리가 일반적으로 기대하고 지시하는 내용은 Zero-Shot에 가깝지만, Prompt Engineering 관점에서는 예시를 주어가며 원하는 대답을 유도하도록 해야한다는 것입니다. 최근 숱하게 소개되고 있는 개념인 Chain-of-Thought(CoT) 는 이러한 Prompt Engineering 관점의 방법입니다. 문제 해결을 위한 과정을 유도하는 것이 핵심입니다.

 

Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, 10 Jan 2023

 

 NVIDIA 의 'NeMo Guardrails' 라는 프로그램은 LLM 결과에서 사회적 문제가 될 수 있는 만한 내용들을 막아주는 역할을 합니다. NVIDIA/NeMo-Guardrails 

 

NeMo Guardrails

 

 다음 포스팅에서는 이전에 서술하지 못한 모델 align이 잘되게 학습하는 방법과 RAG(Retrieval Augmented Generation)에 대해 다뤄보겠습니다.