TL;DR
- Nanojev는 블랙박스 프로빙으로 추정한 TypeSafe의 폐쇄형 System One 의사결정 모델을 약 200줄로 재구성한 최소 동작 버전임.
- 상태를 한 번 인코딩하고 질문별 캐시 복사본을 사용하는 구조로, 생성 텍스트 대신 예/아니오·선택·순서형 점수의 확률을 출력함.
- Qwen3.5-4B-Base, LoRA, 포인터 헤드를 사용하며, 옵션 목록 뒤의
<decide>토큰으로 모든 옵션의</opt>토큰을 점수화함. - 6,191개 학습 요청과 1,000개 평가 요청으로 학습한 결과, 두 번째 에포크에서 정확도 0.907을 기록하고 온도 보정으로 ECE 0.022를 달성함.
- 한 상태에 대한 20개 질문은 포크 방식에서 160ms, 행 단위 처리에서 1.9초가 걸리며, 형제 질문의 비밀은 보이지 않고 상태에 심은 비밀은 발견됨.
Nanojev
nanojev는 TypeSafe의 폐쇄형 System One 의사결정 모델인 Jev를 가상으로 재구성한 프로젝트임.- Archer Hume의 *Jev's Architecture Unmasked*와 Jared Palmer의
kev에서 영감을 받았으며, 블랙박스 프로빙이 시사하는 동작의 가장 작은 작동 버전을 지향함. - 상태를 읽고 유형이 지정된 질문에 답하며, 생성 텍스트가 아니라 확률을 출력함.
- 예/아니오
- 하나 선택
- 순서형 점수
- 디코딩 루프를 사용하지 않으며, 포인터 헤드가 은닉 상태(hidden states)에서 옵션 확률을 읽음.
- 상태는 한 번 인코딩하고, 각 질문은 캐시의 복사본에서 이어지므로 서로의 형제 질문을 볼 수 없음.
- 옵션 목록 뒤의
<decide>토큰이 각 옵션의</opt>토큰을 점수화하는 리스트 단위(listwise) 옵션 구조임. - 학습된 보정(calibration)을 사용하며, 라벨이 지정된 결과에 대한 교차 엔트로피와 하나의 피팅된 온도를 결합함.
- 신뢰도는 해당 확률 분포에 대한 산술 연산으로 계산됨.
파일
nanojev.py: 인코딩,Qwen3.5-4B-Base와LoRA및 포인터 헤드, 추론, 답변 기능을 포함함.nanojev_train.py: 학습, 평가, 온도 피팅을 수행함.nanojev_serve.py:POST /v1/systemone서버를 제공함.data/: 55개 도메인에 걸친 에이전트 작성·감사 데이터로, 학습 요청 6,191개와 평가 요청 1,000개로 구성됨.
실행
- 의존성 설치는
pip install -r requirements.txt로 수행함. - 학습은
python nanojev_train.py로 실행하며, RTX 5090에서 약 12분이 소요됨. - 요청 처리는
python nanojev.py request.json으로 수행함. - 서버는
python nanojev_serve.py 8009로 실행함.
결과
- 평가 질문은 2,344개이며, 학습에 포함되지 않은 도메인은 5개임.
- 첫 번째 에포크의 지표는 정확도 0.895, 음의 로그 가능도(NLL) 0.257, 기대 보정 오차(ECE) 0.013임.
- 두 번째 에포크의 지표는 정확도 0.907, NLL 0.333, ECE 0.054임.
- 온도 T=1.97을 적용하면 정확도는 0.907로 유지되고, NLL은 0.246, ECE는 0.022가 됨.
- 학습에 포함되지 않은 도메인에서는 정확도 0.910, ECE 0.028임.
- 질문 유형별 결과는
noul0.956,choice0.933,score0.787임. - 두 번째 에포크는 정확도를 높이지만 과도한 확신도 함께 높이며, 온도 보정은 답변을 바꾸지 않고 과도한 확신을 복구함.
- 하나의 상태에 대한 질문 20개 처리 시간은 포크 방식에서 160ms, 행 단위 처리에서 1.9초임.
- 형제 질문에 비밀을 심으면 해당 비밀은 보이지 않으며 확률은 0.001임.
- 상태 자체에 비밀을 심으면 발견되며 확률은 0.999임.
- 에세이의 레퍼런스 카드 테스트는 카드가 마지막 옵션일 때 실패함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요