9 / 24 · 개념
직접 합성곱 기준 모델
두 입력 채널 [2,3], 가중치 [4,−1], 바이어스 1을 처리할 때 바이어스를 각 입력 채널의 반복마다 더하면 어떤 잘못된 결과가 나오나요?
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
읽기 쉬운 모델이 기준이 되는 이유
기준 모델은 빠른 실행보다 연산 계약을 눈으로 확인하기 쉬운 것이 우선입니다. 출력 채널, 출력 행, 출력 열을 순회한 다음 입력 채널과 커널 행·열을 누적합니다. 각 항에서 입력 좌표를 계산하고 범위 밖이면 0을 공급합니다. 이 순서를 그대로 쓰면 첫 오차가 생긴 출력 좌표와 어느 곱에서 달라졌는지 추적할 수 있습니다. 하드웨어의 최적화된 순서와 같게 작성할 필요는 없습니다.
한 출력 채널 m의 식은 아래와 같습니다. 바이어스 b[m]는 공간 위치마다 한 번만 초기 누적에 넣습니다. c,r,s의 반복 안에 넣으면 바이어스가 항의 수만큼 더해집니다. 정수 모델이라면 x와 w는 이미 zero point를 뺀 중심값이며 바이어스는 곱 단위입니다.
작은 다채널 예제
공간 크기 1×1인 입력 채널 두 개의 값이 2와 3이라고 합시다. 첫 출력 채널의 가중치는 [4,−1], 바이어스는 1입니다. 결과는 1+2×4+3×(−1)=6입니다. 둘째 출력 채널의 가중치는 [−2,5], 바이어스 −1이면 결과는 −1−4+15=10입니다. 출력 채널끼리 누적기를 공유할 경우 6을 다음 채널의 초기값으로 이어 쓰지 않도록 초기화 조건을 확인합니다.
공간 예제 [1,2,3;4,5,6;7,8,9]와 커널 [1,2;3,4]의 출력은 [37,47;67,77]입니다. 모델 로그의 첫 위치에는 네 항 1,4,12,20이 나오고 합이 37이어야 합니다. 두 번째 위치는 2,6,15,24입니다. 같은 최종값이라도 중간 항이 다르면 우연한 상쇄가 있을 수 있으므로 손계산 위치 하나를 상세히 기록합니다.
독립성을 유지하는 검증
직접 모델은 같은 연산을 창 펼치기와 내적으로 계산한 두 번째 모델과 비교합니다. 두 모델이 주소 계산 함수를 모두 공유하면 그 함수의 오류가 함께 통과할 수 있습니다. 손계산 fixture와 다른 형태의 모델을 함께 쓰는 이유입니다. 무작위 입력을 생성할 때도 seed를 고정하고 실패한 텐서를 저장해야 같은 오류를 다시 분석할 수 있습니다. 비교는 정수 누적 결과와 출력 변환 후 결과를 나누어 수행합니다.
이 과정의 model.mjs는 입력 X[C][H][W]와 가중치 W[M][C/G][R][S]를 사용하며 배치 차원은 하나로 제한합니다. 배열의 행 길이, 채널 수와 그룹 조건을 검사합니다. 외부 프레임워크 파일을 불러오는 기능은 없습니다. 출력 모양이 맞아도 모든 원소가 0인 검증만 사용하면 주소 오류를 놓칠 수 있으므로 서로 다른 값, 음수와 비대칭 가중치를 준비합니다. 기준 모델의 계약은 ONNX Conv 문서의 채널 모양과 대조하되 이 실습의 제한을 그대로 기록하세요.
직접 생각해 보기
두 입력 채널 [2,3], 가중치 [4,−1], 바이어스 1을 처리할 때 바이어스를 각 입력 채널의 반복마다 더하면 어떤 잘못된 결과가 나오나요?
해설 보기
올바른 결과는 1+8−3=6입니다. 바이어스를 두 번 넣으면 8−3+2=7입니다. 바이어스 초기화 위치를 채널 감소 반복 밖으로 옮깁니다.