딥러닝/컴퓨터비전
1x1 convolution 설명
AI바라기
2023. 4. 4. 23:47
1x1 컨볼루션은 컨볼루션 연산의 종류 중 하나로, 입력 데이터와 동일한 크기의 커널(kernel)을 사용하는 연산입니다. 이때 커널의 가로, 세로 크기가 모두 1인 것을 의미합니다.
1x1 컨볼루션은 주로 다음과 같은 목적으로 사용됩니다.
- 특성 맵의 채널 수 조절: 1x1 컨볼루션을 사용하여 입력 데이터의 채널 수를 줄이거나 늘릴 수 있습니다. 이렇게 함으로써 모델의 계산 비용을 줄일 수 있고, 모델의 복잡도를 조절할 수 있습니다. 이를테면 입력 데이터의 채널 수가 큰 경우, 1x1 컨볼루션을 사용하여 채널 수를 줄여서 모델의 크기를 줄이거나, 적은 채널 수의 입력 데이터에 대해 채널 수를 늘릴 수 있습니다.
- 비선형성 추가: 1x1 컨볼루션을 사용하여 비선형성(nonlinearity)을 추가할 수 있습니다. 일반적인 선형 함수인 Fully Connected 레이어와 달리, 1x1 컨볼루션 레이어는 특성 맵 각 위치의 특징들에 대해서만 계산을 수행하므로, 이를 통해 특성 맵 각 위치에서의 비선형성을 추가할 수 있습니다.
- 파라미터 수 조절: 1x1 컨볼루션을 사용하여 모델의 파라미터 수를 조절할 수 있습니다. 모델의 복잡도나 크기를 줄이기 위해, 1x1 컨볼루션 레이어를 사용하여 파라미터 수를 줄일 수 있습니다.
따라서 1x1 컨볼루션은 모델의 크기나 복잡도를 줄이고, 비선형성을 추가하면서도 정확도를 유지하거나 개선하는 데 효과적인 방법입니다. 이를테면, Inception 모델에서는 1x1 컨볼루션을 사용하여 특성 맵의 채널 수를 줄이거나 늘리는 등의 작업을 수행하여, 모델의 크기를 줄이면서도 정확도를 개선할 수 있었습니다.
바로 예시로 보여드리겠습니다.
일반적인 5x5 컨볼루션을 그냥 진행한다면 28 x 28 x 32 x 5 x 5 x 192 = 120,422,400 약 1.2억 번의 연산이 필요합니다.
하지만 1x1 컨볼루션을 통해 채널 수를 줄이고 진행한다면 어떻게 될까요?
우선 첫번째로 채널을 줄이는 연산량은 28 x 28 x 16 x 1 x 1 x 192 = 2,408,448 약 240만 번의 연산이 필요하며,
다시 32 채널로 늘릴때는 28 x 28 x 32 x 5 x 5 x 16 = 10,035,200 약 1000만번의 연산이 필요합니다.
따라서, 총 약 1240만번의 연산이 필요하게 됩니다.
최종 결과는 같은 5x5 필터를 사용했지만 1.2억과 1240만의 차이가 발생합니다.