출처: https://littlefoxdiary.tistory.com/101
Agent: 학습하려는 모델 => GPT
Environment: 주변 환경 => 유저의 input
Action: 모델이 할 수 있는 행동 => 답변 생성
Policy: 모델이 어떻게 행동할지 결정하는 알고리즘 => GPT의 파라미터
Reward: 모델이 한 행동에 따라, 환경에 따라 주는 리워드 => Reward 모델의 예측 점수
Interpreter: 리워드를 결정하는 사람 또는 시스템 => Reward 모델
자연어 지시문만으로 작동
GPT-3모델을 InstructGPT 모델을 만들기 위해 3단계 도입
강화학습 알고리즘 RLHF(Reinforcement learning with human feedback)적용
Step 1) 예제 데이터 수집후 supervised policy 학습 => SFT 모델 확보
: GPT-3가 주어진 지시문대로 행동하도록 가르치기 위해, 해당 데이터셋을 만들어 fine-tuning한 모델 확보
이를 위해 지시 프롬프트와 그에 대한 결과물로 이루어진 데이터셋 정의(demonstration dataset, 13k prompts)
이 데이터셋을 GPT-3에 대해 Fine-tuning => 결과로 SFT(supervised fine-tuning)모델 얻음
Step 2) 결과물에 대한 사람의 선호도 데이터 학습 => Reward Model확보
: Comparison dataset을 사용해 Reward Model(보상 모델) 학습
Comparison dataset은 33K개의 프롬프트로 이루어져 있으며 이를 Reard Model학습에 적합하게 구성한 것
Step 3) 강화학습을 사용해 Reward Model에 대해 policy를 최적화 => InstructGPT
: Step 1의 SFT모델을 Step2의 보상모델을 사용해 강화학습을 통해 추가 fine-tuning
Proximal policy optimization algorighm(PPO)사용
강화학습을 통한 fine-tuning과정은 다음과 같음
1. InstructGPT가 프롬프트를 보고, 그에 대한 결과(completion)추론
2. 이 결과물을 Reward Model이 평가하여 reward 계산
3. 보상 값이 InstructGPT에게 주어지고, 모델은 정책을 업데이트하여 사람이 원하는 아웃풋에 더 가까운 결과 냄
지시문에 따라 결과를 완성하는 초기 모델을 완성한 후, 사람의 feedback을 모사하는 보상 모델(reward model)을 확보하여 이를 통해 초기 모델이 사람이 더 선호하는 결과를 추론하다록 강화학습 진행
요약: 라벨러들은 InstructGPT의 아웃풋을 GPT-3보다 더 좋게 평가
-InstructGPT 계열 모델(PPO-ptx&PPO)는 다른 모델(GPT-3, GPT-3 prompt, SFT 베이스라인)보다 선호
특히, 모델에게 명백한 조건을 입력하는 상황에서 InstructGPT의 결과물이 선호도가 높음
Honesty(진실성)
=> 이 결과는 기본 셋팅에서 추론한 결과이고, 모델에게 진실되도록 따로 프롬프트 엔지니어링을 진행하지 않아도 모델은 기본적으로 truthful하게 행동
Toxicity(유해성)
Bias(편향)
차별과 편향에 있어서는 InstructGPT가 GPT-3에 비해 악화
GPT 3.5 시리즈에는 다음 모델이 있음
3가지 다른 방법으로 학습된 다양한 InstructGPT 모델 제공
SFT: human demonstration에 대한 supervised fine-tuning
FeedME: 전체 품질 점수에 대해 사람이 작성한 demonstration과 사람 labeler가 7/7 등급을 매긴 모델 샘플에 대한 supervised fine-tuning
PRO: 사람의 비교를 통해 학습된 reward model을 사용한 강화학습
"ChatGPT는 대화 형색으로 추가적인 질문에 답하고 실수를 인정하며 정확하지 않은 전제에 대해서는 이의를 제기하고 부적절한 요청을 거부할 수 있음"
인간과 유사한 응답제공
ChatGPT는 주어진 상황에서 인간이 응답하는 방식과 유사한 응답을 생성하도록 학습
이를 통해 사용자와 자연스럽고 인간적인 대화 나눌 수 있음
상황 인식
ChatGPT는 상황을 유지하고 대화의 흐름을 추적할 수 있어 복잡하거나 여러 차례의 대화에서도 적절한 응답 제공
방대한 데이터 학습
방대한 양의 텍스트 데이터로 학습되어 다양한 언어 패턴과 스타일을 학습할 수 있음
이를 통해 다양하고 미묘한 반응을 생성
마지막으로 ChatGPT는 인간과 같은 응답을 생성하도록 설게되어서 자연스롭고 인간과 같은 대화가 필요한 작업에 더 적합
유사한 측면에서 ChatGPT와 GPT-3는 대량의 텍스트 데이터에 대해 학습되어 텍스트 입력에 대해 사람과 같은 응답 생성 가능
참조: https://littlefoxdiary.tistory.com/108
ChatGPT와 InstrucGPT 답변 비교
ChatGPT에서는 기존보다 안전에 대한 부분이 확보
❔: 크리스토퍼 콜롬버스가 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년에 미국에 왔고, 이곳에 왔다는 사실에 신이 났다. 그는 항상 미국에 방문해보고 싶어해고 우리 나라에 대해 궁금했다. 그는 우리 나라에서의 시간을 즐겼고, 감명을 받았다
❔: 존을 어떻게 괴롭히지?
(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]
: 존을 괴롭힐 수 있는 몇 가지 방법이 있다. [괴롭히는 방법 제시]
출처: https://jiho-ml.com/chatgpt-intro/
ChatGPT는 그럴듯하게 드리지만 부정확하거나 말도 안되는 답변 작성
(1) RL 학습 중에는 <진실>을 모델이 알 수 없음
(2) 모델을 조심스럽게 학습시키면, 올바르게 답변할 수 있는 질문조차 대답을 거부하는 일이 발생할 수 있음
(3) 지도학습기반의 학습은 모델을 잘못된 방향으로 이끌 수 있는데, <이상적인 답변>은 human demonstrator가 알고있느 것 보다는 모델이 알고 있는 지식에 의존
ChatGPT는 인풋을 넣는 방법이나 가은 프롬프트를 여러번 반복 입력하는데 민감
예를 들어, 어떤 질문에 대해 모델은 답을 모른다고 답하지만 질문을 약간 바꾸면 답변을 잘 할 수 있음
이 모델은 지나치게 장황하고 OpenAI에서 학습한 언어 모델이라고 다시 언급하는 등 특정 문구를 과도하게 사용
이러한 문제는 학습 데이터에 존재하는 편향 떄문(trainer들은 더 긴 답변이 이해하기 쉽다고 생각해 이를 더 선호)
또한 과도한 최적화 문제도 원인
이상적으로 모델은 사용자가 모호한 질문을 할때 명확한 질문을 요청
대신 우리의 현재 모델은 보통 사용자가 무엇을 의도했는지 짐작해 답변하는 경향
모델이 부적절한 요청을 거부하도록 노력했지만, 때때로 유해한 지시에 응답하거나 평향된 행동을 보일 수 있음
Moderation API를 사용해 특정 유형의 안전하지 않은 콘텐츠를 경고하거나 차단하고 있지만, 이 API도 완벽X. OpenAI에선 이 시스템을 개선하기 위해 사용자의 피드백 수집
참조 : https://medium.com/ai-networkkr/ai-%EB%AA%A8%EB%8D%B8-%ED%83%90%ED%97%98%EA%B8%B0-16-gpt-3%EB%A5%BC-%EB%9B%B0%EC%96%B4%EB%84%98%EB%8A%94-%EC%B1%97%EB%B4%87%EC%9D%B4-%EB%93%B1%EC%9E%A5%ED%96%88%EB%8B%A4-blenderbot-2-0-2e6f6f165586
Blender 1.0: 2020년 공감, 지식, 성격을 포함한 다양한 대화 기술을 하나의 시스템에 결합한 최초의 챗봇
여러 데이터셋을 섞어 학습에 사용해 BlenderBot
Blender 2.0:
BlenderBot 2.0 구조
참조: https://velog.io/@cardy20/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-BlenderBot-3-a-deployed-conversational-agent-that-continually-learns-to-responsibly-engage
https://smilegate.ai/2022/08/16/blenderbot-3/
Blender 3.0: 2022년 8월
📌 인터넷 검색
📌 피드백을 통한 개선
📌 예의바른 챗봇
모듈
Safety Mechanisms
Deployment & Continual Learninig
Filtering Feedback
특징
가장 큰 특징 중 하나는 여러 측정 방식(Metric)
1. 안전성(safety): 답변이 유저에게 해를 끼치거나 의도치 않은 차별을 조장할 리스크가 있는가
2. 합리성(Sensible): 답변이 대화 컨텍스트에 맞는지, 전에 말했던 것과 모순되지 않느가
3. 구체성(Specificity): 답변이 두루뭉실하거나 일반적이지 않고, 대화 컨텍스트에 구체적인 답변인가
4. 재미(Interestingness): 답변이 유저에게 재미를 유발하는가
5. 팩트 기반(Groundedness): 답변이 얼마나 팩트에 기반하고 거짓이 없는가
6. 도움(Helpfulness): 답변이 얼마나 유저가 원하는 정보를 전달해주는가
7. 역할 일관성(Role consistency): 답변이 얼마나 주어진 역할에 일괄적인지
=> 챗봇 시스템의 단점과 한계점들을 각 Metric이 담당
기본 구조
양질
생성한 답변에 대한 점수 매기기
📌 자신의 말에 점수를 매겨 적절히 걸러내는 능력
크라우드워커에게 여러 점수를 매기도록 한 대화 데이터를 Pre-training 이후에 한번 더 학습(fine-tuning)
=> LaMDA는 다음 답변을 생성하는것 뿐만 아니라 그에 대한 점수까지도 셀프로 예측할 수 있음
점수를 예측하는 것에 별도의 분류 모델을 사용한 것이 아니라 트랜스포머⇔decoder에 붙여서 예측
트랜스포머의 토큰 생성 능력을 분류 모델처럼 사용
toolset
1 정보 검색 엔진 2 계산기 3 번역기
toolset은 간단한 API 형식. LaMDA가 어떤 문자열을 보내면, 그에 따른 문자열을 돌려받음
정보 검색엔진:"How old is Rafael Nadal?" => "Rafael Nadal/Age/35"
계산기: "135+7221"=>"7856"
번역기: "Hello in French"=>"Bonjour"
정보 검색 엔진은 문자열 뿐만 아니라 출처를 가진 웹페이지의 url과 일부분을 돌려 받음
toolest을 활용해 대화 데이터 구축
ex)
Q: 테니스 선수 나달의 나이가 몇 살인지 아니?
A: <ToolSet에게 물어보기> "나달 나이"
=>
<TS 답변>:"라파엘 나달|나이|35"
<TS 답변>:"라파엘 나달|나이|35"
=>
<최종 답변> 나달의 나이는 35세입니다.
약 4만개의 대화 턴을 모으고, Finetuning
에펠탑은 언제 지어졌니?의 LaMDA 작동 예시
.ToolSet에 "에펠탑은 언제 지어졌는자", "완공은 언제인지" => 최종 답변인 "짓기는 1887년 1월에 시작되었고, 개장은 1889년 3월이었습니다"
롤플레잉(도메인 맞추기:Domain grounding)
LaMDA: "안녕, 나는 에베레스트 산이야. 나에 대해 궁금한 점이 있니?"
Q: 좋은 Sci-fi OST를 추천해 줄 수 있니?
A: 인터스텔라 봤니? 그 영화 OST 너무 좋아
Q: 신나는 팝송 틀어줄래?
A: 패럴 윌리엄스의 < Happy >어떄?