← 목록
기타 2026-07-01 3KB 읽기 3분

깊은스택2블록.한선 — P0 완료 (2026-07-01)

개요

crowny-butler/libs/깊은스택2블록.한선: 잔차+곱게이트 2블록 소프트어텐션 스택. 목표 (1) end-to-end 역전파 증명 (블록1 W_Q grad≠0) (2) XOR에서 2블록>1블록 깊이이점.

최종 결과

블록2 W_Q grad크기=0  블록1 W_Q grad크기=200
PASS: 블록1 W_Q grad≠0 → end-to-end 역전파 성공
2블록 최종: 1/4  1블록 최종: 0/4
PASS: 2블록 깊이이점 확인 (1 > 0)

핵심 교훈 (3가지 버그 수정)

(1) 소프트블록_순전파 댕글링 포인터

소프트블록_순전파는 내부 메모리마커() → 계산 → 메모리복원()반환 상태 순서. 복원 후 반환된 상태 포인터는 해제된 메모리 → y1=79730 garbage. 수정: _블록fwd 인라인 구현 (마커 없음, 에폭루프 마커에 위임).

(2) 초기화값이 clip을 초과해 grad 차단

WQ2=9, WK2[0]=4 → score=(9+4)*(-1)=-13. clip=8이면 STE역전파(-13,8)=0. → d_inp2_0=0 → d_y1=0 → 블록1 역전파 단절. 수정: |WQ+WK|≤clip인 소형 초기값 사용: WQ=1, WK=[1,-1], WV=[2,-2], W1=[2,-2], W2=[1,-1], Wg=1

(3) 컴파일 2>&1이 toau 파일 오염

./hanseonc_high 파일.한선 > out.toau 2>&1 → stderr 로그("[hanseonc] 토큰 파싱…")가 toau 바이너리에 섞임 → VM이 텍스트를 큐브로 오해 → 무한 실행/hang. 수정: ./hanseonc_high 파일.한선 > out.toau (2>&1 절대 금지)

아키텍처

inp(x0,x1) → Block1 → y1 → Wg_곱게이트(y1·sign(x1)) → inp2 → Block2 → y2
                                      잔차 skip connections 각 블록 내부
파라[19]: WQ1 WK1[2] WV1[2] W1_1[2] W2_1[2] | WQ2 WK2[2] WV2[2] W1_2[2] W2_2[2] | Wg

가상타깃 트릭 (블록1 역전파)

상류 gradient d_y1 → 가상t1 = y1 - d_y1_up소프트블록_역전파(st1, 가상t1) 호출. 역전파 내부: d_loss = y1 - 가상t1 = d_y1_up → 정확한 upstream gradient로 처리.

관련 파일

  • /Users/ef/crowny-butler/libs/깊은스택2블록.한선 (주 구현)
  • /Users/ef/crowny-butler/libs/소프트어텐션블록.한선 (역전파만 사용, 순전파 댕글링 버그 있음)
  • /Users/ef/crowny-butler/libs/삼진STE.한선 (STE투영, STE역전파)

잔여 이슈

  • XOR 2블록 정확도 1/4 (4/4 미달): lr=1+small init → 1스텝 후 param 폭주·grad 소멸.
개선 필요 시: lr=0.01 + 더 많은 에폭 또는 그래디언트 클리핑 추가.
  • 블록2 W_Q grad=0 (test1 단일샘플): it0_2=it1_2=-1 조합에서 두 term 상쇄. 정상 수학 결과.