[Pytorch]nn.Conv2d()

ma-kjh·2024년 2월 29일
0

Pytorch

목록 보기
14/20
post-thumbnail

CONV2D


Pytorch Conv2d link

Convolutional layer란 무엇인가 ?

Convolutional network를 구성하는 layer를 의미하는데, 이미지 데이터를 위해 설계된 네트워크이다. 그러면 기존의 Fully connected layer와는 무엇이 다른것일까 ?

예를들어 103×10310^3\times10^3 pixel을 가지는 color 이미지가 있다고 생각해보자. RGB pixel을 가지고 있으니 3×1063\times10^6 개의 픽셀을 가지고 있을 것이고, 첫번째 FC 레이어가 만약에 1000개의 hidden unit을 가진다고 할 때 weight의 개수는 3×1093\times 10^9개가 된다.


이는 너무 많은 비용이 들 뿐만 아니라 학습을 위해 더 많은 데이터가 필요로 하게 된다. 이러한 문제를 해결하기 위해서는 이미지 데이터를 다루기 위한 새로운 도입이 필요로 하게 됐고, 이 때 여러 이미지를 다루기 위해 필요한 컨셉에 대한 inductive bias를 도입하여 Convolutional layer를 만들게됨.

그럼 Convolution은 무엇인가 ?

"하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자"

Convoltuion : (fg)(t)=f(τ)g(tτ)dτ(f*g)(t)=\int^{\infin}_{-\infin}f(\tau)g(t-\tau)d\tau
Cross-Correlation : (fg)(t)=f(τ)g(t+τ)dτ(f*g)(t)=\int^{\infin}_{-\infin}f(\tau)g(t+\tau)d\tau

본론

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를 통해 간단하게 만들 수 있으며, 가장 간단한 케이스는 입력 사이즈가 (N,Cin,H,W)(N,C_\text{in},H,W) 일 때 출력 사이즈는 (N,Cout,Hout,Wout)(N,C_\text{out},H_\text{out},W_\text{out}) 이다.

out(Ni,Coutj)=bias(Coutj)+k=0Cin1weight(Coutj,kinput(Ni,k))\text{out}(N_i,C_{\text{out}_j})=\text{bias}(C_{\text{out}_j})+\sum^{C_\text{in}-1}_{k=0}\text{weight}(C_{\text{out}_j},k\star\text{input}(N_i,k))

여기서 \star는 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_channelsout_channelsgroups로 나눠짐.

Referece

비숍 : 딥러닝 - https://www.bishopbook.com
cross correlation : https://tensorflow.blog/2017/12/21/convolution-vs-cross-correlation/

profile
거인의 어깨에 올라서서 더 넓은 세상을 바라보라 - 아이작 뉴턴

0개의 댓글