[CS231n] 강의5. Convolutional Neural Networks 리뷰
본 글은 2021년 4월에 강의한 스탠포드 대학의 “Convolutional Neural Networks for Visual Recognition” 2021년 강의를 듣고 정리한 내용입니다. 개인 공부 목적으로 작성되었으며, 설명이 맞지 않거나 글 오타가 있으면 알려주시길 바랍니다.
- 원본 링크 : cs231n.stanford.edu
- 한글 번역 링크 : aikorea.org - cs231n
- 강의 링크 : youtube - 2017 Spring (English)
Convolutional Neural Networks

- 다음 그림은 FC(fully-connected layer)이다. 입력 이미지는 32x32x3 이며, 이를 길게 늘려서 3072x1(3072차원) 벡터로 만들었다.
- 여기에 10x3072 크기의 가중치 $W$와 곱하여(10x3072 × 3072x1 -> 10x1) activation을 얻는다.
- activation은 10개의 행으로 되어 있고, $Wx$의 행렬곱(내적) 결과이다.
- 하나의 점은 $W$의 각 행과 입력 벡터 사이의 내적 결과를 의미한다.

- 합성곱 층(Convolution Layer)1
- 합성곱 층은 기존의 공간(spatial) 구조를 보존하며 연산한다.
- 기존의 FC 층이 입력 이미지를 1차원 벡터로 길게 늘렸다면, 합성곱 층은 이미지의 다차원 격자 구조를 그대로 유지하는 것이 차이점이다.
- 위의 그림에서 5x5x3 필터(filter)는 학습 대상인 가중치 $W$가 된다.
- 이 필터가 이미지를 슬라이딩(sliding)하면서 공간적으로 내적(dot product)을 수행한다.
- 필터의 깊이(depth)는 항상 입력의 전체 깊이(채널 수)만큼 확장된다.

- 필터의 크기가 5x5x3이므로 가중치 75개(편향 1개를 더하면 76개 파라미터)에 대해 입력의 국소 영역과 75회의 곱셈 및 편향 덧셈 연산을 수행한다.

이미지 출처 2
- 합성곱(convolution)은 필터가 이미지의 좌측 상단부터 슬라이딩하면서 연산한다.
- 필터의 모든 요소들이 내적을 수행하게 되면 하나의 스칼라 값을 얻는다.
- 공간 전체를 슬라이딩하며 이 과정을 반복한다.
- 이렇게 나온 값들을 2차원 격자로 배열하여 활성화 맵(activation map)을 구성한다.

- 또 다른 필터(파란색 다음 초록색 필터)를 이용하여 위 과정을 반복한다.
- 그럼 또 다른 같은 크기의 activation map을 얻게 된다.
- 여러 개의 필터를 이용하는 이유는 각 필터마다 서로 다른 특징을 추출하기 위해서이다.

- 위 그림에서는 5x5x3 필터를 6개 사용한 결과이다.

- CNN은 보통 여러 합성곱 층과 비선형 활성화 함수가 교대로 연결된 구조를 이룬다.
- 따라서 다음 층으로 넘어가기 전에 비선형 활성화 함수(예: ReLU)를 적용하여 모델의 비선형 표현력을 확보한다.
- 각 레이어는 여러 개의 필터를 보유하며, 각 필터마다 독립적인 activation map을 생성한다.

- 입력에 가까운 앞쪽 계층의 필터들은 에지나 색상 대비 같은 저수준 특징(low-level feature)을 주로 학습한다.
- 네트워크가 깊어질수록 고수준 계층에서는 객체의 부분이나 전체 형태(예: 강아지 형태)와 같은 복합적인 추상 특징을 학습한다.
- 이는 레이어가 깊어질수록 수용 영역이 확장되며 계층적 특징 추출(hierarchical feature representation)이 이루어짐을 의미한다.
- 여러 개의 필터 가중치는 역전파(backpropagation) 알고리즘을 통해 손실을 최소화하는 방향으로 반복 학습된다.
Spatial Dimensions

- 공간 차원(Spatial Dimensions)은 입력 크기 $N$, 필터 크기 $F$, 스트라이드(stride) $S$, 패딩(padding) $P$의 기하학적 관계에 의해 결정된다.
- 위의 이미지를 보았을 때 7x7 입력에 3x3 필터가 적용되는 것을 확인할 수 있다.
- 필터는 가로 및 세로 방향으로 슬라이딩하며 내적 값들을 얻는다.
- stride가 1일 경우: $(7 - 3)/1 + 1 = 5$이므로 5x5 activation map을 얻는다.
- stride가 2일 경우: $(7 - 3)/2 + 1 = 3$이므로 3x3 activation map을 얻는다.
- 하지만 stride가 3일 때는 $(7 - 3)/3 + 1 = 2.33\dots$으로 정수로 나누어떨어지지 않아 대칭적인 격자 연산을 구성할 수 없다.
- 일반적인 출력 크기(output size) 공식은 다음과 같다:
- 출력 크기(output size) = (N - F)/stride + 1

- 제로 패딩(zero padding)은 출력 크기가 지나치게 축소되는 것을 방지하거나 이미지 경계부의 공간 정보를 보존하기 위해 사용된다.
- 이미지의 가장자리에 0을 채워 넣는다.
- 제로 패딩 $P$를 포함한 출력 크기 공식은 다음과 같다:
- 출력 크기 = (N + 2P - F)/stride + 1
Summary
- 입력이 $W_1\times H_1\times C$라고 가정하고,
- 합성곱 층이 4개의 하이퍼파라미터를 요구한다고 하자:
- $K$ : 필터의 수
- $F$ : 필터 공간 크기(spatial extent)
- $S$ : 스트라이드(stride)
- $P$ : 제로 패딩(zero padding) 크기
- 출력 텐서의 크기 $W_2\times H_2\times K$는 다음과 같이 결정된다:
- $W_2=(W_1 - F + 2P)/S + 1$
- $H_2=(H_1 - F + 2P)/S + 1$
- 학습 대상 파라미터(가중치)의 수는 다음과 같이 계산한다:
- 필터당 가중치 $F \times F \times C$개에 편향 1개가 더해지므로, 총 파라미터 수는 $K \times (F^2 \cdot C + 1)$이다.
The brain/neuron view of CONV layer

- 합성곱 층을 뇌의 시각 피질 뉴런 관점에서 해석할 수 있다.
- 입력 $x$가 들어오면 가중치 $w$와 국소적으로 곱하여 하나의 활성값을 출력한다.
- 합성곱 뉴런은 국소 연결성(local connectivity)을 지닌다.3
- 이미지와 같은 고차원 입력을 다룰 때, 모든 뉴런이 이전의 모든 뉴런과 연결되는 완전 연결(FC) 방식은 파라미터 수가 급증하여 비효율적이다.
- 따라서 레이어의 각 뉴런은 입력 데이터의 국소적인 공간 영역에만 연결된다.
- 이 영역을 수용 영역(receptive field)이라 부른다.
- 각 뉴런은 입력의 국소 영역에만 연결되어 해당 영역의 신호를 처리하고, 이러한 뉴런들이 공간 격자 형태로 모여 전체 이미지를 처리한다.
- 이 공간 구조가 보존되어 2차원 activation map을 구성한다.

- activation map은 $28\times 28$개의 뉴런이 2차원 격자로 배열된 시트이다.
- 특징:
- 각 뉴런은 입력의 작은 국소 수용 영역에 연결된다.
- 동일한 activation map을 구성하는 모든 뉴런은 가중치 매개변수를 공유(parameter sharing)한다.

- 예를 들어 5개의 필터가 있는 합성곱 계층은 깊이 방향으로 5개의 서로 다른 뉴런이 입력의 동일한 국소 수용 영역을 바라보며 각기 다른 특징을 추출한다.
- 계층이 깊어질수록 뉴런의 유효 수용 영역(effective receptive field)이 넓어지며, 최종 FC 층에 이르러 각 뉴런이 전체 입력 정보를 종합하여 클래스 점수를 산출한다.
Pooling layer

- 풀링 층(pooling layer)은 각 활성화 맵(activation map)에 대해 독립적으로 공간적 크기를 축소하여 연산량과 메모리 부담을 줄여준다.
- 파라미터 수를 늘리지 않고 공간 차원을 압축하여 과적합 위험을 완화한다.
- 작은 위치 변화에 대한 공간적 불변성(translation invariance)을 확보한다.
- 특징 맵을 다운샘플링(downsampling)하여 공간 차원을 줄여준다.
- 다운샘플링(downsampling) : 공간 격자의 해상도를 줄여 데이터의 크기를 압축하는 처리 과정이다.4
Max pooling

- 해당 풀링 윈도우(kernel) 영역 내에서 최댓값을 선택하여 대표값으로 추출한다.
- 주로 $2\times 2$ 필터와 stride 2를 사용하여 특징 맵의 가로·세로 해상도를 각각 절반으로 줄인다.
Summary
- $W_1\times H_1\times C$ 입력이 있고,
- 풀링 층은 2개의 하이퍼파라미터를 설정한다:
- $F$ : 풀링 윈도우의 공간 범위(spatial extent)
- $S$ : 스트라이드(stride, 일반적으로 2를 사용)
- 연산 후 $W_2\times H_2\times C$ 크기의 출력값을 얻는다:
- $W_2=(W_1 - F)/S + 1$
- $H_2=(H_1 - F)/S + 1$
- 풀링은 고정된 연산 규칙(최댓값 추출)만 적용하므로 학습 대상 파라미터의 수는 0이다.
한계 및 트레이드오프
- 공간 해상도 축소와 미세 위치 정보 손실: 스트라이드 합성곱과 최대 풀링을 통한 연속적인 다운샘플링은 수용 영역을 넓히고 연산량을 줄이지만, 픽셀 단위의 미세한 경계 및 위치 정보가 비가역적으로 손실된다. 이는 객체 검출(Detection)이나 시맨틱 분할(Semantic Segmentation) 등 정밀한 위치 예측이 필요한 하류 태스크에서 디테일 복원의 부담을 야기한다.
- 메모리 점유율과 역전파 병목: 가중치 공유 기법으로 모델의 파라미터 수는 FC 층에 비해 크게 감소하지만, 역전파 과정에서 가중치 그래디언트를 계산하기 위해 순전파 시 생성된 고해상도 중간 활성화 맵 전체를 메모리에 유지해야 하므로 심층 신경망에서 GPU 메모리 점유율이 급증한다.
- 기하학적 변형에 대한 취약성: 풀링을 통해 미세한 평행 이동(translation)에 대해서는 국소적 불변성을 확보할 수 있으나, 큰 각도의 회전·스케일링·기하학적 왜곡에는 취약하여 데이터 증강(Data Augmentation)이나 별도의 정규화 기법에 의존해야 한다.
댓글남기기