입력 이미지의 텐서 표현
합성곱 신경망에서 입력 이미지는 픽셀값을 성분으로 가진 텐서로 표현된다.
텐서의 차원은 케라스 기준 (배치 크기, 높이, 너비, 채널 수)이다. (NHWC)
사이즈가 W*H이고 C개의 채널을 가진 이미지 N장을 처리한다는 뜻이다.
파이토치의 경우 NCHW와 같이 채널 수가 사이즈 앞으로 온다.
e.g.) 100장의 1280*720 컬러 이미지 (RGB)를 처리할 때의 텐서 표현은 케라스 기준 (100, 720, 1280, 3)이고, 파이토치 기준 (100, 3, 720, 1280)이다.
일상생활에서 이미지의 사이즈는 너비높이인 반면, 신경망에서 사이즈는 높이너비로 표현된다. 한 장의 이미지는 행렬로 표현할 수 있는데 높이 = 행의 길이, 너비 = 열의 길이여서 그런 것 같다.
일반적으로 픽셀값은 0~255의 정수로 표현되고 값이 높을 수록 밝은 색상인데, 딥러닝에서는 이를 정규화 (255로 나누기)하여 0~1의 값을 사용한다.
합성곱 층
합성곱 층은 일정한 규칙에 따라 커널을 움직이며 특성맵 (출력)을 계산한다.
기본적인 인공신경망의 밀집층과 비슷하게 먼저 선형합을 계산하고 활성화 함수를 적용하여 출력을 계산한다.
합성곱 층은 일반적인 밀집층과 다르게, 입력과 출력의 2d 구조를 유지하는 것이 장점이다. 따라서 2d 구조가 필요한, 특히 이미지 처리에서 많이 쓰인다.

옵션: 커널 개수, 커널 크기, 스트라이드, 패딩
합성곱 층에서 커널 개수, 커널 크기, 스트라이드, 패딩 등의 옵션 (하이퍼파라미터)을 설정할 수 있다.
케라스 코드:
keras.layers.Conv2D(
filters=10, # 커널 개수
kernel_size=(3,3), # 커널 크기
strides=1, # 스트라이드
padding='same', # 패딩
activation='relu', # 활성화 함수
use_bias=True # 절편 포함
)
이 옵션들은 특성맵의 차원 = (높이, 너비, 채널 수)에 영향을 준다.
커널 개수 = 특성맵의 채널 수
여러 개의 커널을 사용하면 여러 채널의 특성맵이 차곡차곡 쌓인다.

커널 크기, 스트라이드 증가 → 특성맵 사이즈 감소
커널 크기는 (세로 크기, 가로 크기)로 표현되며 커널이 클 수록 움직일 공간이 줄어들어 특성맵의 크기가 작아진다. 세로 크기와 가로 크기가 같을 경우 커널 크기 = 크기와 같이 하나의 수로 설정한다.
합성곱 층에서 커널을 움직이는 거리를 스트라이드라고 한다. 스트라이드가 클 수록 특성맵의 크기가 작아진다. (세로 이동폭, 가로 이동폭) 처럼 이동폭을 각각 설정할 수 있는데 이런 경우는 거의 드물고, 일반적으로 스트라이드 = 이동폭으로 각 방향의 이동폭을 통일한다.

세임 패딩: 특성맵 사이즈 감소 방지
패딩을 사용하면 입력 이미지 주위에 0을 채워서 커널이 움직일 공간을 확보한다.
적절한 패딩은 특성맵이 줄어드는 것을 방지한다. 특히 입력과 특성맵의 크기가 같을 경우 세임패딩이라고 한다. 패딩을 사용하지 않는 것을 밸리드 패딩이라고 한다.
다음 공식을 사용해서 적절한 패딩 수를 지정할 수 있으나 일반적으로 세임 패딩 옵션을 사용하면 자동으로 계산된다.
패딩은 특성맵의 크기를 보존하는 역할 외에도, 경계 부분의 정보 손실을 방지하는 역할을 한다.
패딩이 없으면 이미지의 경계에 위치한 픽셀은 특성맵 계산에 적게 참여하기 때문이다.

기타 옵션
활성화 함수를 지정하거나 절편항을 없앨 수 있다.
활성화 함수는 일반적인 신경망처럼 렐루를 많이 쓴다. (기울기 소실 방지)
파라미터 개수
하나의 합성곱 층에서 모델이 학습해야 할 파라미터 개수는 총
: 커널 높이, 커널 너비. 즉, 커널의 사이즈. : 입력 채널 수 (RGB 이미지의 경우 3). : 출력 채널 수 (커널의 개수)
특성맵 한 개의 출력 픽셀 하나를 만들기 위해,
특성맵이
파라미터 공유
합성곱 신경망은 여러 개의 출력 뉴런 (픽셀)을 한 세트 (한 장의 특성맵)로 생각한다. 그리고 같은 세트 (특성맵)에서 서로 다른 출력 픽셀은 가중치와 절편을 공유한다.
따라서 합성곱 신경망을 사용하면 같은 객체 (예: 개, 고양이)가 이미지 내에서 위치가 바뀌어도 동일한 특징이 감지된다. 일반적인 신경망에서는 공간적 구조가 무시되며, 특정 위치에서 같은 특징이 나타나더라도 다른 파라미터가 적용되므로 이를 학습하기 어렵다.
풀링 층

풀링 층에서는 합성곱 층에서 얻은 특성맵의 픽셀 값을 요약한다. 자주 쓰이는 풀링으로 최대치 풀링과 평균 풀링이 있다.
(1) 최대치 풀링은 특성맵 픽셀값의 최대치를 계산하고, 경계선과 같은 중요한 특징을 강조한다.
(2) 평균 풀링은 평균을 계산하여 전체적인 정보를 부드럽게 요약하여 노이즈를 제거한다.
일반적으로 최대치 풀링을 사용한다.
풀링도 커널과 마찬가지로 크기와 스트라이드가 있다. 풀링의 스트라이드는 기본적으로 크기와 같게 설정하여 풀링 계산에 참여하는 픽셀이 중복이 없도록 한다.
풀링의 목적 중 하나가 각 특성맵의 크기를 줄이는 것 (다운 샘플링)이고, 입력 이미지와 달리 특성맵에서 경계 부분 손실은 고려하지 않아도 되므로, 일반적으로 패딩은 사용하지 않는다.
풀링을 적용한 후 특성맵의 채널 수는 변하지 않는다.
최근에는 풀링 층 없이 합성곱 층에서 스트라이드의 크기를 늘려 다운 샘플링하는 경우도 많다.