Direct Convolution
for 루프로 직접 계산(MAC : Multiply Accumulation operation)
캐시 사용하지 못함, 병렬처리 못함
GEMM(General Matrix Multiply)
IM2COL로 Input과 Weight를 matrix로 변형해서 계산
GPU 연산에 빠르다
FFT-based Convolution
weight와 input을 FFT로 변환해서 pointwise multiplication 수행
IFFT로 원복
(자세한 내용은 다음에 다루겠습니다)
2-D convolution
$(G*F)[i,j]=\sum_m \sum_n G[i+m,j+n]F[m,n]$
i+m,j+n가 범위를 벗어나면 무시한다.
Fourier Transform 후 곱셈 계산을 위해 filter에 zero padding을 더한다
그리고 IFFT를 구하고 나머지 범위는 버린다
https://koreascience.kr/article/JAKO202102539955594.pdf
Winograd Transform
𝐹(𝑚 × 𝑚, 𝑟 × 𝑟)
- kernel size : 𝑟 × 𝑟
- output size : 𝑚 × 𝑚
=> Input size : (𝑚+𝑟-1) × (𝑚+𝑟-1)
Element wise multiplication를 수행할 때만 곱셈이 일어나고, 나머지 과정에서는 shift, 더하기, 빼기만 일어난다
naive하게 계산하면 곱셈이 m*m*r*r번 발생하지만, winograd에서는 (𝑚+𝑟-1) × (𝑚+𝑟-1) 번 발생한다
kernel이 3x3이고 input이 작을 때만 쓰인다.
$Y = A^T[(G gG^T) \odot (B^TdB)]A$
F(2x2,3x3)일때는
${B=\begin{bmatrix}
1 & 0 & -1 & 0 \\
0 & 1 & 1 & 0\\
0 & -1 & 1 & 0\\
0 & 1 & 0 & -1
\end{bmatrix}}$, ${G= \begin{bmatrix}
1 & 0 & 0 \\
\frac{1}{2} & \frac{1}{2} & \frac{1}{2} \\
\frac{1}{2} & -\frac{1}{2} & \frac{1}{2}\\
0 & 0 & 0
\end{bmatrix}}$, ${A^T= \begin{bmatrix}
1 & 1 & 1 & 0 \\
0 & 1 & -1 & -1
\end{bmatrix}}$
'인공지능 > 최적화' 카테고리의 다른 글
PEFT : Parameter Efficient Fine-Tuning (0) | 2025.06.14 |
---|---|
Quantization (1) | 2024.04.03 |