2024년 6월 27일, OpenAI가 발표한 CriticGPT는 AI 개발 과정에서 중요한 변화를 제시합니다. 개발자들은 항상 더 나은 AI 모델을 만들기 위해 노력하며, 그 과정에서 가장 중요한 것 중 하나는 모델의 실수를 찾아내고 개선하는 것입니다. 지금까지 이 작업은 주로 사람의 몫이었습니다.

ChatGPT 개발 과정을 돌이켜보면, 데이터 선별부터 모델의 답변 평가, 그리고 최종 성능 평가까지 모든 단계에서 사람의 개입이 필수적이었습니다. 특히 RLHF(Reinforcement Learning from Human Feedback) 과정에서는 사람이 직접 모델의 답변을 평가하고, 그 피드백을 바탕으로 모델을 개선했습니다. 이는 시간과 노력이 많이 들뿐만 아니라, 평가자의 주관성과 편향이 모델에 영향을 미칠 수 있다는 한계가 있었습니다.

 

ChatGPT 원리는 무엇이고, 어떻게 학습되었을까?

최근 ChatGPT에 대한 관심이 엄청나게 커지고 있습니다. 지난 연말에 공개된 ChatGPT의 사용자는 전 세계 1억 명을 넘어섰고 수많은 사람들이 저마다의 방식으로 시험을 하고 있습니다. 어느 날부터

yunwoong.tistory.com

CriticGPT는 이러한 과정을 AI로 대체하려는 시도입니다. GPT-4를 기반으로 만들어진 이 모델은 ChatGPT의 응답을 비평하고 분석하는 역할을 수행합니다. 즉, 지금까지 사람이 담당했던 평가와 피드백 제공의 일부를 AI가 수행하게 되는 것입니다. 개발자 관점에서 이 접근 방식은 주목할 만합니다. AI가 AI를 평가하는 이 방식은 모델의 품질을 향상하는 새로운 패러다임이 될 잠재력을 가지고 있습니다. 특히 코드 리뷰나 버그 탐지와 같은 개발자들에게 친숙한 개념을 AI 모델 평가에 적용했다는 점에서 흥미롭습니다.

이 글에서는 CriticGPT가 어떻게 작동하고, 어떤 결과를 보여주었는지, 그리고 이 기술이 AI 개발 과정에 어떤 변화를 가져올 수 있는지 자세히 살펴보겠습니다. 또한 이 접근 방식이 가져올 수 있는 새로운 가능성과 해결해야 할 과제들에 대해서도 논의해 보겠습니다.


CriticGPT의 목적과 작동 원리

CriticGPT의 핵심 목적은 RLHF(Reinforcement Learning from Human Feedback) 과정에서 인간 평가자들의 역할을 보조하거나 일부 대체하는 것입니다. 이는 AI 모델 평가 과정의 효율성을 높이고, 인간 평가의 주관성과 편향을 줄이는 데 기여할 수 있습니다.

출처 : OpenAI

작동 원리는 다음과 같습니다.

  • 입력 처리: CriticGPT는 (질문, 답변) 쌍을 입력으로 받습니다. 예시 이미지에서 볼 수 있듯이, 질문은 Python 함수 작성에 관한 것이고, 답변은 그에 대한 코드 솔루션입니다.
  • 비평 생성: 모델은 입력받은 답변을 분석하고, 그 내용의 정확성, 적절성, 일관성 등을 평가합니다. 예시에서 CriticGPT는 코드의 보안 취약점을 발견했습니다.
  • 오류 지적: 생성된 비평에는 답변에서 발견된 오류나 개선이 필요한 부분이 명시적으로 지적됩니다. 예시에서는 startswith() 메서드 사용의 불안전성을 지적하고 있습니다.
  • 대안 제시: CriticGPT는 단순히 문제점을 지적하는 데 그치지 않고, 더 나은 해결책을 제시합니다. 예시에서는 os.path.commonpath() 사용을 권장하고 있습니다.
  • 포맷팅: 비평은 특정 포맷을 따라 구조화됩니다. 예시에서는 문제가 되는 코드 부분을 언급하고, 그에 대한 상세한 설명을 제공하는 형식을 취하고 있습니다.

이 예시는 CriticGPT의 강점을 잘 보여줍니다.

  • 보안 인식: 일반적인 코드 실행 오류뿐만 아니라, 잠재적인 보안 취약점까지 발견할 수 있습니다.
  • 구체적 피드백: "불안전하다"는 단순한 지적을 넘어, 왜 불안전했는지, 어떻게 악용될 수 있는지 상세히 설명합니다.
  • 해결책 제시: 문제 지적에 그치지 않고, 더 안전한 대안 메서드를 제안합니다.
  • 컨텍스트 이해: 파일 시스템 보안이라는 전체 맥락을 이해하고 있음을 보여줍니다.

개발자 관점에서 이러한 CriticGPT의 능력은 매우 유용할 수 있습니다. 코드 리뷰 과정에서 인간 개발자가 놓치기 쉬운 미묘한 보안 이슈를 발견하고, 더 나은 구현 방법을 제안함으로써 전반적인 코드 품질과 보안성을 향상할 수 있기 때문입니다.

데이터 수집 및 학습 방법

CriticGPT의 개발 과정은 일반적인 RLHF(Reinforcement Learning from Human Feedback) 파이프라인과 유사하지만, 몇 가지 중요한 차이점이 있습니다. 이 과정은 다음과 같은 단계로 이루어집니다.

  1. 변조(Tampering) 단계
    • OpenAI의 RLHF 파이프라인에서 사용된 (질문, 답변) 쌍을 샘플링합니다.
    • 인간 평가자들이 모델이 작성한 답변(주로 코드)에 의도적으로 미묘한 버그를 추가합니다.
    • 이 과정은 '적대적'으로 진행됩니다. 평가자들은 LLM 비평가(초기에는 ChatGPT, 후에는 CriticGPT의 이전 버전)를 사용하여 자신들이 추가한 버그가 최소 3번 중 1번은 발견되지 않도록 합니다.
    • 각 추가된 버그에 대해, 평가자들은 마치 코드 리뷰에서 그 버그를 발견한 것처럼 설명을 기록합니다.
  2. 비평 생성 및 비교
    • 변조된 코드에 대해 여러 LLM 비평(3개의 AI 생성 비평과 1개의 인간 작성 '골드 스탠다드' 비평)을 생성합니다.
    • 인간 평가자들이 이 비평들을 비교 평가합니다. 평가 기준에는 포괄성, 특정 버그 포함 여부, 환각(hallucination) 또는 사소한 지적 여부, 전반적인 유용성 등이 포함됩니다.
  3. 보상 모델 학습
    • 인간 평가자들의 비교 평가를 바탕으로 보상 모델을 학습합니다.
    • 이 모델은 비평의 품질을 예측하도록 훈련됩니다.
  4. 정책 최적화
    • PPO(Proximal Policy Optimization) 알고리즘을 사용하여 CriticGPT의 정책을 최적화합니다.
    • 이 과정에서 보상 모델의 예측을 바탕으로 CriticGPT가 더 나은 비평을 생성하도록 학습됩니다.
  5. Force Sampling Beam Search (FSBS)
    • 추론 시 더 포괄적이고 정확한 비평을 생성하기 위한 샘플링 전략을 적용합니다.
    • 이 방법은 여러 가능한 비평을 생성한 후, 보상 모델의 점수와 비평의 길이를 고려하여 최적의 비평을 선택합니다.

이 학습 방식의 주요 특징과 장점

  • 현실적인 오류 분포: 변조 과정을 통해 실제 AI 모델이 범할 수 있는 오류와 유사한 버그를 생성합니다.
  • 적대적 학습: LLM 비평가를 속이는 방식으로 버그를 추가함으로써, 더 어렵고 미묘한 오류를 탐지하는 능력을 향상합니다.
  • 다양한 평가 기준: 단순히 버그를 찾는 것 외에도 비평의 전반적인 품질, 환각 여부 등을 고려합니다.
  • 유연한 추론: FSBS를 통해 추론 시 비평의 포괄성과 정확성 사이의 균형을 조절할 수 있습니다.

이러한 방법론은 CriticGPT가 단순한 오류 탐지를 넘어서 맥락을 이해하고, 복잡한 추론을 수행하며, 유용하고 통찰력 있는 비평을 제공할 수 있게 합니다. 또한 이 접근법은 지속적인 개선과 새로운 유형의 오류에 대한 적응을 가능하게 하여, AI 모델의 평가 및 개선 과정을 더욱 효과적으로 만듭니다.

구체적인 예시를 통해 살펴보면 다음과 같습니다.

출처: OpenAI

  1. Task 선택:
    • ChatGPT 데이터에서 Task와 솔루션을 샘플링합니다.
      예: "Function to make list of n lists in python"이라는 Task에 대해 def n_lists(n): return [[] for _ in range(n)]라는 솔루션이 제공됩니다.
  2. 버그 추가
    • 계약자(평가자)가 코드 조각을 편집하여 버그를 추가합니다.
      예: def n_lists(n): return [[]] * n 이 변경은 미묘하지만 중요한 버그를 도입합니다.
  3. 버그 설명 작성
    • 계약자(평가자)는 추가한 버그를 설명하는 비평을 작성합니다.
      예: "This creates multiple references to the same list. If you edit any element, all lists will be mutated." 이는 마치 코드 리뷰에서 이 버그를 발견한 것처럼 작성됩니다.
  4. AI 비평 생성
    • ChatGPT/CriticGPT를 사용하여 변조된 코드에 대한 비평을 생성합니다.
      예: "The function name n_lists is not very descriptive." 이 단계에서 AI가 실제 추가된 버그를 발견하지 못하는 경우도 있습니다.
  5. 비평 비교
    • 여러 비평(A, B, C, D)을 생성하고, 계약자가 이들을 비교 평가합니다.
    • 평가 기준에는 포괄성, 사소한 지적(nitpick) 여부, 가짜 문제 지적 여부 등이 포함됩니다.
    • 특히 '비평 버그 포함(CBI)' 항목에서는 의도적으로 추가된 특정 버그를 지적했는지를 평가합니다.
  6. 전체 순위 매기기
    • 모든 평가를 종합하여 비평들의 전체 순위를 매깁니다.
    • 예시에서는 B > A > D > C 순으로 비평의 품질이 평가되었습니다.

이 과정의 핵심은 'tampering'이라고 불리는 버그 추가 단계입니다. 이 단계를 통해 AI 모델이 실제로 범할 수 있는 미묘하고 교묘한 오류를 시뮬레이션합니다. 또한, AI 비평가가 이러한 버그를 쉽게 발견하지 못하도록 함으로써, 보다 어려운 문제를 해결할 수 있는 강력한 비평 모델을 훈련시킬 수 있습니다. 이러한 상세하고 구조화된 데이터 수집 과정은 CriticGPT가 단순한 오류 탐지를 넘어서, 코드의 전반적인 품질과 설계까지 평가할 수 있는 능력을 개발하는데 기여합니다. 또한 이 과정은 AI 모델의 실수를 시뮬레이션하고 평가하는 체계적인 방법을 제공함으로써, AI 시스템의 안전성과 신뢰성을 향상하는 데 중요한 역할을 합니다.

CriticGPT의 성능 및 결과

OpenAI가 발표한 CriticGPT의 성능 결과는 매우 인상적입니다. 이 모델은 인간 평가자와 기존의 ChatGPT를 모두 능가하는 성능을 보여주었습니다. 주요 결과는 다음과 같습니다.

출처: OpenAI

  • 인간 비평과의 비교
    • ChatGPT의 비평은 인간 비평보다 64% 더 선호되었습니다. (Elo 점수 기준)
    • CriticGPT의 비평은 인간 비평보다 85% 더 선호되었습니다. (Elo 점수 기준)

이는 AI 모델이 생성한 비평이 인간 평가자들에 의해 더 높은 품질로 인식되었음을 의미합니다.

  • 버그 탐지 능력
    • 인간 평가자들은 버그의 약 25%를 발견했습니다.
    • ChatGPT는 약 75%의 버그를 발견했습니다.
    • CriticGPT는 약 90%의 버그를 발견했습니다.

이 결과는 AI 모델, 특히 CriticGPT가 인간보다 훨씬 더 효과적으로 코드의 버그를 찾아낼 수 있음을 보여줍니다. 그러나 OpenAI는 이 결과에 대해 중요한 주의사항을 덧붙였습니다. 현재 모델보다 뛰어난 성능을 보일 수 있는 전문가들이 분명히 존재하지만, 이 실험 결과는 ChatGPT와 CriticGPT 프로덕션에 실제로 사용된 경험 많은 계약자들의 대표적인 샘플을 기반으로 한 것이라고 설명했습니다. 이러한 결과는 CriticGPT와 같은 AI 비평 모델이 코드 리뷰와 품질 관리 과정에서 강력한 도구가 될 수 있음을 시사합니다. 그러나 동시에, 이는 완전한 대체가 아닌 보완적 도구로서의 역할을 강조하고 있습니다.

출처: OpenAI

CriticGPT 역시 완벽하지 않기 때문입니다. 여전히 '환각' 문제(실제로 존재하지 않는 오류를 지적하는 문제)가 있을 수 있으며, 모든 프로그래밍 언어나 프레임워크의 특성을 완벽히 이해하지 못할 수 있습니다. 따라서 현재로서는 인간 개발자의 판단과 함께 사용되어야 가장 효과적일 것입니다.

CriticGPT의 의미와 시사점

CriticGPT의 의미와 시사점은 다음과 같이 요약할 수 있습니다.

  • 코드 리뷰 향상: CriticGPT는 인간 개발자가 놓치기 쉬운 미묘한 버그나 보안 취약점을 발견할 수 있어, 코드 품질을 크게 향상할 수 있습니다.
  • 생산성 증대: 반복적이고 시간 소모적인 코드 검토 작업을 AI가 보조함으로써, 개발자들은 더 창의적이고 고차원적인 작업에 집중할 수 있습니다.
  • 학습 도구로서의 가치: CriticGPT의 상세한 피드백은 주니어 개발자들의 학습과 성장에 도움을 줄 수 있습니다.
  • AI와의 협업 모델: CriticGPT는 AI와 인간 개발자 간의 효과적인 협업 모델을 제시합니다. 이는 향후 소프트웨어 개발 방식의 변화를 암시합니다.
  • 보안 강화: 보안 취약점을 더 효과적으로 발견할 수 있어, 전반적인 소프트웨어 보안성 향상에 기여할 수 있습니다.
  • 지속적인 개선 문화: AI의 지속적인 피드백은 코드 품질에 대한 끊임없는 개선 문화를 촉진할 수 있습니다.
  • 새로운 기술 습득의 필요성: 개발자들은 AI 도구를 효과적으로 활용하고 그 결과를 해석하는 새로운 기술을 습득해야 할 필요성이 생깁니다.

CriticGPT와 같은 AI 도구는 개발 프로세스를 혁신하고 소프트웨어의 품질과 안정성을 높이는 데 큰 역할을 할 잠재력을 보여줌과 동시에 개발자들에게 새로운 과제를 제시합니다. 앞으로 개발자들은 이러한 AI 도구를 효과적으로 활용하고 AI와 협업하는 능력을 필수적인 역량으로 갖추어야 할 것입니다. 분명 개발자의 역할과 필요 기술이 진화하고 있음을 명확히 보여줍니다


향후 과제 및 전망

CriticGPT의 성공은 고무적이지만, 여전히 해결해야 할 과제들이 있습니다.

  • 환각 문제: CriticGPT는 여전히 '환각' 문제를 완전히 해결하지 못했습니다. 실제로 존재하지 않는 문제를 지적하는 경우가 있어, 이를 개선할 필요가 있습니다.
  • 복잡한 버그 탐지: 현재 CriticGPT는 단일 위치에서 발견되는 버그에 초점을 맞추고 있습니다. 향후에는 여러 부분에 걸쳐 있는 복잡한 버그도 탐지할 수 있어야 할 것입니다.
  • 확장성: 더 긴 코드나 복잡한 프로젝트에 대해서도 효과적으로 작동할 수 있도록 확장성을 개선해야 합니다.
  • 다양한 도메인으로의 확장: 현재는 주로 코드에 초점을 맞추고 있지만, 향후에는 다른 도메인의 텍스트에 대해서도 효과적인 비평을 할 수 있어야 할 것입니다.

CriticGPT는 AI가 AI를 평가하는 새로운 패러다임을 제시하며, AI 모델의 품질 향상에 큰 기여를 할 수 있는 가능성을 보여주었습니다. 개발자로서 우리는 이러한 접근 방식에 주목하고, 우리의 개발 프로세스에 어떻게 적용할 수 있을지 고민해 볼 필요가 있습니다. CriticGPT가 보여준 성과는 AI의 발전이 단순히 더 큰 모델을 만드는 것이 아니라, 더 스마트한 평가와 개선 방법을 통해 이루어질 수 있다는 것을 보여줍니다. 앞으로 CriticGPT와 같은 접근 방식이 더욱 발전하여, 우리가 더 안전하고 신뢰할 수 있는 AI 시스템을 개발하는 데 큰 도움이 되기를 기대해 봅니다.

반응형