본문 바로가기
AI/Stanford Univ. cs231n

7강 Convolutional Neural Networks

by coco88 2025. 4. 5.

Convolution Layer

32x32x3(heigth*width*depth) 입력 이미지에 5x5x3 이미지 필터를 적용하여, 28x28x1의 2D activation map을 생성하는 것이 convolution(합성곱 연산)이다. 

즉, 5x5x3의 필터로 32x32x3의 이미지를 몇 번 훑게 되는지가 28x28의 숫자를 반환하는 것이다.

필터가 6개라면 6개의 activation maps가 생성된다. 즉, 필터의 개수가 output의 개수이다. (one filter, one actication map)
ex) 32x32x3의 이미지가 28x28x6의 새로운 이미지로 re-representation 되는 것

생성된 이미지가 다음 convolution layer의 input이 되는 것

 

CNN의 계층별 특징(feature) 학습 과정을 시각화한 그림이다.

CNN은 계층이 깊어질수록 추상적인 특징을 학습한다. 단순 특징에서 더 복잡한 특징으로 추출해 나가면서 최종적으로 분류하는 것을 보여준다. 

 
하나의 필터마다 하나의 activation map이 생성된다. activation map에서 하얀 부분일수록 activation이 높은 지점이다. 

activation map

 

-일반적인 CNN 구조 예시

conv에서 다양한 특징(feature)들을 추출하고, ReLU를 적용해 Conv 결과에서 음수 값을 0으로 만들고 양수 값만 남겨서 의미 있는 특징만 전달한다.

 

 

stride에 따라 옆으로 이동하며 필터를 적용한다. 
ex) stride가 1이면, 1만큼씩 이동하며 필터를 적용한다. stride가 3이면 7x7 이미지에는 3x3인 필터를 적용할 수 없다. 
 

Output size: (N-F)/stride + 1
 

padding을 하면 사이즈를 보존하여 사이즈가 변하지 않도록 도와준다. 
주로 (F-1)/2 만큼 패딩을 해준다. 
 
input의 크기가 N이라고 할 때, output의 크기는 (N+2p-F)/s + 1이다. 
(p: padding, s: stride, F: filter size)

 

 

CNN은 전체 이미지를 한 번에 보는 게 아니라, 작은 창(filter)으로 이미지를 조금씩 훑으면서 같은 창(가중치)을 모든 위치에 반복 적용하는 것이다. 뉴런이 영향을 받는 입력 공간의 크기를 receptive field라고 한다. (parameter sharing)
 

Pooling layer

각각의 activation map에 대해 독립적으로 작용하고, 사이즈의 크기를 줄여주는 역할을 한다.


 
Max Pooling

영역 내에 최댓값을 출력한다. 
Filter size=2, Stride=2인 경우가 사이즈를 1/2로 줄여주기 때문에 가장 많이 사용된다. ]

 

Fully connected layer

최종적으로 Convolution 연산을 통해 얻은 feature map을 벡터화하여 Fully Connected layer에 입력하고, Softmax 함수를 적용함으로써 각 클래스에 대한 확률 분포(점수)를 계산한다.
 

 

아래 링크를 통해 직접 CIFAR‑10 데이터셋을 학습하고 실시간으로 결과를 확인할 수 있습니다. 

https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

 

ConvNetJS CIFAR-10 demo

 

cs.stanford.edu

 

 

 

CNN Architecture

 

Case Study: LeNet-5

conv filter: 5x5, stride=1, Pooling layer: 2x2 (stride=2)

architecture: Conv-Pool-Conv-Pool-Conv-FC

 

AlexNet

(당시에 GPU 성능이 좋지 않아 두 개의 stream으로 진행)

input: 227 × 227 × 3, conv1: 96개의 11x11(stride=4) filter

architecture: Conv*n - Pool - Conv*n - Pool … - FC

 

ZFNet

Alexnet과 유사하지만, 첫번째 conv layer에서 11x11(stride=4) filter가 너무 크다고 판단하여 7x7(stride=2)로 변경하였다. 

conv 3,4,5 layer에서는 filter의 개수를 늘려주었다. 

즉, filter의 크기는 작게 filter의 개수는 늘리는 형태

 

VGGNet

conv layer(3x3, stride=1, pad=1), pool layer(2x2, stride=2)를 모든 layer에 적용하였다. 

 

이후에 FC layer는 파라미터가 너무 많고 과적합 위험이 크다는 걸 인식하고, parameter 수를 대폭 줄여주는 average pooling 기법을 주로 사용하게 되었다. 

 

GoogLeNet

Inception module이 여러개로 연결된 복잡한 형태이다. 

FC layer를 average pooling으로 변경하였기 때문에 파라미터의 수가 대폭 감소하였다. 

  AlexNet VGGNet GoogleNet
parameters 60M 138M 5M

 

ResNet

처음에 한 번의 conv layer 이후에 pooling을 해주며 입력 이미지를 56x56 크기로 줄인다. 

초기의 사이즈를 굉장히 줄여줌으로써 효율적인 연산이 가능하다. 

전체적으로 152개의 layer로 구성되어 있으며, 매우 깊은 신경망 구조를 안정적으로 학습할 수 있다. 
 
 
CNN 아키텍처별 Layer 수와 Error Rate 변화

layer가 많아질수록 Error rate이 감소해야 하는데, AleNet, VGGNet 등의 plain Net들은 layer의 수가 많아질수록 Error rate가 증가하는 현상이 발생되었다.(네트워크 최적화의 실패)

하지만 ResNet에서는 정상적으로 layer의 수를 늘릴수록 Error rate가 감소하였다. 따라서 점점 더 많은 layer를 사용하기 위해서는 ResNet의 방법을 따라야 한다. 

 

최근의 트렌드는 작은 filter와 더 깊은 구조를 사용하는 것이다. 점차 FC, Pooling layer를 사용하지 않고 Conv layer만 사용하는 추세이다.