Altifigence Academy

11 / 24 · 개념

ReLU·최대 풀링 연결

uint8 출력 zᵧ=100에서 ReLU 전 코드 [98,103;101,97]을 처리하면 ReLU 행렬과 최대 풀링 코드는 무엇인가요?

합성곱 뒤의 연산도 계약에 포함하기

추론 경로의 출력은 합성곱만으로 끝나지 않을 수 있습니다. ReLU는 각 원소를 실수 0과 비교해 큰 쪽을 선택합니다. 최대 풀링은 공간 창 안의 최댓값을 뽑아 크기를 줄입니다. 하나는 원소별 연산이고 하나는 공간 감소 연산이므로 주소와 완료 조건이 다릅니다. 이 과정은 출력 재양자화 다음에 ReLU, 그 다음 패딩 없는 2×2 stride 2 최대 풀링을 적용합니다. 홀수 행·열의 남는 부분은 사용하지 않는 floor 규칙입니다.

원시 양자화 코드로 ReLU를 수행할 때 실수 0은 output zero point zᵧ입니다. sᵧ가 양수이면 실수의 대소 관계와 코드의 대소 관계가 같아 q'=max(q,zᵧ)를 사용할 수 있습니다. zᵧ=128인 출력 코드를 0과 비교하면 음수 실수까지 그대로 통과합니다. 기준 모델에서 코드 0과 실수 0을 같은 이름으로 쓰지 않는 것이 좋습니다.

연결 계산 예제

정수 누적 행렬 [−2,4;6,−8]에 multiplier 0.5,zᵧ=0을 적용하면 [−1,2;3,−4]입니다. ReLU 결과는 [0,2;3,0]이고 2×2 최대 풀링 결과는 한 원소 3입니다. 출력의 높이·너비가 절반이 되는 것과 출력 코드의 scale이 바뀌는 것은 별개입니다. 이 예제의 최대 풀링은 코드 중 하나를 그대로 선택하므로 scale을 유지합니다.

zᵧ=128인 [126,132;134,120]을 해석해 보세요. 같은 입력 배율에서 음수 값을 나타내는 코드를 ReLU로 128까지 올리면 [128,132;134,128]입니다. 최대 풀링 코드는 134입니다. z가 바뀌어도 실수 0을 기준으로 판단한다는 원칙은 같습니다. 평균 풀링이라면 나눗셈과 추가 반올림이 생기므로 이 단원의 최대 풀링과 동일하게 처리할 수 없습니다.

패딩과 순서에 주의하기

ReLU 전의 음수 창 [−8,−5;−3,−6]에서 최댓값은 −3입니다. 최대 풀링 경계에 잘못 0을 끼워 넣으면 존재하지 않는 값이 최댓값으로 선택됩니다. 패딩을 지원하려면 바깥 영역을 제외하거나 계약에 맞는 가장 작은 값을 공급해야 합니다. 이 실습 파일은 풀링 패딩을 지원하지 않으므로 그런 옵션을 추가했다고 주장하지 않습니다.

연산을 합쳐 메모리 쓰기를 줄일 수 있지만 중간 stage의 값은 검증할 수 있어야 합니다. 합성곱 누적, 재양자화, ReLU와 풀링 결과를 따로 비교하세요. 4×4 입력을 2×2 풀링하면 네 출력이 생기고, 3×3 입력의 같은 floor 규칙은 한 출력만 만듭니다. 남은 열과 행의 정책을 문서와 테스트에 함께 적습니다. 원소별 정의는 ONNX Relu, 풀링 속성은 ONNX MaxPool을 참고하세요.

직접 생각해 보기

uint8 출력 zᵧ=100에서 ReLU 전 코드 [98,103;101,97]을 처리하면 ReLU 행렬과 최대 풀링 코드는 무엇인가요?

해설 보기

ReLU는 실수 0의 코드 100과 비교하므로 [100,103;101,100]입니다. 최대 풀링은 103을 선택하며 같은 출력 scale을 유지합니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.