2P by neo 19일전 | favorite | 댓글 1개

프로그램 합성을 위한 구문 트리 확산

개요

  • 문제점: 대형 언어 모델(LLM)은 코드를 한 번에 하나의 토큰씩 생성함. 이 과정에서 프로그램의 실행 결과를 관찰하는 피드백이 부족함.
  • 해결책: 구문 트리에서 작동하는 신경 확산 모델을 제안함. 이미지 확산 모델과 유사하게, 구문 트리에 적용된 노이즈를 역으로 처리함.
  • 방법: 코드 생성 대신 반복적으로 편집하여 구문적 유효성을 유지함. 이를 통해 검색과 결합하기 쉬움.
  • 응용: 역 그래픽 작업에 적용하여 이미지를 해당 이미지를 생성하는 프로그램으로 변환함. 검색과 결합하여 그래픽 프로그램을 작성하고, 실행 결과를 확인하며 디버깅함.

프로그램에 노이즈 추가란?

  • 노이즈 추가: 구문 트리의 임의 노드를 선택하고, 해당 노드를 올바른 유형의 다른 노드로 대체함.
  • 노이즈 역전: 노이즈를 추가한 후, 이를 역으로 처리하여 원래 상태로 되돌림.

검색을 통한 프로그램 생성

  • 검색 사용: 모델이 주어진 목표 이미지를 생성하기 위한 최적의 프로그램을 찾기 위해 검색을 사용함.
  • 효율성: 몇 개의 검색 레이어만으로 올바른 프로그램을 찾을 수 있음.

인용

  • 논문: "Diffusion On Syntax Trees For Program Synthesis"
  • 저자: Shreyas Kapur, Erik Jenner, Stuart Russell
  • 출판: arXiv, 2024

감사의 말

  • 기술 지원: Kathy Jang, David Wu, Cam Allen, Sam Toyer, Eli Bronstein, Koushik Sen, Pieter Abbeel

라이선스

  • Creative Commons Attribution-ShareAlike 4.0 International License: 이 웹사이트의 소스 코드를 자유롭게 사용할 수 있으며, 페이지 하단에 링크를 추가해야 함.

GN⁺의 의견

  • 흥미로운 점: 프로그램의 실행 결과를 반영하여 코드를 편집하는 방식은 기존의 순차적 코드 생성 방식보다 더 직관적임.
  • 도움이 되는 이유: 역 그래픽 작업에 유용하며, 특히 손으로 그린 스케치를 프로그램으로 변환하는 데 강력한 도구가 될 수 있음.
  • 비판적 시각: 노이즈를 추가하고 역전하는 과정이 복잡할 수 있으며, 실제 적용 시 성능과 효율성에 대한 추가 검증이 필요함.
  • 관련 제품 추천: 비슷한 기능을 제공하는 다른 프로젝트로는 OpenAI의 Codex와 같은 코드 생성 모델이 있음.
  • 기술 도입 고려사항: 이 기술을 도입할 때는 모델의 학습 데이터와 실제 적용 환경에서의 성능을 면밀히 검토해야 함.
Hacker News 의견
  • Racket과 MOOC 힌트 생성: Racket과 MOOC 힌트 생성 방식이 유사함. 구문 트리를 변형하고 분석하여 목표 솔루션에 도달하는 방식임. 이를 최신 머신러닝 접근법과 결합할 수 있을지 궁금함.

  • 유전 알고리즘과 서브트리 변형: 90년대 Koza와 Adami가 유전 알고리즘의 일환으로 서브트리 변형을 깊이 연구했음. 최적화 함수가 약간 다름.

  • 프로그램 트리 생성: 2000년 유전 알고리즘을 이용한 프로그램 트리 생성에 대한 참고 문헌이 있음. 주요 내용은 빠져 있음.

  • Markov Chain Monte Carlo: 프로그램 합성에 Markov Chain Monte Carlo가 새롭지 않음. Josh Tenenbaum의 연구가 즉각적으로 떠오름.

  • WebPPL 데모: WebPPL에서 3D 우주선 합성 등 다양한 데모가 있음. 관련 서적과 MIT Probabilistic Computing Project의 출판물도 추천함.

  • 컴파일러/인터프리터 최적화: 컴파일러/인터프리터 최적화에 어떻게 적용될지 궁금함. 어셈블리 수준에서 실행 부분을 분석하고 최적화를 도출할 수 있을지 의문임.

  • 프로그램 토큰 변경: 전통적 접근법에서는 무작위 이미지를 생성하고 최적화 방법을 사용함. 프로그램 토큰 변경이 어떻게 미분 가능한지 이해가 어려움.

  • GitHub과 빌드 도구 통합: GitHub이 일반 빌드 도구와 통합될 수 있음. 모든 llvm-컴파일된 프로젝트를 컴파일하고 중간 표현에 확산 모델을 적용할 수 있을지 궁금함.

  • 확산 모델과 바이너리: 확산 모델이 바이너리 수준에서 작동할 수 있을지 궁금함. 프롬프트를 주면 프로그램의 최종 바이너리를 생성할 수 있을지 의문임.

  • SDF와의 통합: SDF와의 통합을 보고 싶음.

  • PDF 렌더링 속도: PDF가 프로그램적으로 생성된 그림 명령어 때문에 렌더링이 느림. 학술 논문 느낌이 나서 그리움.

  • 빔 서치와 역확산: 빔 서치 아이디어가 흥미로움. 역확산과 빔 서치를 어떻게 통합하는지 궁금함. 역확산 단계에서 m > k 노드를 샘플링하고 상위 k 노드만 확장하는지 궁금함.