어텐션스택.한선 — N블록 병렬 삼진 트랜스포머 스택
개요
crowny-butler/libs/어텐션스택.한선: 어텐션블록2 기반 N블록(2~3) 스택 구현.설계 결정: 병렬 가산 스택
시도한 설계: 순차 브로드캐스트 (y_{b-1} → [y,y,y] → block_b) 문제: 균일 입력 → attention 위치구별불가 → W_V 상충목표(sample0=+1, sample1=-1이 모두 position0 선택) → 수렴불가
채택한 설계: 병렬 가산 스택
- 모든 N블록이 동일한 원본 inp 처리 (위치정보 보존)
- r_acc = sum(block_b_y)
- y_final = STE(r_acc, θ=0) = sign(r_acc) ← 최종 STE 1회
핵심 함수
스택_파라_초기화(N, n_heads, seq, ffn_dim)→ 파라_A[N×20]스택_순전파(inp, 파라_A, N, n_heads, seq, ffn_dim, θ_intra)→ 스택상태[2+N×23]스택_역전파(inp, 파라_A, 스택상태, 타깃, N, ...)→ 파라_A in-place 갱신
상태 레이아웃
- [0]: y_final, [1]: r_acc, [2..2+N23-1]: 블록상태들
파라미터 레이아웃
- 블록b: b20 + [W_K(6), W_V(6), W1(4), W2(4)]
진단: FFN d_r1 폭발 함정
- 순차 설계 + W_K=[5], W_V=3 → r1=2, W1=[3,-3,5,-5] → r2=18 > clip=16 → STE역전파=0 → grad사망
- 처방: W1/W2=[1,-1,1,-1] 소형초기값 → r2≤10 < clip=16 ✓
테스트 결과 (3블록)
- 테스트1 grad전파: 5/5 (블록0·1·2 W_V·W2 동시 갱신)
- 테스트2 수렴: 3/3 (에폭1, 60파라미터 vs 1블록 20파라미터)
- 테스트3 GC100(N=2): PASS (안전, 상태크기48)
관련 파일
/Users/ef/crowny-butler/libs/어텐션스택.한선/Users/ef/crowny-butler/libs/어텐션블록2.한선(기반)/Users/ef/crowny-butler/libs/삼진STE.한선(STE투영/역전파)
크라우니코드
- MISS → 생성 → learn완료:
다층어텐션스택_병렬가산