Convolution의 핵심은 kernel을 사용하여 각 요소별 가중치를 줘서 특징을 추출한다는 것이다!! 컨볼루션에 관해서는 간단한 예시들로 이해를 하는 것이 좋다.
Convolution은 한국어로 합성곱으로 번역된다. 말 그대로 '곱해서 더한다'라고 직관적으로 생각하면 된다. 이때 사용하는 것이 커널인데 Kernel은 [ 1, 2, 0, 1]과 같은 배열의 형태가 될 수 있다. 예를 들어 1차원의 data가 [1,4,6,7,4]이고 kernel이 [1,1,1] 일 때, [ (1+4+6)/3 , (4+6+7)/3 , (6+7+4)/3 ] = [11/3, 17/3, 17/3]의 결과가 나올 것이다. 이처럼 data에 커널을 통과시키면 데이터 크기가 작아지며 특징을 추출하게 된다. 이런 기법을 어디 사용할 수 있을까? 실제 사용되는 것에서는 파동 형태의 신호에 대한 각종 변조 작업 (음성 변조, 잡음 제거, 음성 식별 등), 문자 데이터 특징 추출 , 이미지를 처리하는 작업등을 할 수 있다.
커널을 적절하게만 사용하면 이미지에서 노이즈가 많이 있는 것들도 깔끔하게 만들 수 있다. 그러한 것을 저주파 필터링이라고 하는데, 이미지 화소값들의 차이를 줄이게 해 줘서 전체적으로 smoothe 하게 만들어주는 원리이다. 반대로는 고주파 필터링이 있는데 이는 오히려 화소 값의 차이를 크게 하여 화소 값이 차이가 나는 사물 간의 경계 등을 뚜렷하게 만들어주는 효과를 줄 수 있다. 이외에도 여러 가지 커널을 사용하여 다양한 효과를 줄 수 있다.
커널의 핵심은 각 요소를 추출해 준다는 것이었다. CNN도 커널을 이용하여 1차원 혹은 2차원 데이터의 특징을 추출하여 신경망이 학습하게 하는 것이다. 각 커널의 숫자들이 일반 Dense층의 가중치와 같은 역할을 한다. 컨볼루션 신경망은 주로 이미지 처리에서 사용되고 이때는 Conv2D를 사용하게 되는데 그냥 단순히 2차원 행렬을 커널로 사용한다고 생각하면 된다. 커널의 크기는 3*3이나 2*2를 주로 사용하는데 더 큰 크기의 커널도 사용할 수 있다.
컨볼루션에서의 가중치 수는 (커널크기의 제곱 ×커널의 개수 ×채널 수)에 비례하게 된다. 예를 들어 커널의 크기가 3*3이면 한 커널당 9개의 가중치가 있어 커널 크기의 제곱이 되는 것이며 커널의 개수가 많을수록, 채널이 많아질수록 더 많아지므로 당연한 사실이다. bias 값은 커널 한 개당 하나의 값을 가지므로 커널의 개수에 비례한다.
신경망에 입력데이터로 이미지를 넣는다고 했을 때, 이미지의 전체를 돌며 커널이 움직이며 데이터 특징을 추출할 것이다. 28*28의 이미지에 3*3 행렬 형태의 커널을 이용해서 커널이 각 부분을 돌며 특징 추출을 하면 2번째 단락에서 1차원의 data로 예시로 든 것처럼 크기가 달라질 것이다. 그런데 이 크기를 유지시키고 싶을 때 tensorflow에서는 padding='same'을 이용할 수 있다. padding을 같게 유지시키면 Convolution을 여러 번 사용할 때 유리해진다. 왜냐하면 커널이 이미지를 돌며 특징을 추출할 때, 모서리 부분 혹은 외곽 부분의 특징 값들의 추출은 상대적으로 중앙 부분보다 적게 하게 되는데 이를 보완해주기 때문이다.
이미지는 처음 입력할 때 채널을 가지게 된다. 흑백은 1개 RGB는 3개를 가진다. 빛의 삼원색인 RGB의 경우 서로 섞게되면 여러 가지 색을 나타낼 수 있다. 이를 이미지 데이터로 생각했을 때 R , G , B의 각 이미지 데이터의 채널들이 서로 섞이면서 우리가 보는 다채로운 색들을 만들어낸다고 생각하면 된다. 채널이 여러 개인 데이터를 컨볼루션 신경망에 넣어주면 커널이 각각의 채널 이미지를 돌며 특징을 추출하게 된다. 그리고 여러 커널을 사용하면 각 커널 별로 한 개의 특징 추출 이미지가 생기게 되는데 이를 모두 합쳐서 최종 데이터를 만들게 되는 것이다. 이 과정을 잘 이해해야 하는데 각각의 특징 추출 이미지를 겹겹이 쌓는다고 생각하는 것이 이해에 도움이 된다. 이렇게 쌓인 데이터는 원래 2차원의 특징 추출 이미지에 높이가 생기는 꼴이므로 3차원 데이터가 되는데 이 높이(혹은 두께)가 채널이 된다. 즉, 채널이 3인 RGB 데이터를 넣었을 때 커널을 9개 사용하면 출력되는 이미지의 채널이 9가 되는 것이다!
CNN은 보통 합성곱층을 지나 전결합층(Dense층)을 거쳐 학습을 시키는데 일반 신경망에서 가중치를 업데이트시켜가며 Loss를 줄이는 것처럼 CNN도 각 커널의 가중치를 업데이트시켜가며 특징 추출을 변화시켜가며 최적화가 이루어진다.
'머신러닝&딥러닝 > 기초정리' 카테고리의 다른 글
KL-divergence with Gaussian distribution 증명 (0) | 2020.11.26 |
---|---|
Auto Encoder란? - Manifold와 차원 축소 (0) | 2020.03.29 |
Mean Squared Error VS Cross Entropy Error (3) | 2020.03.28 |
경사하강법 이해(2) - Learning Rate란? (0) | 2020.03.28 |
경사하강법 이해(1) (0) | 2019.12.30 |