발생 문제들 해결 과정
CONV2D 역전파 부재
- 초기에 run_graph_backward에 CONV2D 케이스가 없어서 conv_W/입력 쪽 그라디언트가 계산되지 않았음 → 합성곱은 동결된 채 FC만 학습 → 표현력이 부족해 BCE가 0.69 부근에 머뭄.
- 수정 후: launch_conv2d_backward_input_nhwc, launch_conv2d_backward_weight_nhwc 호출 추가 → conv_W/input에 grad 생김(로그로 확인).
Bias ADD 브로드캐스트 불일치
- 앞서 [ADD] unsupported shape: input(8,64) + param(1,8) 경고가 계속 떴음. 이는 합성곱 출력(해석상 rows=채널=8, cols=H*W=64)에 대해 bias를 (1,8)로 넣었을 때 어느 축으로 브로드캐스트할지 엔진이 모호했던 것.
- 수정 후: ADD에서 rowwise(col=H*W) vs colwise(rows=채널) 두 모드를 명확히 분기하고, conv-bias는 채널(colwise) 로 처리 + 역전파도 colwise 경로 구현.
4D→2D 형상 매핑 불일치
- Conv/Flatten/Activation의 to_e_matrix()가 내부 엔진의 (rows, cols) 해석과 어긋나 있을 때, 덧셈/활성화/손실에서 잘못된 크기로 연산되어 학습 신호가 약화/왜곡.
- 수정 후:
- Conv 출력은 (rows=Cout, cols=Hout*Wout)로 일관.
- Flatten은 배치 외에 샘플당 rows=1, cols=features로 고정.
- Activation은 2D 전제 유지(필요 시 Flatten 앞/뒤 위치 점검).
- stride/padding을 extra_params로 정확히 전달하여 forward conv와 일치.
라벨(y_true) shape와 LOSS wiring
- evaluate()/fit() 때 y_true의 (rows, cols) 미설정/불일치 시, 손실이나 dL/dY가 틀어진 텐서 크기로 계산.
- 수정 후: Sequential._ensure_label_shape()에서 모델 최종 출력 shape에 맞춰 y_true shape를 보정.
ADD rowwise 커널/그라드 구현 미완성
- rowwise/colwise에 맞는 forward 커널(launch_add_bias_rowwise/colwise) 및 reduce 기반 dB 계산 보강으로 안정화.
'dev_AI_framework' 카테고리의 다른 글
| activation - CUDA 활성화 커널 모듈 (2) | 2025.08.23 |
|---|---|
| Per‑Sample Shape 규칙 가이드 (GE Backend) (0) | 2025.08.23 |
| Regression 에서 오류 발생, XOR 은 잘 되는데 왜...? - 해결완료 (0) | 2025.08.19 |
| 후에 구현할 기능 고민해보자... (5) | 2025.08.15 |
| TF 32 활성화 적용 - FP 32 에서 변환 (0) | 2025.08.15 |