Search
Duplicate

ConvNet의 작동원리

Convolution Layer

Convolution Layer와 Fully Connected Layer의 가장 큰 차이점은 공간구조를 보존하고 싶어한다는 것이다. 가중치에 해당하는 필터w는 가로와 세로의 크기는 input의 크기보다 크지만 않으면 되지만, 깊이는 무조건 input값과 같아야 한다. filter를, 왼쪽 위부터 모든 부분마다 내적을 해주는게 포인트다 (WTx+bW^Tx+b). 예를 들어, 32*32*3 이미지에 5*5*3 필터의 내적을 실시하면 28*28*1의 활성화 맵이 나온다.
내적을 실시하는 원리는 보폭에 따라 필터를 밀어주는 것이다. 위는 7*7 인풋에 보폭을 1로 설정한 후, 3*3의 내적을 실시하는 모습이다. 아웃풋은 (N(크기)-F(필터)) / stride(보폭) + 1의 사이즈를 가진다. 보폭은 반드시 아웃풋을 자연수로 만드는 값이어야한다.
만약 가장자리에 zero padding을 적용한다면, 사이즈는 (N+2)*(N+2)로 늘어나기 때문에 이를 유념해 공식을 적용해 아웃풋을 구해야한다. 이처럼 zero padding을 적용하는 이유는 전체크기를 유지하기 위해서다. 또한 필터가 가지고 있는 파라미터의 수는 F*F*깊이 + b 이다.
padding 이란? Convolution layer를 통과했을 때 activation map의 크기가 줄어들게 되는데, 이미지의 Size를 유지하여 가장자리의 정보를 사라지지 않게 하기 위해 이미지 주변을 특정값으로 채워 늘리는 것이다.
CNN은 하나의 필터만 사용하지 않고, 다양한 필터를 사용한다. 다양한 필터를 사용하여, 필터마다 다른 특징을 나타내게 만드는 것이다. 필터별로 활성화맵을 만들어내고, 활성화맵 개수의 볼륨을 가지는 출력이 만들어지게 된다. 이렇게 만들어진 Convolution layer와 ReLU와 같은 활성화함수를 같이 쌓아올리고, Pooling Layer가 곳곳에 들어간 형태가 바로 CNN이다.
이러한 필터 계층 구조는 레벨이 높아질수록 모서리, 얼룩부터 복잡한 특징까지 파악하게 된다.
정리 (W=가로, H=세로, D=깊이, 필터개수 = K, 필터크기 =F, 보폭 = S, 패딩수 = P) input size = W1H1D1W_1*H_1*D_1 일때, output size = W2H2D2W_2*H_2*D_2 W2=(W1F+2P)/S+1W_2 = (W_1-F+2P)/S + 1 H2=(H1F+2P)/S+1H_2 = (H_1-F+2P)/S + 1 D2=KD_2 = K
K는 2의 제곱( 32,64,128,512 등) 이 일반적으로 사용되고, [F=3, S=1, P=1], [F=5, S=1, P=2], [F=5, S=2, P=?(whatever fits)], [F=1, S=1, P=0] 등이 자주 사용된다.

ReLU

Activation Functions 문서 참고

Pooling Layer

Conv Layer을 거쳐 나온 activation map, 그리고 ReLu를 거친 출력의 크기를 깊이를 유지하며 downsampling 하는 과정을 의미한다. 즉 이미지 사이즈의 크기를 줄이는 것이다. 사이즈를 줄이는 것이 목적이기 때문에 패딩을 고려하지 않는다. 가장 일반적으로 쓰이는 방법은 Max Pooling으로, 필터가 슬라이딩하며 필터 안에 가장 큰 값을 고르는 방법을 의미한다. 다양한 pooling 사이즈, 필터 크기, 레이어 수 등을 시도해 보는 등의 Cross-validation이 필요하다.
정리 (W=가로, H=세로, D=깊이, Pooling Layer 필터크기 =F, 보폭 = S) input size = W1H1D1W_1*H_1*D_1 일때, output size = W2H2D2W_2*H_2*D_2 W2=(W1F)/S+1W_2 = (W_1-F)/S + 1 H2=(H1F)/S+1H_2 = (H_1-F)/S + 1 D2=KD_2 = K

Fully Connected Layer(FC layer)

의 출력을 1차원 벡터로 만들어 모든 출력을 연결한다. 이때는 공간적 구조를 신경쓰지 않고 하나로 통합한 다음, 클래스 스코어를 계산한다. 이렇게 출력된 값은 계층구조의 최상위 값으로, 각 값들이 의미하는 것은 필터의 Template이 얼마나 활성화되었는가이다.