10 / 24 · 개념
창 펼치기와 행렬 곱
H=W=4,C=1,3×3 valid 커널일 때 원본 입력 원소 수, P,K와 전체 패치 행렬 원소 수를 계산하세요.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
같은 연산을 다른 형태로 보기
im2col은 각 출력 위치의 입력 창을 한 벡터로 펼쳐 행렬 곱으로 계산하는 방법입니다. 이 실습은 패치 하나를 행으로 놓는 표기법을 사용합니다. 패치 행렬 A의 모양은 P×K이며 P=HoWo, K=CRS입니다. 출력 채널별 펼친 가중치를 열로 놓으면 가중치 행렬 B는 K×M이고 결과 AB는 P×M입니다. 자료에 따라 패치를 열로 놓기도 하므로 im2col이라는 이름만 보고 축 순서를 추측하면 안 됩니다.
이 변환은 입력 데이터를 복제해 저장할 수도 있고 필요한 패치를 즉시 생성할 수도 있습니다. 전체 im2col 행렬을 외부 메모리에 저장하는 방식과 창 생성기로 작은 패치를 공급하는 방식은 같은 곱셈 결과를 내지만 저장량과 대역폭이 다릅니다. 행렬 곱 하드웨어가 있다고 해서 복제된 행렬을 반드시 만들 필요는 없습니다.
펼친 행렬 예제
입력 [1,2,3;4,5,6;7,8,9]에서 2×2 창을 펼치면 A의 네 행은 [1,2,4,5], [2,3,5,6], [4,5,7,8], [5,6,8,9]입니다. 커널 [1,2;3,4]는 B의 한 열 [1,2,3,4]입니다. 첫 행 내적은 37이고 나머지는 47,67,77입니다. P=4,K=4,M=1이므로 4×4와 4×1을 곱해 4×1 결과를 만듭니다. 이것을 출력 공간의 2×2로 다시 접습니다.
원래 입력은 9원소지만 전체 패치 행렬은 16원소입니다. 가운데 5는 네 번 등장하고 모서리 1은 한 번 등장합니다. 입력 재사용이 펼친 저장에서는 복제로 나타나는 것입니다. 가중치 한 묶음은 네 패치에 재사용됩니다. 입력이 큰 경우 패치 행렬의 원소 수 P×K와 원래 입력 C×H×W를 먼저 계산하고 어느 버퍼에 저장할 수 있는지 판단합니다. 고정된 3×3 커널에서 출력 공간이 크면 복제량은 상당할 수 있습니다.
채널 순서를 고정하기
다채널에서는 한 패치의 벡터 순서를 c,r,s로 정하고 가중치도 같은 순서를 사용합니다. 예를 들어 1×1 창에 채널 두 개면 패치는 [x0,x1]입니다. 커널 채널을 뒤집어 [w1,w0]로 펼치면 결과가 바뀝니다. 먼저 작은 비대칭 채널 예제로 확인한 뒤 K를 늘리세요. 그룹 연산은 전체 채널을 무조건 한 벡터에 넣는 것이 아니라 그룹별 부분 벡터를 구성합니다.
직접 모델과 패치 내적 모델의 일치는 연산 값의 증거입니다. 실제 메모리 전송이나 PE의 동시 계산을 실행한 증거가 아닙니다. 다음 장의 창 생성기는 입력을 순차적으로 받아 같은 패치를 만들며, 이후 타일링 단원은 전체 펼친 저장을 피하는 방법을 다룹니다. 결과뿐 아니라 중간 행렬의 크기와 복제된 원소 수를 기록하면 하드웨어 매핑의 비용을 더 정확히 설명할 수 있습니다.
직접 생각해 보기
H=W=4,C=1,3×3 valid 커널일 때 원본 입력 원소 수, P,K와 전체 패치 행렬 원소 수를 계산하세요.
해설 보기
원본은 16원소입니다. 출력은 2×2여서 P=4이고 K=9입니다. 전체 패치 행렬은 4×9=36원소입니다. 중첩 창을 즉시 생성하면 전체 36원소 저장을 피할 수 있습니다.