CNN은 Convolutional Neural Network의 약자로, 한국어로는 합성곱 신경망이라고 합니다. 이미지 처리에 특히 강한 딥러닝 모델입니다.
일반적인 다층 퍼셉트론도 이미지를 분류할 수는 있지만, 이미지를 일렬로 길게 펴서 입력해야 합니다.
예를 들어 28×28 이미지라면 다음처럼 784개의 숫자로 바꿉니다.
28 × 28 이미지
↓
784개 숫자가 이어진 1차원 벡터
그런데 이렇게 하면 픽셀의 위치 관계가 사라집니다. 사람에게는 “옆에 있는 픽셀끼리는 관련이 있다”는 사실이 중요하지만, 일반적인 MLP는 이 공간적 구조를 충분히 활용하기 어렵습니다.
CNN은 이미지의 가로·세로 구조를 보존한 상태에서 학습하기 때문에 이미지의 선, 모서리, 질감, 눈·코·입 같은 특징을 더 효율적으로 찾을 수 있습니다.
이미지와 채널
이미지는 보통 다음과 같이 표현됩니다.
(
높이
,
너비
,
채널
)
(높이,너비,채널)
흑백 이미지는 색 정보가 하나뿐이므로 채널 수가 1입니다.
28 × 28 × 1
컬러 이미지는 빨강(R), 초록(G), 파랑(B)의 세 색을 사용하므로 채널 수가 3입니다.
높이 × 너비 × 3
예를 들어 224×224 컬러 이미지는 다음과 같은 구조입니다.
224 × 224 × 3
합성곱은 이미지 위를 작은 필터가 이동하면서 특징을 찾는 연산입니다.
이 작은 필터를 커널 또는 필터라고 부릅니다. 보통 3×3 또는 5×5 크기를 많이 사용합니다.
입력 이미지
↓
3 × 3 필터가 한 칸씩 이동
↓
각 위치에서 곱하고 더함
↓
특성 맵 생성
필터는 특정 패턴을 찾도록 학습됩니다.
어떤 필터는 세로선을 잘 찾습니다.
어떤 필터는 가로선을 잘 찾습니다.
어떤 필터는 대각선을 잘 찾습니다.
깊은 층에서는 눈, 바퀴, 얼굴, 동물의 질감처럼 더 복잡한 특징을 찾을 수 있습니다.
필터가 이미지를 훑은 결과를 특성 맵(feature map)이라고 합니다.
스트라이드는 필터가 한 번 이동할 때 몇 칸씩 움직이는지를 말합니다.
스트라이드 1: 한 칸씩 이동
스트라이드 2: 두 칸씩 이동
스트라이드가 커질수록 결과 특성 맵의 크기는 더 작아집니다.
합성곱을 하면 보통 이미지 크기가 작아집니다. 예를 들어 5×5 이미지에 3×3 필터를 사용하고 스트라이드가 1이면 결과는 3×3이 됩니다.
하지만 여러 합성곱층을 쌓으면 이미지가 너무 작아질 수 있습니다. 이때 이미지 테두리에 0을 추가하는 패딩을 사용합니다.
원본 이미지
↓
테두리에 0 추가
↓
합성곱 수행
↓
출력 크기 유지 또는 조절
3×3 커널에 스트라이드 1을 사용할 때 1칸의 제로 패딩을 넣으면, 입력과 출력의 가로·세로 크기를 같게 유지할 수 있습니다.
CNN이 파라미터를 적게 쓰는 이유
일반 MLP는 이미지의 모든 픽셀과 모든 뉴런을 연결하는 경우가 많습니다. 그래서 이미지가 커질수록 가중치 수가 급격히 많아집니다.
반면 CNN은 작은 필터 하나를 이미지 전체에 반복해서 사용합니다. 이를 가중치 공유라고 생각할 수 있습니다.
예를 들어 3×3 필터 하나는 가중치 9개만 사용합니다. 이 9개의 가중치를 이미지 전체 위치에서 반복 사용합니다.
그래서 CNN은 다음 장점을 가집니다.
이미지의 위치 관계를 보존합니다.
필요한 가중치 수를 줄일 수 있습니다.
같은 특징이 이미지 어느 위치에 있어도 찾는 데 유리합니다.
이미지 분류, 객체 탐지, 얼굴 인식 등에 강합니다.
풀링은 특성 맵의 크기를 줄이는 연산입니다. 합성곱 뒤에 자주 사용됩니다.
대표적인 방식은 최대 풀링입니다.
2 × 2 영역에서 가장 큰 값 하나만 남김
예를 들어 다음 2×2 영역이 있다고 해보겠습니다.
1 3
2 4
최대 풀링의 결과는 가장 큰 값인 4입니다.
결과: 4
평균 풀링은 가장 큰 값 대신 평균값을 사용합니다.
평균 풀링 결과: (1 + 3 + 2 + 4) / 4 = 2.5
풀링의 주요 역할은 다음과 같습니다.
특성 맵의 크기를 줄입니다.
연산량을 줄입니다.
약간의 위치 변화에 덜 민감하도록 돕습니다.
학습해야 할 파라미터는 없습니다.
CNN의 일반적인 구조는 다음과 같습니다.
입력 이미지
↓
합성곱층: 선, 모서리 같은 특징 찾기
↓
ReLU: 비선형성 추가
↓
풀링층: 중요한 특징을 남기며 크기 줄이기
↓
합성곱층: 더 복잡한 특징 찾기
↓
풀링층
↓
완전연결층 또는 분류기
↓
최종 클래스 예측
예를 들어 고양이와 강아지를 분류하는 CNN은 처음에는 단순한 선과 윤곽을 찾고, 중간 단계에서는 귀·눈·털 같은 부분을 찾고, 마지막 단계에서는 이 특징들을 종합해 고양이인지 강아지인지 판단합니다.