확산 모델은 이미지와 비디오를 생성하는 것뿐만 아니라 새로운 프로그램을 합성하는 데에도 사용될 수 있는 것으로 나타났습니다.
모델에 손으로 그린 "5" 모양의 그래픽을 제공하고 지속적인 변형을 통해 프로그램을 수정하고 최종적으로 대상 그래픽을 출력할 수 있는 프로그램을 얻는다고 가정해 보겠습니다. 이 모델은 University of California, Berkeley 연구팀이 제안한 새로운 프로그램 합성 방법으로 신경 확산 모델을 사용하여 구문 트리를 직접 운영합니다. 문서 1 이 학교의 박사 과정 학생인 Shreyas Kapur의 지도교수는 학교의 컴퓨터 과학 교수인 Stuart Russell입니다.
- 논문 제목: 프로그램 합성을 위한 구문 트리의 확산
- 논문 주소: https://arxiv.org/pdf/2405.20519
- 프로젝트 주소: https://diffusion-diffusion. github.io/
- 코드 베이스: https://github.com/revalo/tree-diffusion
확산 모델은 이전에 이미지 생성 분야에서 큰 성공을 거두었습니다. 팀은 확산 메커니즘을 활용하여 모델이 구문 타당성을 보장하면서 프로그램을 반복적으로 최적화하는 방법을 학습할 수 있음을 발견했습니다. 이 새로운 접근 방식의 핵심은 모델이 각 단계에서 프로그램의 출력을 관찰할 수 있도록 하여 효율적인 디버깅 프로세스를 활성화하는 것입니다. 반복 능력은 AlphaZero와 같은 시스템에서 입증되었으며 확산 메커니즘의 반복 특성은 자연스럽게 검색 기반 프로그램 합성에 사용됩니다. 팀은 확산 모델과 동시에 가치 모델을 훈련함으로써 그 안에 있는 노이즈 제거 프로세스를 원하는 결과를 출력하는 프로그램으로 안내할 수 있다는 것을 발견했습니다. 이를 통해 프로그램 공간을 효율적으로 탐색할 수 있으며 생성 프로세스의 모든 단계에서 더 많은 정보를 바탕으로 결정을 내릴 수 있습니다. 이 접근 방식을 구현하기 위해 팀은 도메인별 언어가 이미지를 그리는 데 사용된다고 가정하는 역 그래픽 작업을 선택했습니다. 팀은 다음과 같이 말했습니다. "코드를 조금만 변경해도 결과 이미지에 의미 있는 의미 변화가 발생할 수 있기 때문에 리버스 엔지니어링 작업은 우리 접근 방식에 자연스럽게 맞습니다." 위치가 잘못된 모양이 이미지에 나타나고 프로그램 공간에서 쉽게 보고 위치를 지정할 수 있습니다. 그림 1은 몇 가지 예를 보여줍니다. 1. 구문 트리의 확산을 사용하는 새로운 방법을 제안합니다. 2 역 그래픽 작업에 대한 방법을 구현하고 새로운 방법이 더 우수하다는 것을 확인합니다. 이전 방법.
간단히 말하면 이 방법의 핵심 아이디어는 비전 작업을 위해 개발된 이미지 확산 모델과 유사하게 구문 트리에 대한 노이즈 제거 확산 모델을 개발하는 것입니다. 먼저 Ellis 등의 논문 "작성, 실행, 평가: Repl을 사용한 프로그램 합성"의 작업 예를 살펴보겠습니다. 이미지를 기반으로 구성된 솔리드 기하학(CSG2D) 프로그램을 생성합니다. CSG2D를 사용하면 덧셈 및 뺄셈과 같은 부울 연산을 사용하여 원 및 사변형과 같은 간단한 기본 요소를 결합하여 다음 CFG(컨텍스트 자유 문법)를 사용하여 더 복잡한 모양을 만들 수 있습니다. 그림 2의 , z₀는 대상 프로그램입니다. x₀는 z₀의 렌더링된 버전입니다. 이 작업은 x₀를 역전시켜 z₀를 복구하는 것입니다. 첫째, 잡음 제거 프로세스는 y=16을 y=10으로 무작위로 변경합니다. 그런 다음 왼쪽에 두 개의 모양이 있는 하위 트리를 하나의 모양만 있는 새 하위 트리로 변환합니다. 여기서의 목표는 이미지 x₀를 기반으로 z₃ 및 x₃에서 시작하여 z₀를 얻기 위해 이 노이즈 제거 프로세스를 역전시킬 수 있는 신경망을 훈련시키는 것입니다.다음에서는 먼저 구문 트리에 "노이즈"를 추가하는 방법을 설명한 다음 이 노이즈를 반전시키는 신경망을 훈련하는 방법을 자세히 설명하고 마지막으로 이 신경망을 사용하여 검색을 수행하는 방법을 설명합니다. z_t가 시간 t의 프로그램이 되도록 하세요. p_N (z_{t+1}|z_t)를 프로그램 z_t가 z_{t+1}로 무작위로 변경되는 분포로 설정합니다. 여기서 우리는 p_N 돌연변이가 두 가지 점을 만족하기를 바랍니다: (1) 작으며 (2) 구문적으로 유효한 z_{t+1}을 얻을 수 있습니다. 이를 위해 팀에서는 구문 기반 퍼즈 테스트에 관한 대규모 컴퓨터 보안 문헌을 조사했습니다. 돌연변이가 작은지 확인하기 위해 먼저 프로그램 z의 "크기"를 제공하는 함수 σ(z)를 정의합니다. 실험에서는 CFG의 엔드포인트(터미널) 집합을 기본 요소로 정의합니다. 예를 들어 CSG2D 언어로 작성된 경우 위의 프리미티브는 {Quad, Circle}입니다. 이 언어를 사용하여 팀의 접근 방식은 σ(z) = σ_primitive (z)이며, 이는 기본 요소의 수를 계산하는 것입니다. σ(z)에는 깊이, 노드 수 등과 같은 옵션도 포함될 수 있습니다. 그런 다음 정확한 제약 조건 σ_min 주어진 프로그램 z를 변경하려면 먼저 구문 트리의 특정 σ_small 범위에서 후보 노드 집합을 생성합니다. 그런 다음 이 집합에서 변형 노드를 균일하게 샘플링합니다.전체 구문 트리와 CFG를 읽을 수 있으므로 어떤 생성 규칙이 m을 얻을 수 있는지 알고 따라서 구문적으로 유효한 돌연변이가 얻어지도록 보장할 수 있습니다. 예를 들어, m이 숫자라면 그 대체도 숫자여야 합니다. m이 일반 하위 표현식인 경우 일반 하위 표현식으로 대체될 수 있습니다. 따라서 m'은 샘플링될 수 있으며 이는 m의 대용입니다. 팀에서는 프로그램 합성 문제를 추론 문제로 취급합니다. p(x|z)를 관측 모델로 가정합니다. 여기서 x는 모든 유형의 관측이 될 수 있습니다. 임무는 이 관찰 모델의 방향을 바꾸는 것입니다. 즉, 어떤 관찰 x가 주어지면 프로그램 z를 얻는 것입니다. 먼저 데이터 세트 D에서 프로그램 z₀를 선택하거나 이 경우 CFG에서 프로그램을 무작위로 샘플링합니다. 즉, σ(z₀) ≤ σ_max를 만족하는 z₀을 샘플링합니다. 그런 다음 s 단계를 거쳐 z₀에 노이즈가 추가됩니다. 여기서 s ∼ 균일 [1, s_max]이고 s_max는 하이퍼파라미터입니다. 그런 다음 조건부 신경망이 훈련되어 다음 분포를 모델링합니다. 여기서 ф는 신경망의 매개변수이고, z_t는 현재 프로그램이고, x_t는 프로그램의 현재 출력이고, x₀은 해결해야 할 목표 출력입니다. 지상 진실 돌연변이를 얻을 수 있는 능력으로 인해 샘플링된 궤적은 순방향 프로세스 마르코프 체인 z₀ → z₁ →...을 통해 간단히 역전될 수 있습니다. 신경망. 얼핏 보면 합리적인 선택처럼 보일 수도 있습니다. 그러나 마지막 돌연변이를 역전시키기 위해 모델을 직접 훈련시키는 것은 신경망에 훨씬 더 시끄러운 신호를 생성할 위험이 있습니다. 예를 들어 훨씬 더 큰 구문 트리에서 색상의 변형 경로는 다음과 같습니다. 대상 이미지 x₀의 색상은 빨간색이고, 변형된 이미지 x2의 색상은 녹색입니다.단순히 모델에 위의 마르코프 체인을 반대로 가르치는 경우 녹색을 빨간색으로 바꾸도록 네트워크를 직접 훈련시킬 수 있더라도 녹색을 파란색으로 바꾸도록 네트워크를 훈련시킬 수 있습니다. 따라서 더 나은 훈련 신호를 생성하기 위해 대상 트리와 돌연변이 트리 사이의 편집 경로를 계산할 수 있습니다. 팀은 트리 편집 거리를 기반으로 느슨하게 트리 편집 경로 알고리즘을 사용했습니다. 일반화된 트리 편집 거리 문제는 임의 노드의 삽입, 삭제 및 교체를 허용합니다. 하지만 여기서의 설정은 다릅니다. 트리 편집은 작은 돌연변이만 허용하는 작업 공간에서만 가능합니다. 두 개의 트리 z_A 및 z_B의 경우 구문 구조를 선형 방식으로 비교할 수 있습니다. ≤ σ_small을 만족하는 변경 사항은 돌연변이 목록에 추가됩니다. 변경 사항 > σ_small의 경우 두 나무 사이의 거리를 줄이는 첫 번째 돌연변이를 찾습니다. 따라서 두 프로그램 z_A 및 z_B에 대해 돌연변이 경로의 첫 번째 단계는 O(|z_A| + |z_B|) 시간에 계산될 수 있습니다. 팀은 또한 두 개의 렌더링된 이미지 x_A 및 x_B를 입력으로 입력하는 가치 네트워크 v_ф(x_A, x_B)를 훈련했으며 예측은 이 두 가지 편집 거리를 생성하는 것입니다. 이미지의 기본 프로그램 사이. 훈련 중에 나무 사이의 편집 거리가 계산되었으므로 렌더링된 이미지 쌍에 대해 실제 절차 편집 거리가 직접 얻어지며, 이는 지도 방식 네트워크에서 이 값을 훈련하는 데 사용할 수 있습니다. 위의 새로운 전략과 팀이 제안한 새로운 가치 네트워크를 사용하면 임의의 대상 이미지 x₀ 및 무작위로 초기화된 프로그램 z_t에 대해 빔 검색을 수행할 수 있습니다. 각 반복에서 가장 유망한 값을 가진 검색 트리의 노드 집합이 유지되고 이러한 노드만 확장됩니다. 그림 3은 새로 제안된 신경 아키텍처의 개요를 보여줍니다. 그들의 노이즈 제거 모델 q_ф(z_{t−1}|z_t, x_t; x₀)는 시각적 언어 모델을 사용합니다. 이미지 인코더의 경우 Batch-Norm을 사용할 때 시간적 불안정성 문제를 방지하는 노멀라이저가 없는 컨벌루션 아키텍처인 NF-ResNet-26의 기성 구현을 사용했습니다. 팀은 CFG의 엔드포인트를 토큰으로 사용하는 맞춤형 토크나이저를 구현했습니다. 편집 모델의 나머지 부분은 작은 디코더 전용 Transformer입니다. 또한 두 가지 다른 유형의 토큰을 추가했습니다. 는 모델의 문장 시작 토큰 역할을 하고, 다른 하나는 모델이 해당 컨텍스트 내에서 위치를 참조할 수 있게 해주는 토큰 입니다. 현재 이미지, 대상 이미지 및 현재 토큰화된 프로그램이 주어지면 자동 회귀 방식으로 편집 위치와 대체 텍스트를 예측하도록 Transformer 모델을 교육합니다. 예측을 할 때 디코딩 프로세스는 문법에 의해 제한됩니다. 팀은 구문 트리 노드를 나타내는 편집 위치만 포함하도록 예측 로짓을 마스킹하고 선택한 편집 위치에 대해 구문적으로 유효한 대체 항목만 얻었습니다. 여기서 σ_small = 2로 설정했는데, 이는 네트워크가 2개 미만의 프리미티브로만 편집을 생성할 수 있음을 의미합니다. 훈련 데이터의 경우 CFG에서 무작위 표현식의 무한한 스트림을 샘플링합니다. 노이즈 단계 s의 경우 [1, 5] 중 하나를 무작위로 선택합니다. 새로운 표현식을 돌연변이 표현식으로 무작위로 샘플링하여 샘플 ρ의 일정 비율이 완성됩니다. 그들은 단일 NVIDIA A6000 GPU를 사용하여 3일 동안 훈련했습니다. 그들은 CSG2D, CSG2D-Sketch, TinySVG, Rainbow의 4가지 도메인별 그래픽 언어에 대한 실험을 수행했습니다. 선택된 벤치마크 방법은 Ellis 등이 제안한 "쓰기, 실행, 평가: 프로그램 합성"과 Sharma 등이 제안한 "CSGNet: 건설적 고체 기하학을 위한 신경 모양 파서"입니다. 그림 4는 새로운 방법의 성능을 기본 방법과 비교합니다. CSG2D 및 TinySVG 환경에서는 새로 제안된 트리 확산 전략이 이전 방법의 전략보다 훨씬 우수하다는 것을 알 수 있습니다.이 전략의 성능은 빔 검색과 결합하면 더욱 향상될 수 있으며, 다른 방법보다 렌더러 호출 횟수를 줄여 문제를 해결할 수 있습니다. 아래 그림은 새로운 시스템의 성공적인 예와 벤치마크 방법의 출력을 보여줍니다. 보시다시피, 새로운 시스템은 다른 방법이 놓친 작은 문제를 해결할 수 있습니다. 다음 비디오는 CSG2D-Sketch 언어를 사용하는 스케치 기반 복구 절차의 두 가지 예를 보여줍니다. 이는 관찰 모델이 반드시 결정적 렌더링을 필요로 하지 않으며 임의의 손으로 그린 이미지로 구성될 수도 있음을 보여줍니다. 팀에서는 이러한 새로운 설계의 영향을 이해하기 위해 단순화된 Rainbow 환경에서 더 작은 Transformer 모델을 사용하여 절제 실험도 수행했습니다. 결과는 그림 5에 나와 있습니다. 전반적으로 이러한 설계 선택의 결과는 입증되었습니다. 위 내용은 캘리포니아 버클리에서는 손으로 그린 스케치만 보고 그래픽 프로그램을 구성합니다. 확산 모델에 새로운 기술을 가르칩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!