Natural Language Processing

[리뷰] ChatGPT

dhk1349 2023. 2. 8. 04:42

  안녕하세요. 오늘은 요즘 많은 사람들의 관심을 받고 있는 ChatGPT에 대한 간단한 소개를 하는 글을 작성해보려고 합니다. 

ChatGPT는 기존에 연구되던 모델을 개량하여 서비스로 만들었기에 논문이 따로 올라와있지는 않습니다. 대신 OpenAI 블로그에 ChatGPT에 대한 간략한 소개가 되어있습니다. 

https://openai.com/blog/chatgpt/

 

ChatGPT: Optimizing Language Models for Dialogue

We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. ChatGPT is

openai.com

 

  유튜브에 많은 분들이 ChatGPT를 다양하게 사용하여 보여주고 있기 때문에 ChatGPT로 무엇을 할 수 있는지는 굳이 설명할 필요가 없어 보여 생략하겠습니다. 혹시 ChatGPT에 대해 알아보고 싶으신 분들을 위해 이해에 도움을 줄 수 있는 레퍼런스들도 함께 달아두었습니다. 

 

잘못된 내용이 있다면 말씀해주세요. 수정하도록 하겠습니다. 

 

 

  ChatGPT는 이름에서부터 알 수 있듯이 GPT기반으로 만들어진 모델입니다. GPT는 Transformer decoder를 쌓아서 만든 NLP모델입니다. GPT의 가장 큰 특징은 들어오는 데이터를 autoregressive하게 처리한다는 점입니다. Autoregressive 하다는 것은 아래 식과 같은 특징을 같는 다는 것을 의미합니다. Sn이라는 n번 째 값을 예측하기 위해서 앞서 일어난 S1~Sn-1이 주어졌다고 가정하는 것이 autoregressive의 의미입니다. Transformer 기반 모델은 입력 값을 여러 개의 토큰을 입력으로 받게 됩니다. 

  Transformer의 encoder만 쌓아서 만든 BERT 같은 경우는 입력으로 받는 토큰들을 한꺼번에 attention 연산을 통해 계산합니다. Attention 연산을 진행할 때 토큰 간의 attention을 줄 수 있는 형태입니다. 하지만 decoder만 쌓아서 만든 GPT 같은 경우는 0~n-1 번 째 토큰까지 밖에 볼 수 없도록 한 채로 attention 연산을 진행하여 n 번째 토큰 값을 예측합니다. 이런 식으로 첫 번째 토큰부터 마지막 토큰까지 순차적으로 연산을 진행합니다. 

 

Autoregressive Language Modelling

 

  ChatGPT는 GPT 시리즈인 GPT3.5를 사용했습니다. GPT1에서부터 3.5까지 파라미터수가 많아지고 입력 데이터를 인코딩하는 방식 등 학습 방식과 모델링 방법 등이 바뀌어왔다고 보시면 될 것 같습니다. Backbone의 형태는 Transformer decoder를 쌓는 형태를 유지했던 것으로 기억합니다. GPT3까지는 논문이 작성되었고, 3.5 이후는 따로 공개를 하지 않았던 것으로 기억합니다. 논문도 공개되어있고, 어떻게 학습을 하였는지 블로그를 통해 공개는 하고 있지만 학습에 필요한 연산 자원이 무지막지하고, 데이터셋을 구축하는 것 자체도 어렵고, 초거대 모델을 학습할 때 고도의 엔지니어링이 필요하기에 공개되어있는 정보를 가지고 쉽게 따라서 학습을 할 순 없습니다. 

 

  아래 그림은 ChatGPT의 학습 순서입니다. ChatGPT는 GPT3.5를 처음부터 학습을 한 것은 아니고 이미 학습된 GPT3.5를 가지고 와서 이를 finetuning 한 것 입니다. 

 

  Step1은 자체적으로 사용하는 데이터셋의 prompt(여기서는 "6살아이에게 강화학습을 설명해줘"라는 문장이 예시)에 대한 모범답한을 인간이 작성합니다. 그리고 해당 답안을 가지고 supervised learning으로 GPT3.5를 튜닝합니다. GPT등의 대용량 언어모델을 학습할 때는 엄청나게 많은 양의 데이터를 필요로 하기 때문에 지금과 같은 방식으로 모델을 처음부터 학습하긴 어렵습니다 (비용문제). 대신 인터넷에서 특정한 조건들을 걸어놓고 최대한 양질의 글을 모아서 모델을 학습시킵니다. 하지만 어디까지나 현실적인 문제 때문에 이렇게 하는 것이고 Step1에서처럼 숙련된 인간이 직접 라벨을 작성해주는 것이 좋은 모델 성능을 내기에 가장 좋은 방법이긴 합니다. 그래서 step1에서는 소량의 양질의 데이터를 가지고 마지막 학습을 진행했다고 보면 되겠습니다. 

 

  Step2에서도 인간 labeler의 도움을 받게됩니다. Step1과 동일하게 prompt가 주어집니다. GPT3.5가 해당 prompt에 대한 답을 몇 가지 생성하고, 이 여러 대답을 labeler가 우수한 답안 순으로 순서를 매깁니다. 이 순서를 가지고 Reward Model(RM)을 학습시킵니다. 

 

  Step3에서는 proximal policy optimization 기법을 통해서 보상 값을 계산하고 모델을 튜닝해줍니다.  

 

  인간을 활용한 RL tuning 기법은 IntructGPT에서 이미 사용된 방법이지만 여기서는 데이터 준비 과정이 조금 바뀌기도 하였고, 대화형으로 모델을 학습하였다는 점에서 차이가 있다고 합니다. 

 

 

ChatGPT Training Diagram

 

  개인적으로 ChatGPT의 짤막한 blog 글을 보면서 든 생각은 ChatGPT가 그냥 난데없이 나타난 것은 아니고 여태까지 줄기차게 공개하던 모델들의 집합체처럼 보여졌습니다. 위처럼 RL 기반으로 모델을 tuning한 것은 IntructGPT에서 영향을 받은 것으로 보여졌습니다. 그리고 Human labeler를 직접 고용해서 모델을 supervised 방식으로 tuning하는 방법은 WebGPT라는 논문에서 시도된 바가 있습니다. 

(참고로 WebGPT는 언어모델의 신뢰성을 확보하고자 대답을 생성할 때, 웹에서 대답에 대한 근거 url을 가져와 보조적으로 사용하려고 했던 시도로 기억합니다.)

 

  그리고 ChatGPT 소개 사이트에 나온 예시를 보면 알 수 있 듯이 ChatGPT는 프로그래밍 코드 작성, 코드 에러 해결 같이 자연어가 아닌 것의 문맥도 이해하는 모습을 보입니다. 이런 것은 일전에 나온 Codex(Copilot)이라는 코드 작성 모델에서 영향을 받은게 아닌가라는 생각도 듭니다. Codex는 github 코드를 가지고 학습한 것인데 Github를 인수한 MS와 협력 관계에 있는 OpenAI이기에 이런 시도가 가능했던 것 같습니다. 

 

  InstructGPT, WebGPT, Codex 모두 GPT 기반의 모델들입니다. 위 예시들은 제가 알고 있는 논문 위주로 이야기를 한 것인데 사실 이 외에도 ChatGPT와 같은 맥락의 연구가 과거에 더 많이 있었을 것 같습니다. 

 

 

[Reference]

Transformer 소개 Wikidocs: https://wikidocs.net/31379

 

16-01 트랜스포머(Transformer)

* 이번 챕터는 앞서 설명한 어텐션 메커니즘 챕터에 대한 사전 이해가 필요합니다. 트랜스포머(Transformer)는 2017년 구글이 발표한 논문인 Attention i…

wikidocs.net

 

OpenAI Model Card (GPT3.5 포함): https://platform.openai.com/docs/model-index-for-researchers

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

InstructGPT: https://openai.com/blog/instruction-following/

 

Aligning Language Models to Follow Instructions

We’ve trained language models that are much better at following user intentions than GPT-3 while also making them more truthful and less toxic, using techniques developed through our alignment research. These InstructGPT models, which are trained with hu

openai.com

 

WebGPT: https://openai.com/blog/webgpt/

 

WebGPT: Improving the Factual Accuracy of Language Models through Web Browsing

We've fine-tuned GPT-3 to more accurately answer open-ended questions using a text-based web browser. Our prototype copies how humans research answers to questions online—it submits search queries, follows links, and scrolls up and down web pages. It is

openai.com

 

Copilot: https://openai.com/blog/openai-codex/

 

OpenAI Codex

We’ve created an improved version of OpenAI Codex, our AI system that translates natural language to code, and we are releasing it through our API in private beta starting today. Codex is the model that powers GitHub Copilot, which we built and launched

openai.com