합성곱 신경망(CNN, Convolutional Neural Network)
시각적 이미지 분석에 주로 사용되는 신경망으로, 입력 이미지로부터 유용한 특성만 추출하여 입력 이미지가 어떤 이미지인지 클래스로 분류하는 신경망이다. 인공 신경망의 경우 입력 데이터 전체에 가중치를 적용하는 반면, 합성곱 신경망의 경우 적은 수의 가중치를 곱하게 된다.
합성곱에서는 뉴런이라는 말 대신 필터라고 부르고, 필터에서 말하는 가중치를 커널이라고 한다. 필터를 커널이라고 혼용하는 경우도 많다. 그리고, 출력으로 얻게 된 결과를 특성 맵이라고 한다.
중요한 점 하나는 합성곱 층에서도 여러 개의 필터를 사용할 수 있다. 위 그림의 경우 필터(커널)이 한 개여서 출력이 2X2인 2차원인 특성 맵이 결과이다. 만약 서로 다른 필터 3개를 사용한다면 특성맵이 3개가 출력되므로 2X2X3인 3차원의 결과가 나타나게 된다. 결국 앞의 두 차원은 필터를 의미하고, 마지막 차원은 필터의 개수를 의미한다.
케라스 합성곱 층
케라스에서는 아래와 같이 합성곱 층을 생성할 수 있다.
from tensorflow import keras
keras.layers.conv2D(10,kernel_size=(3,3),activation='relu') #(필터 수, 커널 정의, 활성화 함수)
만약, 커널의 크기는 그대로 두고, 더 큰 출력의 크기를 만드려면 입력층에 패딩을 적용한다.
보통 입력과 특성 맵의 크기를 동일하게 하기 위해 주위에 0으로 패딩하는 방식을 동일 패딩(Same Padding)이라고 한다. 패딩 없이 순수한 입력 배열만 활용하여 특성 맵을 만드는 경우를 밸리드 패딩(Valid Padding)이라고 한다. 패딩을 통해 입력 층의 크기를 늘려 특성 맵의 크기를 키우는 이유는 모서리의 중요한 정보를 놓치지 않기 위해서이다. 보통 중앙의 입력값들은 중첩되어 필터에 적용되지만, 모서리에 있는 값들은 필터를 통과하는 횟수가 적기 때문에 이를 늘리기 위함이다. 일반적으로 동일 패딩을 많이 활용한다.
케라스에서 패딩을 적용하는 방식은 아래와 같다.
keras.layers.Conv2D(10,kernel_size=(3,3),activation='relu',padding='same')
풀링(Pooling)
풀링은 합성곱 층에서 생성된 특성 맵의 가로세로 크기를 줄이는 역할을 수행한다. 예를 들어, (2,2,3)인 특성 맵에 풀링을 적용하여 (1,1,3)인 특성 맵으로 변환할 수 있다. 풀링도 합성곱층에서 필터를 거쳐 통과하는 방식과 유사하다. 대신 필터처럼 가중치가 있는 것이 아닌 입력 값들을 평균을 내거나, 그 중 최대 값을 골라낸다.
위에서 특이한 점 하나는 합성곱에서 필터의 이동과는 다르게 서로 중첩되지 않게 2 스트라이드(보폭)씩 이동했다는 점이다. 그리고, 풀링을 통과한 결과 역시 특성 맵이라고 부른다.
아래는 케라스에서 풀링 층을 생성하는 방법이다.
keras.layers.MaxPooling2D(2, strides=2, padding='valid') #(풀링 크기, 스트라이드, 패딩방법)
위에서는 풀링 크기 2(2x2), 스트라이드 2, 패딩은 valid로 진행한다. 풀링에서는 패딩을 하지 않아 valid를 적용한 모습이다.
합성곱 신경망의 전체 구조
최종적으로 정리한 합성곱 신경망의 전체 구조이다. 입력 층에서 합성곱 층 사이에서 필터(커널)을 통해 특성 맵이 출력되고 해당 특성 맵을 풀링 층에 통과시켜 특성 맵을 출력한다. 이를 또 다른 층에 반복 적용하여 최종적으로 밀집층(양방향 연결층)을 거쳐 출력층이 나오게 된다.
컬러 이미지를 사용하는 합성곱
사실 패션 MNIST의 경우 흑백 이미지이기 때문에 가로 세로 2차원 배열로 표현할 수 있었다. 하지만, 컬러 이미지의 경우 가로X세로X색상(R,G,B) 3차원이다. 사실 흑백 이미지의 경우도 3차원으로 케라스에서 처리한다 2X2는 2X2X1과 같기 때문이다. 또한, 필터도 사실 3차원이다. 하지만 중요한 점은 필터를 통과한 아웃풋은 하나의 값이라는 점이다.
입력층이 첫 합성곱 층과 풀링 층을 통과하여 (4,4,5) 특성 맵이 반환되었다고 가정하자. 다음 합성곱 층의 필터 너비,높이가 3이라면 필터는 (3,3,5)이다. 그리고, 이 층의 필터 수가 10개라면 이 층을 통과한 특성 맵의 크기는 어떻게 될까? 바로 (2,2,10)이다. 첫 필터로 (2,2) 특성 맵, 두번째 필터로 (2,2), ... 최종 적으로 10개의 (2,2) 특성맵이 만들어져 결론은 (2,2,10)인 특성맵이 출력 결과이다. 앞선 흑백과 사실 큰 차이가 없다. 다만, 합성곱 신경망은 층을 통과할 때 마다 너비와 높이는 줄어들고 깊이가 깊어진다는 점이 특징이다.
요약
- 합성곱 신경망은 이미지의 유용한 특성만을 골라내어 분류하는 신경망
- 합성곱 층에서는 뉴런인 필터와 가중치를 의미하는 커널, 그리고 결과인 특성 맵이 존재한다.
- 패딩을 활용하면 모서리의 정보도 개선시킬 수 있다.
- 풀링을 통해 계산량을 줄이고 특징을 더 잘 검출해낼 수 있다.
- 합성곱의 입력은 3차원이며 필터도 3차원이고 결과는 하나의 값이다.
참고
- 혼자 공부하는 머신러닝+딥러닝(박해선 저)
'AI: ML,DL' 카테고리의 다른 글
[인공지능] 합성곱 신경망의 시각화[인공지능] 합성곱 신경망의 시각화 (0) | 2021.03.23 |
---|---|
[인공지능] 합성곱 신경망을 활용한 이미지 분류 (0) | 2021.03.22 |
[인공지능] 신경망 모델 훈련 (0) | 2021.03.21 |
[인공지능] 심층 신경망 (0) | 2021.03.20 |
[인공지능] 인공 신경망(딥러닝, DNN) (0) | 2021.03.20 |