XAI(설명가능한 AI)에서는 다양한 방법들이 존재하지만, 그 중 특히 CNN의 필터와 관련된 방법론들이 많이 존재합니다. 이를 공부하기 전에 CNN의 이론들에 대해 알아보고자 합니다.
CNN은 시각 피질에 대한 연구에 이미지를 DNN으로 처리하는 데 생기는 문제점을 해결하기 위해 점진적으로 진화한 알고리즘입니다.
이미지 분야에 DNN이 사용되지 않는 이유는 어마어마하게 많은 파라미터가 생긴다는 단점과, 이미지와는 다르게 위치 정보를 이용할 수 없다는 단점들이 존재하기 때문입니다.
이 페이지에서는 CNN의 중요한 두 가지 구조인 합성곱층, 풀링층에 대해 우선 설명하고, 나머지 연결부분들에 대해 간단히 요약해서 최종적으로는 기본적인 하나의 CNN 모델의 구조에 대해 설명해보고자 합니다.
합성곱층(Convolutional layer)
첫 합성곱층의 각 뉴런은 필터를 통해 인풋된 이미지의 수용장(여기서는 5x5크기의 박스)안의 픽셀과 연결됩니다. 이렇게 필터를 거쳐 나온 결과(여기서는 10장의 윈도우)를 특성 맵(Feature Map)이라고 합니다. 특성 맵은 하나의 필터당 하나씩 나오게 되며 여기서는 10개의 필터를 가지고 있기에 10장의 결과값이 나온 것을 확인할 수 있습니다.
참고로 여기서 인풋 이미지의 크기가 28x28이지만 합성곱층의 크기가 24x24임을 알 수 있는데, 5x5 필터를 제로 패딩없이 스트라이드 를 1로 주고 작업했기 때문입니다. 이렇게 합성곱층을 만들면 마지막에 활성함수를 적용하게 됩니다.
필터 : 뉴런의 가중치라고 볼 수 있으며, 인풋 이미지와 합성곱 연산을 하며 필터와 유사한 이미지의 영역을 강조하는 특성 맵을 만드는 중요한 역할을 가지고 있습니다. 하나의 필터로 하나의 특성 맵을 만들 수 있습니다. 훈련 과정에서 CNN은 주어진 문제에 가장 유용한 필터를 찾고 이들을 연결해 복잡한 문제를 해결합니다. 하나의 특성 맵 안에서는 모든 뉴런이 같은 파라미터(가중치, 편향)을 공유하지만, 다른 특성 맵은 다른 파라미터를 가지므로 여러 필터를 사용해 이미지의 여러 특성을 감지할 수 있습니다. 필터의 작업 과정은 다음과 같습니다.
이 작업을 1칸씩 움직이며 반복하면 빨간색 박스인 특성 맵을 만들게 됩니다.
지금까지는 흑백 사진에 대한 2차원 이미지를 보고 있었지만 RGB로 표현되는 3차원의 이미지의 경우 필터 역시 3차원 모양을 가지게 됩니다. 그 예시는 다음과 같습니다.
제로 패딩 : 앞에서 28x28 이미지가 24x24로 줄어드는 걸 확인할 수 있었습니다. 이를 보완하기 위해 이미지 겉 부분에 0을 감싸 손실 부분을 없게 만들어주는 방법을 말합니다.
스트라이드 : 필터는 무조건 한 칸씩 움직이지는 않습니다. 필터가 움직이는 칸 수를 지정하는 파라미터를 스트라이드라고 합니다. 만약 스트라이드가 2라면 필터는 2칸씩 띄어 움직이며 작업합니다.
풀링층(Pooling layer)
이 층은 계산량, 메모리 사용량, 파라미터 수를 줄이기 위한 층입니다. 입력 이미지의 크기를 줄이면 이미지가 약간 이동해도 신경망에는 영향이 덜하다고 합니다(위치 불변성). 풀링층은 합성곱층과 많이 유사하지만 필터에서 차이가 존재합니다. 풀링 뉴런에는 가중치가 없고 특정한 연산(최대값Max Pooling, 평균Average Pooling)을 사용합니다.
이미지에서 2x2의 Max Pooling이 보이고 전후 이미지가 24x24에서 12x12로 줄어드는 걸 확인하실 수 있습니다. 즉 스트라이드가 2입니다. 대표적인 풀링 연산들은 다음과 같습니다.
각각 최대값, 평균 등에 대해 Inner Product가 아닌 연산만을 진행한다는 차이를 확인할 수 있습니다.
Flatten(Vectorization)
이후 원하는 만큼 합성곱층과 풀링층을 추가로 연결한 후 데이터를 일자로 연결하는 작업을 진행합니다. 이렇게 간단하게 Flatten할 경우 공간적인 특성을 잃어버릴 수 있는데 이를 방지하기 위해 GlobalAveragePooling(GAP) 등 각 피쳐 맵에서 하나의 대표적인 값만 뽑는 방법도 존재합니다.
FC Layers
마지막으로 FC Layer를 원하는 만큼 연결하고, 목적에 맞는 Activation Function을 적용하면 하나의 CNN이 완성됩니다.
현재의 엔드 이미지 기준 파라미터의 수는 5x5(커널) * 10(특성 맵) + 5x5(커널) * 20(특성맵) * 10(기존 갯수) + 20x4x4(최종 변수 수)*100(레이어) + 100*10 개가 됩니다. 만약 3차원 데이터라면 더 많은 파라미터가 존재함을 확인할 수 있습니다.
하이퍼파라미터(Hyperparameters)
CNN에서 튜닝 가능한 하이퍼파라미터를 보도록 하겠습니다. 이부분은 블로그 원작자의 글을 그대로 적었습니다.
- Convolutional layers: 필터의 갯수, 필터의 크기, stride값, zero-padding의 유무
- Pooling layers: Pooling방식 선택(MaxPool or AvgPool), Pool의 크기, Pool stride 값(overlapping)
- Fully-connected layers: 넓이(width)
- 활성함수(Activation function): ReLU(가장 주로 사용되는 함수), SoftMax(multi class classification), Sigmoid(binary classification)
- Loss function: Cross-entropy for classification, L1 or L2 for regression
- 최적화(Optimization) 알고리즘과 이것에 대한 hyperparameter(보통 learning rate): SGD(Stochastic gradient descent), SGD with momentum, AdaGrad, RMSprop
- Random initialization: Gaussian or uniform, Scaling
참고 & 출처
그림 및 내용 출처 :
[딥러닝/머신러닝] CNN(Convolutional Neural Networks) 쉽게 이해하기
http://www.yes24.com/Product/Goods/59878826