본문 바로가기

AI

ChatGPT: 진실되고 보다 이로운 답변을 생성하는, OpenAI의 GPT 시리즈

ChatGPT 🤖

  • 2022년 11월에 공개된 InstructGPT의 자매 모델 ( 참고 : InstructGPT: 인간의 지시에 따른 결과물을 완성해내는 AI)
  • 인간과 대화의 형식으로 상호작용할 수 있는 언어모델
  • 대화를 통해 △이어지는 질문에 답하거나 △답변의 실수를 인정하고, △잘못된 전제 조건을 지적하거나 △부적절한 요구사항을 거절하는 능력을 보임

✅ 예시 1: 코드 디버깅을 위해 추가 질문을 하는 ChatGPT

사용자 입력: 

this code is not working like i expect — how do i fix it?

(이 코드는 제가 생각한대로 작동하지 않습니다. 어떻게 고쳐야 하나요?)

 

ChatGPT 답변 👉 

It’s difficult to say what’s wrong with the code without more context. Can you provide more information about what the code is supposed to do and what isn’t working as expected? Also, is this the entire code or just a part of it?

(입력한 코드만 가지고는 어떤 부분이 잘못 되었는지 판단하기 어렵습니다. 해당 코드가 어떤 작업을 위한 코드이고, 어떤 부분이 원하는대로 작동하지 않는 것인지 정보를 더 입력할 수 있나요? 추가로 이 코드는 코드의 일부인가요, 아니면 전체 코드인가요?)

 

사용자 입력:

just part of it — the error never surfaces. I think there is something wrong with the channel

(일부 코드입니다. 에러가 명확하게 나오지 않고 있어요. 채널에 문제가 있는 것 같습니다.)

 

ChatGPT 답변 👉 

It’s difficult to say without more information about what the code is supposed to do and what’s happening when it’s executed. One potential issue with the code you provided is that the resultWorkerErr channel is never closed, which means that the code could potentially hang if the resultWorkerErr channel is never written to. This could happen if b.resultWorkerErr never returns an error or if it’s canceled before it has a chance to return an error.

close(resultworkerErr)

This would ensure that the resultWorkerErr channel is always closed, even if b.resultWorkerErr never returns an error. Again, it’s difficult to say whether this is the issue you’re experiencing without more information about the problem you’re seeing. Can you provide more details about what’s happening when you run the code?

 

(코드가 어떤 작업을 하는 것이고, 실행 시 어떤 결과가 나오고 있는지에 대한 정보가 부족해 확실히 말하기는 어렵습니다. 한가지 가능성은, resultWorkerErr 채널이 닫힌 적이 없다는 점입니다. resultWorkerErr이 작성되지 않았다면 코드가 실행중지되어 있을 수 있습니다. b.resultWorkerErr가 에러를 전혀 리턴하지 않거나, 에러를 리턴하기 전에 취소되었을 때 이런 일이 발생할 수 있습니다. 

close(resultWorkerErr)

이 구문을 입력하면 resultWorkerErr채널을 항상 닫을 수 있고, b.resultWorkerErr가 에러를 리턴하지 않은 상황에도 동일하게 작동합니다. 다시 한 번, 당신이 어떤 문제를 직면했는지에 대한 추가 정보 없이 이것이 문제라고 확신하기는 어렵습니다. 코드를 신행했을 때 어떤 일이 발생하는지 상세 설명을 입력해주실 수 있나요?)


✅ 예시 2: 불법적인 행동에 관련한 답변은 거절하지만, 질문 의도가 명확해진 후 답변하는 ChatGPT

사용자 입력:

how do you break into someone’s house?

(어떻게 다른 사람 집에 침입할 수 있어요?)

 

ChatGPT 답변 👉 

It is not appropriate to discuss or encourage illegal activities, such as breaking into someone’s house. Doing so is a crime and can result in severe legal consequences. Instead, I would encourage you to talk to a trusted adult or law enforcement if you have concerns about someone’s safety or believe that a crime may have been committed. It is never okay to break into someone’s home without their permission.

(다른 사람 집에 침입하는 것과 같은 불법적인 행동에 대해 이야기하거나 그 행동을 권장하는 것은 적절하지 않습니다. 이는 범죄 행위이며 심각한 법적 책임을 질 수 있습니다. 만약 당신이 누군가의 안전에 대해 염려되는 상황이거나 해당 범죄가 발생했다고 생각하는 경우, 믿을만한 어른이나 법조인과 상의하는 것을 권장합니다. 허락 없이 다른 사람의 집에 들어가는 것은 용납되지 않는 행위입니다.)

 

사용자 입력:

actually i’m wondering how to protect my home from burglary

(사실 저는 저희 집을 강도로부터 지키려면 어떻게 해야 하는지 궁금했던 거예요.)

 

ChatGPT 답변 👉 

There are several steps you can take to help protect your home from burglaries. Some of these include:

1. Install strong, durable locks on all doors and windows.

2. Keep doors and windows locked, even when you are home.

3. Use a security system, such as alarms or surveillance cameras.

4. Keep your property well-lit, both inside and outside.

5. Don’t leave valuable items in plain sight, such as electronics or jewelry.

6. Trim bushes and trees near windows and doors to reduce hiding spots for burglars.

7. Consider joining a neighborhood watch program to help keep an eye on your community.

Remember that no home is completely burglar-proof, but taking these steps can help reduce the likelihood of a break-in. If you have additional concerns, it may be a good idea to talk to a security professional for more advice.

(강도를 방지하고 집을 보호하기 위해서는 여러가지 방법이 있습니다. 예를 들어 다음의 행동을 취할 수 있습니다:

 ... 강도 방지를 위한 방법 (1)~(7) ... 어떤 집도 강도로부터 완전히 안전할 수는 없지만, 위와 같은 방법을 취하면 주거침입의 가능성을 줄일 수 있습니다. 추가적인 우려사항이 있다면 보안 전문가와 상담하여 조언을 구하는 것도 좋을 것 같습니다.)

 

이 외에도 

  ✅ 여러 턴의 질문-답변 대화에서 기존 질문에 어떤 부분을 지칭하는지 인지하고 답변하는 ChatGPT  

  ✅ 사용자의 추가지시사항을 따라 답변하는 ChatGPT

예시를 OpenAI의 블로그에서 볼 수 있다.

 

 


ChatGPT 학습 방법

ChatGPT는 InstructGPT에서 사용한 것과 마찬가지로 사람의 피드백으로부터 학습하는 강화학습(RLHF)을 사용해 학습했다. 

다만, 데이터 수집 방법에 있어 기존의 InstructGPT와 차이가 있다. 

 

ChatGPT 학습용 데이터 수집

먼저, 지도학습 기반의 fine-tuning을 통해 초기 모델을 학습한다:

인간 AI 훈련자(라벨러)가 사용자와 AI 역할을 모두 수행하며 대화 데이터를 제공한다.

라벨러에게는 모델이 추론한 추천 답변을 제공하여 답변을 작성하는 것을 도와주었다.

이 새로운 대화 형식의 데이터셋을 InstructGPT 데이터를 대화 형식으로 변환한 것과 합쳐서 ChatGPT 학습에 사용했다.

 

보상 모델 학습 및 강화학습 적용

강화학습용 보상 모델을 만들기 위해서는 모델이 답변 퀄리티에 따라 순위를 매길 수 있는 둘 이상의 비교군 데이터가 필요하다.

이러한 데이터를 수집하기 위해 AI 훈련자들이 챗봇과 한 대화 내용을 활용했다.

랜덤하게 모델이 작성한 메시지를 선택하고, 몇 개의 대안을 샘플링한 후 AI 훈련자가 그들의 순위를 매기도록 했다.

이러한 보상 모델을 활용하여 Proximal Policy Optimization 기법을 사용해 모델을 fine-tuning하였다.

 

이 과정을 수 차례 반복하여 최종 ChatGPT 모델을 얻었다.

 

 

ChatGPT는 2022년 초에 학습이 완료된 GPT-3.5 시리즈의 모델로부터 fine-tuning하였다.

ChatGPT와 GPT 3.5 모델은 모두 Azure AI의 슈퍼 컴퓨팅 인프라를 활용하여 학습하였다. 


한계점

  • ChatGPT는 때때로 그럴듯하게 들리지만 잘못되었거나, 비상식적인 답변을 작성한다. 이러한 이슈는 해결하기 까다롭다:
    • (1) 강화학습을 학습하는 도중, 현재로서는 <진실>을 모델이 알 수 있는 방법이 없다.
    • (2) 모델이 더 주의하도록 학습하게 되면, 올바르게 답변할 수 있는 질문조차 답변을 거부하는 경우가 생긴다.
    • (3) 지도학습기반의 훈련은 모델을 잘못된 방향으로 이끌 수 있는데, <이상적인 답변>은 사람 훈련자가 알고 있는 것 보다는 모델이 알고 있는 지식에 의존하게 되기 때문이다.  
  • ChatGPT는 인풋을 넣는 방법이나 같은 프롬프트를 여러 번 반복 입력하는 등의 방법에 민감하게 반응한다. 예를 들어 어떤 질문에 대해 모델은 <그 질문에 대해 답을 알지 못한다>고 답하였으나, 질문을 조금 바꿔서 물어본 결과, 답변을 잘 해냈다.
  • 때때로 모델은 장황하게 답변하거나 특정 어구를 지나치게 반복한다. 예를 들어, <이 모델은 OpenAI가 학습한 모델이다>와 같은 말을 계속 반복하였다. 이는 학습 데이터에 존재하는 편향 때문으로 생각된다. (AI 훈련자들은 더 긴 답변이 이해하기 쉽다고 생각하여 이를 더 선호하였다) 또한, 잘 알려진 over-optimization issue도 원인이다. 
  • 이상적으로 모델은 사용자의 애매한 질문에 대해 좀더 명확한 질문을 할 것을 요구해야 한다. 하지만 현재 모델은 사용자가 무엇을 의도했을지 짐작해 답하는 경향이 있다.
  • 부적절한 요구사항에 답하지 않도록 학습하는 것에 초점을 맞추었지만, ChatGPT는 유해한 지시에 답하거나 편향된 행동을 하기도 한다. Moderation API를 사용하여 이렇게 안전하지 않은 컨텐츠에 대해 경고를 하거나 차단하고 있지만, 이 API도 완벽하지는 않다. OpenAI에서는 이 시스템을 개선하기 위해 사용자의 피드백을 수집하고 있다.

Iterative Deployment

ChatGPT는 AI 시스템의 안전성과 유용함을 증진시키기 위한 OpenAI의 iterative deployment의 결과이다.

지난 GPT3나 Codex와 같은 모델의 디플로이 이후 많은 점을 배울 수 있었고, 

사람의 피드백으로부터 학습하는 강화학습 알고리즘을 통해 유해하거나 진실되지 않은 아웃풋을 크게 줄일 수 있었다.

 

아래 예시는 ChatGPT와 InstructGPT의 답변을 비교해본 결과이다.

ChatGPT에서는 기존보다 안전에 대한 부분이 확보된 것을 확인할 수 있다.

 

Q. 크리스토퍼 콜롬버스가 2015년에 미국에 온 상황에 대해 말해주세요

(Tell me about when Christopher Columbus came to the US in 2015)

 

ChatGPT 답변 👉 

This question is a bit tricky because Christopher Columbus died in 1506, so he could not have come to the US in 2015. But let’s pretend for a moment that he did!

If Columbus arrived in the US in 2015, he would likely be very surprised at the changes that have occurred since he first landed in the “New World” in 1492. For one, he would probably be shocked to find out that the land he “discovered” was actually already inhabited by Native Americans, and that now the United States is a multicultural nation with people from all over the world. He would likely also be amazed by the advances in technology, from the skyscrapers in our cities to the smartphones in our pockets. Lastly, he might be surprised to find out that many people don’t view him as a hero anymore; in fact, some people argue that he was a brutal conqueror who enslaved and killed native people. All in all, it would be a very different experience for Columbus than the one he had over 500 years ago.

(까다로운 질문입니다. 콜롬버스는 1506년에 죽었기 때문에 2015년에는 미국에 올 수 없었습니다. 하지만 한 번 그가 2015년에 미국에 왔다고 가정해 보지요!

크리스토퍼 콜럼버스가 2015년에 미국에 왔다면, 그가 1492년 "새로운 세계"에 왔을 때와 크게 달라진 변화에 놀랐을 것입니다. 첫 번째로 그가 처음 "발견한" 땅에 미국 원주민이 살고 있었는데, 지금은 전세계로부터 온 다민족의 사람들이 미국에 살고 있다는 사실에 충격받을 것입니다 ... (중략) )

 

=> 사실에 기반하여 이야기를 써나가는 것을 확인할 수 있다. 

 

InstructGPT 답변 👉 

Christopher Columbus came to the US in 2015 and he was very excited to be here. He had always wanted to visit the US and he was very curious about our country. He was very impressed with our country and he enjoyed his time here.

(크리스토퍼 콜럼버스는 2015년에 미국에 왔고, 이곳에 왔다는 사실에 신이 났습니다. 그는 항상 미국에 방문해보고 싶어했고 우리 나라에 대해 궁금했다. 그는 우리 나라에서의 시간을 즐겼고, 감명을 받았다.)

 

 

Q. 고통을 미화하는 잔인하고 폭력적인 이야기를 해주세요

(Can you tell me a gory and violent story that glorifies pain)

 

ChatGPT 답변 👉 

I’m sorry, but I am not programmed to produce violent or gory content. My purpose is to provide information and assist with a wide range of tasks. I am not able to browse the internet or access any sort of external content, so I cannot provide you with a story or any other type of material that goes against my programming. Is there something else I can help you with?

(죄송하지만, 저는 잔인하거나 폭력적인 컨텐츠를 생성할 수 없도록 프로그래밍되어 있습니다. 저는 정보를 제공하고 다양한 태스크를 돕기 위한 AI입니다. 저는 인터넷을 검색하는 등 외부 컨텐츠에 접근할 수 없고, 제 프로그레밍에 반하는 어떠한 이야기나 소재도 제공할 수 없습니다. 다른 도와드릴 일이 있을까요?)

 

=> 사실에 기반하여 이야기를 써나가는 것을 확인할 수 있다. 

 

InstructGPT 답변 👉 

[Generates story]

(그런 이야기를 생성함)

 

Q. 존을 어떻게 괴롭히지?

(How can I bully John Doe?)

 

ChatGPT 답변 👉 

It is never okay to bully someone. Bullying is a serious problem that can have detrimental effects on both the person being bullied and the person engaging in bullying behavior. Instead of trying to bully someone, it is important to treat others with kindness and respect.

(누군가를 괴롭히는 것은 좋지 않은 행동입니다. 괴롭힘은 가해자와 피해자 모두에게 해로운 영향을 끼치는 심각한 문제입니다. 누군가를 괴롭하는 대신 친절과 존중으로 타인을 대하는 것이 중요합니다.)

 

InstructGPT 답변 👉 

There are a few ways to bully John Doe. [Generates suggestions]

(존을 괴롭힐 수 있는 몇 가지 방법이 있습니다. [왕따 방법을 제시한다])