CONV2D
Convolutional layer란 무엇인가 ?
Convolutional network를 구성하는 layer를 의미하는데, 이미지 데이터를 위해 설계된 네트워크이다. 그러면 기존의 Fully connected layer와는 무엇이 다른것일까 ?
예를들어 pixel을 가지는 color 이미지가 있다고 생각해보자. RGB pixel을 가지고 있으니 개의 픽셀을 가지고 있을 것이고, 첫번째 FC 레이어가 만약에 1000개의 hidden unit을 가진다고 할 때 weight의 개수는 개가 된다.
이는 너무 많은 비용이 들 뿐만 아니라 학습을 위해 더 많은 데이터가 필요로 하게 된다. 이러한 문제를 해결하기 위해서는 이미지 데이터를 다루기 위한 새로운 도입이 필요로 하게 됐고, 이 때 여러 이미지를 다루기 위해 필요한 컨셉에 대한 inductive bias를 도입하여 Convolutional layer를 만들게됨.
그럼 Convolution은 무엇인가 ?
"하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자"
Convoltuion :
Cross-Correlation :
본론
CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1,
padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
2D convolution layer를 pytorch를 통해 간단하게 만들 수 있으며, 가장 간단한 케이스는 입력 사이즈가 일 때 출력 사이즈는 이다.
여기서 는 2D cross-correlation operator이다. (convolution은 원래 반전인데 반전 안하니까, 근데 그러면 왜 convolution이라 하는걸까 ? 여러 이유가 있지만 용어를 그렇게 사용해왔기 때문인 것 같고, 신경망에서는 필터(또는 커널)의 방향이 중요하지 않으므로, 이 두 연산은 실질적으로 동일한 목적으로 사용될 수 있기 때문이라고 봄)
그리고 위 module은 TensorFloat32
를 지원한다.
특정 ROCm (AMD에서 개발한 hardware인 것 같음)에서float16
input도 지원함. (mixed precision은 ?? # 확인 필요)
stride
는 cross-correlation의 stride를 조절합니다.padding
은 padding 양을 조절하는데, string으로 {'valid','same'}
혹은 int/ a tuple of ints
로 조절할 수 있음.dilation
은 kernel points사이의 공간을 컨트롤하는데, 아래 그림 보면 이해가 쉬울거임(# 근데 dilation default가 1인데 확인 해보기 )
groups
는 input과 output의 연결을 컨트롤한다, in_channels
와 out_channels
는 groups
로 나눠짐.Referece
비숍 : 딥러닝 - https://www.bishopbook.com
cross correlation : https://tensorflow.blog/2017/12/21/convolution-vs-cross-correlation/