g1 - Groq에서 Llama-3.1 70B를 사용하여 o1과 유사한 추론 체인 생성
(github.com/bklieger-groq)- 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 venvsource venv/bin/activatepip3 install -r requirements.txtexport GROQ_API_KEY=gsk...streamlit run app.py
- Gradio UI 실행 절차
cd gradiopip3 install -r requirements.txtpython3 app.py
- 관련 포크와 데모
- Hugging Face Spaces Demo
- Mult1: 여러 AI 제공자를 사용해 o1 유사 추론 체인을 생성
- thinkR: R에서 로컬 LLM으로 o1 유사 Chain of Thought를 구현
댓글과 토론
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]
- 예전엔 엔지니어였는데, 이제는 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