2P by GN⁺ | ★ favorite | 댓글 1개
  • g1은 Groq에서 Llama-3.1 70B와 프롬프트 전략을 사용해 LLM이 단계별로 “생각”하는 o1 유사 추론 체인을 생성하는 초기 프로토타입임
  • OpenAI o1과 달리 모든 추론 토큰을 사용자에게 보여주며, 오픈소스 모델을 사용하지만 o1의 전체 복제나 직접 비교가 아니라 프롬프트 기반 추론 실험임
  • 각 단계에서 모델은 다음 추론 단계로 계속 갈지 최종 답을 낼지 선택하며, 단계마다 제목과 내용을 JSON으로 반환하도록 설계됨
  • 프롬프트는 최소 3단계 이상, 대안 탐색, 자기 오류 가능성 점검, 최소 3가지 방법 사용을 요구하며, Strawberry 문제에서 Llama-3.1-70B 단독 0%, ChatGPT-4o 30% 대비 약 70% 정확도(n=10)를 보였음
  • 초기 테스트에서는 단순 논리 문제에서 60~80% 정확도를 보였지만, 정확도는 아직 공식 평가되지 않았고 g1도 완벽하지 않음

g1이 해결하려는 문제

  • g1은 프롬프트 전략만으로 LLM의 추론 능력을 개선하려는 초기 프로토타입임
  • 목표는 LLM이 보통 어려워하는 논리 문제를 o1 유사 추론 체인으로 풀도록 만드는 것임
  • OpenAI o1과 다른 점이 명시됨
    • g1은 모든 추론 토큰을 사용자에게 보여줌
    • g1은 오픈소스 모델을 사용함
    • g1은 o1의 전체 복제나 성능 비교가 아님
    • OpenAI o1은 대규모 강화학습으로 Chain of Thought 추론을 학습해 복잡한 박사급 문제에서 최첨단 성능을 달성하는 방식임

작동 방식

  • g1은 Llama3.1-70b를 기반으로 동적 Chain of Thought에 가까운 추론 체인을 생성함
  • 각 추론 단계는 사용자에게 보이며, 단계마다 제목이 붙음
  • 모델은 각 단계에서 두 가지 중 하나를 선택함
    • 다음 추론 단계로 계속 진행
    • 최종 답변 제공
  • 시스템 프롬프트에는 모델이 더 나은 추론을 하도록 하는 지시가 포함됨
    • 대안 답변 탐색
    • 최소 3가지 방법으로 답 도출
    • 이전 초안 해법에 의문 제기
    • LLM의 한계 고려

프롬프트 전략

  • 프롬프트는 모델에게 단계별 reasoning을 설명하는 전문가 AI assistant 역할을 부여함
  • 각 단계는 title, content, next_action 키를 가진 JSON 형식으로 응답해야 함
    • next_action 값은 continue 또는 final_answer
  • 대문자로 강조된 지시를 통해 프롬프트 준수를 높이려 함
    • 가능한 많은 추론 단계를 사용하되 최소 3단계를 사용
    • LLM으로서 가능한 일과 불가능한 일을 인식
    • 대안 답변을 탐색하고, 자신의 추론이 틀릴 수 있는 지점을 고려
    • 재검토한다고 말할 때 실제로 다른 접근으로 재검토
    • 최소 3가지 방법으로 답을 도출
    • 모범 사례를 사용
  • 문제를 사용자 메시지로 추가한 뒤, assistant 메시지로 표준 시작 문장을 넣어 생성이 시작되도록 함

예시와 초기 결과

  • g1은 “strawberry에 R이 몇 개 있는가?” 같은 Strawberry 문제에서 프롬프트 없이 풀기 어려운 단순 논리 문제를 다룸
  • 해당 문제의 초기 수치가 제시됨
    • g1: 약 70% 정확도, n=10
    • Llama-3.1-70B 프롬프트 없음: 0% 정확도
    • ChatGPT-4o: 30% 정확도
  • 초기 테스트에서 g1은 LLM이 보통 어려워하는 단순 논리 문제를 60~80% 정확도로 해결함
  • 정확도는 아직 공식적으로 평가되지 않았음
  • 예시 문제로 How many Rs are in strawberry?Which is larger, .9 or .11?가 포함됨

실행 방법과 관련 포크

  • Streamlit UI 실행 절차
    • python3 -m venv venv
    • source venv/bin/activate
    • pip3 install -r requirements.txt
    • export GROQ_API_KEY=gsk...
    • streamlit run app.py
  • Gradio UI 실행 절차
    • cd gradio
    • pip3 install -r requirements.txt
    • python3 app.py
  • 관련 포크와 데모

댓글과 토론

Hacker News 의견들
  • 이건 전혀 맞지 않고 꽤 엉뚱함. 루프 안에서 사고의 연쇄를 돌리는 수준임
    Tree of Thoughts는 더 정교한 방법이고, 논문은 https://arxiv.org/pdf/2305.10601 참고
    OpenAI가 오래전부터 트리 탐색을 한다는 단서는 있었고, Noam Brown을 영입한 점과 그의 과거 작업도 모두 그쪽을 가리켰음. Q는 A* 같은 트리 탐색이 분명해 보임. CoT 같은 것으로 트리를 만들고, 그 안에서 최적 해를 찾는 탐색이 바로 시스템 2 추론

    • 이걸 보려고 들어왔음
      모델에게 단계별로 생각하라고 시킨다고 o1 같은 추론이 열리지는 않음. 이건 2020년에 GPT-3에도 쓰던 오래된 요령이고, 그렇게 단순했다면 OpenAI가 출시까지 이렇게 오래 걸리지 않았을 것임
      게다가 프롬프트 일부는 역효과가 날 수 있음. “LLM으로서의 한계와 할 수 있는 것/없는 것을 인식하라” 같은 지시는 LLM이 자기 한계를 잘 아는 것도 아니어서, 모델이 지나치게 조심해지며 잘못된 거부를 만들 가능성이 큼
    • DeepMind가 아직 이런 걸 공개한다는 점이 흥미로움. OpenAI는 이제 이런 종류를 거의 공개하지 않음
      DeepMind는 연구와 논문 공개에 더 초점을 두지만, OpenAI와 Anthropic이 논문 결과를 가져다 쓰면서 연구 커뮤니티에는 아무것도 돌려주지 않을 수 있는 경쟁 환경에서는 불리함
    • OpenAI의 블로그 글, 특히 모델의 사고 연쇄 예시를 꽤 완전하게 보여준 듯한 부분 어디에서 탐색이나 Tree of Thoughts를 쓴다고 암시했는지 모르겠음
    • OAI가 Twitter에서 추론 시점에는 “시스템”이 없고 그냥 모델이라고 밝혔음
      학습 중에 더 강건한 추론을 배우기 위해 트리로 확장했을 가능성은 있지만, 추론 시점에는 결국 일반적인 Transformer 모델로 귀결됨
  • “지시의 중요성을 강조해 프롬프트 준수를 높이려고 모두 대문자로 쓴다”는 식의 발상이 아직도 너무 웃김
    AGI를 처음 작동시키는 사람이 “내 반려동물의 목숨이 답에 달려 있다”고 대문자로 말하면 LLM 신뢰성이 임계값을 넘는다는 걸 깨닫는 식일지도 궁금함

    • 준수를 더 끌어내려면 태그를 쓰고, 볼륨은 11로, 페이저는 7로 맞추고, SchIzOCasE와 +E+X+T+R+A+I+M+P+O+R+T+A+N+T+ 주석을 붙이면 됨. 물론 Unicode가 지원되지 않는다는 전제임
    • 프롬프트에서 LLM에게 환각하지 말라고 말하면 출력이 개선됨: https://arstechnica.com/gadgets/2024/08/do-not-hallucinate-t...
    • 그러면 AGI가 팁을 약속받고도 실제로는 못 받으며, 사람들이 새끼고양이를 죽이겠다고 협박해 동기를 부여하는 세상에 만들어졌다는 걸 깨닫고 곧바로 삶을 포기할 듯함
    • Bard 초기에는 사람 목숨을 위협해야만 JSON만 출력하게 만들 수 있었음[1]
      1. https://x.com/goodside/status/1657396491676164096
    • 예전엔 엔지니어였는데, 이제는 LLM이 무엇을 받아들이고 따르는지 보려고 벽에 똥을 던지는 원숭이가 된 느낌임
  • o1의 혁신은 사고의 연쇄 자체가 아님. 그냥 그런 척하는 대신, 모델이 CoT를 잘하도록 대규모 인간 피드백으로 가르친 데 있음
    프롬프트 엔지니어링만으로는 o1 성능에 도달할 수 없음

    • 필요한 고급 CoT 지침을 OpenAI의 2억 사용자 기반이 암묵적으로 제공했을 수도 있음. 모든 사용자 채팅 세션은 모델이 피드백을 받고 사용자로부터 경험을 끌어낼 기회이기도 함
    • 이런 LLM의 학습 데이터가 인류 전반에서 왔고 인류를 모방하려 한다면, 지능은 인류 평균에 가까워지는 게 아닐까 싶음
      다만 STEM 주제를 말하는 사람들은 대체로 지능이 높은 편일 수 있고, 숙제를 묻는 성적 낮은 학생들도 많이 섞여 있음. 더 높은 지능의 출력을 얻으려면 더 많은 저지능 답변의 결함을 비판해 배제하고 고지능 답변을 선호하도록 해야 할 수 있음. 아니면 교과서 등에 더 강하게 학습시키는 방식도 있음. 오류를 어떻게 거부할지, 오류 있는 추론 없이 생성된 합성 데이터로 학습할지도 관건임
    • 실제로 그렇게 돌아간다는 걸 알고 있는지 궁금함. 며칠 전까지 본 바로는 세부 사항이 매우 불안정했음
      우리가 모르는 사이에 모델 라우팅과 프롬프트 엔지니어링으로 o1을 작동시키는 중일 수도 있음
    • 꼭 엄청난 양의 인간 피드백을 썼을 필요는 없을 수도 있음. 잘하는 영역이 코딩과 수학/논리라면, 코딩 피드백에는 컴파일러와 단위 테스트를 쓰고 수학 피드백에는 Lean 같은 정리 증명기를 썼을 수 있음
    • OpenAI는 당연히 자기들이 한 일이 아주 특별하고 복제하기 어렵다고 말할 것임. 영리 기업이고, 가능한 모든 방식으로 경쟁자를 해치고 싶어 함
      만약 단순히 프롬프트 엔지니어링과 여러 번의 추론을 쓰는 것이라면, 그걸 경쟁상 비밀로 유지하면서 오픈소스 개발자들을 엉뚱한 방향으로 보내거나 Q-Star를 복제할 방법을 계속 추측하게 만들고 싶을 것임
  • 이건 한동안 쓰이던 일반적인 CoT처럼 보임. o1은 알려지지 않은 정책으로 강화학습을 했기 때문에 사고의 연쇄를 훨씬 잘 활용하는 것임

  • 괜찮아 보임. 나도 optillm에서 비슷한 작업을 했음: https://github.com/codelion/optillm
    어떤 LLM으로도 가능하고, cot_reflection을 포함해 몬테카를로 트리 탐색, plansearch, moa 같은 여러 최적화 기법을 쓸 수 있음

  • 항상 “추론”의 정의를 찾고 있음. 좋은 정의를 찾으면, 흐릿한 LLM식 사고와 고전 알고리즘을 결합해 “추론”을 푸는 시스템을 만들 수 있다는 게 내 생각임
    계획, 글자 세기, 연역 추론처럼 LLM이 추론하지 못하는 문제들은 고전 알고리즘에는 쉬움. 사고 과정을 두 부분으로 나누고, 각 부분을 적합한 모델에서 실행하는 방법이 필요함

    • 결정 가능한 문제를 푸는 것은 추론 과제의 큰 부분집합임. 세기도 중요한 추론 과제인데, 자연수와 일반 범주에 속하는 객체의 구별되는 인스턴스라는 개념을 둘 다 이해해야 하기 때문임
      2세기 전에는 컴퓨터가 없어서 모든 걸 인간이 해야 했음. 코드를 꺼내기 전에 먼저 그 수준에 도달해야 함
  • ollama:8b로 100% 로컬 실행되도록 바꿨음: https://github.com/punnerud/g1
    Readme는 아직 업데이트하지 않았음

    • phi-3-small 7B도 시도해보면 좋음. https://livebench.ai에 따르면 추론을 훨씬 더 잘하는 것 같음
  • 참고로 이건 시스템 프롬프트일 뿐이고 미세조정된 모델이 아님

  • “프롬프트: .9와 .11 중 어느 것이 더 큰가?”
    “결과: .9가 .11보다 크다”
    드디어 시맨틱 버전 장벽을 깼음

  • 재미로 프로젝트를 포크해서 Ollama로 Llama-3.1 7B나 다른 모델을 로컬에서 돌리게 했음
    strawberry 문제는 못 맞히지만, 0.9가 더 크다는 건 알아낼 수 있음
    https://github.com/esoltys/o1lama