모든 뉴런을 연결하는 기존의 fully connected를 이미지에 적용한다고 생각해보자. 이미지 크기가 커질수록 파라미터 개수는 기하급수적으로 증가하게 되고, 이에 따른 memory size 부족과 같은 문제가 발생할 수 있다. convolution layer를 이용함으로써 conection을 줄이면서 모델이 모든 가능한 경우를 보지 않고 집중해야 할 부분만 보도록 만들 수 있다. 또 공간정보가 손실되는 것을 방지할 수 있다!
다음과 같은 필터를 이용하여 Vertical edge를 detection할 수 있다.
다음과 같은 필터를 이용하여 Horizontal edge를 detection할 수 있다.
필터의 값들은 모델이 학습하는 파라미터이며, 보통 다양한 edge를 detection하기위해 여러 개의 필터를 사용한다!
이미지의 크기가 nxn
이고, 필터 크기가 fxf
인 경우 Convolution Layer를 지나면 이미지의 크기는 (n-f+1)x(n-f-1)
로 줄어든다. 이 때 이미지의 크기를 유지하고 싶거나, 조절하고 싶은 경우 패딩을 이용할 수 있다.
이미지 크기를 줄이고 싶은 경우에는 stride를 이용하여 convolution filter를 여러칸 씩 움직여서 이미지 크기를 줄일 수 있다.
RGB, 3개의 채널인 경우 filter도 다음과 같이 개수를 늘려서 convolution을 적용하면 된다!
convolution layer의 출력을 입력으로 받아서 해당 activation map의 적당히 크기도 줄이고, 특정 feature를 강조하는 역할을 한다. Pooling Layers에서는 주로 2x2 (stride = 2) max pooling을 사용한다.
Pooling Layers를 거친 후 feature map의 크기는 다음과 같이 변한다. convolution layer의 size 변화와 동일하다. 다른점은 pooling layer에서는 채널의 변화는 없다는 것이다!
지금까지 학습한 notation이 간단히 정리되어있는 페이지이다!