합성곱 신경망
- 구성
- 합성곱층(Convolution layer)
- 풀링층(Pooling layer)
합성곱 신경망 이전
- 매트릭스 데이터를 컴퓨터에게 학습시킬 경우
- 다층 퍼셉트론을 사용해야함
- 2차원 매트릭스를 1차원 벡터로 변환해야함
- 공간적인 구조 정보 유실 -> 제대로된 결과가 안나옴
- 합성곱 신경망이 나오게됨
합성곱 연산
- 커널(필터)이 이미지를 처음부터 끝까지 겹치며 훑음
- 겹쳐지는 부분의 각 이미지와 커널의 원소값을 곱함
- 그 곱한 것들을 다 더함
- 이미지의 왼쪽 위부터 오른쪽 아래까지
\[input = \begin {pmatrix}
1 & 2 & 3 & 4 & 5 \\
2 & 1 & 0 & 1 & 2 \\
3 & 0 & 1 & 1 & 0 \\
1 & 4 & 1 & 1 & 2 \\
2 & 1 & 1 & 0 & 0
\end {pmatrix} \;,\;
kernel = \begin {pmatrix}
1 & 0 & 1 \\
1 & 0 & 1 \\
0 & 1 & 0
\end {pmatrix} \\
featuremap = \begin {pmatrix}
6 & 9 & 11 \\
10 & 4 & 4 \\
7 & 7 & 4
\end {pmatrix} \\
featuremap_{1, 1} = (1 \times 1) + (2 \times 0) + (3 \times 1) + \\ (2 \times 1) + (1 \times 0) + (0 \times 1) + \\
(3 \times 0) + (0 \times 1) + (1 \times 0) \;=\; 6\]
- 커널의 크기는 보통 3 X 3 내지는 5 X 5
- stride : 커널의 이동 범위
패딩(Padding)
- 특성맵은 입력에 비해 크기가 현저히 작아짐
- 위의 예시에서도 5 X 5에서 3 X 3으로 작아짐
- 합성곱층을 여러개 쌓을 경우 최종 특성맵은 매우 작아지게 됨
- 이런 문제를 패딩으로 방지
- 입력 가장자리에 지정된 폭만큼 행과 열을 추가
- 주로 값을 0으로 채우는 제로패딩 사용
- 이 방법으로 특성맵이 지나치게 작아지는 것을 방지
가중치와 편향
가중치
- CNN에서 가중치는 커널의 원소
- 가중치가 다층 퍼셉트론에 비하면 적음
- 활성화함수 : 비선형성을 추가하기 위해 사용
- 합성곱층에선 ReLU()함수나 이 함수의 변형들이 주로 사용
편향
특성맵의 크기 계산
- 입력의 크기, 커널의 크기, 스트라이드를 알면 특성맵의 크기를 구할 수 있음
\[O_h = floor(\frac{I_h - K_h}{S} + 1) \\ O_w = floor(\frac{I_w - K_w}{S} + 1)\]
- h가 붙은 것은 높이, w가 붙은 것은 너비
- O는 특성맵, I는 입력, K는 커널, S는 스트라이드
- floor함수 : 소수점 이하를 버림
- 예시
- 입력 : 5 X 5, 커널 : 3 X 3, 스트라이드 : 1
- 특성맵의 크기 = (5 - 3 + 1) X (5 - 3 + 1) = 3 X 3
다수의 채널을 가질 경우 합성곱 연산
- 각 채널마다 합성곱 연산
- 그 결과를 더해준다
- 예시
\[ch1 = \begin {pmatrix}
1 & 2 & 0 \\
0 & 0 & 1 \\
1 & 0 & 5
\end {pmatrix} \;,\;
ch2 = \begin {pmatrix}
1 & 2 & 3 \\
3 & 1 & 0 \\
0 & 1 & 0
\end {pmatrix} \;,\;
ch3 = \begin {pmatrix}
1 & 2 & 3 \\
2 & 1 & 0 \\
3 & 0 & 1
\end {pmatrix} \\
kernel1 = \begin {pmatrix}
1 & 0 \\
0 & 1
\end {pmatrix}
kernel2 = \begin {pmatrix}
1 & 1 \\
1 & 0
\end {pmatrix}
kernel3 = \begin {pmatrix}
0 & 0 \\
0 & 1
\end {pmatrix}\\
fm1 = \begin {pmatrix}
1 & 3 \\
0 & 5
\end {pmatrix}
fm2 = \begin {pmatrix}
6 & 6 \\
4 & 2
\end {pmatrix}
fm3 = \begin {pmatrix}
1 & 0 \\
0 & 1
\end {pmatrix} \\
featuremap = \begin {pmatrix}
8 & 9 \\
4 & 8
\end {pmatrix}\]
- 여기서 사용되는 커널은 3개의 채널을 가진 1개의 커널
3차원 텐서의 합성곱 연산

- 3차원 텐서의 합성곱 연산 후 특성맵의 채널은 1임

- 위 이미지는 커널을 여러개 사용하는 경우
- 사용된 커널의 수는 특성맵의 채널이 됨
- 이 경우 Ci와 C0가 주어졌을 때 가중치 매개변수의 수를 구할 수 있음
- 합성곱층에서 가중치 : 커널의 원소
- 커널의 크기 : Ki X Ko
- 커널의 크기(채널도 포함) : Ki X Ko X Ci
- 커널의 개수도 포함 : Ki X Ko X Ci X Co
\[가중치 \,\ 매개변수의 \,\ 총 \,\ 수 \;=\; K_i \times K_o \times C_i \times C_o\]
풀링
- 일반적으로 합성곱층 이후 풀링층을 추가
- 풀링층에선 특성맵을 다운샘플링
- 커널과 스트라이드 개념 다 있음
- 풀링 연산
- maxpooling : 특성맵과 커널이 겹치는 원소들 중 최댓값만 뽑아냄
- averagepooling : 특성맵과 커널이 겹치는 원소들의 평균 추출
합성곱 연산과 풀링의 차이