CNN 개념 정리: convolutional filter, channel, stride, padding
CNN: Convolutional Neural Network
CNN을 구성하는 것 :
Convolutino Layer, Activation function, Pooling layer 등으로 구성되어 있다.
CNN의 주요 키워드:
convolutional filter, channel, stride, padding
Convolution Layer
네트워크가 이미지를 알아볼 수 있도록 하기 위해 유용한 피쳐들을 학습할 수 있도록 한다.
이미지가 들어오면, 특정 크기의 필터(=커널)를 사용해 이미지를 왔다갔다 스캔하면서 컨볼루션 연산을 때리고, 그 연산 결과 필터 영역에 대한 특징을 추출한다. 여기서 필터는 k x k 크기의 텐서로, 이미지와 컨볼루션 연산을 하고 바이어스(하나의 숫자)를 더해준다.
위 그림에서는 인풋 이미지를 3x3 필터로 컨볼루션하고 바이어스 5를 더해 2x2 피쳐를 아웃풋에서 얻었다.
(당연하게도) 필터에 어떤 숫자가 들어가느냐에 따라 아웃풋도 달라진다. 그래서 필터에 여러 숫자를 넣어가면서 계산시키고, 결과값으로 나오는 피쳐가 달라지는 것을 보면서, 내가 원하는 적절한 피쳐가 나오게 하는 것이 "피쳐를 학습하는 것"이다.
convolutional filter
여기서 필터(커널이나 마스크라고도 부름)는 이미지처리를 위해 사용되는 행렬을 말한다. 필터 하나로, 이미지를 쭉 스캔하듯이 왔다갔다하면서 컨볼루션 연산(이미지 x 필터의 합성곱)을 한다. 원본 이미지에서 3x3 필터를 쓴다고 하면, 이 필터 크기만큼의 영역을 스캔하면서 그 영역의 중요한 특징을 뽑아내는 것.
사진 찍어서 뭐 흑백이나 세피아같은 필터 넣는 것처럼, 고정된 필터를 사용하면 원하는 효과를 줄 수 있다. 하지만, CNN에서 하려는 것은 정해진 필터의 값을 쓰려는 것이 아니라, 필터의 값을 학습하는 것!! 3 x 3 필터라고 치면, 그 필터의 값들은 모두 업데이트가 가능한 웨이트(가중치)이자 학습 가능한 파라미터라고 할 수 있음. 백프로파게이션을 거쳐서 필터의 웨이트들이 학습됨.
Stride
필터를 얼마만큼 간격으로 움직일 것인지. 인풋의 크기와 필터의 크기, 그리고 스트라이드의 크기에 따라 아웃풋의 크기가 달라진다.
아웃풋으로 나온 피쳐맵의 크기는 계속 작아지게 되는데.. 혹시 작아지지 않게 할 수는 없을까? 컨볼루션 레이어를 계속해서, 무한으로 더 많이 쌓고 싶은데 피쳐맵이 작아져서 못쌓게 되면 아쉬우니, 이걸 작아지게 하는 방법이 없나? -> 패딩이 있기 때문에 계속 레이어를 쌓는 것이 가능하다!
Padding
입력 주의에 임의의 값을 가지는 픽셀을 추가하는 것. 제로 패딩(영으로 채우기)
channel
흑백 이미지는 채널이 1개, 컬러는 RGB로 3개. 컨볼루션 필터를 적용할 때에는 채널의 숫자를 고려해야 한다.
컨볼루션 연산을 수행하면 피쳐맵의 크기가 점점 작아진다. 만약 작아지는 게 싫다면? 타겟하는 피쳐맵의 크기를 유지하기 위해서 스트라이드와 패딩이라는 개념을 도입해서 해결. stride는 슬라이딩 윈도우로 이동할 때마다 몇 칸씩 움직일지, 스텝을 말하는 것이다. 패딩은 바깥에 픽셀을 더 두는 것.
Activation function
네트워크에 비선형성을 더해주는 역할. 다양한 피쳐들을 학습할 수 있게 해준다.
컨볼루션 연산의 결과는 1차 함수, 즉 선형적인 모델만 만들 수 있다. 비선형성을 지니는 액티베이션 함수를 통과시켜줘야 고차 함수 모델을 만들 수 있다.
ex) 시그모이드, 렐루 등등...
Pooling layer
입력에 대해서 특정한 방식으로 정보를 취합해준다. feature map에 spatial aggregation을 시켜준다.
224x224x64 -----풀링 레이어----> 112x112x64 로 작게 만들어주는데, 입력의 크기를 줄여주는 셈이다.
파라미터를 사용하지 않고(이게 큰 장점!! 파라미터를 계산하는데 자원이 많이 소모되므로) 피쳐맵의 크기를 축소하는 방법. 슬라이딩 윈도우 방식을 똑같이 사용하는데, max pooling과 average pooling이 있음. Receptive field가 달라지게 된다.