Skip to content

Condition Candidate Decision Model

kimjooyoon edited this page Oct 10, 2026 · 58 revisions

조건 관측으로 배우는 작은 결정 모델

2026-10-11. Gooo의 소스와 작성 사례를 읽어 먼저 시도할 코드 경로를 고르는 작은 모델을 Go로 만들고 있습니다. 경로와 요구사항은 Gooo에 적고, 컴파일러가 선택된 본문을 구성해 출력과 중간 조건을 확인합니다. 모델을 생략하면 정해진 순서로 같은 검사를 진행합니다.

현재 SDK0.2.37에 선택별 사례 모델과 비교용 모델을 공개했습니다. 이 선택별 사례 모델의 가중치 배열은 51,272바이트이며 CPU에서 학습과 판단을 수행합니다. SDK0.2.38은 이 가중치를 사용해 선택별 계산값을 읽는 API와 명령을 제공합니다. 개발 컴파일러 연결은 PR1445의 원래 CI·배포 준비·호환성 검사 통과 후 dev의 deff13a2에 병합했습니다. 병합 후에도 세 검사를 통과했습니다. 공개 컴파일러 0.6.26에 연결했고 실제 공개 파일을 설치했습니다. gooo help models에서 다운로드·입력 사전 확인·조립·저장 재실행 순서를 볼 수 있습니다. 이후 개발한 상호작용 모델은 76,136바이트의 가중치를 사용하며, 실제 모델 파일과 새 문서 평가 결과를 아래에 정리했습니다. SDK 0.2.39 버전과 모델 파일을 공개했으며 현재 SDK에서 사용할 수 있습니다.

이번 구성

새 문서 80개에서 실제로 써 본 결과

PR55에서는 자료와 학습 조건을 먼저 고정하고 기존 계산 순서 모델과 새 상호작용 모델을 한 번씩 학습했습니다. 학습 8개, 지원 범위 안의 평가 64개, 지원 밖 평가 8개입니다. 거리 계산의 상수와 분기 설명의 한글·영문 표현, 직접 반환·별칭·대입·재대입 형태를 바꿨습니다. 비교 선택의 설명은 모든 문서에서 한영 병기를 유지하므로, 언어 이해 범위는 이 표현 변화에 한정해서 해석합니다.

지원 범위 안의 평가 64개 고정 순서 기존 모델 새 모델
첫 후보에서 전체 요구 만족 16/64 20/64 60/64
남은 후보 검사 후 전체 요구 만족 64/64 64/64 64/64
검사한 후보 수 160 151 68
전체 탐색 시간 합계 7.318ms 14.332ms 14.758ms

새 모델은 전체 80개에서 기존 모델보다 첫 선택 44개가 좋아졌고 퇴보는 없었습니다. 지원 밖 8개는 두 모델 모두 판단 없이 고정 순서로 탐색했습니다. 새 모델의 지원 범위 안 실패 4개는 모두 영문 분기 설명을 붙인 대입문이었습니다. 비교 조건은 맞췄지만 반환하는 값의 분기 배치를 잘못 골랐습니다. 실패한 본문까지 원본에 남겼고 Gooo가 다음 후보를 검사해 전부 완성했습니다. 아직 검사하지 않은 입력에서의 동작과 새로운 알고리즘은 다음 평가 범위입니다.

M4 PC에서 새 모델 학습은 약 2.024초, 판단 중앙값은 98.458µs였습니다. 두 모델 학습과 240회 탐색을 포함한 전체 과정은 3.63초, 최대 RSS35.56MiB였고 GPU는 사용하지 않았습니다. 프로세스 CPU 시간으로 계산하면 평균 약0.88개 코어를 사용했습니다. PC 전체 점유율은 별도로 샘플링하지 않았습니다. 후보 수가 줄어도 판단 비용 때문에 전체 탐색이 조금 느려진 결과까지 기록했습니다. 더 비싼 조립 작업에서의 시간 효과는 추가 측정이 필요합니다.

공개한 모델 파일을 SDK의 search -model에 넘겨 바로 사용할 수 있습니다. 처음부터 다시 학습할 필요 없이 같은 파일의 식별값을 확인하고 사용할 수 있습니다. 모든 학습 행·정수 결과·조건·후보·진행 기록을 독립 검산했고 전체 SDK 70개 패키지의 정적·race 검사와 기존 소스69개 식별값 확인을 통과했습니다. 모델 두 개·체크섬·전체 실패·사용법. PR55는 main의 142c3293에 병합했고, 병합 후 CI도 통과했습니다. 이 파일은 SDK 0.2.39에 고정한 실험 모델입니다. 공개 컴파일러 0.6.26에서 사용할 수 있는 모델은 위에서 안내한 선택별 사례 모델이며, 상호작용 모델의 컴파일러 연결은 후속 작업입니다.

입력과 원하는 결과를 함께 읽는 실험

PR54에서는 “이 입력에서 이 결과를 원한다”는 관계가 사례 요약에 남도록 구성했습니다. 입력의 정확한 바이트와 기대 결과의 부호를 함께 읽는 칸을 추가하고, 소스·출력·조건 요약을 둘씩 또는 셋씩 곱하는 작은 계산을 학습합니다. 조립 설명서와 요구사항을 각각 읽은 뒤 서로 맞춰 보는 과정으로 생각할 수 있습니다.

19,034개 FP32 가중치, 배열 크기 76,136바이트이며 Go로 CPU 학습·판단을 수행합니다. 소스의 계산 순서, 기존 입력·목표 필드는 모두 유지합니다. 출력 목표의 크기도 기존 필드에 남아 있지만 추가 관계 칸은 부호에 초점을 맞추므로 모든 정수 관계를 표현한다는 보장은 없습니다. 학습과 실행에 모델이 추천할 경로의 정답 공식을 넣지 않았습니다.

소스 방향·출력 목표·조건 목표를 조합한 학습 요구 8개에서는 모두 첫 후보가 맞았습니다. 학습 손실은 약 1.415372에서 0.000445로 줄었습니다. 같은 세 사례를 여섯 가지 순서로 배치한 48개 검사도 통과했습니다. 전부 같은 학습 목표에 관한 검사입니다. 새 문서의 성적과 비용은 위의 후속 실험에 기록했습니다. 앞선 48문서 실험의 실패 기록과 가중치는 그대로 보관합니다. 이 결과를 과거 별도 평가 성적과 직접 비교하지 않습니다.

처음 올린 버전은 Linux의 학습 검사에서 6/8로 실패했습니다. Intel용 로컬 실행에서도 재현했고, Apple Silicon에서 곱셈·덧셈의 자동 결합을 끄면 같은 실패가 났습니다. 새 모델의 곱셈·덧셈 계산 규칙을 명시하고 모델 파일에도 기록했습니다. 같은 자료·학습량· 통과 기준으로 수정 후 두 로컬 환경에서 8/8과 순서 검사48/48을 통과했습니다. 원래 실패한 CI와 계산 규칙은 아래 안내에 남겼습니다. 수정본의 원래 PR·push 검사에서 단위·race·기존 조립 호환성 검사가 통과했습니다. main c75fb2a2에 병합했고, 병합 후 검사도 통과했습니다.

SDK 체크아웃에서 fit -interactions로 모델을 저장하고 search -model로 사용합니다. 후보 실행 전에 한 번 판단해 바로 첫 후보를 넣으며, 이후에는 같은 Gooo 검사를 계속합니다. 모델이 없거나 소스 형태를 지원하지 않으면 결정론적으로 진행합니다. 공개 컴파일러0.6.26에 이번 모델의 로더를 연결하는 일은 후속 작업입니다.

사례별 계산과 요약에는 Deep Sets, 작은 고차 상호작용에는 Higher-Order Factorization Machines가 참고가 됐습니다. 우리의 실험은 이런 계산 요소를 Gooo의 명시적인 요구와 유한 후보 검사에 연결했을 때 어디까지 도움이 되는지를 확인하는 단계입니다. 로컬 실행 예제·전체 계산·현재 한계.

모델에게 서로 다른 요구가 전달되는지 확인하기

학습을 늘리기 전에 입력에서 구분할 수 없는 요구를 찾고 있습니다. 예를 들어 최종 결과는 둘 다0이지만, 음수 입력에서 중간 조건이 각각 참·거짓이어야 하는 두 Gooo 계약을 만들었습니다. 컴파일러가 검사한 정답 경로는 서로 반대였지만 당시 모델에 전달되는 소스 배열과 출력 사례 배열은 같았습니다. 이 두 행만 놓고 보면 같은 입력에 같은 결정을 내리는 모델이 첫 선택으로 만족시킬 수 있는 상한은 1/2입니다.

입력 진단 PR47은 실제 입력 칸을 비트 단위로 비교해 이런 묶음을 찾습니다. 묶음 안에서 공통으로 가능한 후보와 피할 수 없는 첫 선택 실패 수를 계산하고 학습 보고서에 넣습니다. Gooo의 최종 탐색 완전성은 별도로 측정합니다. 입력 충돌이 있어도 학습은 진행하며, 진단 자체는 학습·판단·후보 실행을 하지 않습니다. 로컬 전체 race·정적 검사와 실제 Gooo 조건 검사로 정답을 만드는 회귀 테스트가 통과했습니다. 원래 PR·push CI를 통과해 main 32ffd21a에 병합했고 병합 후 CI도 통과했습니다. 학습 가중치와 기존 실험 결과는 유지했습니다. 계산식·상한의 범위·코드.

작성한 조건을 모델 입력으로 읽기

이 차이를 좁히기 위해 PR48에 새 조건 입력을 추가했습니다. 대상 선택 지점, 정수 입력의 모든 바이트, 기대하는 참·거짓, 작성 순서를 32칸 배열로 읽습니다. 같은 출력이면서 조건만 반대인 두 계약은 기존 입력을 유지하면서 새 조건 배열에서 서로 구분됩니다. 최대 128개 조건을 모두 읽으며, 큰 정수와 양 끝의 int64 값도 비트를 그대로 보존합니다.

go run ./examples/contract-model inspect DOCUMENT는 모델 파일 없이 세 입력 묶음을 보여줍니다. 포함된 실제 문서의 선택지 2개·출력 사례 8개·조건 3개를 원본과 대조했습니다. 예측·후보 실행·학습은 각각 0회이며, 조건을 지정하지 않은 문서는 빈 목록을 돌려줍니다. 전체 SDK race·정적 검사와 동시 조회·입력 변경·마지막 조건 보존 검사가 통과했습니다. 원래 PR·push CI를 통과해 main d382e41f에 병합했고 병합 후 CI도 통과했습니다.

현재 공개 가중치는 소스와 출력 사례를 입력으로 사용합니다. 새 조건 입력의 학습과 실제 Gooo 조립 연결은 아래 구현에 추가했습니다. 명령과 입력 배열의 정의.

출력 예시와 중간 조건을 함께 배우기

PR49의 새 모델은 선택 지점마다 출력 예시와 조건 예시를 따로 읽고, 두 요약과 소스 구조를 합쳐 경로 점수를 만듭니다. 최대 128개 출력 사례와 128개 조건을 모두 전달하며 조건이 없으면 해당 요약은 0입니다. 13,282개 FP32 가중치, 53,128바이트이고 Go로 CPU 학습·판단·저장·읽기를 구현했습니다. 이 크기는 가중치 배열의 크기이며 전체 실행 메모리는 별도 측정 대상입니다.

SDK 체크아웃에서 go run ./examples/contract-model fit -requirements -out MODEL DOCUMENT...로 학습하고 go run ./examples/contract-model search -model MODEL DOCUMENT로 사용합니다. fit에 넘긴 문서는 모두 학습 자료입니다. 별도의 평가 문서를 두어 결과를 비교해야 합니다. 모델을 생략하면 같은 Gooo 요구사항을 고정 순서로 검사합니다.

Gooo로 정답 경로를 판별한 두 학습 예제에서, 최종 출력이 같아도 반대 조건에 맞는 본문을 각각 첫 시도에 구성했습니다. 이전 입력 진단은 이 두 요구의 첫 선택 성공 상한을 1/2로 계산하고, 조건까지 읽는 새 진단은 두 입력을 구분해 상한을 2/2로 계산합니다. 상한은 입력에 정보가 있는지를 나타내며 실제 학습 성적은 본문을 선택해 검사한 결과로 측정합니다.

잘못된 첫 제안을 받는 검사도 추가했습니다. 출력이 모두 맞아도 조건이 틀리면 실패로 남기고, 같은 세션이 남은 후보를 검사해 완성합니다. 첫 판단 이후 추가 추론은 0회입니다. 소스가 허용한 경로를 끝까지 검사하는 완전성과 첫 제안의 성공률을 따로 기록합니다.

독립 계산식·기울기·128행·16개 선택·동시 사용·오류 처리와 SDK 전체 race·정적 검사를 통과했습니다. 원래 PR·push CI를 거쳐 main 99597dd3에 병합했고 병합 후 CI도 통과했습니다. 별도 문서의 평가와 가중치는 아래 실험에 공개했습니다. 일반 컴파일러의 새 모델 로더는 아직 준비 중입니다. 실행 예제·배열과 학습식·검증 범위.

새 문서 172개에서 확인한 성적과 입력의 빈틈

PR50에서는 문서와 학습 설정을 먼저 고정한 뒤 기존 선택 모델과 새 조건 모델을 한 번씩 학습했습니다. 32개를 학습에 쓰고, 새 상수·변수 대입·한영 표현·선택 순서·드문 조건·조건 생략·모순된 조건으로 평가를 넓혔습니다. 자료 준비 중 발견한 중복 조건 선언, 만족 불가능한 희귀 예제, 빈 조건 처리 오류와 부분 기록도 보관했습니다. 모두 학습 전에 발견했고, 결과를 본 뒤 재학습하지 않았습니다.

학습 밖 충족 가능한 136개 문서 고정 순서 기존 선택 모델 새 조건 모델
첫 후보에서 모든 요구 충족 35 33 44
남은 후보 검사 후 완성 136 136 136
후보 시도 합계 336 336 335

모순된 문서 4개는 세 방식 모두 받아들이지 않았습니다. 전체 172개에서 새 모델의 첫 결과가 기존보다 좋아진 문서는 38개, 나빠진 문서는 26개였습니다. 학습 자료에서도 첫 후보 성공은 8/32에 머물렀고 손실은 네 경로를 균등하게 고르는 수준에 가까웠습니다. 조건이 반대인 82쌍에서 양쪽 모두 첫 후보가 맞은 쌍은 0개였습니다. 입력 연결은 동작하지만 이를 학습해서 사용하는 능력은 아직 약합니다. 가중치 초기값과 구조도 달라졌으므로, 관측된 개선을 조건 입력 하나의 효과로 분리해서 해석하기는 어렵습니다.

새 입력에서도 구별되지 않는 40쌍이 남았습니다. 예를 들어 input - 6과 6 - input의 반환 분기를 바꾸면 필요한 경로도 달라지는데, 현재 모델에 전달되는 모든 입력 칸은 같았습니다. 이런 쌍을 거리 계산에서 36개, 부호를 바꾼 경계값 계산에서 4개 확인했습니다. Gooo의 소스와 중간 표현에는 차이가 보존되어 있으므로, 모델용 배열에도 연산의 좌우와 반환 분기 관계가 이어지도록 하는 것이 다음 입력 설계 과제입니다.

새 모델 학습은 2.449초, 판단 중앙값은 25.625µs였습니다. 두 학습과 516번의 탐색을 합친 프로세스는 9.28초·사용자 CPU 8.65초+시스템 CPU 0.16초·최대 RSS 49.05MiB였습니다. 평균 약 0.95개 코어 분량이고 PC 전체 이용률은 측정하지 않았습니다. 전체 탐색 시간은 고정 순서 20.407ms, 기존 모델 37.482ms, 새 모델 36.223ms였습니다.

독립 정수 검산과 전체 SDK race·정적 검사, 원래 PR·push CI를 통과해 main a75303d5에 병합했습니다. 병합 후 CI도 통과했습니다. 두 모델 파일과 모든 선택·실패·입력 충돌을 공개했습니다. 이 결과는 관련된 몇 가지 템플릿과 작성한 사례의 범위에 해당하며 기존 기본 모델은 유지합니다. 원본·모델 파일·실행 예제·재학습 없는 검산.

모델의 선택 과정을 읽기

앞선 입력 충돌을 보완하는 PR51은 계산 순서를 읽는 작은 별도 입력을 추가합니다. 입력값 - 6과 6 - 입력값은 같은 재료를 사용해도 답이 달라질 수 있습니다. 조건이 참일 때와 거짓일 때 어느 계산을 반환하는지도 함께 기록합니다. 변수를 거쳤다면 대입 시점의 값을 따라갑니다.

SDK에서 go run ./examples/contract-model inspect -ordered-source DOCUMENT로 확인합니다. 조건식·참 분기의 반환·거짓 분기의 반환을 각각 읽으며 전체 배열은 선택 지점당 144칸, 576바이트입니다. 정수는 모든 바이트를 보존하고, 지원하는 범위를 넘는 구조에는 이유를 표시합니다. 이 조회에서 모델 호출·학습·후보 실행은 모두 0회입니다.

기존 실험의 40쌍은 새 배열에서 모두 구별됐고, 기존 배열의 값은 유지됐습니다. 기존 공개 가중치는 원래 입력을 사용합니다. 새 입력을 학습하는 구현은 아래 PR52에 추가했고 별도 문서의 성적은 아래 PR53에 공개했습니다. 전체 SDK race·정적 검사가 통과했고 원래 PR·push CI를 통과해 main 4e7e24e7에 병합했습니다. 병합 후 CI도 통과했습니다.

계산 순서까지 함께 학습하는 구현

PR52는 기존 소스 384칸에 계산 순서 144칸을 연결해 학습합니다. 선택 지점마다 소스 전체와 출력 예시·중간 조건을 함께 읽습니다. 최대 128개 출력과 128개 조건을 입력으로 받고, 가중치는 17,890개, FP32 배열 크기는 71,560바이트입니다. 프로세스 전체 메모리와는 구분하는 수치입니다.

SDK 체크아웃에서 다음과 같이 사용합니다. DOCUMENT는 Gooo에서 얻은 경로 문서입니다.

go run ./examples/contract-model fit -ordered-requirements -out MODEL DOCUMENT...
go run ./examples/contract-model search -model MODEL DOCUMENT

서로 좌우 계산이 반대인 두 학습 예제를 사용해 저장·재로딩·조립 연결을 검사했습니다. 기존 소스 입력에서는 같던 두 문서가 새 모델에서는 각각 첫 후보로 완성됐습니다. 한 번의 초기 판단이 곧바로 첫 후보에 연결되며, 실패 뒤에는 추가 판단 없이 다음 후보를 확인합니다. 모델을 생략하면 고정 순서를 사용하고, 소스가 지원 범위를 벗어나면 이유와 함께 모델 호출 0회를 남기고 같은 고정 순서로 진행합니다.

독립 계산식·기울기, 입력 최대 크기·동시 읽기·저장 파일 오류, SDK 전체 64개 패키지의 race·정적 검사를 통과했습니다. 원래 PR·push CI와 병합 후 CI도 통과해 main 166abf15에 반영됐습니다. 학습 예제의 성공과 새로운 문서의 성공률은 별도로 측정합니다. 새 형식의 평가 가중치는 아래 PR53에 공개했고 일반 컴파일러 로더는 후속 작업입니다. 공개0.6.26은 앞서 설명한 SDK0.2.37 모델을 사용합니다. 계산 구조·명령·현재 제한.

입력을 구별한 다음에도 남은 학습 문제

PR53에서는 새 문서 48개와 학습 설정을 먼저 고정했습니다. 한국어 의도의 직접 계산 8개로 두 모델을 한 번씩 학습하고, 새 상수·영어 의도·변수 별명·대입·재대입을 사용하는 40개로 평가했습니다. 이 중 8개는 새 표현이 지원하지 않는 두 분기 구조이며, 모델 호출 없이 고정 순서로 진행합니다.

별도 평가 40개 고정 순서 기존 조건 모델 계산 순서 모델
첫 후보에서 모든 요구 충족 10 10 11
나머지 후보 검사 후 완성 40 40 40
후보 시도 합계 100 100 99

새 모델의 지원 범위에 들어온 40개 전체 문서에서는 입력 충돌이 없었습니다. 하지만 학습 자료에서도 첫 성공은 2/8이고 손실은 네 경로를 균등하게 고르는 수준에 머물렀습니다. 전체 48개에서 기존 모델보다 13개가 개선되고 12개가 퇴보했습니다. 조건만 반대인 24쌍 중 23쌍에 같은 첫 경로를 골랐고, 양쪽을 모두 맞힌 쌍은 없었습니다.

이 거리 계산 예제에서 올바른 반환 분기를 고르려면 소스의 좌우 방향, 출력 목표, 중간 조건 목표를 함께 읽어야 합니다. 세 스위치 중 하나가 바뀌면 선택할 분기도 바뀌는 형태입니다. 독립 정수 검산으로 48개 모두에서 이 관계를 확인했습니다. 이를 모델에 정답 규칙으로 넣지는 않았습니다. 다음에는 이 관계를 작은 모델이 어떻게 배울 수 있을지 직접 다뤄야 한다는 근거입니다.

지표도 여러 수준으로 읽습니다. 첫 후보의 조건 항목만 합치면 1,102/1,144, 약 96.3%입니다. 조건 128개가 있는 문서들이 합계를 크게 차지하기 때문입니다. 문서마다 같은 비중으로 평균을 내면 약 73.5%이고, 모든 요구를 만족한 첫 프로그램은 13/48입니다. 자동 보고서에 항목별 충족률·문서별 평균·전체 프로그램 완성률과 모델 적용 범위를 함께 남겼습니다.

새 모델 학습은 875ms, 판단 중앙값은 38.083µs였습니다. 두 번의 학습과 144번 탐색을 합친 프로세스는 2.41초, 최대 RSS 30.59MiB, 평균 약 0.82개 코어 분량이었습니다. PC 전체 이용률은 측정하지 않았습니다. 새 모델을 사용한 전체 탐색은 16.703ms로, 고정 순서의 10.849ms보다 길었습니다. 일반적인 자연어 이해나 네이티브 실행의 성적으로 넓혀 해석하지 않고, 이번 템플릿과 작성한 요구사항의 결과로 보관합니다.

원본 가중치·선택·실패를 공개했고, 큰 정수와 모든 후보를 독립 검산했습니다. 모델을 다시 돌리지 않는 검산·변조 테스트, SDK 전체 67개 패키지 race·정적 검사를 통과했습니다. 원래 PR·push CI를 통과해 main 141ad328에 병합했고 병합 후 CI도 통과했습니다. 고정 계획부터 두 모델·전체 기록·재사용 명령까지.

학습이 끝난 뒤 원본 입력 행만 읽는 추가 진단도 했습니다. 조건만 반대인 24쌍 중 지원 범위에 있는 20쌍은 각 조건 행이 다르지만, 32칸 배열의 단순 평균은 모두 같았습니다. 어떤 입력에서 참이어야 하는지가 바뀌어도 참·거짓의 개수는 같을 수 있기 때문입니다. 현재 모델은 평균 전에 비선형 인코더를 적용하므로, 이 관측만으로 모델 내부에서도 정보가 사라졌다고 단정할 수는 없습니다. 다음에는 그 인코더가 입력값과 기대 조건의 관계를 보존하는지 직접 확인할 계획입니다. 추가 학습·추론·후보 실행은 각각 0회였습니다. 입력 전용 진단 코드와 24쌍 기록.

기존 선택 모델의 점수 조회

SDK0.2.38의 ExplainChoicesInto는 한 번 판단하면서 선택 지점별 사례 요약값, 요약에 남은 사례 번호, 중간 계산값과 두 경로의 점수를 함께 기록합니다. 가장 큰 신호를 남기는 집계에서는 128개 사례 중 마지막 사례의 번호가 남았는지 볼 수 있고, 평균 집계에서는 전체를 합친 요약값을 봅니다. 같은 사례를 서로 다른 선택 지점에서 어떻게 읽었는지도 확인할 수 있습니다. 여러 요약값과 후속 가중치가 함께 최종 점수를 만듭니다.

examples/contract-model explain -model MODEL DOCUMENT 명령은 Gooo에서 얻은 문서의 정확한 정수 사례와 선택 ID·이름을 이 기록에 연결합니다. 모델 호출은 1회, 후보 실행·후보 조합 나열·학습은 각각 0회입니다. 서로 모순되는 요구도 원래 값으로 조회할 수 있습니다. 이 기록은 요구 구분이 약한 지점을 살피는 자료이며, 구성된 프로그램의 성공 여부는 Gooo의 출력·조건 검사로 확인합니다.

61개 SDK 패키지의 전체 race·정적 검사, 별도 계산식과의 비교, 128개 사례·16개 선택, 동시 조회와 오류 시 결과 보존을 검사했습니다. 원래 PR·push, 병합 후·태그 CI를 통과해 공개했고, 공개 모듈의 소스도 대조했습니다. 가중치와 기존 실험 결과는 그대로입니다. API·명령·값을 읽는 방법.

실제 컴파일러에서 구성하고 저장한 결과

공개된 예제 세 개로 입력 확인, 고정 순서 구성, 모델 구성, 네이티브 구성과 저장 재실행을 각각 한 번씩 수행했습니다. 모델은 각 소스의 출력 사례 8개를 모두 읽습니다. 네이티브 평가도 같은 8개를 실행해 실제 프로그램과 작성된 요구가 일치하는지 확인합니다.

관측 고정 순서 선택별 사례 모델
전체 후보 시도 5 4
첫 후보에서 모든 사례 만족 2/3 2/3
최종 소스 출력·조건 24/24·9/9 24/24·9/9
파일 읽기를 포함한 구성 0.86~1.56ms 4.26~5.20ms

경계값 예제 하나는 3→1회로 개선됐고 곱셈 예제는 1→2회로 퇴보했습니다. 모델 판단은 4564µs, 중앙값 46.25µs였으며 모델 파일을 읽는 데 약 3.093.60ms가 걸렸습니다. 구성과 네이티브 실행에서 모델 호출은 합계 6회, 후보 실패 뒤의 추가 호출은 0회였습니다. 각 구성 뒤 모델 복사본을 지우고 저장된 결과를 다시 실행해, 모델 호출 0회와 출력 24/24개 일치를 확인했습니다. 네이티브 구성 평가에서도 24/24개가 일치했습니다.

15개 명령 전체는 4.08초, 최대 RSS 84.23MiB였습니다. Go 실행 도구를 포함한 수치이며, 모델 가중치 배열의 크기와 구분합니다. CPU 시간은 평균 약 0.64개 코어 분량이고 PC 전체 이용률 증가분은 측정하지 않았습니다. 이미 관찰한 예제를 이용한 컴파일러 연결 검사입니다. 로컬 전체 425개 패키지 순차 race·정적·의미 검사와 원래 필수 CI·배포 준비 검사는 통과했습니다. 원래 CI의 검증 기록을 대조하고 독립 호환성 검사를 통과해 dev의 deff13a2에 병합했습니다. 병합 후 필수 CI·배포 준비·독립 호환성 검사도 통과했습니다. PR1446의 0.6.26 준비와 병합 후 CI·공개 배포를 마쳤고 실제 공개 파일을 설치했습니다. 사용 안내와 설치 관측. 원본 기록·정확한 정수 검산·실행 방법.

선택 지점마다 목표를 먼저 읽는 구조

PR42에 새 소형 결정 모델을 구현했습니다. 이전 모델은 입출력 사례를 한 번 요약한 뒤 모든 선택 지점에 같은 요약을 줬습니다. 새 모델은 각 선택 지점의 소스를 사례와 먼저 함께 읽고, 그 지점에 맞는 요약을 만듭니다. 같은 요구사항을 보고도 비교 연산을 고를 때와 반환 순서를 고를 때 참고하는 부분이 달라질 수 있도록 한 구성입니다.

기존 소스384칸·사례32칸을 모두 유지하며, 작은 연결층3,072개 가중치를 추가했습니다. 전체12,818개 FP32 가중치·51,272바이트입니다. 이 Mac에서 모델 구조체는51,276바이트, 호출자 작업 공간은58,296바이트입니다. 오류가 나도 결과를 바꾸지 않기 위한 임시 공간도 같은 크기로 필요하며, 이 수치는 프로세스 전체 메모리 사용량과 구분합니다.

Go CPU 학습·저장·읽기와 Gooo 후보 조립 연결을 구현했습니다. fit -choice-context로 학습하고 기존 search -model 명령으로 사용할 수 있습니다. 모델을 생략하면 기존 순서로 진행합니다. 같은 소스와 반대 목표 두 개를 학습한 연결 테스트에서는 각 목표에 맞는 경로를 골라 한 번에 완성했고, 큰 정수 값도 그대로 유지됐습니다.

독립 계산식·학습 기울기·128개 사례·16개 선택 지점·동시 사용·형식 검사와 전체 SDK race·정적 검사는 통과했습니다. 준비된 입력에서 판단 계산의 힙 할당은0회였습니다. 원래 PR·push CI와 병합 후 CI를 통과해 main 825a7628에 반영했습니다. 기존 기본 모델은 유지하며, 새로운 평가 문서를 학습 전에 고정한 비교는 아래에 기록합니다. 계산 구조·메모리 범위·사용법·현재 한계.

새 Gooo 문서388개에서 비교한 결과

PR43는 음수 상수, 변수 재대입, 한영 문구, 처음 보는 곱셈과 마지막 입력이 중요한 사례를 포함합니다. 학습 전에388개 문서와 분류를 고정했고, 그중32개로 각 모델을600회씩 한 번 학습했습니다.

관찰 모델 없음 기존 사례 모델 선택별 사례 모델
첫 선택으로 전체 요구 만족 193/388 197/388 221/388
학습 밖 문서에서 첫 선택 성공 177/356 180/356 202/356
마지막까지 완성한 충족 가능 문서 386/386 386/386 386/386
모순된 요구 거절 2/2 2/2 2/2
전체 경로 시도 780 583 559
반대 목표의 양쪽 모두 첫 선택 성공 0/193 15/193 29/193

기존 모델보다87개가 좋아지고63개는 나빠졌습니다. 새 곱셈 유형은32/64→31/64였고, 반대 목표193쌍 중163쌍에는 같은 경로를 골랐습니다. 모든 점수는 목표에 따라 달라졌지만 선택을 충분히 구분하는 데에는 아직 부족했습니다. Gooo가 다음 경로까지 확인하면서 만족 가능한 문서를 완성했습니다. 이 자료는 다섯 계산 틀의 변형을 다루며, 범용 자연어 이해의 근거로 삼기에는 범위가 작습니다.

새 모델은 가중치가3,072개 늘고 선택마다 사례를 읽는 계산도 추가됐습니다. 학습1.725초·판단 중앙값37.584µs·p95 42.459µs였습니다. 원래 두 학습과1,164회 탐색을 합친 프로세스는3.20초·최대 RSS72.27MiB, CPU 시간은 평균 약0.925개 코어 분량입니다. PC 전체 이용률 변화는 측정하지 않았습니다. 전체 탐색 시간은 모델 없음35.79ms, 기존54.99ms, 새 모델64.43ms여서 이 작은 문제들에서는 경로를 덜 시도해도 더 느렸습니다.

공개 자료에는 두 가중치, 모든 정수 출력·조건, 개선과 악화 목록, 읽기 쉬운 Gooo 예제, 재학습·재실행 없이 기록을 대조하는 검산 코드가 들어 있습니다. 로컬 전체 race·정적 검사와 독립 검산, 원래 PR·push CI를 통과해 main 3f032abf에 병합했습니다. 병합 후·태그 CI도 통과해 SDK0.2.37에 model-choice-v1.json과 비교용 model-global-v2.json, 체크섬을 공개했습니다. 공개 파일3개를 원본 바이트·크기·체크섬과 대조했습니다. 새 모델은 연구용으로 직접 선택하며 일반 컴파일러 연결은 위 PR1445를 통해 개발 브랜치에 반영했습니다. 공개 설치본은 아직0.6.25입니다. 고정 방법·원자료·재현 명령.

소스 상수와 목표의 관계를 직접 알려주기

PR41에서는 소스에 적힌 상수와 입출력 사례의 관계를 모델에 전달했습니다. 예를 들어 상수7이 있을 때 “기대값이 입력+7과 같은가”를 작은 숫자 칸으로 알려주는 방식입니다. 후보 코드를 실행해서 얻은 답을 넣지는 않습니다. 모든 정수 바이트는 그대로 두고, 32개 사례 칸 중12개를 바꿨습니다. 가중치9,746개와 기존 학습 문서24개는 같습니다.

기존 자료에서 한 번 비교한 결과 이전 표현 소스 상수 관계
전체 첫 선택 성공 132/196 109/196
학습 밖 충족 가능한 문서의 첫 선택 성공 112/170 95/170
반대 목표에 같은 경로를 고른 쌍 62/97 85/97
첫 본문의 출력 사례 통과 1,582/2,048 1,417/2,048
최종 완성한 충족 가능한 문서 194/194 194/194

개선0개·퇴보23개·동일173개였습니다. 드문 마지막 사례가 중요한 두 문서도 첫 선택 2/2→1/2로 낮아졌습니다. 그래서 이 표현은 실험 옵션으로만 두고 기본 모델을 유지합니다. Gooo가 이후 후보를 검증하면서 충족 가능한 문서는 모두 완성했고, 모순된2개는 미완료로 남았습니다. 첫 선택의 품질과 검증 후 완성 여부를 따로 보는 이유입니다.

CPU 학습338.5ms, 판단 중앙값17.167µs·p95 20.625µs, 전체0.93초·최대 RSS29.95MiB였습니다. 프로세스 시간의 평균은 약0.53개 코어 분량이며 PC 전체 이용률 증가는 측정하지 않았습니다. 기존 입력 일부를 교체한 실험이므로 상수 정보 자체가 원인이라고 단정할 수는 없습니다. 다음에는 목표와 상수를 어느 분기·표현식에서 쓰는지 연결하는 표현을 검토합니다. 전체 SDK race·정적 검사·독립 정수 검산과 원래 PR·push CI를 통과해 main b82141a8에 병합했습니다. 병합 후 CI도 통과했습니다. 고정 방법·가중치·모든 실패·검산.

서로 다른 목표를 짝지어 학습하기

PR40은 같은 소스에서 기대 출력이 다른 문서를 짝지어 학습합니다. 예를 들어 같은 비교·반환 도구를 두고 한 요청은 작은 값, 다른 요청은 큰 값을 원할 때 각각의 경로 선호도를 비교합니다. 기존 문서24개로 12쌍을 만들었고, 가중치는 9,746개·38,984바이트로 같습니다.

기존 자료에서 한 번 비교한 결과 이전 학습 목표 쌍 학습
전체 문서의 첫 선택 성공 132/196 128/196
학습 밖 충족 가능한 문서의 첫 선택 성공 112/170 112/170
반대 목표에 같은 경로를 고른 쌍 62/97 58/97
양쪽 목표 모두 첫 선택 성공 35/97 35/97
양쪽 목표 모두 첫 선택 실패 0/97 4/97
전체 후보 시도 264 268

경로를 다르게 고르는 것만으로 양쪽 목표가 모두 충족되지는 않았습니다. 영문 설명은 12/24→14/24로 좋아졌지만 처음 보는 기능군은 14/24→12/24로 낮아졌습니다. 10개 개선·14개 퇴보·172개 동일 결과를 모두 공개했습니다. 첫 본문의 출력은 1,548/2,048개, 중간 조건은 588/588개를 통과했습니다. 유한 탐색 후에는 충족 가능한 194개 문서를 완료했고 모순된 2개는 미완료로 남았습니다. 기본 모델은 유지합니다.

CPU 학습679ms, 판단 중앙값16.416µs, 전체1.26초·최대 RSS30.02MiB였습니다. 프로세스 시간으로 계산한 평균은 약0.66개 코어 분량이고 PC 전체 이용률 증가분은 측정하지 않았습니다. 기존 자료를 살펴본 뒤 정한 학습 방식이므로 새 요청 전체의 정답률로 일반화하지 않습니다. fit -goal-pairs로 로컬에서 같은 학습 방식을 사용할 수 있습니다. 전체 SDK race·정적 검사·읽기 전용 검산과 원래 PR·push CI를 통과해 main 5d59149d에 병합했고, 병합 후 CI도 통과했습니다. 원래 모델과 실험은 다시 실행하지 않았습니다. 고정 방법·가중치·모든 실패·검산 명령.

목표를 읽은 뒤 선택까지 따라가기

PR39의 ExplainInto는 한 번 판단하는 동안 사례 요약, 소스·편향의 중간 값, 사례까지 합친 값, 최종 점수를 기록합니다. 같은 문서196개와 고정된 두 모델로 총392회 진단했고, 모든 점수와 선택이 원래 기록과 정확히 같았습니다. 새 학습이나 본문 실행은 하지 않았습니다.

반대 목표97쌍 모두에서 두 모델의 사례 요약·내부 값·최종 점수가 달라졌습니다. 그런데 실제 경로는 평균 모델61쌍, 새 집계62쌍에서 같았습니다. 목표 정보가 최종 점수까지 전달되는 것은 확인됐습니다. 내부 값을 다르게 만드는 것만으로는 충분한 선택 차이가 생기지 않았습니다.

영어 설명을 쓴 한 사례에서는 한 선택 지점의 두 대안 점수 차이가 목표에 따라 −7.193에서 −0.367로 바뀌었습니다. 차이가 많이 줄었지만 여전히 음수여서 같은 경로를 고릅니다. 이런 실패를 남겨 두고, 같은 모델 크기로 반대 목표를 짝지어 학습한 비교를 위에 추가했습니다. 내부 값의 크기만으로 원인을 확정하지는 않습니다.

진단 자체의 중앙값은 평균 모델18.709µs·새 집계16.792µs였습니다. 기록 복사 비용을 포함하고 실행 순서가 고정돼 있어 속도 개선의 근거로 삼지 않습니다. 전체 실행은 0.50초·최대 RSS30.59MiB, 평균 약0.26개 코어 분량이었습니다. PC 전체 이용률 변화는 측정하지 않았습니다. 전체 SDK race·정적 검사와 원본 계산 재검산을 통과했습니다. 첫 Linux CI에서는 곱셈·덧셈의 반올림 차이가 드러났습니다. 검산기가 실험한 ARM의 결합 연산을 정확히 재현하도록 수정하고, 경계값·아주 작은 값·고정 난수4,096개 입력 조합을 별도 확인했습니다. 원래 기록과 가중치는 그대로입니다. 수정분의 원래 PR·push CI를 통과해 main ff3d2496에 병합했고, 병합 후 CI도 통과했습니다. 모든 내부 기록과 목표별 점수 차이.

드문 사례가 평균 속에 묻히는 문제

PR38에서는 사례를 모으는 방법만 바꿔 보았습니다. 128개 사례 중 하나가 답을 가를 때, 평균 속에서 그 신호가 작아질 수 있습니다. 새 방식은 각 학습 좌표에서 가장 큰 신호의 크기와 부호를 남깁니다. 가중치 수는 9,746개로 같고 기존 24개 학습 문서만 한 번 사용했습니다.

같은 자료에서 관측한 지표 기존 평균 새 집계
학습 밖 충족 가능한 문서의 첫 선택 성공 107/170 112/170
마지막 사례 하나가 답을 가르는 문서의 첫 선택 1/2 2/2
첫 본문의 출력 사례 통과 1,533/2,048 1,582/2,048
반대 목표에 같은 경로를 제안한 쌍 61/97 62/97
전체 후보 시도 271 264

전체 문서 중 11개는 좋아졌고 4개는 나빠졌습니다. 영문 설명은 12/24로 그대로입니다. 유한 탐색 뒤에는 두 방식 모두 충족 가능한 194개 문서를 완료했고, 모순된 2개는 미완료로 남겼습니다. 첫 시도의 중간 조건은 두 방식 모두 588/588개를 통과했습니다. 개별 출력 사례 지표에서는 128개짜리 문서의 비중이 커서 문서별 지표도 함께 봅니다.

드문 조건을 살리는 효과는 관측했지만, 목표가 바뀌어도 같은 경로를 고르는 문제는 여전히 남았습니다. 이미 살펴본 자료를 이용한 비교이므로 새 문제 전반의 정답률로 확대해 읽기는 어렵습니다. 기본 모델은 유지하고 새 집계를 별도 옵션으로 제공합니다.

CPU 학습 336ms, 판단 중앙값16.5µs·p95 19.041µs, 전체 최대 RSS28.31MiB였습니다. 프로세스의 평균 CPU 시간은 약0.52개 코어 분량이고 PC 전체 증가분은 측정하지 않았습니다. 기존 실험과 프로세스에 포함된 작업이 달라 메모리·시간의 개선으로 단정하지 않습니다. 로컬 전체 race·정적 검사·읽기 전용 검산과 원래 PR·push CI를 통과해 main e798810c에 병합했습니다. 병합 후 CI도 통과했습니다. 가중치·모든 선택·퇴보한 문서·재집계.

선언된 목표를 보고 고르는 첫 실측

원래 PR·push CI와 병합 후·태그 CI를 통과해 SDK0.2.36과 모델 파일을 공개했습니다. model-contract-v1.json은 114,032바이트이며 내려받은 파일의 해시와 원본 바이트가 같습니다. 개발 컴파일러의 일반 입력 확인·코드 구성 명령 연결을 PR1444에 공개했습니다. 네이티브 구성과 모델 없는 저장 재실행 테스트가 통과했습니다. Mac의 경로·운영체제 차이로 실패하던 테스트 네 곳을 보완하고 로컬 전체 검사를 패키지 순서대로 실행해 통과했습니다. 원래 핵심 CI·네 플랫폼 배포 준비·독립 호환성 검사를 통과해 dev의 93566df0에 병합했습니다. 병합 후 네 플랫폼 준비·일반 CI·독립 호환성 검사도 통과했습니다. 자동 승격 App 설정 누락과 변환 효과 기록의 실패는 남아 있습니다. 이 연결은 설치된 공개 컴파일러 0.6.25에 아직 포함되지 않습니다.

공개 가중치를 로컬 개발판에서 직접 사용한 20개 명령도 기록했습니다. 이미 알려진 예제 네 개에서 첫 선택 성공은 기본 2/4·모델 3/4, 시도 수는 8→5회였습니다. 소스 출력 32/32·조건 12/12와 네이티브 구성 32/32, 모델 없는 저장 재실행 32/32를 확인했습니다. 모델 호출은 총 8회이며 실패 뒤에는 추가 호출이 없습니다. 판단 자체의 중앙값은 21.25µs, 파일 읽기 등을 포함한 구성은 3.534.18ms였습니다. 고정 순서의 구성은 0.831.74ms였습니다. 전체 명령 과정은 5.47초·최대 RSS83.83MiB로, Go 빌드와 실행 비용도 포함합니다. 새 자연어 요청의 정확도를 측정한 실험과 구분합니다.

PR37은 실제 Gooo 문서 196개를 읽고, 24개로 자체 모델을 한 번 학습한 뒤 나머지 문서를 따로 확인했습니다. 경계값, 부호·거리, 분기별 덧셈·뺄셈, 상수 반환을 직접 반환·별칭·대입 형태로 작성했습니다. 같은 본문과 설명에서 기대 출력만 바꾸므로 모델이 요구 사례도 읽어야 구분할 수 있습니다.

관측 기본 순서 사례 판단 모델
학습 밖 충족 가능한 문서의 첫 선택 성공 85/170 107/170
해결 가능한 전체 문서의 최종 완성 194/194 194/194
모순된 요구를 완성으로 처리한 문서 0/2 0/2
전체 후보 시도 396회 271회
전체 탐색 시간 합계 18.278ms 27.837ms

49개 문서에서 첫 선택이 좋아졌고 21개에서는 나빠졌습니다. 시도 횟수는 줄었지만 이번 작은 과제에서는 시간이 더 걸렸습니다. 모델의 첫 판단은 문서마다 한 번이고, 선택 후에는 기존 타입·조건·출력 검사로 후보를 확인했습니다. 해결 가능한 사례를 끝까지 만족하는 능력과 처음부터 맞히는 능력을 나눠 보고 있습니다.

같은 소스의 서로 다른 목표 97쌍 모두에서 점수는 달라졌지만 61쌍은 최종 선택이 같았습니다. 영문 설명 12쌍, 처음 보는 계산 계열 12쌍, 마지막 사례 하나가 답을 바꾸는 1쌍이 여기에 포함됐습니다. 입력을 받아들이는 것과 실제 결정에 충분히 반영하는 것 사이에 차이가 있습니다. 평균으로 요약하면서 생기는 손실과 소스·의도 점수와의 관계를 다음에 살펴볼 근거입니다. 어떤 요인이 큰지는 별도 비교로 확인할 단계입니다.

CPU 학습은 356.692ms, 판단 중앙값 16.375µs·p95 18.791µs였습니다. 전체 실험은 1.47초, 최대 RSS 49.03MiB였으며 평균 약 0.52개 CPU 코어 분량을 사용했습니다. PC 전체 이용률의 증가분은 측정하지 않았습니다. 가중치 자체는 38,984바이트입니다. 같은 템플릿을 공유하는 작은 과제들이며, 영문 설명과 새 계열의 첫 선택 성공률은 각각 50%였습니다. 더 넓은 언어 이해 성능은 별도 확인이 필요합니다.

가중치, 784개 후보 결과, 392개 탐색, 모든 실패와 읽기 전용 검산을 공개했습니다. 실험용 한 번 실행한 파일은 확인 후 지웠고, 필요한 결과 묶음은 약 536KiB입니다. 예제에는 원래 Gooo 파일과 추출 문서 네 쌍이 있어 로컬에서 모델을 넣거나 생략해 실행할 수 있습니다. 원래 학습·실험은 재실행하지 않았습니다. 모델·원자료·로컬 명령.

실행 전에 선언한 요구도 읽기

현재 v6 모델은 첫 판단에서 소스 구조와 의도를 읽습니다. 같은 본문에 서로 다른 기대 출력 사례를 적어도 초기 입력 배열은 같습니다. 컴파일러가 알고 있는 요구 중 일부가 모델에 전달되지 않는 셈입니다.

PR35의 InitialContractInput은 선언된 입력·기대값을 별도 채널로 읽는 API입니다. 1~128개 사례의 순서와 값을 모두 보관하며, 각 사례를 32칸 배열로 변환합니다. 사례 정수 쌍의 저장 공간은 2,048바이트, 한 사례를 변환하는 작업 공간은 128바이트입니다. 여기에 소스 참조와 식별 정보가 추가됩니다. 큰 정수는 바이트로 나누어 정확히 유지하고, 일부 사례만 골라 버리는 처리는 없습니다.

선언한 기대값은 요구사항이고, 실행 뒤 실제로 얻은 값은 관측입니다. 이 둘을 구분해 PR36에 전용 모델을 구현했습니다. 각 사례의 32칸 입력을 공유 가중치로 8개 값으로 바꾸고, 전체 평균을 소스의 선택 정보와 합쳐 경로에 점수를 줍니다. 설명서 옆에 적힌 동작 예시까지 읽으며 조립 순서를 정하는 셈입니다. 9,746개 매개변수·가중치 38,984바이트이고 사례 수에 따라 가중치가 늘지 않습니다.

Go만으로 학습하고 실행할 수 있습니다. 로컬 예제 명령은 추출된 Gooo 문서를 받아 학습용 후보를 실제로 확인해 정답 집합을 만들고, 새로운 모델 파일을 저장합니다. 실행할 때는 첫 판단 한 번 뒤 기존 유한 탐색과 전체 사례 검사를 사용합니다. 모델을 생략하면 기존 고정 순서를 사용합니다. 선언한 목표의 입력 기록은 실제 실패 피드백과 별도로 남깁니다. 일반 컴파일러 CLI 연결은 로컬 개발판에 구현했고, 위 20개 명령의 기록에 남겼습니다. 설치된 공개0.6.25에는 아직 포함되지 않습니다.

8개 값으로 요약하면 서로 다른 요구를 구별하지 못할 수 있습니다. 그래서 모델 점수와 실제 기능의 완전성은 따로 확인합니다. 같은 소스·설명에서 기대값만 바꾼 두 목표를 학습해 각 경로가 큰 정수까지 정확히 실행되는 연결 테스트가 통과했습니다. 학습 밖 과제와 비용에 대한 최초 측정은 위 PR37에 기록했습니다. 구조·로컬 명령·검증 범위.

같은 소스에서 기대값만 바꾸는 테스트, 128개 전체 사례 보존, 큰 정수의 한 단위 차이, 최솟값·최댓값, 동시 읽기와 호출자 배열 변경을 확인했습니다. 로컬 전체 race·정적 검사가 통과했고, 입력 API의 원래 PR·push CI 통과 후 main 6bfa7581에 병합했습니다. 병합 후 CI도 통과했습니다. 전용 모델 PR36도 원래 CI 통과 후 main 395a8acd에 병합했고, 병합 후 CI가 통과했습니다. API 사용법과 다음 모델의 경계.

잘못된 후보에서 시작해 다음 선택 확인

PR34은 학습 소스를 뺀 146개에서 잘못된 시작 후보 438개를 실제로 실행했습니다. 두 모델이 같은 실패 관측을 받고, 이미 실행한 후보 하나만 제외한 뒤 다음 후보를 선택했습니다. 선택 직후 출력 8개와 조건 3개 사례를 확인했습니다. 새 학습은 하지 않았습니다.

438번의 실패 뒤 판단 이전 모델 관측을 학습한 모델
이미 실패한 후보를 다시 추천 19 0
다음 미실행 후보가 전체 사례 통과 346 438
관측 전 저장 점수로 같은 후보만 제외했을 때 통과 400 438
피드백으로 선택이 개선 / 악화된 경우 0 / 54 0 / 0

새 모델은 실패 관측을 받아도 이 과제의 통과 선택을 유지했습니다. 관측 전 점수로도 전부 통과할 수 있었으므로, 피드백의 추가 이득은 이번 집합에서 확인되지 않았습니다. 이전 모델의 잘못된 다음 후보 92개는 조건 사례를 모두 맞추면서 출력값을 틀렸습니다. 분기 조건과 최종 기능의 완전성을 계속 따로 확인해야 하는 이유입니다.

전체 실험은 0.58초, 최대 RSS 19.27MiB였습니다. 진단 복사를 포함한 판단 중앙값은 이전 14.542µs·새 모델 15.084µs였고, 호출 순서는 이전 모델부터 고정했습니다. 다음에는 처음 설명만으로 여러 동작이 가능하고, 실제 관측이 선택을 좁히는 과제가 필요합니다. 원래 PR·push CI 통과 후 main 81fec839에 병합했습니다. 원자료와 검산을 공개했고 병합 후 CI도 통과했습니다. 방법·모든 선택·한계.

실행한 결과도 학습 자료로 넣기

SDK PR33은 기존 16개 학습 소스에서 잘못된 후보를 각각 세 개씩 실행했습니다. 48개 관측 중 조건 실패가 32개, 출력 실패가 32개였고, 둘 다 실패한 관측은 16개였습니다. 모델에 답을 물어서 만든 자료가 아니라 Gooo가 선언한 사례를 실제로 실행한 기록입니다. 초기 16개 입력에 이 기록을 더해 64개 자료로 한 번 학습했고, 평가용 표현·상수·대조 소스는 학습에 넣지 않았습니다.

조립 설명서 옆에 “이 배치로 움직였더니 이 값이 나왔다”는 기록을 붙이는 셈입니다. 모델은 선언된 네 가지 배치 중 하나를 고르고, Gooo가 실제 동작을 확인합니다.

첫 선택에서 모든 선언 사례 통과 이전 모델 관측 추가
학습 소스 14/16 16/16
같은 과제의 다른 표현 56/64 64/64
학습 밖 상수 70/80 80/80
대조 소스 1/2 2/2
합계 141/162 162/162

21개가 개선되고 새 실패는 없었습니다. 출력 1296/1296·조건 486/486개를 통과했고, 두 탐색 방식의 후보 시도는 각각 183 → 162회였습니다. 모든 첫 선택이 맞아서 실패 뒤 모델 호출은 0회였습니다. 따라서 실패를 보고 다음 선택을 고치는 능력은 아직 별도로 측정해야 합니다. 자료의 비중도 달라졌으므로 개선 원인을 하나로 단정하기는 이릅니다.

크기는 9,290개 매개변수·가중치 37,160바이트로 유지됐습니다. 관측 수집 1.106ms, CPU 학습 514.836ms, 진단 복사를 포함한 판단 중앙값 14.875µs·p95 16.875µs였습니다. 전체 1.06초 동안 CPU 시간은 0.70초, 평균 약 0.66개 코어 사용에 해당합니다. 최대 RSS는 21.03MiB이고 PC 전체 이용률 증가분은 측정하지 않았습니다.

관련된 작은 과제 집합에 대한 결과입니다. 새 과제·더 복잡한 본문·다양한 한영 문장은 후속 검증 범위입니다. 원래 PR·push CI 통과 후 main da15815d에 병합했습니다. 원자료와 모델이 공개됐고 병합 후 CI도 통과했습니다. 방법·가중치·실행 기록·검산.

관계 입력 뒤에 의도 차이가 사라진 지점

PR30은 반환값과 비교값 사이의 같음·크기 관계를 명시적으로 전달했습니다. 크기는384칸·9,290개 매개변수로 유지했습니다. 직접 반환16개만 같은 설정으로 학습한 v6의 첫 선택은82/162로, 이전 v5의101/162보다 낮았습니다. 출력 사례736/1296과 조건 사례486/486을 통과했습니다. 조건을 맞춰도 최종 반환값은 틀릴 수 있다는 점을 별도 지표로 볼 수 있습니다. 실패 뒤 후보를 계속 확인하는 두 탐색 방식은 모두162/162개 선언 사례를 마쳤고 시도는각242회였습니다.

v6 학습은약102ms, 판단 중앙값13.9µs, 전체 실험 최대 RSS20.6MiB였습니다. CPU 시간은 0.28초 사용자·0.03초 시스템, 전체0.72초 동안 평균약0.43개 코어 사용에 해당합니다. PC 전체 이용률 상승분은 측정하지 않았습니다. PR30은 원래 두 CI와 병합 후 CI를 통과해 main 084555d4에 병합됐습니다. SDK0.2.35에 기존 ReLU v6와 아래 새 모델을 함께 배포했으며, 사용할 파일을 명시적으로 선택합니다. 결과·가중치·모든 실패.

후속 진단 PR31에서는 같은 코드에 “큰 값을 반환”과 “작은 값을 반환”이라는 의도를 준16쌍을 비교했습니다. 입력의 차이는 분기 의도 부분에만 있었습니다. v6의8쌍에서는 내부 값24개가 모두0이 되어, 두 의도의 분기 점수가 학습된 고정 편향값만 남았습니다. v5에서는 그런 쌍이 없었습니다. 신호가 들어왔는데 중간 회로에서 사라지는 위치를 찾은 셈입니다.

새 Model.ExplainInto는 실제 판단과 함께 내부 활성값·선택 점수를 보여 줍니다. 기존 가중치로64번 새 진단 호출을 했고, 이전 판단 결과와 모두 같았습니다. 재학습·본문 조립·사례 실행은 하지 않았습니다. 공개된 원본과 검산으로 이 범위를 확인할 수 있습니다. 나머지8쌍은 내부 값이 살아 있어도 큰 값 선택에 실패했습니다. 따라서 이번 관찰이 모든 실패를 설명하지는 않습니다. 진단 API와 원본은 main 4b63016e에 병합했고, 원래 PR·push·병합 후 CI가 통과했습니다. 이어서 진행한 실험 결과는 아래에 있습니다. 64개 진단 원본과 한계.

작은 음수 신호를 남긴 새 모델

PR32에서는 음수 내부 값을 0으로 끊는 대신 0.01배로 남겼습니다. 전선이 완전히 끊어지던 곳에 작은 신호를 통하게 한 셈입니다. 16개 학습 자료·입력 배열·9,290개 매개변수·학습 순서를 유지하고 CPU로 한 번 학습했습니다. 가중치 자체는 37,160바이트, 배포용 JSON은 108,562바이트입니다.

확인한 범위 기존 ReLU v6 새 모델
첫 선택이 모든 선언 사례 통과 82/162 141/162
큰 값 반환 과제 0/80 80/80
작은 값 반환 과제 80/80 60/80
유한 탐색 후 전체 선언 사례 통과 162/162 162/162
위 탐색의 후보 시도 수 242 183

80개가 개선됐고 21개가 악화됐습니다. 작은 값 선택 20개와 중첩 분기 1개에서 후퇴했습니다. 최종 통과율과 첫 선택의 정확도를 따로 기록하는 이유입니다. 피드백 호출을 추가해도 이번 시도 수는 같았습니다. 다른 표현으로 쓴 128쌍은 같은 판단을 유지했고, 직접 반환하는 반대 의도 16쌍에서 내부 값이 모두 0이 되는 현상은 사라졌습니다.

학습은 133ms, 진단 값 복사를 포함한 판단 중앙값은 14.5µs였습니다. 전체 실험 최대 RSS는 20.41MiB입니다. PC 전체 CPU 이용률 증가분은 측정하지 않았습니다. 관련된 작은 과제와 한 가지 학습 설정의 결과이므로, 새로운 자연어 요청 전반의 정확도를 말해 주지는 않습니다. 새 계산은 모델 형식 gooo/flow-candidate-decision/v2에 명시했습니다. 원래 PR·push CI를 통과해 main d047005b에 병합했고, 병합 후·태그 CI도 통과해 SDK0.2.35로 공개했습니다. 컴파일러 연결과 실제 학습 가중치의 CLI 측정은 PR1443에 공개한 뒤 원래 CI·배포 준비· 독립 호환성 검사를 통과해 dev의 fd039c32에 병합했습니다. 병합 후 배포 준비·일반 CI는 통과했고 독립 호환성 검사도 통과했습니다. 자동 승격은 기존 App 설정 누락으로 중단됐습니다. 성공·실패를 골라 넣은 5개 소스의 명령 30개를 실행했습니다. 기본·모델·피드백 후보 시도는 총 7/8/8회였고, 세 방식 모두 최종 출력 40/40·조건 15/15개를 통과했습니다. 네이티브 조립과 모델 파일 없는 저장 재실행도 각각 40/40개를 통과했습니다. 모델 읽기를 포함한 시간은 3.1463.685ms로 기본 0.6761.019ms보다 길었습니다. 개발판 CLI 기록. 정해 둔 실험 방법·가중치·모든 실패·검산.

같은 기능의 표현 차이를 줄인 뒤 실제로 학습

PR28의 v5 입력은 하나의 분기에서 확인 가능한 값 흐름을 읽습니다. 직접 반환·별칭·대입·복사 뒤 덮어쓰기·분기 뒤 복사를 같은 입력으로 정리합니다. 162개 Gooo 소스 중 동등한 표현 128쌍이 모두 같은 입력이 됐고, 각 쌍의 통과 후보 집합도 같았습니다. 중첩 분기·산술식 대조 소스는 원래 입력을 유지했습니다. PR28은 main 69fe9dd0에 병합됐고 원래 PR·push·병합 후 CI가 통과했습니다.

PR29에서는 직접 반환 16개만 보고 v4·v5 모델을 각각 처음부터 학습했습니다. 크기는 모두 9,290개 FP32 매개변수, 가중치37,160B입니다. 예측 뒤 바로 본문을 조립해 출력8개·조건3개 사례를 확인했습니다. PR29는 main ed84d95c에 병합했고 원래 PR·push·병합 후·태그 CI가 통과했습니다. SDK0.2.34와 두 새 가중치를 공개했으며 공개 파일을 다시 받아 원본 바이트·체크섬·Go 모듈 소스를 확인했습니다.

첫 선택에서 전체 사례를 만족한 소스 v4 v5
학습 직접 반환 16/16 10/16
같은 과제의 다른 표현 32/64 40/64
새로운 상수 48/80 50/80
범위 밖 대조 소스 2/2 1/2

같은 과제의 표현 전이는 나아졌지만 학습 사례와 대조 사례에서 후퇴했습니다. v5는 동등한 표현 128쌍에 같은 분포를 주며, 잘못된 판단도 일관되게 반복할 수 있습니다. 모델 없는 기본 탐색과 두 모델의 초기·피드백 탐색은 모두 162/162개 선언 사례를 마쳤습니다. 총 후보 시도는 기본324, v4 226, v5 223회였습니다. 피드백은 추가 호출만 만들고 시도를 줄이지 못했습니다. 이번 모델은 첫 입력만 학습했다는 제약도 있습니다.

v5 학습은0.107초, 판단 중앙값14µs였습니다. 학습2회·선택324개·탐색810개를 포함한 전체 명령은0.88초, 최대 RSS21,266,432B였습니다. CPU 시간 합계0.57초는 평균 약0.65개 코어의 사용량입니다. PC 전체 이용률 상승분은 측정하지 않았습니다. 두 가중치·모든 실행·재검산.

컴파일러 CLI의 v5 파일 연결은 로컬 후속 변경에서 사전 조회와 실제 판단 배열의 일치, 다섯 표현·동시 조립·모델 없는 저장 재실행 검사를 통과했습니다. 아직 공개 컴파일러 배포에는 포함되지 않습니다. 관계를 명시적으로 전달한 후속 실험과 그 실패를 추적한 결과는 위 PR30·PR31에 기록했습니다.

공개 모델을 Gooo 대입문 조립에 직접 사용

컴파일러 PR1442는 SDK0.2.33을 연결합니다. body-context가 내보내는384칸 배열이 실제 첫 판단과 같은지 확인했고, 변수 대입 뒤에 반환하는 예제를 공개된 가중치로 조립했습니다. 모델 없이3개 후보, 모델을 쓰면2개 후보를 검사했습니다. 피드백을 한 번 더 받아도2개로 같았습니다.

첫 선택은 틀렸습니다. 출력 실패를 본 뒤에도 모델은 이미 틀린 후보에 최고 점수를 줬고, 탐색기가 검사한 후보를 건너뛰어 다음 후보로 완성했습니다. 첫 판단은24.375µs, 로딩을 포함한 조립은3.437ms로 기본 탐색1.068ms보다 길었습니다. 한 번씩의 관측입니다. 조립한 프로그램과 모델 파일을 지운 뒤의 저장 재실행은 각각 별도 네이티브8/8개 사례를 통과했습니다. 공개 컴파일러0.6.25에는 아직 없습니다. PR의 원래 의미 추출 검사가 새 검산·테스트 두 파일에서 실패해 보조 함수 구조를 수정했습니다. 앞선 호환성 검사가 끝난 뒤 수정분 a4eec64c를 올렸고, 새 실행의 의미 검사와 네 플랫폼 배포 준비가 통과했습니다. 전체 CI와 독립 호환성도 통과한 뒤 dev의 6848e6ce에 병합했습니다. 병합 후 네 플랫폼 준비·전체 CI·독립 호환성 검사도 통과했습니다. 원본 기록·입력 해시·정확한 정수·시간과 한계.

변수 흐름을 읽는 두 모델의 실제 학습

공개 PR27에서 변수 흐름 정보를 켠 모델과 끈 모델을 같은 조건으로 비교했습니다. 두 모델 모두 Gooo 소스 32개에서 만든 입력 160개만 학습했습니다. 각각 한 번, 400번의 학습 갱신을 했으며 결과를 본 뒤 설정을 바꾸지 않았습니다. PR27은 main 1a88431c에 병합됐습니다. 원래 PR·push, 병합 후·태그 CI를 통과해 SDK0.2.33으로 공개했고, 배포한 두 모델 파일과 Go 모듈의 바이트를 확인했습니다. v4 모델은 SDK에서 사용할 수 있으며 개발 컴파일러의 v4 CLI 연결은 위 PR1442에 공개했습니다. 설치본 적용은 다음 배포 단계입니다.

첫 선택에서 선언 사례를 모두 통과한 소스 흐름 끔 흐름 켬
학습 소스 26/32 32/32
한글·영어 표현 변경 18/32 25/32
상수 변경 26/32 32/32
변수 대입 형태 8/16 8/16
새 네 구간 분류 2/16 8/16
학습에 쓰지 않은 전체 54/96 73/96

여러 경로를 차례로 확인하는 탐색은 네 방식 모두 128개 소스의 선언 사례를 마쳤습니다. 흐름 정보를 켠 모델의 초기 선택을 쓰면 전체 시도는 224회에서 151회로 줄었습니다. 소스별로 31개가 개선되고 95개는 같았으며 2개는 나빠졌습니다. 변수 대입의 첫 선택은 그대로이고, 이전 실패를 본 뒤의 대입 판단은 32/64에서 30/64로 내려갔습니다.

피드백도 따로 확인했습니다. 새 모델에 실패를 다시 전달해도 시도는 151회로 같았고 호출만 23회 늘었습니다. 따라서 이 자료에서는 초기 판단만 사용하는 편이 낫습니다. 어떤 실패에서 추가 판단이 유용한지는 별도 지표로 구분할 필요가 있습니다. 같은 기능을 직접 반환하거나 변수에 담아 반환할 때 생기는 표현 차이도 다음 실험에서 다룰 문제입니다.

새 모델 한 번 학습은 약1.15초, 판단 시간의 중앙값은 약13.9마이크로초였습니다. 두 학습·1,408회 실제 본문 판단·512회 탐색 전체는 3.11초, 최대 RSS 약45.5MB입니다. CPU 시간으로는 평균 약0.87개 코어를 사용한 셈이며, 컴퓨터 전체 이용률의 증가분을 측정한 값은 아닙니다. 이번 자료는 서로 관련된 작은 과제의 변형입니다. 일반적인 언어 이해의 정답률로 확대하지 않습니다. 두 가중치·개별 실패·전체 관측과 검산.

학습 전 입력 표현을 확인한 과정

학습 전에 변수의 값 전달을 읽는 입력 PR25에서 표현을 확인했습니다. 예를 들어 두 분기가 모두 return result로 끝나도, 앞에서 result에 무엇을 넣었는지에 따라 다른 기능이 됩니다. 새 분석은 그 대입과 복사를 따라가 최종 반환값을 입력에 담습니다. 다른 분기에서 값이 갈리거나 계산식을 아직 해석하지 못하는 경우에는 모르는 값으로 남깁니다.

기존 128개 소스에서 모델 입력이 같지만 허용되는 정답 경로가 겹치지 않았던 쌍은 72개였습니다. 기존 320칸을 보존하고 64칸을 덧붙인 표현에서는 72쌍 모두 구분됐습니다. 소스 제외는 0개입니다. 이는 같은 지도를 보던 모델에게 대입 뒤의 길 차이를 표시해 준 정도로 볼 수 있습니다. 그 지도를 새 모델이 얼마나 잘 읽는지는 다음 학습에서 확인해야 합니다.

분석 전체는 0.56초, 프로세스 최대 RSS 약19.1MB였습니다. 입력 파일 읽기와 계획 준비도 포함합니다. 이번 기록에서 학습·모델 호출·후보 사례 실행은 모두 0회이며, 기존 평가의 정답 집합으로 구분 여부만 셌습니다. 입력 PR25는 main 60d258ca에 병합됐고 병합 후 CI도 통과했습니다. 새 384칸 입력을 받는 모델과 실제 선택 연결은 후속 PR26에 있습니다. 모델은 384→24→2 구조로, 9,290개의 FP32 값이 37,160바이트를 차지합니다. 대입 방향 구분과 반례 반영을 연결 테스트로 확인했습니다. PR26은 main 4084ef42에 병합됐고 병합 후 CI도 통과했습니다. 새 가중치의 학습 결과는 위 PR27에 공개했습니다. 128개 배열·프로토콜·검산.

최초 조건 모델 구성

절댓값을 계산하는 Gooo 소스24개를 만들었습니다. 최종 답은 같아도 비교 조건을 음수·양수로 다르게 표현하는 쌍이 있습니다. Gooo가 후보 조합별 출력7개와 중간 조건3개를 검사해 유효한 조합을 구했습니다. 이 가운데8개 소스에서 만든40개 입력만 학습에 사용했습니다.

모델은256개 특징을24개 중간 값과 두 선택 점수로 바꿉니다. 같은 모델을 각 선택에 적용하고 완전한 후보 조합의 점수를 합칩니다. 유효한 조합 집합 전체에 대한 손실로 학습하므로 각 위치에서 가능한 선택을 따로 모아 잘못된 조합을 정답으로 만드는 일을 피합니다. 점수를 더하는 구조에는 표현 한계가 있어, 선택 뒤 Gooo 사례 확인을 계속 사용합니다.

기록된 성적

자료 첫 판단 후보 관측 뒤 판단
학습 소스 8/8 32/32
새로운 한영 표현 2/4 12/16
지역 변수를 추가한 구조 8/8 32/32
새 표현과 구조 함께 2/4 12/16

정답은 출력과 조건 사례를 모두 만족한 조합입니다. 같은 소스에서 만든 관측 입력들은 서로 연관돼 있습니다. 조건 실패가 없는 관측은 첫 판단과 같은 정보를 담을 수 있습니다. 지역 변수 자료도 같은 절댓값 문제이며, 여러 문제군에 대한 결과는 더 확인해야 합니다.

실패12건 중9건은 출력7/7인데 조건1/3이었습니다.3건은 출력1/7·조건1/3입니다. 학습 뒤 이 실패를 보고 설정을 바꾸거나 다시 학습하지 않았습니다.

우리 PC에서 관측한 비용

  • 학습:0.172071초,6,218개 FP32 매개변수.
  • 선택2곳·후보4개 판단:중앙값7.667µs,p95 7.917µs.
  • 전체 명령:0.67초,CPU 사용자0.21초+시스템0.01초.
  • 최대 프로세스 RSS:15,564,800바이트. 상주 가중치 값은24,872바이트.
  • JSON 모델 파일:72,482바이트. 새 가중치의 삼진 압축은 후속 작업입니다.

CPU 시간/벽시계 시간은 평균 약0.33코어 분량이며 전체 PC 사용률 증가량은 미측정입니다.

무엇까지 연결됐나

Go API와 실험 도구에서 모델 선택→Gooo·Go 본문 생성→typed interpreter 확인까지 연결했습니다. 120개 모델 판단 직후120개 선택 본문을 확인했으며, native 실행 파일 실행은0회입니다. 이 최초 학습 실험 뒤 일반 컴파일러 CLI 연결을 구현했습니다. 아래에 별도 관측을 기록합니다. 출력 실패까지 포함한 입력, 새 문제군과 압축 후 비교가 남았습니다. Hugging Face는 로컬 로그인이 없어 GitHub에 먼저 공개했습니다.

모델을 실제 탐색 순서에 쓰면

SDK PR19에 새 모델과 기존 후보 탐색을 연결했습니다. 1~16개 선택의 점수를 한 번에 구하고, 실제 검사에서 실패한 조건을 다음 판단에 전달합니다. 같은 경로를 다시 시도하지 않으며, 모델을 생략하면 선언된 기본 경로부터 진행합니다. 로컬 전체 race·정적 검사와 원래 GitHub push·PR 검사를 통과해 main 80f0b5e9에 병합했습니다. 병합 후 CI38020841075와 태그 CI38020967141도 통과해 SDK0.2.30 실험 배포를 공개했습니다. 공개 Go 모듈이 병합 소스와 같은 것을 확인했습니다. 가중치는0.2.29의 파일을 그대로 사용합니다. 일반 CLI 제공자 연결은 아래 PR1441에서 실제로 사용했습니다.

앞서 공개한 가중치와 소스24개를 그대로 사용해 세 방식으로 새로 실행했습니다.

방식 소스 사례 모두 만족 시도 경로 합계 모델 호출
기본 탐색 24/24 60 0
첫 모델 판단만 사용 24/24 35 24
조건 실패를 전달 24/24 28 28

피드백 방식의 실제 판단은 중앙값8.583µs, p958.958µs였습니다. 전체72개 탐색 명령은 0.49초·CPU 사용자0.02초+시스템0.01초·최대 RSS21,397,504바이트였습니다. 재학습과 native 실행은0회입니다. 일부 새 표현 묶음은 경로가 줄어도 판단·기록 비용 때문에 조금 더 오래 걸렸습니다.

모두 같은 절댓값 문제의 기존 자료이고 후보도4개뿐입니다. 따라서 이번에는 일반 정답률보다 사례를 만족하는 본문까지 몇 번 시도했는지를 보는 게 알맞습니다. 출력과 중간 조건을 분리해 검사한 덕분에, 답만 같고 비교 조건이 다른 조합도 탐색에서 제외할 수 있었습니다.

72개 실행 원본과 재집계 · 입력·동작·제한.

Gooo CLI에서 직접 사용한 결과

컴파일러 PR1441에 body-context, body-codegen, body-construct 연결을 구현했습니다. 네 플랫폼 빌드는 통과했고, 원래 CI에서 발견한 모델 로더의 파일 분리와 보관용 소스의 검사 목록 혼입을 수정했습니다. 수정본 1ceb96b9의 필수 6개 검사와 CI 증거 검사는 통과했습니다. 별도 호환성 실행에서 기존 Gooo 정책과 생성 파일의 식별값 불일치를 발견했습니다. 소스로부터 생성 파일을 갱신하고, 같은 누락을 일반 검사에서 발견하도록 회귀 검사를 추가했습니다. 후속 수정 41f6e466의 원래 CI·네 플랫폼 빌드·호환성 실행이 모두 통과해 dev의 94345d07에 정상 병합했습니다. 병합 후 일반 CI·네 플랫폼 준비·독립 호환성 검사가 통과했습니다. 공개0.6.25/SDK28과 이 개발 소스/SDK30을 구분해서 사용해야 합니다.

같은 가중치를 새로 학습하지 않고, Gooo 소스에 선언한 비교·분기 선택에 직접 사용했습니다. 첫 모델 제안은 출력9개를 모두 맞혔지만 중간 조건은1/3이었습니다. 실제 실패 조건을 전달한 다음 제안이 출력9/9·조건3/3을 통과했습니다. 기본 탐색은4개 경로, 조건 모델은 2개 경로와2회 판단을 사용했습니다. 초기 특징 배열과 실제 판단 입력의 해시도 같았습니다.

실험용 모델 사본을 지우고 저장된 본문을 네이티브 실행 파일로 만들었습니다. 실제 프로세스 두 번으로 별도10개 사례를 모두 통과했고, 그 중4개 입력은 소스의 출력 사례에 없던 값입니다. 큰 정수 9007199254740993, ±9007199254740995, 18014398509481990도 그대로 확인했습니다.

첫 판단10.708µs·피드백10.625µs였으며, 조립 단계 전체는 기본1.153ms·모델3.344ms였습니다. 모델 로딩1.869ms가 포함돼 있습니다. 경로가 줄어도 작은 문제의 전체 조립은 더 오래 걸렸습니다. 모델 사용 명령의 최대 RSS는21,970,944바이트, 저장 본문의 빌드·실행 명령은86,589,440바이트였습니다. 전체 PC CPU 사용률 변화는 측정하지 않았습니다.

생산자 35851648, 공개 기록 a263a263에서 한 번 수행했습니다. 같은 절댓값 계열의 유한 사례 관측이고 범용 자연어 이해를 측정한 것은 아닙니다. 원본 생성 기록과 정확한 정수 재집계 도구를 공개했습니다. 네이티브 관측은 로컬 경로와 부모 영수증을 제외한 발췌임을 표시했습니다.

CLI 실행 원본·재집계 · 사용법과 현재 범위.

다음 모델에서 먼저 보완할 입력

CLI 연결 뒤 더 다양한 기능으로 넓히기 전에, 직접 반환하는 값의 역할을 확인했습니다. if input < 10 { return 10 } else { return input }와 반환 순서를 뒤집은 본문에 똑같이 “입력과10 중 큰 값을 반환한다”는 의도를 적었습니다. 출력 사례6개도 같습니다.

두 소스는 정답 분기 배치가 반대인데 현재 모델 입력256개 FP32 값은 완전히 같았습니다. 실제 공개 모델도 같은 선택을 내어 한 본문은1/6, 다른 본문은6/6 사례를 통과했습니다. 현재 표현에서 직접 반환하는 입력·상수의 역할이 빠지는 것이 원인입니다.

이것은 일부러 만든 표현 충돌 반례입니다. 현재 모델의 전체 정답률 수치로 읽지는 않습니다. 이 반례를 바탕으로 아래 v2 입력에 분기 반환값과 지역 변수의 선언 관계를 담았습니다. 새 입력으로 학습한 가중치와 실제 성적은 아래 후속 실험에 공개했습니다.

SDK PR20에 원본을 공개했습니다. 새 판단2회·학습0회·네이티브 실행0회이며, Go typed interpreter로 후보4개×사례6개를 확인했습니다. 원래 push·PR CI를 통과해 main 8cd480a5에 병합했습니다. 병합 후 CI38022466082도 통과했습니다. 새 가중치나 모델 입력 버전은 이 연구에 포함되지 않습니다. Gooo 소스·전체 특징·결과·재집계.

분기 반환값을 읽는 v2 입력

SDK PR21을 main 437de8c0에 병합했습니다. 원래 push·PR CI와 병합 후 CI38023377149가 통과했습니다. 태그 CI38023529398도 통과해 SDK0.2.31을 공개했습니다. 기존 모델이 읽는 256칸 중 비어 있던 20칸에 분기별 반환 역할을 기록합니다. 예를 들어 return input과 return 10이 서로 다른 칸을 채우므로, 위 두 본문을 구분할 수 있습니다. 길 안내 지도에 갈림길 뒤의 목적지를 덧붙이는 정도로 생각하면 됩니다.

분기 안에서 변수를 반환한다면 선언 때 입력값을 받았는지, 상수로 시작했는지, 본문에 그 변수를 바꾸는 대입이 있는지도 읽습니다. 중첩된 분기의 반환 위치를 모으되, 대입을 실행한 뒤 변수에 어떤 값이 남는지까지 계산해서 입력에 넣지는 않습니다. 상수의 실제 숫자와 전체 데이터 흐름은 앞으로 다룰 부분입니다.

입력 배열은 여전히 1,024바이트, 모델은 6,218개 FP32 매개변수입니다. 새 형식의 이름은 source_intent_condition_branch_roles_v2입니다. 모델 파일이 이 이름을 가지며 첫 판단과 조건 피드백에서 같은 형식을 사용합니다. 이전 형식과 가중치의 식별값도 유지하는지 검사했습니다. 변수 이름 변경·중첩 반환·큰 정수·동시 호출을 포함한 검사도 통과했습니다.

이 입력은 두 소스를 구분할 정보를 제공합니다. 후속 실험에서는 실제로 학습하고, 최대·최소 선택, 지역 변수, 중첩 조건과 새 한영 표현을 나눠 측정했습니다. 첫 판단과 탐색 뒤의 결과는 아래처럼 차이가 있습니다.

입력 배치·Go API·현재 한계.

같은 설정으로 두 모델을 학습한 결과

PR22에 두 모델과 원본 기록을 공개했습니다. 생산자 b3360fb0에서 계획을 고정한 뒤 각각 한 번 학습했습니다. 60개 Gooo 소스 변형 중 최대·최소 선택 8개에서 얻은 40개 입력만 학습에 사용했습니다. 학습 횟수·초기값·모델 크기는 같고, 기존 입력과 분기 반환 역할을 추가한 입력을 비교했습니다. 평가 뒤 재학습은 하지 않았습니다.

소스 묶음 기존 입력 모델의 첫 판단 새 입력 모델의 첫 판단 새 모델 본문이 맞힌 출력 사례
학습 소스 4/8 8/8 64/64
새 한영 표현 8/16 6/16 58/128
지역 변수 구조 4/8 4/8 36/64
새 표현과 지역 변수 8/16 8/16 72/128
중첩 범위 제한 2/8 2/8 32/88
상수값 구분 과제 2/4 2/4 14/28

새 입력은 학습한 분기 배치를 익히는 데 도움이 됐지만, 새로운 표현에서는 성적이 낮아졌습니다. 학습 밖 52개 소스를 합하면 기존 모델 24/52, 새 모델 22/52입니다. 상수값이 빠진 입력 충돌도 두 쌍 남았습니다. 서로 연관된 몇 가지 함수의 변형이므로 이 수치의 범위도 그 자료에 한정됩니다.

모델 선택 직후 본문을 조립해 출력 사례를 다시 확인한 기록 584개를 남겼습니다. 그 뒤 기본 탐색·기존 모델·새 모델·각각의 조건 피드백까지 다섯 방식으로 300번 탐색했습니다. 각 방식 모두 60/60개의 소스 사례를 충족했습니다. 경로 시도 합계는 기본 122회, 기존 모델 98회, 새 모델 96회입니다. 후보가 2개 또는 4개인 유한 공간에서 얻은 완성률입니다.

조건 피드백의 추가 판단은 0회였습니다. 중간 비교 조건은 맞지만 최종 출력이 틀린 판단이 230개 있었고, 이 실패는 현재 조건 입력을 바꾸지 않습니다. 다음에는 어떤 입력에서, 기대값과 실제값이 어떻게 달랐는지를 정확한 정수로 담는 출력 피드백을 추가할 필요가 있습니다. 새 모델의 지역 변수와 중첩 구조 학습도 별도 소스를 나눠 더 살펴봐야 합니다.

각 학습은 약 0.16초, 새 모델 판단 중앙값은 7.750µs였습니다. 전체 학습·판단·탐색 명령은 벽시계 0.84초, 사용자 CPU 0.46초+시스템 CPU 0.02초, 최대 RSS 17,874,944바이트였습니다. 명령 전체의 평균 약 0.57개 코어 분량이며 PC 전체 사용률 변화는 측정하지 않았습니다. 별도 소스 변환 명령의 최대 RSS는 23,494,656바이트였습니다. 가중치 값은 모델마다 24,872바이트입니다.

계획·두 모델·모든 출력·재집계. 로컬 전체 race·정적 검사와 원본 재집계, 원래 PR·push CI를 통과해 main e7fb6f0d에 병합했습니다. 병합 후 CI38024886464도 통과했습니다.

출력 실패를 담는 v3 연결

SDK PR23은 위 실험에서 보인 출력 피드백의 빈칸을 채우는 구현입니다. 기존 256칸 뒤에 64칸을 붙여 실패한 입력, 기대 출력, 실제 출력과 선택했던 경로를 담습니다. 큰 정수는 바이트로 나눠 정확하게 유지합니다. 중간 조건이 틀린 정보와 최종 출력이 틀린 정보를 함께 담을 수 있습니다.

모델은 320→24→2, 매개변수 7,754개이고 가중치 값은 31,016바이트입니다. 처음에는 소스 구조와 의도로 고르고, 본문을 실행한 뒤 실제 반례가 생기면 다음 선택에 반영합니다. 모델이 없는 경우에는 기존의 결정론적 탐색을 사용합니다.

전체 로컬 race·정적 검사와 원래 PR·push CI를 통과해 main 2c123a14에 병합했습니다. 병합 후·태그 CI도 통과해 SDK0.2.32를 공개했습니다. 연결 검사에서는 일부러 배선한 가중치를 써서 출력만 틀린 첫 본문에서 다음 본문으로 순서가 바뀌는 것을 확인했습니다. 이 검사는 피드백이 실제로 전달되는지를 보여줍니다. Gooo 소스로 학습한 v3의 성적은 아래 후속 실험에서 측정했고, 기존 60개 소스 실험의 기록과 가중치는 그대로 보관합니다. 현재 컴파일러 릴리스는 이 새 모델 형식을 아직 읽지 않습니다.

배열 배치·Go API·남은 제한.

Gooo로 학습한 출력 피드백 모델

PR24에서 128개 소스 변형을 최대·최소 선택, 범위 제한, 음수·영·양수 코드, 변수 대입, 네 구간 분류로 넓혔습니다. 그중 32개 소스의 160개 입력만 학습에 사용했습니다. 기존 v2, 출력 연결을 끈 v3, 출력 반례를 읽는 v3를 같은 설정으로 각각 한 번 학습했습니다.

비교 기존 v2 출력 연결을 끈 v3 출력 반례를 읽는 v3
학습 밖 소스의 첫 선택 54/96 52/96 54/96
학습 밖 소스의 관측 뒤 선택 220/448 220/448 234/448
네 구간 분류의 관측 뒤 선택 16/128 16/128 24/128

같은 소스에서 여러 경로를 관측한 수치여서 각 행을 독립적인 문제 정답률로 읽기는 어렵습니다. 일곱 탐색 방식은 모두 128/128개의 선언 사례를 만족했습니다. 출력 반례를 읽는 모델은 피드백을 켰을 때 네 구간 분류의 시도를 62회에서 54회로 줄였습니다. 4개 변형에서 각각 두 번을 덜 시도했고, 나머지 124개 변형은 같았습니다.

첫 선택은 기존 v2와 같고, 변수 대입 구조에서는 개선이 없었습니다. 피드백 호출 비용 때문에 전체 탐색 시간도 16.138ms에서 20.855ms로 늘었습니다. 이번에는 실패 정보를 받아 더 나은 경로를 고르는 일부 효과와 그 비용을 함께 확인했습니다.

출력 반례 모델의 학습은 약 0.825초, 판단 중앙값은 10.750µs였습니다. 세 학습·2,112회 선택·896회 탐색을 합친 명령은 벽시계 3.08초, 사용자 CPU 2.73초와 시스템 CPU 0.06초, 최대 RSS 35,700,736바이트였습니다. 명령 평균 약 0.91개 코어 분량이며 PC 전체 CPU 사용률 변화는 측정하지 않았습니다.

다음으로는 변수에 대입한 값이 반환까지 이어지는 관계와 상수값을 입력에 담는 것이 필요해 보입니다. 현재 첫 입력에서는 정답 경로가 다른데도 같은 입력으로 표현되는 쌍이 72개 남았습니다. 가중치와 모든 선택·실패·탐색 기록, 새 실행 없이 재집계하는 Go 도구를 실험 원본에 공개했습니다. 원래 PR·push CI를 통과해 main 53b13f4f에 병합했고, 병합 후 CI38026300040도 통과했습니다.

원본 소스·가중치·120행 결과·재집계 코드. 생산자 코드는db691ac8, 공개 기록 커밋은01466c5e입니다. 재집계는 새 모델 판단이나 학습 없이 기록과 해시만 확인합니다. 기존2,759바이트 모델의 과거 실험과 이번 모델을 구분해 읽으면 됩니다.

Gooo

배우기

직접 다뤄 보기

원리와 개발

공개 코드와 모델

Clone this wiki locally