컴퓨터에게 사진은 숫자가 빼곡한 격자다. 사람이 정한 특징도, 픽셀을 한 줄로 늘어놓는 신경망(MLP)도 이 격자 앞에서 쉽게 흔들린다. 작은 필터 하나를 격자 위로 미끄러뜨리는 합성곱 신경망(CNN)이 무엇을 해결했고 무엇은 아직 못 했는지, 숫자 하나하나를 직접 계산하며 따라간다.
화면의 그림을 아주 크게 확대하면 작은 네모(픽셀)가 보인다. 픽셀 하나는 밝기를 나타내는 숫자 하나, 컬러라면 빨강·초록·파랑 세 숫자다.
숫자 격자는 보통 0(검정)부터 255(흰색)까지의 정수로 저장한다. 신경망에 넣을 때는 255로 나눠 0~1로 바꾸는 경우가 많다. 이 페이지의 계산도 0~1을 쓴다. 휴대폰 사진 한 장(예: 4000×3000 컬러)은 숫자가 3,600만 개다. 숫자 격자가 이렇게 크다는 사실이 다음 섹션들의 출발점이다.
세 가지 도형(+, ×, ○)을 구별해야 한다. 사람이 단서 두 개를 정했다. "가운데가 칠해졌나", "가로·세로 띠가 대각선 띠보다 진한가". 기계는 이 두 숫자에 줄 가중치만 배운다.
이 예의 특징은 일부러 단순하게 만들었다. 실제 연구자들은 가장자리 방향을 영역별로 세는 것처럼 훨씬 정교한 특징을 오랫동안 고안했다. 그래도 사진 속 사물은 위치·크기·조명·각도가 끝없이 달라져서, 사람이 모든 변화를 미리 떠올려 특징에 담기는 어려웠다. 2012년 사진 1,000종을 분류하는 ImageNet 대회에서 특징까지 스스로 배우는 CNN이 top-5 오류 15.3%로 2위(26.2%)를 크게 앞서면서 흐름이 바뀌었다 [R4].
3-2의 MLP(다층 퍼셉트론)에 사진을 넣으려면 격자를 한 줄로 펼쳐야 한다. 펼치는 순간 생기는 문제를 하나씩 본다.
지역 연결 · 가중치 공유 · 풀링 · 층 쌓기Fukushima 1980 → LeCun 1998
| MLP의 문제 | CNN의 해법 | 어디까지 해결했나 |
|---|---|---|
| ① 이웃 관계 상실 | 지역 연결: 뉴런 하나가 3×3 같은 이웃 조각만 본다 | 이웃한 픽셀을 함께 보도록 구조에 박아 넣었다 |
| ② 가중치 폭발 | 가중치 공유: 같은 필터를 모든 위치에 쓴다 | 필터 수 × 9개면 된다. 사진 크기와 상관없다 |
| ③ 위치 변화 | 가중치 공유 + 풀링: 어디에 있든 같은 필터가 찾고, 풀링이 작은 이동을 흡수한다 | 비교적 덜 흔들린다. 완전하지 않다. 많이 옮기면 정확도가 떨어진다(섹션 8) [R6] |
| ④ 픽셀 순서 무시 | 층 쌓기: 가까운 픽셀끼리 묶어 점점 넓은 모양을 만든다 | 그 대신 "가까운 픽셀이 관련 있다"는 가정에 기댄다. 픽셀을 섞으면 성능이 떨어진다(섹션 8) |
출력 = Σ (입력 조각 × 필터)6×6 입력 · 3×3 필터 → 4×4 출력
필터 창을 입력의 한 자리에 겹친다. 겹친 9칸끼리 곱해 모두 더한 값이 출력 한 칸이 된다. 창을 한 칸씩 옮기며 반복한다. 6×6 입력에 3×3 창은 가로 4자리, 세로 4자리에 놓일 수 있어 출력은 4×4다(가장자리를 0으로 채우는 패딩을 하지 않을 때).
세로 가장자리 필터는 왼쪽 열에 +1, 오른쪽 열에 −1이 있다. 그래서 "왼쪽이 밝고 오른쪽이 어두운" 자리에서 양수, 반대면 음수, 고르면 0에 가깝다. 신경망은 이런 필터 숫자를 사람이 정하지 않고 역전파로 배운다. 덧붙여, 딥러닝에서 말하는 "합성곱"은 수학의 합성곱과 달리 필터를 뒤집지 않는다(상호상관). 학습으로 숫자를 정하므로 결과는 같다 [R8].
섹션 5의 4×4 출력에 ReLU(음수 → 0)를 거친 뒤, 2×2 창마다 숫자 하나만 남긴다(최대 또는 평균). 그림을 한 칸 옮겼을 때 무엇이 바뀌는지도 본다.
풀링은 숫자를 4분의 1로 줄여 다음 층의 계산을 덜어 주고, 2×2 창 안에서 생긴 작은 이동은 흡수한다. 창의 경계를 넘는 이동이나 2칸 이상의 이동은 그대로 결과를 바꾼다. 그래서 "CNN은 위치 변화에 강하다"보다 "비교적 덜 흔들린다"가 정확하다. 실제로 이름난 큰 CNN들도 그림을 몇 픽셀만 옮겨도 답이 바뀔 수 있다는 연구가 있다 [R6].
마지막 특징 지도들을 숫자 한 줄로 만들고, 완전 연결층과 소프트맥스를 거쳐 "+일 확률, ×일 확률, ○일 확률"을 낸다. 섹션 8의 CNN을 미리 학습시켜 그대로 쓴다.
LeNet 같은 고전 CNN은 마지막 지도들을 그대로 이어 붙여(펼치기, Flatten) 완전 연결층에 넣었다 [R3]. 이 방식은 "특징이 지도의 어느 칸에 있었나"까지 넘겨주기 때문에 위치에 다시 민감해진다. 지도마다 숫자 하나(최댓값이나 평균)만 남기는 전역 풀링은 위치 정보를 지워 이동에 덜 흔들리고 파라미터도 적다 [R5]. 이 페이지의 CNN은 전역 최대 풀링을 쓴다.
소프트맥스는 점수 3개를 합이 1인 확률 3개로 바꾼다. 점수가 큰 쪽이 확률도 크다. 확률이 높다고 늘 맞는 것은 아니다. 학습 때 보지 못한 모습에서는 틀린 답에도 높은 확률을 줄 수 있다(3-1 섹션 4).
12×12 도형 3종을 120장(각 40장)으로 학습한다. 학습 그림은 모두 가운데(±0.5칸)에 있고 잡음·방해 획·회전·굵기 변화가 섞였다. 시험은 처음 보는 150장씩이다.
두 코드 모두 Colab에 기본으로 설치된 라이브러리만 쓴다. "노트북(.ipynb) 내려받기" 후 Colab에서 파일 → 노트북 업로드로 열거나, 복사해서 새 노트북 칸에 붙여 넣는다.
섹션 5·6과 같은 6×6 숫자 "7"과 같은 필터 4개로 합성곱 → ReLU → 최대·평균 풀링을 계산한다. 출력 숫자가 페이지의 숫자와 칸까지 같다. 내 데이터로 바꾸려면 코드 안의 [내 데이터로 바꾸려면] 표시 부분에서 IMG만 바꾼다.
섹션 8과 같은 모델 구조와 같은 도형 규칙으로, 실무 라이브러리에서 실험을 다시 한다. 옵티마이저는 Adam(40에폭)으로 바꿨고, 시드 3개로 반복해 평균을 낸다. 픽셀 섞기는 같은 규칙으로 섞은 데이터로 처음부터 다시 학습한다.
ChatGPT, Qwen, Claude 같은 AI 도우미에 붙여 넣는 프롬프트다. "복사"를 누르면 프롬프트 뒤에 고른 코드가 함께 붙는다. 〔 〕 안을 내 상황으로 바꿔 쓰면 된다.
AI의 답은 출발점일 뿐이다. 제안된 논문·수치·라이브러리 함수는 반드시 원문과 공식 문서로 확인한다. 공모전·논문에 AI 도움을 받았다면 주최 측과 학술지의 규정에 따라 사용 사실과 범위를 밝힌다.
본문의 노란 점선 밑줄과 같은 사전이다. 시리즈 전체에서 같은 표기를 쓴다. 섹션 이름을 누르면 처음 나온 곳으로 간다.
비유는 이해의 첫걸음이지만 오해의 씨앗도 된다. 초파리·뇌 비유에는 강도를 표시했다. 직접 실제로 같은 일을 한다는 근거가 있음 · 부분 일부 성질만 닮음 · 없음 대응하는 것이 알려지지 않음
| 개념 | 일상 비유 | 초파리·뇌 비유 | 비유가 틀리는 지점 |
|---|---|---|---|
| 픽셀 | 모자이크 타일 한 장 | 부분 초파리 겹눈의 낱눈 하나 | 낱눈은 육각형으로 배열되고 밝기 변화에 민감하다. 사진의 픽셀은 네모 격자의 정지된 값이다 |
| 필터 | 특정 무늬만 비춰 보는 돋보기 | 부분 일차시각피질의 방향 선택 세포 [R1] | 뉴런의 수용장은 위치마다 조금씩 다르다. CNN의 필터는 모든 위치에서 완전히 같다 |
| 가중치 공유 | 같은 도장을 종이 곳곳에 찍기 | 부분 초파리 시각계의 같은 종류 뉴런이 시야 전체에 반복 배치된다 | 뇌의 뉴런은 각자 따로 연결 세기를 가진다. 숫자를 "공유"하지는 않는다 |
| 풀링 | 지도를 축소 복사하기 | 부분 위치가 조금 달라도 반응하는 복합 세포 [R1] | 복합 세포가 정확히 최댓값을 고르는 계산을 하는지는 확인되지 않았다 |
| 층 쌓기 | 점 → 선 → 도형으로 그림 그리기 | 부분 시각 경로 V1 → V2 → V4 → 하측두피질 (3-1 섹션 5) | 뇌에는 되먹임 연결이 많고, CNN은 한 방향으로만 흐른다 |
| 펼치기 | 바둑판의 돌을 한 줄로 늘어놓기 | 없음 | 한 줄로 늘어놓으면 "누가 누구의 이웃인가"가 사라진다(섹션 3 ①) |
| 소프트맥스 | 투표 결과를 득표율로 바꾸기 | 없음 | 득표율이 높다고 맞는 답은 아니다. 처음 보는 그림에서는 확신하고 틀릴 수 있다 |
| 픽셀 섞기 | 퍼즐 조각을 정해진 규칙으로 뒤섞기 | 없음 | 사람은 섞인 그림을 거의 못 알아보지만 MLP는 똑같이 학습한다. "사람처럼 본다"는 기준이 모델마다 다르다 |
E-1 저자 소개 · E-2 학술 레퍼런스 · E-3 그림 참고 자료
아래 자료를 구성과 내용의 참고로 삼았다.
강사, 실무 OJT 담당자, 튜터를 위한 운영 안내다. 시간은 예상치이므로 실제 수업에 맞춰 조정한다.
| 대상 | 3-2를 마친 대학생·직장인. 이미지 데이터를 다루는 실무자(검사 영상, 의료 영상, 문서 스캔) |
|---|---|
| 선수 지식 | 3-2의 은닉층·역전파 개념. 곱셈과 덧셈만으로 섹션 5·6의 계산을 따라갈 수 있다 |
| 학습 목표 | ① 사진이 숫자 격자임을 설명하고 MLP가 막히는 이유 네 가지를 든다 ② 합성곱·ReLU·풀링을 손으로 계산한다 ③ CNN이 위치 변화에 "비교적 덜 흔들리지만 완전하지 않다"는 것을 실험 결과로 설명한다 |
| 예상 시간 | 읽기 40~50분 · 애니메이션 시연 25분 · Colab 실습 30분 (코드 1 10분, 코드 2 20분) |
도입 5분(섹션 1 컬러 초파리의 숫자) → 섹션 3 네 가지 이유 10분 → 섹션 5·6 손계산 15분 → 섹션 8 대시보드 15분 → 확인 문제 5분.
섹션 3 ② 가중치 폭발을 우리 회사 이미지 크기로 계산 10분 → 섹션 8 20분(현장 카메라 위치가 바뀌면?) → 코드 2 실습 30분 → "우리 데이터에 필요한 증강은?" 토론 20분 → 프롬프트 카드 10분.
입문자는 섹션 1·3·5·8만. 중급자는 섹션 5의 출력 한 칸을 손으로 계산하게 한 뒤 코드 1의 conv2d 함수와 대조하고, 섹션 7에서 펼치기와 전역 풀링의 파라미터 수를 직접 세게 한다.
| 섹션 | 멈춰서 물어볼 질문 | 조작 팁 |
|---|---|---|
| 1 숫자 격자 | "초파리 눈의 빨강은 세 채널에서 어떤 숫자일까?" | 컬러 초파리에서 빨강·초록·파랑 보기를 차례로 누른다 |
| 2 기존 머신러닝 | "사람이 정한 특징은 왜 옮긴 그림에서 무너질까?" | 깨끗한 그림 → 2칸 옮김 순서로 눌러 정확도 막대를 비교한다 |
| 3 MLP의 한계 | "바로 아래 픽셀은 한 줄에서 몇 칸 떨어질까?" | ② 가중치 폭발에서 1000×1000을 눌러 숫자 크기에 놀라게 한다 |
| 4 CNN의 해법 | "필터를 공유하면 왜 가중치가 사진 크기와 상관없어질까?" | 층 쌓기에서 한 뉴런이 보는 범위가 3 → 4 → 8로 넓어지는 것을 짚는다 |
| 5 합성곱 | "이 자리의 출력이 왜 음수일까?" | 정지하고 "한 칸 이동"으로 식을 함께 읽는다 |
| 6 ReLU·풀링 | "한 칸 옮기면 풀링 전과 후 중 어느 쪽이 덜 바뀔까?" | 원래 그림과 1칸 옮긴 그림을 번갈아 누른다 |
| 7 확률까지 | "펼치기와 전역 풀링 중 어느 쪽이 위치에 덜 민감할까?" | "2칸 옮긴 +"를 고른 뒤 두 방법을 번갈아 본다 |
| 8 비교 대시보드 | "가운데 그림에서는 누가 이기고, 옮긴 그림에서는 누가 이기나?" | 위치 옮기기를 먼저 보고, 픽셀 섞기로 바꿔 결과가 뒤집히는 것을 본다 |
| 오해 | 바른 설명 | 보여 줄 장면 |
|---|---|---|
| CNN은 위치가 바뀌어도 똑같이 알아본다 | 비교적 덜 흔들릴 뿐이다. 많이 옮기면 정확도가 떨어지고, 큰 CNN도 몇 픽셀 이동에 답이 바뀔 수 있다 | 섹션 8 위치 옮기기, 섹션 6 |
| CNN이 MLP보다 언제나 정확하다 | 이 페이지처럼 그림이 늘 같은 자리에 있으면 MLP가 더 높기도 하다. CNN의 장점은 파라미터 효율과 이동에 대한 견고함이다 | 섹션 8의 0칸 정확도 |
| 필터는 사람이 정한다 | 섹션 5의 필터는 설명용이다. 실제 CNN은 필터 숫자를 역전파로 배운다 | 섹션 7의 학습된 지도 |
| 풀링은 정보를 늘린다 | 풀링은 숫자를 줄이며 정보를 버린다. 대신 작은 이동을 흡수하고 계산을 줄인다 | 섹션 6의 4×4 → 2×2 |
| CNN은 뇌의 시각피질과 같다 | 단순·복합 세포에서 착안했지만 학습 방법과 연결 구조가 다르다 | 공통 섹션 D의 "부분" 표시 |
224 × 224 × 3 = 150,528개 입력 × 1,000 = 150,528,000개(약 1억 5천만 개). 3×3 컬러 필터 64개짜리 합성곱 층은 3 × 3 × 3 × 64 = 1,728개(편향 포함 1,792개)다.
(6 − 3 + 1) × (6 − 3 + 1) = 4×4.
겹친 조각의 둘째 줄이 [0, 3, 3]이고 필터의 각 줄은 [1, 0, −1]이다. 0×1 + 3×0 + 3×(−1) = −3. 첫째·셋째 줄은 모두 0이라 더해도 −3이다.
최대 6, 평균 (6 + 3 + 0 + 3) / 4 = 3.
CNN이다. CNN은 "가까운 픽셀끼리 관련 있다"는 가정을 구조(3×3 필터, 풀링)에 담았는데, 섞으면 가까운 칸이 아무 관계 없는 픽셀이 된다. MLP는 원래 픽셀 사이의 위치 관계를 쓰지 않으므로 섞어도 거의 같다. 이미 학습한 모델에 섞은 그림을 넣는 것이 아니라, 섞은 데이터로 처음부터 학습한다는 조건이 중요하다.
코드 1의 FILTERS에 대각선 가장자리 필터를 하나 추가하고, 6×6 "7"에서 어느 칸이 가장 크게 반응하는지 찾아 그 이유를 두 문장으로 쓴다.
코드 2의 학습 데이터에 1~2칸 옮긴 그림을 섞는다(데이터 증강). 두 모델의 0~3칸 정확도가 어떻게 바뀌는지 표로 정리하고, "구조로 얻는 견고함"과 "데이터로 얻는 견고함"을 비교한다.
| 입문자 | 섹션 2와 섹션 7은 건너뛰어도 흐름이 끊기지 않는다. 섹션 8은 결과 막대만 함께 읽는다 |
|---|---|
| 심화 | 섹션 4 층 쌓기의 수용장 계산(3 → 4 → 8)을 일반식으로 정리하게 한다. 섹션 6의 한계를 [R6] 논문의 표와 연결해 토론한다 |
| 더 배우기 | 안상선, 「비즈니스를 위한 데이터 과학」 강의안 (데이터 과학 전반) · STEP [K-디지털] 인공지능 자연어 처리 (3-5·3-8과 연결) · STEP [K-디지털] 핀테크 데이터 분석 기초 (3-6과 연결) |
| 강사용 자료 | 확인 문제의 채점 기준과 과제 예시 답안은 교육자용 정답 페이지 (3-3)에서 볼 수 있다 |
「3-3 이미지와 CNN」 편을 끝까지 읽었어요. 연구실 식구들이 한마디씩 정리해 드립니다.