CNN이란? 합성곱 신경망의 원리와 이미지 인식 과정

CNN은 이미지의 작은 영역에서 특징을 찾고, 그 특징을 여러 층에서 조합해 대상을 구분하는 신경망입니다. 같은 계산 규칙을 이미지의 여러 위치에 적용하며, 어떤 특징을 사용할지는 데이터로 학습합니다. 손글씨 사진이 숫자별 점수로 바뀌는 과정을 따라가면 합성곱과 풀링이 각각 무엇을 하는지 이해할 수 있습니다.

CNN은 이미지를 어떻게 읽나요?

이미지를 숫자 배열로 받아, 위치별 특징을 추출한 뒤 분류에 필요한 정보로 바꿉니다. CNN은 Convolutional Neural Network의 약자로, 한국어로는 합성곱 신경망이라고 합니다.

컴퓨터에 들어가는 정보는 ‘숫자 8’이라는 의미가 아니라 이미지를 이루는 작은 점, 즉 픽셀의 값입니다. 흑백 이미지에서는 밝기를, 일반적인 컬러 이미지에서는 빨강·초록·파랑 성분을 숫자로 표현합니다. CNN은 이 숫자들 사이의 이웃 관계를 이용합니다. 색상별로 나뉜 값의 묶음은 채널이라고 부릅니다. TensorFlow 공식 튜토리얼도 이미지 입력을 높이·너비·채널 구조로 설명합니다.

전체 흐름은 이미지 입력 → 특징 추출과 축소 → 특징 조합 → 종류별 점수 출력입니다. PyTorch의 숫자 이미지 분류 예제에서는 특징을 추출하고 크기를 줄이는 묶음을 두 번 거친 뒤 분류 부분으로 연결합니다. 아래 그림은 이 예제의 연결 순서를 묶어서 표현한 것입니다. 모든 CNN이 똑같은 층 수를 갖는다는 뜻은 아닙니다.

CNN이 손글씨를 숫자별 점수로 바꾸는 구조
PyTorch 예제의 두 특징 추출 묶음과 뒤쪽 분류 부분을 연결 순서대로 단순화한 그림입니다.

합성곱: 같은 필터로 작은 영역을 계산합니다

합성곱은 작은 숫자 배열을 이미지 위로 옮겨 가며, 겹치는 값끼리 곱하고 더하는 계산입니다. 이때 사용하는 작은 숫자 배열을 필터 또는 커널이라고 합니다. 필터 안에서 각 입력에 곱하는 값은 학습으로 조정되는 가중치입니다.

작은 영역의 계산을 예로 들어보겠습니다. 흑백 이미지의 작은 영역이 위쪽 행은 [0, 1], 아래쪽 행은 [3, 4]이고, 필터는 위쪽 행이 [0, 1], 아래쪽 행이 [2, 3]이라고 하겠습니다. 서로 같은 자리에 있는 값을 곱해 더하면 0×0 + 1×1 + 3×2 + 4×3 = 19가 됩니다. 이 19가 출력의 한 칸에 들어갑니다. 보정용 숫자인 편향은 생략한 예입니다.

필터를 다음 위치로 옮겨 같은 계산을 반복하면 위치별 결과가 쌓입니다. 이렇게 얻은 숫자 지도가 특징 맵입니다. 딥러닝에서는 이 연산을 관례적으로 합성곱이라 부르지만, 필터를 뒤집는 수학적 합성곱과 구분하면 교차상관에 해당합니다. Dive into Deep Learning의 연산 설명에서 계산 예와 용어 차이를 확인할 수 있습니다.

필터를 여러 개 사용하는 이유

필터마다 학습된 값이 다르므로 같은 이미지에서도 서로 다른 반응을 얻습니다. 앞쪽 층에서는 선의 방향이나 밝기 경계 같은 특징에 반응할 수 있고, 뒤쪽 층은 앞에서 얻은 특징을 조합합니다. 손글씨라면 획의 경계와 굽은 부분을 조합해 숫자를 구분하는 데 활용하는 식입니다.

다만 사람이 필터마다 ‘곡선 담당’, ‘숫자 8 담당’이라는 역할을 지정하지는 않습니다. 실제 반응은 학습 결과에 달려 있습니다. 같은 필터의 가중치를 여러 위치에서 함께 쓰기 때문에, 위치마다 별도의 규칙을 학습할 필요도 줄어듭니다. 이러한 특징 추출과 가중치 공유는 Stanford CS231n 강의 자료가 설명하는 CNN의 주요 설계 원리입니다.

찾아낸 특징은 어떻게 분류 결과가 되나요?

합성곱으로 얻은 값을 변환하고, 필요에 따라 공간 크기를 줄인 다음, 남은 특징을 조합해 종류별 점수를 계산합니다. 각 연산은 서로 다른 역할을 맡습니다.

ReLU는 값에 비선형 변화를 줍니다

입력과 출력의 관계를 단순한 곱셈·덧셈의 조합보다 복잡하게 표현하도록 돕는 계산을 활성화 함수라고 합니다. 대표적인 ReLU는 음수를 0으로 바꾸고 양수는 그대로 통과시킵니다.

이런 비선형 변환이 있어야 여러 층을 쌓아 복잡한 패턴을 표현할 수 있습니다. ReLU가 숫자의 의미를 판단하거나 ‘중요하지 않은 특징’을 직접 알아내지는 않습니다. CS231n의 층별 역할 설명에서도 ReLU를 각 값에 적용하는 비선형 연산으로 구분합니다.

풀링은 주변 값을 요약합니다

가까운 값들을 묶어 대표값으로 줄이는 연산이 풀링입니다. 그중 최대 풀링은 작은 영역에서 가장 큰 값만 남깁니다. 예를 들어 한 영역의 값이 0, 1, 3, 4라면 결과는 4입니다.

창을 겹치지 않게 이동하는 등의 설정으로 특징 맵의 가로·세로 크기를 줄이면 뒤쪽 계산의 부담도 줄일 수 있습니다. 작은 위치 변화에 덜 민감해지는 데도 도움이 됩니다. 대신 세부 위치 정보가 사라지므로, 이미지를 줄여도 모든 정보가 유지되지는 않습니다. 풀링은 학습된 필터를 곱하는 합성곱과 달리 정해진 최댓값·평균값 계산 등을 사용합니다. Dive into Deep Learning의 풀링 설명에 근거한 구분입니다.

분류 부분은 숫자별 점수를 계산합니다

PyTorch 예제에서는 추출한 특징을 일렬로 펼친 뒤, 앞쪽 값들을 연결해 조합하는 완전연결층으로 전달합니다. 마지막에는 0부터 9까지 각 숫자에 대응하는 점수를 출력합니다. 학습된 모델에서 8에 해당하는 점수가 가장 높다면 8을 예측 결과로 선택하는 식입니다.

이 출력 점수 자체가 곧 확률은 아닙니다. 확률 형태가 필요하다면 점수들을 양수이며 합이 1인 값으로 바꾸는 소프트맥스 같은 변환을 적용합니다. TensorFlow 공식 CNN 예제 역시 특징 추출 부분과 마지막 분류 부분을 구분하며, 마지막 층에서 변환 전 점수를 출력하도록 구성합니다.

필터는 누가 정하나요? 학습과 예측의 차이

학습할 때는 예측과 정답의 차이를 이용해 필터와 분류 부분의 가중치를 조정합니다. 학습을 마친 뒤 새 이미지를 예측할 때는 저장된 가중치로 계산합니다.

손글씨 이미지와 정답 숫자를 함께 제공한다고 생각해 보세요. 모델이 이미지를 처리한 결과와 정답 사이의 차이를 나타내는 값이 손실입니다. 학습에서는 이 손실을 줄이려면 가중치를 어느 방향으로 바꿔야 하는지 계산합니다. 출력 쪽에서 앞쪽으로 계산에 필요한 정보를 전달하는 절차가 역전파이며, 그 결과를 이용해 가중치를 갱신합니다.

‘이미지를 넣어 답을 얻는 계산’과 ‘그 답을 바탕으로 모델을 수정하는 계산’은 구분해야 합니다. 일반적인 예측만으로 필터가 저절로 다시 학습되지는 않습니다. 이 흐름과 앞서 제시한 구조는 PyTorch 공식 신경망 튜토리얼에서 확인할 수 있습니다.

이미지와 정답의 관계로 배우는 방식이 낯설다면 지도학습의 기본 개념을 함께 읽어보세요. CNN은 모델의 구조를, 지도학습은 정답을 활용하는 학습 방식을 가리킨다는 차이도 이해할 수 있습니다.

잘 인식하는 CNN인지 무엇을 확인해야 하나요?

학습에 사용한 이미지를 잘 맞히는지보다, 보지 못한 이미지에서도 제대로 작동하는지를 확인해야 합니다. 구조를 잘 설계했더라도 학습 데이터가 실제 사용 환경을 충분히 담지 못하면 오류가 생길 수 있습니다.

학습 데이터에는 잘 맞지만 새로운 데이터에서는 성능이 떨어지는 현상을 과적합이라고 합니다. 손글씨 예제에 적용하면, 특정 필체로만 학습한 모델을 다른 사람의 필체에서도 확인해야 한다는 뜻입니다. 글씨의 굵기나 촬영 조건이 달라지는 상황도 따로 점검할 만합니다. 이는 실제 환경을 대표하는 데이터로 평가해야 한다는 Google의 과적합 설명을 손글씨 사례에 적용한 판단 기준입니다.

처음 실습한다면 모델의 층 수를 늘리기 전에 틀린 이미지를 모아보길 권합니다. 어떤 숫자끼리 혼동하는지, 입력 크기와 밝기 처리 방식이 학습 때와 같은지 확인하면 문제를 더 구체적으로 찾을 수 있습니다. 이 글의 흐름을 코드와 연결하고 싶다면 PyTorch 예제에서 입력 → 특징 추출 → 분류 점수의 경로를 먼저 따라가 보세요. 이후 순서가 있는 데이터를 처리하는 구조와 비교하려면 CNN과 RNN 비교 글로 이어갈 수 있습니다.

자주 묻는 질문

풀링층이 없으면 CNN이 아닌가요?

아닙니다. 풀링은 선택할 수 있는 구성 요소입니다. 필터를 옮기는 간격을 크게 한 합성곱 등으로 공간 크기를 줄일 수도 있습니다. CNN을 이해할 때 모든 모델이 합성곱 다음에 반드시 풀링을 둔다고 외울 필요는 없습니다.

이미지가 적어도 CNN을 학습할 수 있나요?

이미 학습된 모델의 특징 추출 능력을 가져오는 전이학습을 검토할 수 있습니다. 분류 부분만 새로 학습하거나 기존 가중치를 추가로 조정하는 방식입니다. PyTorch 공식 전이학습 튜토리얼이 두 방법을 설명합니다. 필요한 데이터 양은 작업과 이미지 다양성에 따라 달라지며, 별도 평가 데이터는 여전히 필요합니다.

참고 자료

댓글 남기기