이 글은 부스트캠프 AI Tech 3기 강의를 듣고 정리한 글입니다.
CNN 에서 쓰이는 Convolution
에 대해서 알아보도록 하자.
수식으로 Convolution을 이해해보는 글도 있으니 참고하도록하자.
Convolution 연산 이해하기
2D 이미지는 흑백이미지를 생각하면 된다.
기본적인 2D 이미지에서 Convolution
연산을 하는 과정을 보도록 하자.
K
: kernal 을 뜻하는 것으로 Convolution
연산을 하는 과정에서 변하지 않는 값이다.I
: 2D 이미지를 행렬로 나타낸 것으로 input에 해당한다.Output
: 2D 이미지를 Convolution
연산한 결과이다.Kernal은 image에 도장을 차례차례 찍듯이 움직이며 ouptut 요소들을 하나씩 계산을 하게된다.
그림으로 보면 이해가 빠르다.
Convolution 필터(Kernal) 에 따라 원본 이미지를 다음 그림들과 같이 효과를 줄수도 있다.
우리가 일반적으로 접할 수 있는 이미지는 3개의 채널 Red
Green
Blue
으로 이루어져 있다.
결과적으로 이미지는 3개의 차원을 갖는 Tensor
로 나타나게 된다.
방식은 2D Image 와 큰 차이 없다.
다만 주의할 점은 Kernal 의 채널 수
(3개)와 이미지의 채널 수(r,g,b)
(3개)를 꼭 맞춰줘야 한다는 점이다.
그렇기 때문에 일반적으로 이미지에 5x5 커널
을 적용한다는 말은 5x5x3 커널
을 적용한다는 말이다.
만약 output의 채널
을 늘리고 싶다면, 그림과 같이 커널의 개수를 여러개(늘리고 싶은 만큼) 적용하면 된다.
앞서 살펴본 Convolution 연산
과 Pooling Layer
: feature extraction
역할
Fully Connected layer
: Decision making
역할 (특히 분류문제 에서)
최근에는 F.C
를 없애거나 최소화시키는 추세이다.
parameter
개수와 관련되어 있는데, 일반적으로 ML
에서 학습해야하는 parameter
가 늘어날 수록, 학습이 어렵고, 일반화 성능이 낮아진다.
그래서 CNN
은 같은 모델을 만들고 최대한 deep
하게 만들어 parameter
를 줄이는 방향으로 발전하게 된다.
Layer가 많아지는데 parameter가 적어지는게 아이러니 한 것 같지만, 다음 정리에서 CNN의 발전 concept을 보고 이해해 보도록 하자.
stride
는 넓게 걷는다는 의미로 kernal
이 얼만큼 이동할지에 대한 값이다.
그림은 kernal size
가 3이라고 했을 때, stride = 1
, stride = 2
일 때의 움직임을 나타낸 것이다.
가장자리(boundary)
를 convolution
하기 위해 boundary 옆을 채워 주는 것을 의미한다.
padding
을 하지 않으면 boundary
의 정보가 소실된다.
그림은3x3 kernal
이 주어졌을 때 padding
을 하지 않은 것과 padding (1)
을 한 것의 차이를 보여준다.
CNN은 대체로 이미지를 다루는데 이미지 데이터 특성상 굉장히 많은 양의 parameter
를 계산하게 된다.
앞에서 언급했듯이 CNN의 발전은 Parameter 개수
를 줄이기 위해 노력하였다.
그렇기 때문에 기본적인 Parameter 개수
를 계산하는 법을 알 필요가 있다.
우선
CNN
에서의Parameter
는 무엇을 일까?
기본적인Neural Network
에서parameter
는기울기(w)
와편향(b)
를 의미하는데,
CNN
에서Parameter
는 바로kernal
을 의미한다.
따라서 우리는Parameter 개수
를kernal 의 원소 수
라고 생각 할 수 있다.
Parameter 개수
를 구하는 법은 간단하다.
Parameter 개수
= kernal size
input channel
output channel
그림의 Parameter 개수
를 구해보면 다음과 같다.
Parameter 개수
= (3x3) x 128 x 64 = 73,726