3장 — 합성곱: 이웃만 보는 MLP

자주 하는 실수와 요약

자주 하는 실수

실수 나온 문제 바로잡는 법
평균을 내도 갑자기 바뀐 곳이 그대로 보인다고 봄 1 합이 1인 커널은 경계를 커널 폭만큼 비탈로 흐린다. 바뀐 곳을 찾으려면 합이 0인 차이 커널을 쓴다
수학의 합성곱과 신경망의 합성곱이 같다고 봄 2 수학은 커널을 뒤집어 건다(x[i − j]). 신경망 라이브러리는 뒤집지 않는다(교차 상관). 좌우가 같은 커널만 결과가 같다
잡음을 걷는 커널 하나를 모든 잡음 수준에 씀 3 잡음이 클수록 넓고 합이 작은 커널이 맞다. 다른 수준의 커널은 아무것도 안 하느니만 못할 수 있다. 신경망은 잡음 수준을 알아야 한다
칸마다 따로 배우는 쪽이 늘 더 꼼꼼하다고 봄 4 자리마다 규칙이 같다면 공유한 쪽이 같은 데이터로 자리 수만큼 더 많이 배운다
이웃만 보면 「옮기면 옮겨진다」가 저절로 생긴다고 봄 5 그 성질은 같은 커널을 나눠 쓰는 데서 온다. 자리마다 다른 커널이면 깨진다
공유한 층의 매개변수에서 치우침을 빼먹음 6, 11 치우침을 단위마다 두는지 채널마다 두는지 확인하고 더한다
수용 영역 안의 칸이 모두 비슷하게 중요하다고 봄 7, 9 이론상 폭은 층 수에 비례하지만 실제로 기대는 폭은 층 수의 제곱근에 비례한다
다채널 층의 가중치를 셀 때 채널 수를 한 번만 곱함 8 커널 한 칸이 입력 채널 하나와 출력 채널 하나를 잇는다. k² × Cin × Cout
팽창 간격을 크게만 늘리면 된다고 봄 8 간격이 너무 빨리 커지면 수용 영역 안에 아무도 보지 않는 칸이 생긴다
1 × 1 합성곱은 이웃을 안 보니 쓸모가 없다고 봄 11 칸마다 같은 MLP 층이다. 채널끼리 섞는다
입출력 채널을 맞바꾸면 매개변수도 같다고 봄 12 가중치는 같지만 치우침은 출력 채널 수만큼이다
매개변수가 적으면 계산할 값도 적다고 봄 12 합성곱 출력은 칸마다 채널 수만큼 값이 있다. 첫 층 출력이 입력의 80배다

요약

이웃에 같은 비율을 곱해 더하는 계산이 합성곱이고, 곱하는 비율의 묶음이 커널이다. 그림을 흐리게 하던 이웃 평균도 커널 [¼, ½, ¼]의 합성곱이었고, 비율만 바꾸면 윤곽을 찾거나 잡음을 걷는 커널이 된다. 커널을 가중치로 두면 학습으로 정할 수 있다. 모든 자리가 같은 커널을 쓰는 가중치 공유 덕분에 매개변수 수는 그림 크기와 상관없어지고, 입력을 옮기면 출력도 그만큼 옮겨져 한 자리에서 배운 것을 다른 자리에서도 쓴다. 커널을 층층이 쌓으면 출력 한 칸이 보는 수용 영역은 층 수에 비례해 넓어지지만, 실제로 기대는 폭은 층 수의 제곱근으로만 자란다. 칸마다 수가 여러 개면 채널로 다루며, 합성곱 층은 칸마다 이웃의 모든 채널 값을 펴서 같은 행렬을 곱하는, 이웃만 보는 MLP다.

flowchart LR
  A["MLP<br/>출력 칸마다 입력 전부에 따로 가중치"] --> B["이웃만 잇기<br/>k × k 이웃만 본다"]
  B --> C["가중치 공유 = 합성곱<br/>모든 자리가 같은 커널"]
  C --> D["채널<br/>칸마다 여러 특징, C_out(C_in·k² + 1)"]
  C --> E["층 쌓기<br/>수용 영역 1 + L(k − 1)"]
  E --> F["실제로 기대는 폭은 √L<br/>멀리 보기 어렵다"]
  C --> G["잡음 걷는 커널<br/>잡음 수준마다 다르다"]

막힌 곳

이제 그림 크기와 상관없는 적은 매개변수로 그림을 받아 그림을 내놓는 층을 만들 수 있다. 같은 커널을 모든 자리에서 쓰니 한 자리에서 배운 것이 다른 자리에서도 통하고, 칸마다 여러 특징을 채널로 함께 다룬다.

그런데 작은 커널을 그림 크기 그대로 쌓기만 해서는, 출력 한 칸이 실제로 기대는 폭이 층 수의 제곱근으로만 넓어졌다. 가로세로 64칸 그림의 양 끝을 함께 보려면 어떻게 해야 할까? 또 잡음을 걷는 가장 좋은 커널은 잡음 수준마다 달랐다. 그림과 함께 잡음 수준을 신경망에 어떻게 알려 줄까? 그리고 흐리게 하는 커널은 수 몇 개로 끝났다. 그 반대로 흐린 그림을 원래대로 되돌리는 커널도 수 몇 개로 만들 수 있을까?