Repository navigation
Per Choice Decision Model
개발 방향은 소스에 적어 둔 후보를 선택·정렬하고, 필요하면 판단을 보류하는 모델입니다. Gooo가 부품과 가능한 연결을 준비하고, 모델은 어느 조합부터 확인할지 제안합니다. 실제 결과는 컴파일러가 사례를 실행해 확인하고, 저장한 프로그램은 새 추론 없이 이어 씁니다.
새 경로별 decision 모델 PR57에 Go 학습 코드, 작은 가중치와 원본 기록을 올렸습니다. 원본 push·PR CI가 통과해 main0aa566b9에 정상 병합했습니다. 병합 뒤 원본 CI38005371523도 통과했습니다. 기본 동봉 모델은 유지합니다.
SDK PR18에 새 입력을 사용하는 6,218개 매개변수의 Go 결정 모델을 올렸습니다. 한 번 학습한 가중치와120개 선택·생성 본문· 사례 결과를 함께 공개했습니다. 새 표현에서는 첫 판단2/4가 남아 있고, 지역 변수를 추가한 같은 문제는8/8이었습니다. 새 모델의 실험과 제한을 분리해서 기록합니다. 아래 기존 모델의 가중치와 측정값은 당시 결과로 유지합니다.
조건 피드백 실험에서 글자 위치의 영향과 기대·관측값 구분의 약점이 드러났습니다.
SDK PR16으로 소스 구조·한영 의도·
조건 관측을 별도 구간에 넣는 함수를 구현해 main 13d7f010에 병합했습니다.
실제 기록 여섯 개에서 관측값을 바꿔도 소스·의도 구간은 그대로였고, 기대·실제 참거짓은
전용 칸에서 구분됐습니다. 이 입력으로 학습한 첫 모델과 평가는 위 PR18의 별도 모델 계약으로 공개했습니다.
입력 구성과 확인 결과.
후속 SDK PR17은 같은 Gooo 계획의 선언 의도·소스 특징·실제 조건 실패로 이 입력을 만드는 연결부입니다. 원래 CI 통과 후 main에 병합했습니다. 실행하지 않은 분기는 미관측으로 유지하고, 이미 확인한 실패는 여러 선택에서 재사용합니다. 사용 예와 적용 범위.
입력은 컴파일러가 소스에서 추출한 분기·변수·할당·피연산자·선언 순서의 특징과 한영 의도입니다. 출력은 이미 선언된 후보의 라벨과 점수, 보류 여부입니다. 같은 작은 판단기를 선택마다 재사용하므로 선택이 하나일 때도 사용할 수 있습니다. 이번 측정은1·2·3·6·16곳을 순서대로 판단했습니다.
256개 특징,48개 중간 값,8개 기존 경로 라벨을 쓰는12,728개 매개변수 신경망입니다. 외부 기반 모델 없이 우리 Go 코드로 학습했습니다. GPU를 쓰지 않았고, 토큰이나 소스 코드를 생성하는 모델은 이번 방향에서 제외했습니다.
| 관측 | 결과와 범위 |
|---|---|
| 학습 | 48개 작성 문장, 두 학습 단계 합계0.183초 |
| 학습에 쓰지 않은 표현 | 같은 여섯 소스 특징을 공유하는24개 문장 중 QAT15개 라벨 일치 |
| 판단 보류 | 24개 중5개; 라벨 일치와 별도로 기록 |
| 높은 점수의 오답 | 점수0.8 이상 오답1개; 점수 보정은 아직 미측정 |
| 압축 가중치 | 2,759바이트 |
| 상주 텐서 | 12,896바이트 + 행렬 scale8바이트 |
| 작업 배열 | worker당1,248바이트 |
| SDK 추론 | 한 곳 약10µs,16곳 약0.160ms;200회 반복의 단일 관측 |
| 전체 학습·내보내기·측정 과정 | 0.86초, 최대 RSS14,401,536바이트 |
삼진 행렬을 다섯 개씩 한 바이트에 담아1.6비트로 저장했습니다. 삼진 값의 이론적 정보량은 약1.585비트이고, 실제 파일에는 FP32 편향도 들어갑니다. FP32와 비교한 이번 관측에서는 파일이 작아졌고 추론은 약간 느렸습니다. 프로그램 전체 메모리에는 모델 외에도 Go 런타임과 원본 기록이 포함됩니다. 시스템 전체 CPU 사용률은 미측정입니다.
새 표현의15/24는 해당 문장의 후보 라벨 결과입니다. 소스 종류 전체에 대한 정확도나 기능 완성률은 별도 실험이 필요합니다. 모델이 높은 점수로 틀린 결과도 원본에 남겼습니다.
실제 설치된 컴파일러426에서 분기 하나짜리 예제를 실행했습니다. 입력 사전 확인은 READY_FOR_RANKING이었고, 나중에 실제 판단에 쓰인 입력 지문과 같았습니다. 모델은1회 호출(12,958ns)해 선언된 reverse 분기를 제안했습니다.
Gooo는 로컬 사례1/1, 호출자 사례1/1, 별도 입력3/3을 통과한 프로그램을 남겼습니다. 저장 재실행도3/3이고 새 모델 호출은0회였습니다. 입력9007199254740993과 결과18014398509481986은 정수 문자열로 비교해 정확한 값을 확인했습니다. 이 결과는 한 프로그램의 관측입니다.
이후 병합된 컴파일러366의0.6.24 개발판을 설치했습니다. 같은 QAT 모델의 새 사전 확인도 단일 입력에 READY_FOR_RANKING이고 원래426 입력 지문과 일치했습니다. 위 실행3/3 기록은 최초426 생성물의 원본으로 유지합니다.
다음 연구는 보지 않은 소스 구조, 여러 선택이 서로 영향을 주는 상황, 보류 기준을 다룹니다. 모델 크기를 늘리는 결정은 그 실험 결과를 보고 합니다. Hugging Face 로그인은 현재 없어 새 모델을 업로드했다고 표시하지 않았습니다.
동일한 QAT 가중치를 컴파일러366의 다른 코드 구조에 직접 연결했습니다. 분기 하나와 피연산자 순서 둘, 총 세 선택입니다. 사전 확인 입력 세 개의 지문은 실제 생성 입력과 일치했습니다. 모델 호출 세 번은 합계35,292ns였고 외부 호출은0회였습니다.
| 단계 | 조립 중 확인 | 별도 기능 결과 |
|---|---|---|
| 고정 순서 | 프로그램2회 시도, 호출자1/1 | 3/3 |
| 모델 제안 | 프로그램1회 시도, 호출자1/1 | 2/3 |
| 모델 결과의 저장 재실행 | 새 추론0회 | 2/3 유지 |
모델은 세 곳 모두 reverse를 제안했고 점수는0.809~0.914였습니다. 양수 사례는 맞았지만 음수 입력-5에서 기대0 대신-10이 나왔습니다. 호출자 사례 하나의 성공만으로는 다른 입력의 동작을 알 수 없었습니다. 점수와 실제 기능 결과를 별도 항목으로 남기는 이유입니다.
그 뒤 원래 실패한-5→0을 새 조립 피드백에 복사했습니다. 이 사례는 이제 조립에서 소비한 사례로 표시합니다. Gooo는 새 모델 호출 없이 소스에 선언된 조합을 고정 순서로 확인해2회 시도했고, 새 입력0·1·-1·5·-7에서5/5를 통과했습니다. 저장 재실행도5/5였습니다. 원래 모델 실행의2/3는 바꾸지 않았습니다. 같은 작성 함수에서 관측한 유한 사례입니다.
명령 전체는 고정 순서1.99초, 모델0.84초였습니다. 고정 순서를 먼저 실행해 빌드 캐시가 달라질 수 있으므로 이 차이를 모델의 속도 향상으로 해석하지 않습니다. 전체 명령의 최대 RSS는 약87MB였고 모델 자체 텐서·작업 배열과 구분합니다.
PR59에는 Gooo 소스의 후보를 실행해 다음 모델의 정답 조합을 만드는 Go 도구를 추가했습니다. 공개0.6.24에서 새로 추출한 세 선택 함수의8개 조합을 살펴봤습니다. 절댓값을 요구하는9개 사례에서 두 조합이 모두 맞았습니다. 분기를 바꾸거나 비교 방향을 바꾸는 두 가지 구현입니다.
각 선택의 허용 여부만 따로 배우면 네 조합이 만들어지고, 그중 두 조합은 틀립니다. 그래서 학습 자료에는 올바른 선택들을 함께 묶은 조합을 남깁니다. 한 지점의 라벨만 외워서는 표현하기 어려운 관계를 확인한 사례입니다.
각 조합의9개 입력, 총72개 결과는 별도 네이티브 실행과 모두 일치했습니다. 기능을 만족한 후보는8개 중2개이며,72/72는 코드 투영 결과의 일치입니다. 큰 정수 ±9007199254740993도 정수 그대로 비교했습니다. 전체 자료 생성0.96초, 명령이 보고한 최대 RSS 약71.5MiB, 조합 평가 자체 약0.19ms였습니다.
이 사례들은 정답 조합을 만드는 데 소비한 자료입니다. 가중치 학습과 새로운 입력의 정답률 평가는 다음 단계입니다. 소스·실행·정답 조합 원본을 공개했고, PR59의 원본 push·PR CI를 확인해 main5e4256ac에 정상 병합했습니다. 병합 뒤 원본 CI38009845812도 같은 소스에서 통과했습니다.
PR60에 새 실험 가중치와 학습 코드를 공개했습니다. 같은 자체 FP32 체크포인트에서 두 모델을 같은 횟수로 학습했습니다. 하나는 기존48개 문장 자료를 이어 배웠고, 다른 하나는 함수의 사례를 만족한 조합 자료도 함께 배웠습니다. 구조와 가중치 크기는 그대로입니다.
| 관측 | 이전 모델 | 문장 학습 추가 | 조합 학습 추가 |
|---|---|---|---|
| 같은 함수의 새 입력11개 | 6/11 | 6/11 | 11/11 |
| 저장 재실행 | 6/11 | 6/11 | 11/11 |
| 새 재실행 추론 | 0 | 0 | 0 |
| 기존24개 문장 판단 | 15/24 | 18/24 | 13/24 |
두 모델의 학습·내보내기·평가 전체는 CPU1.18초, 최대 RSS 약15.6MiB였습니다. 새 조합 모델은2,759바이트이며, 실제 Gooo에서 판단3회에 합계39.5µs를 썼습니다. 전체 코드 조립·실행 명령은0.86초, 최대 RSS 약83.9MiB였습니다. 실행 순서에 따른 캐시 효과가 있어 명령 시간 차이를 모델의 속도 향상으로 해석하지 않습니다. 이 입력들은 학습에서 소비한9개 사례와 겹치지 않지만 같은 작성 함수의 다른 값입니다.
내부 의도는 별도 문제로 남았습니다. 소스의 “음수인지 비교” 힌트에 대해 실제 조건은
세 모델 모두 0 < input이었습니다. 실행 뒤 추가한 -1·0·1의 진릿값 진단에서는1/3만
일치했습니다. 이 문장은 아직 강제되는 조립 조건이 아니었습니다. 함수 출력의 성공,
기존 판단 능력의 변화, 내부 조건과 문장 힌트의 일치를 함께 공개합니다.
이후 소스 중간 조건 실험에서 기대값을 소스에 적고
후보 선택·호출자 조립·저장 재실행까지 확인하도록 연결했습니다. 아래 학습 기록은
당시의 가중치와 조건 선언이 없던 소스의 결과를 유지합니다.
가중치·사용법 ·
학습·원본 실행·힌트 진단.
PR60의 원본 push·PR CI가 통과해 main b63ea6d7에 정상 병합했습니다.
병합 뒤 원본 CI 38011150089도 같은 소스에서 통과했습니다.
Hugging Face CLI 로그인은 현재 없어 이번 가중치는 GitHub에 공개했습니다.
SDK PR13에
ObserveCondition과 CheckConditions를 공개했습니다. 선택한 프로그램을 실행하면서
지정한 if 조건의 실제 참·거짓을 읽습니다. 지역 변수의 현재 값과 기존 평가 규칙을
따르며, 건너뛴 분기는 NOT_REACHED로 남깁니다. 실행되지 않은 조건을 거짓으로
간주해서 맞았다고 세지 않습니다.
소스에서 온 판단 ID와 유한한 정수 입력·Boolean 기대값을 연결합니다. 한 조건을 가리키는 분기 선택이나 피연산자 선택을 지원하고, 여러 조건에 걸친 참조는 명확한 분기 ID를 요구합니다. 관측 결과는 최종 반환값과 함께 기록합니다.
기존 세 모델이 고른 Gooo 바디를 그대로 다시 관측한 결과, 앞서 작성한 중간 조건 예제는 세 모델 모두 1/3이었습니다. 원래 소스·계획·선택 바디·생성 Go의 지문을 묶어 확인했고, 기존 Go AST 진단과 모든 참·거짓 값이 일치했습니다. 새 모델 호출은 0회입니다. 원본·재현 코드를 함께 공개했습니다.
이 관측 API는 SDK의 전체 로컬 테스트·race·vet와 원본 push·PR CI가 통과해
main d7d92dea에 정상 병합됐고, 병합 뒤 원본 CI 38011805699도 통과했습니다.
후속 SDK PR14는 조건을 후보 선택에 반영했고 공개 모듈 v0.2.27-experimental에
포함됐습니다. Gooo 문법·호출자 대체 경로·저장 재실행 연결은
PR1439와 측정 결과에서 확인할 수 있습니다.
단순 조건 관측은 Apple M4에서 82.52ns/op, 0 B/op,
0 heap allocs/op였으며 컴파일·추론·프로세스 실행·JSON은 이 측정에 포함되지 않습니다.
현재 작은 크기부터 이어갑니다. Gooo가 만든 정규화 IR의 선택 종류, 타입, 연산자와 허용 후보를 모델 입력에 담고, 한글·영어의 짧은 의도로 후보를 점수화합니다. 자유로운 토큰 생성 대신 기존 후보 ID와 점수, 판단 보류를 반환합니다. 새 값을 만들거나 타입을 바꾸는 일은 Gooo의 명시한 규칙에서 다룹니다.
학습 자료는 .gooo 소스의 후보와 실제 실행 기록으로 만들고, 소스 계열을 먼저 나눈 뒤 문장을 늘립니다. 같은 소스의 문장만 바꾼 평가와 새로운 코드 구조의 평가를 각각 보여 줍니다. 후보끼리 무엇이 다른지도 입력으로 표현하는 작은 판단기를 다음 비교 대상으로 삼습니다. 이 후보 표현은 아직 새 ABI로 구현한 기능이 아닙니다.
다음 지표는 판단한 선택 수, 보류한 수, 높은 점수의 오답, 실제 기능 통과 사례, 아직 확인하지 않은 입력 경로입니다. 보정용 자료와 최종 평가 자료도 따로 둡니다. 확신 점수를 정답 확률로 읽기 전에 이 구분부터 확인합니다. PC에서 짧게 학습·평가할 수 있는 크기로 반복하고, 선택한 후보·소스·모델 지문과 실패를 함께 남깁니다.
후보 두 개를 같은 작은 점수 함수로 비교하는 다음 실험에는 RankNet 연구의 순위 학습 원리를 참고합니다. 현재 모델은 여전히 여덟 라벨의 분류기입니다. 보류 점수의 다음 비교에는 Guo 등의 확률 보정 연구의 temperature scaling을 참고합니다. Gooo의 새로운 소스 구조에서도 보정 효과가 있는지는 별도 자료로 측정할 계획입니다.
PC 설계 문서 PR58에 현재 구조와 원본 반례, 후속 연구를 함께 정리했습니다. 원본 push·PR CI가 통과해 main5c7f3ab4에 정상 병합했고, 병합 뒤 원본 CI38007228131도 같은 소스에서 통과했습니다. 현재 설계 문서를 읽을 수 있습니다. 입력·후보 표현을 먼저 확인하고 현재 작은 크기로 이어가는 방향입니다.
- 문서 홈
- 현재 상태와 지원 범위
- 문자열을 읽고 찾는 0.6.31
- 실패를 기록하며 조립을 이어가는 0.6.30
- 업무 규칙 예제와 실제 도입 기준
- 요구를 바꾼 뒤 결과 비교하기
- 결과 조회와 자체 모델의 0.6.28 배포
- 저장 결과를 비교하는 0.6.27 배포
- 작은 모델과 조립하는 0.6.26 배포
- 중간 조건을 확인하는 0.6.25 배포
- 분기 구성·재실행의 0.6.24 개발 후보
- 작은 도구로 발전시키는 Gooo
- 흐름도로 보는 Gooo
- 시작하기
- 언어 둘러보기
- 사용 흐름
- 작은 모델과 메타프로그래밍
- 우리 PC의 자체 경로 decision 모델
- 조건을 읽는 자체 모델과 실제 탐색
- SDK 0.2.39 자체 모델 받기
- 모델 선택 점수와 실제 실패
- 설명·변수 이름 변화의 27회 관측
- 작은 모델의 학습 범위를 넓힌 결과
- 같은 계산을 같은 모델 입력으로 읽기
- 사례를 통과해도 의도가 다를 때
- 사례를 모아 읽는 방식을 바꿔 보기
- 자체 결정 모델 받기 · Hugging Face
- 비교와 분기를 따로 배우면 나아질까
- 소스에 적는 중간 조건과 선택
- 지표와 증거
- 참고하고 감사하는 연구
- 최근 연구와 다음 작은 기능