이미지를 보는 눈, CNN
앞에서 신경망이 뉴런을 층층이 쌓아 복잡한 패턴을 배우는 걸 봤어요. 그런데 사진 한 장에는 점이 수만 개나 있어요. 이걸 그냥 한 줄로 펼쳐서 신경망에 넣으면 너무 많고, 같은 고양이라도 위치만 바뀌면 전혀 다른 입력이 돼요. 그래서 사람 눈처럼 작은 부분을 훑어보며 특징을 찾는 방법이 나왔어요. 이게 이미지를 보는 신경망, CNN이에요.
사진은 사실 숫자 격자예요
우리 눈에는 그냥 그림으로 보이죠.
그런데 컴퓨터한테 사진을 주려면
결국 숫자로 바꿔야 해요.
사진을 아주 가까이 들여다보면
작은 점, 픽셀이 격자처럼 빼곡해요.
각 점은 밝기를 숫자 하나로 들고 있어요.
밝은 점은 큰 수, 어두운 점은 작은 수예요.
그러니까 사진 한 장은
밝기 숫자가 칸칸이 들어찬 격자인 셈이에요.
그림을 눌러 확대해봐요. 가까이 보면 작은 점마다 밝기 숫자가 들어 있어, 사진이 사실은 숫자 격자임을 알 수 있어요.
확대하니 숫자가 보였죠.
밝은 칸은 큰 수, 어두운 칸은 작은 수예요.
사람이 보면 한눈에 모양이 보이지만
컴퓨터에겐 그냥 숫자가 잔뜩 있는 표예요.
그럼 이 많은 숫자 속에서
모서리나 곡선 같은 특징을
어떻게 찾아낼 수 있을까요?
한꺼번에 다 보긴 너무 많으니
작은 부분부터 차근차근 살펴봐요.
작은 필터로 특징을 찾아요
특징을 찾는 도구가 바로 필터예요.
필터는 격자보다 훨씬 작은 작은 판이에요.
돋보기를 한 군데 대보는 것과 비슷해요.
예를 들어 세로 모서리를 찾는 필터는
왼쪽은 어둡고 오른쪽은 밝은 무늬를 좋아해요.
필터를 이미지 한 칸에 대고
그 자리 숫자들과 얼마나 잘 맞는지 따져요.
무늬가 딱 맞으면 점수가 높고,
안 맞으면 점수가 낮아요.
필터를 격자의 여러 칸에 대보며 점수를 봐요. 필터 무늬(왼쪽 어둠, 오른쪽 밝음)와 닮은 자리는 점수가 높아, 그 자리에 세로 모서리가 있다는 뜻이에요.
필터를 대본 자리마다 점수가 달랐죠.
무늬가 딱 맞는 자리는 점수가 높았어요.
바로 거기에 세로 모서리가 있다는 뜻이에요.
중요한 건 한 가지예요.
같은 필터를 어느 자리에 대든
같은 특징을 찾는다는 거예요.
그러니 모서리가 그림 왼쪽에 있든
오른쪽에 있든 다 잡아낼 수 있어요.
그럼 한 자리만 보지 말고 전부 훑어봐요.
필터를 훑으며 특징 지도를 만들어요
이제 필터를 한 칸씩 옮겨봐요.
왼쪽 위에서 시작해
한 칸 오른쪽으로, 또 한 칸 오른쪽으로.
끝까지 가면 한 줄 내려와
다시 왼쪽부터 훑어요.
자리마다 점수를 적어 두면
점수들이 모여 새 작은 격자가 돼요.
이게 특징 지도예요.
어디에 그 특징이 강한지 한눈에 보이죠.
필터를 눌러 한 칸씩 훑어봐요. 자리마다 점수가 오른쪽 특징 지도에 채워져요. 필터가 다 지나가면 그 특징이 어디에 강한지 지도로 드러나요.
필터가 격자를 다 훑고 지나갔죠.
점수들이 모여 특징 지도가 됐어요.
원래 사진보다 작지만
그 특징이 어디 있는지 또렷이 보여요.
필터 하나는 한 가지 특징만 찾아요.
그래서 실제로는 여러 필터를 함께 써요.
세로 모서리, 가로 모서리, 곡선 같은
서로 다른 특징을 동시에 찾는 거예요.
그런데 이건 아직 작은 특징일 뿐이에요.
층을 올릴수록 더 큰 특징
특징 지도를 한 번 더 필터로 훑으면
작은 특징들이 모여 더 큰 특징이 돼요.
앞 층은 점과 모서리 같은 작은 조각을,
그 위 층은 모서리를 모아 눈이나 코를,
더 위 층은 눈코입을 모아 얼굴 전체를 봐요.
신경망에서 층을 쌓던 것과 똑같아요.
다만 여기선 층마다 필터로 훑는다는 점이 달라요.
그래서 층을 올릴수록
점점 더 추상적인 특징을 잡아요.
버튼을 눌러 층을 한 단계씩 올려봐요. 모서리에서 시작해 눈과 코 같은 부분으로, 다시 얼굴 전체로 추상도가 점점 높아져요.
층을 올릴 때마다 보는 것이 커졌죠.
모서리에서 눈코로, 다시 얼굴로요.
낮은 층은 작고 단순한 조각을 보고,
높은 층은 그 조각들을 모아 의미 있는 모양을 봐요.
사람이 사물을 알아보는 것과 비슷해요.
선을 보고, 부분을 알아보고, 전체를 아는 거죠.
이렇게 작은 필터로 훑어 특징을 찾고
그 층을 쌓아 추상도를 올리는 게
바로 이미지를 보는 CNN의 솜씨예요.
정리해볼까요
한 줄로 모으면 이래요.
사진은 사실 밝기 숫자가 들어찬 격자예요.
CNN은 작은 필터, 돋보기를 한 칸에 대고
그 특징이 있는지 점수를 매겨요.
같은 필터를 격자 위로 훑으면
특징이 어디에 있든 찾아내는 특징 지도가 돼요.
이런 층을 여러 겹 쌓으면
모서리에서 눈코로, 다시 얼굴로
점점 추상적인 특징을 잡아요. 이게 CNN이에요.
핵심을 차례로 눌러 되짚어봐요. (사진은 숫자 격자 -> 작은 필터로 특징 점수 -> 훑어서 특징 지도 -> 층을 올릴수록 추상적인 특징)
이제 컴퓨터가 어떻게 그림을 보는지 알게 됐어요.
사진을 숫자 격자로 바꾸고,
작은 필터로 훑어 특징을 찾고,
층을 쌓아 추상도를 점점 올리는 거죠.
위치가 바뀐 고양이도 같은 필터로 척 찾아내요.
돋보기로 훑어 특징을 모으는 이 단순한 아이디어가
사진을 알아보는 똑똑한 기계의 바탕이에요.
다음엔 이렇게 본 것을
어떻게 글이나 소리에도 적용하는지 이어서 살펴봐요.