Convolutional Neural Network

chelseey·2025년 6월 10일

전통적 패턴 인식 vs. 딥러닝 특징

전통적 패턴 인식

  • Feature Extractor
    : 사람이 설계하거나, 고정된 알고리즘 사용

  • Trainable Classifier
    : 추출된 특징을 분류기(SVM, 로지스틱 회귀 등)에 입력해 학습

딥러닝(Deep Learning)

  • Representation Learning
    : 저수준→중간수준→고수준 특징을 계층적으로 네트워크가 스스로 학습
  • 마지막에는 Trainable Classifier로 연결해 최종 출력 예측
    → 특징 추출과 분류를 end-to-end 학습하여, 전체 파이프라인 최적화

딥러닝은 특징 추출도 하나의 학습 가능한 계층으로 봄

Deep Learning = Learning Hierarchical Representations

Deep = 하나 이상의 비선형(feature) 변환 단계(layer)를 거쳐 특징을 추출

Neural networks adapted for high-dimensional data

고차원 특성을 다룰 때 신경망이 갖추면 좋은 능력

  • 고차원 입력 처리 능력

  • 토폴로지 활용
    : 2D/3D 픽셀·보폭 구조를 인식하여 패턴 추출

  • 변형에 대한 불변성(Invariance)
    : 위치 이동(translation), 조명 변화(illumination) 등에 강함

CNN이 활용하는 전략

  • Local Connectivity (국소 연결)
    : 각 뉴런이 이미지의 작은 영역만 보고 특징을 학습

  • Weight Sharing (가중치 공유)
    : 같은 필터(커널)를 전체 이미지에 걸쳐 반복 적용 → 파라미터 수 절감

대표 CNN 아키텍처

AlexNet, VGG, ResNet, DenseNet, GoogLeNet, etc.

Convolutional Neural Network (CNN)

Convolutional Stage (합성곱 계층)

ai,j=k,wk,zik,ja_{i,j} = \sum_{k,\ell} w_{k,\ell}\,z_{\,i-k,\,j-\ell}
  • Local connectivity
    : 각 출력 픽셀은 입력의 작은 국소 영역(수용장, RF size)만 봄
  • Weight sharing
    : 같은 필터 wk,w_{k,ℓ}를 모든 위치에 반복 적용 → 파라미터 절감

Non-linear Stage (비선형 활성화)

yi,j=f(ai,j),f(a)=max(0,a)  (ReLU)  또는  σ(a)y_{i,j} = f(a_{i,j}),\quad f(a)=\max(0,a)\;(\mathrm{ReLU})\;\text{또는}\;\sigma(a)

활성화 함수를 통해 비선형성 부여

Pooling Stage (풀링 계층)

  • Max 또는 평균 풀링으로 위치 변화에 대한 불변성 강화

Fully-Connected Stage (완전연결 계층)

  • 맨끝에 위치해, 추출된 특징을 분류기에 연결

파라미터 절감 효과

Local connectivity + Weight sharing → 수십~수백 개 필터만 학습

커널(Kernel)

  • 커널 = 작은 행렬(필터)로, 동일 가중치를 전체 입력에 공유
  • 로컬한 영역(예: 3×3, 5×5)만 보며 국소 특징을 추출
  • Weight sharing 덕분에 파라미터 수 크게 감소

효율적인 순전파 구현

각 계층별로 커널 적용 → 비선형 활성화 → (선택적) 풀링 단계를 거쳐
입력 전체를 반복하는 대신 커널 연산만 수행하면 되므로,
메모리·연산량을 줄이며 고차원 데이터에 특화된 학습·추론이 가능

Understanding kernel - edge detection

엣지(Edge)

  • 이미지의 픽셀 강도 함수 f(x,y)에서,
    물체 경계나 선이 있는 부분은 밝기 값이 급격히 변하는 곳
  • 수학적으로는 기울기(gradient) 가 큰 곳 → 가파른 절벽처럼 보임
f=(fxfy),f=(fx)2+(fy)2\nabla f = \begin{pmatrix} \frac{\partial f}{\partial x}\\ \frac{\partial f}{\partial y} \end{pmatrix},\quad \|\nabla f\| = \sqrt{\Bigl(\frac{\partial f}{\partial x}\Bigr)^{2} + \Bigl(\frac{\partial f}{\partial y}\Bigr)^{2}}\,

2D Convolution filter (kernel)

2D 합성곱 필터(커널)로 엣지 검출

커널

  • 수평 방향 미분 SxS_x (가로 엣지 검출)

    Sx=18[10+120+210+1]S_x = \frac{1}{8} \begin{bmatrix} -1 & 0 & +1\\ -2 & 0 & +2\\ -1 & 0 & +1 \end{bmatrix}
  • 수직 방향 미분 SyS_y (세로 엣지 검출)

    Sy=18[+1+2+1000121]S_y = \frac{1}{8} \begin{bmatrix} +1 & +2 & +1\\ 0 & 0 & 0\\ -1 & -2 & -1 \end{bmatrix}

커널 적용 방식

  1. 3×3 윈도우를 이미지 위에서 슬라이딩

  2. 각 위치마다 대응 픽셀값 z1,,z9z_1, \dots, z_9과 커널 원소를 곱셈·합산

    Gx(i,j)=k,Sx(k,)zik,j,Gy(i,j)=k,Sy(k,)zik,jG_x(i,j) = \sum_{k,\ell} S_x(k,\ell)\,z_{\,i-k,\,j-\ell},\quad G_y(i,j) = \sum_{k,\ell} S_y(k,\ell)\,z_{\,i-k,\,j-\ell}
  3. 결과로 엣지 강도와 방향 정보를 얻음

그라디언트 및 방향

  • Gradient Vector

    f=[fx,fy][Gx,Gy]\nabla f = \begin{bmatrix} \frac{\partial f}{\partial x}, & \frac{\partial f}{\partial y} \end{bmatrix} \approx [G_x,\,G_y]
  • Magnitude (엣지 강도)

    f=Gx2+Gy2\|\nabla f\| = \sqrt{G_x^2 + G_y^2}
  • Direction (엣지 방향)

    θ=tan1 ⁣(GyGx)\theta = \tan^{-1}\!\Bigl(\frac{G_y}{G_x}\Bigr)

Rule-based VS Learning-based

Rule-based Solution (전통적 방식)

  • 고정된 규칙에 따라 특징을 수치화

  • 의사결정 흐름도(Flowchart)나 임계치(threshold) 기반 분류

Learning-based Solution (딥러닝 방식)

  • 커널(필터) 학습을 통해,
    이미지의 국소적 패턴(엣지·텍스처)부터 고차원 추상 특징까지
    계층적으로 스스로 학습

  • Rule 설계 불필요, End-to-End로 입력→출력 최적화

End-to-End Learning

  1. 데이터 샘플
    입력: 손 모양 이미지(32×32 등 고차원 배열)

  2. 레이어드 합성곱 필터 (Layered Convolution Filters)
    여러 개의 커널(필터)이 채널 단위로 적용되어,

  • 첫 번째 층: 저수준 엣지·선 특징
  • 다음 층들: 점차 복잡한 모양·패턴
    필터 개수(=채널 수)를 늘려 다양한 패턴을 병렬 학습
  1. Objective Function (목표 함수)
    최종 추출된 고수준 특징을 완전연결·분류기로 연결
    End-to-End 방식으로, 입력 이미지부터 최종 예측까지
    하나의 손실 함수(ex. 크로스엔트로피)를 통해
    전체 파라미터 (모든 필터, 분류기 가중치)를 통합 학습
  • 객체 검출(Object Detection)
    출력: 이미지 속 객체를 둘러싼 바운딩 박스

  • 이미지 분류(Image Classification)
    출력: 이미지 전체 또는 영역별 클래스 레이블

  • 의미론적 분할(Semantic Segmentation)
    출력: 이미지의 각 픽셀마다 카테고리 마스크

Weight sharing

fully connected DNN

: 입력의 각 뉴런과 출력의 모든 뉴런을 개별 가중치로 연결
→ 파라미터 수 급증, 과적합 우려

CNN (합성곱):

  • Local Receptive Field
    : 각 출력 뉴런은 인접한 입력의 작은 영역만 관찰

  • Weight Sharing
    : 같은 필터(커널) 가중치를 해당 영역 전체에 공유

  • Convolving
    : 필터를 입력 전체에 슬라이딩하며 반복 적용

Early CNN Model

MNIST 손글씨 숫자 분류

  • 여러 합성곱+풀링(subsampling) 레이어를 쌓아,
    저수준→고수준 추상 표현 학습
  • 서브샘플링으로 공간 해상도 축소, 파라미터 수·연산량 절감
  • 최종 완전연결 단계로 분류 수행

2-D Convolution (Image)

Kernel K

: Sobel 수평 엣지 검출 필터

K=18[10+120+210+1]K = \frac{1}{8} \begin{bmatrix} -1 & 0 & +1 \\ -2 & 0 & +2 \\ -1 & 0 & +1 \end{bmatrix}

합성곱 연산 (Convolution)

  1. 3×3 윈도우를 이미지 상에서 슬라이딩
  2. 각 위치에서 윈도우 내 픽셀값과 필터 원소를 곱한 뒤 합산
  3. 그 결과를 Destination Pixel에 저장 → Output Feature Map

Convolution Operation

Kernel
: 작은 가중치 행렬 (ex. 2×2 필터 {w,x,y,z}), 각 필터마다 하나의 출력 채널 생성

합성곱 단계 (Convolutional Stage)

hk(+1)(p,q)=σ((i,j)RF(p,q)wk,ij()hij()+bk())h^{(\ell+1)}_{k}(p, q) = \sigma\Bigl( \sum_{(i,j)\in \mathrm{RF}(p,q)} w^{(\ell)}_{k,ij}\,h^{(\ell)}_{ij} + b^{(\ell)}_{k} \Bigr)

출력 픽셀 hk(+1)(p,q)h^{(\ell+1)}_{k}(p, q)을 계산할 때,
그 픽셀의 receptive field 내 입력값 hij()h^{(\ell)}_{ij}를 곱해 모두 합산하고,
바이어스 bk()b^{(\ell)}_{k}를 더한 뒤 비선형 함수 σσ 적용

Convolution Layer

→ 같은 depth로 맞춰줘야함

  • 입력 볼륨 : 32×32×3 (높이, 너비, 채널(RGB))

  • 필터(커널)
    크기 : 5×5×3
    파라미터: 5×5×3=75개의 가중치 w와 1개의 바이어스 b

  • Dot Product 연산
    입력 볼륨의 작은 5×5×3 청크 x를 필터와 겹쳐 놓고,
    원소별 곱셈 후 모두 더하고 바이어스 더함:

    y=wx+b=i=175wixi+by = w^\top x + b = \sum_{i=1}^{75} w_i\,x_i + b

    → 이 하나의 숫자 y가 출력 맵의 한 픽셀이 됨

여러 필터(채널)를 쓰면 ⇒ 28×28×(필터 수) 크기의 출력

합성곱 신경망(ConvNet) 레이어 시퀀스

  • 입력(Input)
    크기: 32×32×3 (높이×너비×채널)

  • 첫 번째 합성곱 계층 + 활성화
    필터: 6개, 크기 5×5×3
    출력: 28×28×6 활성화 맵

  • 두 번째 합성곱 계층 + 활성화
    필터: 10개, 크기 5×5×6
    출력: 24×24×10 활성화 맵

이후에도 같은 형태로 Conv + ReLU 반복
→ 공간 해상도는 점차 줄이면서 채널(특징) 수를 늘림

A Closer Look (hyper-parameters)

  • 필터 크기: 작은(3×3)일수록 더 깊게 쌓기 유리
  • 스트라이드: 크면 축소가 빠름 → 정보를 잃을 수 있음

제로 패딩(Zero Padding)

패딩 1: 입력 가장자리에 1픽셀 두께의 0 채워넣기

이 상태에서 스트라이드 1, 필터 3×3 적용하면,
(7+2⋅1−3)+1=7 ⇒ 입력 크기 유지

filter size, stride, and zero padding

입력 크기: m×m
필터 크기: k×k
스트라이드: s
패딩 없음(padding=0) 가정

출력 크기 계산식

Output size=1+mks\text{Output size} = 1 + \frac{m - k}{s}

Zero-padding

공간 축소 문제

ex. 32×32 영상에 5×5 필터, 스트라이드=1 적용 시
출력 크기: (32−5)+1=28 → 다음 층은 28×28
연속 적용하면 너무 빠르게 해상도 ↓

제로 패딩의 역할

테두리(pixel)에 0 채우기로 입력 크기를 임의로 조절

패딩 두께 P 만큼 추가하면 :

Output=(m+2P)ks+1\text{Output} = \frac{(m + 2P) - k}{s} + 1

Same Padding (출력=입력) 원할 때 : P=k12P = \frac{k - 1}{2}

1x1 convolution layers

1×1 합성곱 계층(1×1 Convolution)

1×1 필터

크기: 1×1 공간, 깊이=64 (→1×1×64),
필터 수: 32

연산

1×1 윈도우를 슬라이딩(stride=1, padding=0)해 56×56 위치마다 반복 적용

출력 활성화 맵

크기: 56×56 공간 크기 유지
채널 수: 필터 수만큼 → 32개

용도

공간 해상도 유지: 가로·세로 크기 변화 없이
깊이 축소: 채널(특징) 수를 줄임 → 계산ㆍ파라미터 감소

Behaviors

CNN의 핵심 동작: 복제된 특징 & 국소 연결

복제된 특징(Weight Sharing)

동일한 필터(커널)를 입력 이미지 전역에 반복 적용

  • 파라미터 수 대폭 감소 → 과적합 위험 ↓
  • Translation Invariance
    : 같은 특징(ex. 엣지, 코너)을 위치에 상관없이 감지

국소 연결(Local Connectivity)

각 뉴런은 입력의 작은 범위(수용 영역)만 보고 판단

  • 이미지 전체가 아니라 작은 덩어리 단위로
    의미 있는 무늬(색 대비, 결)만 뽑아냄

다양한 필터 사용

여러 종류의 필터(ex. 엣지, 색 대비, 곡선 등)를 병렬로 사용해
각 이미지 패치를 다중 관점(다양한 특징 맵)으로 표현

Pooling layer

역할

  • 공간 해상도 축소(downsampling)로 특징 맵 크기 작게 유지
  • 계산량·파라미터 감소, 모델 복잡도 경감
  • 스케일 불변성: 작은 위치 변화에도 대표값 유지

삽입 위치

일반적으로 여러 합성곱+ReLU 블록 사이에 주기적으로 추가

풀링 종류

  • Max Pooling : 창 안의 최대값 선택
  • Average Pooling : 창 안의 평균값 계산

Fully Connected (FC) Layer

완전 연결(Fully Connected, FC) 층

  • 이전 층의 모든 뉴런과 완전하게 연결된(Dense) 형태
  • 입력된 3차원 볼륨(높이×너비×채널)을 일렬로 펼쳐(flatten)
    1차원 벡터로 변환한 뒤, 각 요소에 가중치를 적용

역할

  • 분류(classification)나 회귀(regression) 같은 최종 결정 단계 담당
  • 이 층 뒤에 시그모이드(sigmoid), 소프트맥스(softmax) 등을
    붙여 출력값을 얻음

Training with BP

합성곱(conv)·풀링(pool)·완전연결(FC) 층 모두에 대해
오차를 뒤쪽으로 전파하여 가중치를 갱신

LeNet 5

5×5 합성곱과 2×2 풀링을 교차 배치한 뒤,
FC 층으로 분류 결과를 내는 CNN

AlexNet (Krizhevsky 2012)

핵심 아이디어

  • ReLU 활성화
    tanh 대비 수렴 속도↑, gradient 소실 문제 완화

  • Dropout
    과적합 방지 위해 FC 층에서 뉴런 절반 랜덤 제거

  • 대규모 GPU 병렬 처리
    모델을 2개의 GPU에 분할 배치하여 학습 시간 단축

VGGNet

핵심 아이디어

  • Small Filters & Deeper Network
    모든 합성곱 층에서 3×3 커널, stride=1, padding=1 사용

  • 깊이를 늘려(non-linearity 증가)
    넓은 수용 영역(effective receptive field) 확보

연속 세 겹의 3×3 합성곱 = 단일 7×7 합성곱과 동일 receptive field
→ 깊이(layer) 증가로 더 많은 비선형 결합 학습
(더 다양하고 복잡한 특징(feature) 을 뽑아냄)

GoogLeNet

Inception 모듈 (핵심 구성요소)

각 Inception 모듈 :
한 번에 여러 크기의 필터를 병렬 처리 → 채널 방향으로 합치기

Naive

각 브랜치마다 원본 채널 수로 바로 연산 → 파라미터·연산량 과다

Bottleneck

  • 차원 축소
    3×3 또는 5×5 conv 전에 채널 수를 줄여, 연산량·파라미터 감소

  • 계산 효율
    1×1 conv는 비용이 적으면서도 특징 표현력을 유지

How important is depth?

제거 실험(Remove top FC)

  • 제거 대상: Layer 7 (두 번째 FC; 4096 → 4096)
  • 절감 효과: 약 1,600만 개 파라미터 감소

파라미터 27% ↓ vs. 성능 ↓ 1.1%p

제거 실험 2

  • 제거 층:
    Conv3 (Layer 3), Conv4 (Layer 4)
    FC6 (Layer 6), FC7 (Layer 7)

깊이(depth)의 결정적 역할

중간 Conv 층 하나만 제거해도 성능이 크게 떨어지며,
FC를 포함해 여러 층을 동시에 뺄 경우 성능 저하는 치명적

→ 모델의 깊이를 극단적으로 줄이면 파라미터 수는 대폭 줄지만, 성능 손실이 과도

ResNet

핵심 아이디어: Residual Connection

  • 잔차 학습 : H(x)H(x) 대신 F(x)=H(x)xF(x)=H(x)−x을 학습
    입력 x와의 차이만 모델이 배우고, 다시 더해 줌으로써 전체 함수를 완성

  • 잔차 연결(Residual Connection)
    : 스킵 경로로 입력 x를 블록 출력에 더해 줌

장점

  • 기울기 소실(vanishing gradient) 완화
    : shortcut 경로로 그래디언트 직접 전달
  • 학습 안정성↑: 깊이가 깊어져도 수렴 어려움 감소

CNN의 문제 : 깊이의 저주(Degradation)

Plain CNN(20층) vs. 더 깊은 Plain CNN(56층) 비교 시
학습 오류(training error), 테스트 오류(test error)가 56층에서 오히려 높음

→ 과적합(overfitting)이 아닌, 최적화(optimization) 난이도 문제

해결책: Residual Learning & Skip Connection

잔차 학습(Residual Learning)

: 원래 학습하려던 출력 H(x) 대신

F(x)=H(x)xF(x) = H(x) - x

(입력 x와의 “차이” = residual)만 학습.

최종 출력은

y=F(x)+x=H(x)y=F(x)+x=H(x)

잔차 연결(Residual Connection)

스킵 경로(skip/identity path)로 gradient가 블록을 우회해
깊은 층까지 손실 없이 전파

Training CNN

CNN 학습 기법

  • Data augmentation, weight initialization
  • Dropout: simple way to prevent the over-fitting problem
  • Batch normalization
  • Transfer learning

Data augmentation

원본 데이터를 다양한 방식으로 변형해 새로운 학습 샘플을 만들어내는 기법

  • 데이터 부족 극복
    : 학습 데이터 수를 사실상 늘려 과적합(over-fitting) 방지
  • 모델 일반화 개선
    : 다양한 변형에 노출시켜 실제 환경 변화에도 강건한 특징 학습

Data preprocessing

  • Zero-Centering
    : 각 특성(feature)의 평균을 0으로 이동

  • Normalization (정규화)
    : 특성별 표준편차를 1로 스케일링(또는 [0,1] 구간으로 변환)

  • Decorrelation (비상관화)
    : 특성 간 상관관계를 제거해 공분산(covariance) 행렬을 대각행렬로 만듦

  • Whitening (백색화)
    : Decorrelation 후,
    모든 주성분의 분산을 1로 맞춰 공분산 행렬을 단위행렬로 변환

Weight initialization

목적

학습 초기에 각 층의 출력 분포가 적절히 유지되어야

  • 기울기 소실/폭발 문제 방지
  • 수렴 속도와 최종 성능 개선

효과

  • σ=0.10σ=0.10 (너무 작음)
    : 출력 분포가 거의 0 부근에 몰려, 뉴런이 충분히 활성화되지 않음
    → 학습 지연

  • σ=0.14σ=0.14 (적정)
    : 출력 분포가 유의미한 범위(0~약 8)로 유지
    → 정보 손실 없이 전파

  • σ=0.28σ=0.28 (너무 큼)
    : 출력이 매우 큰 값으로 폭발
    → 그래디언트가 불안정해져 학습 어려움

Dropout regularization

학습 시 은닉 유닛(뉴런)을 확률적으로 생략(drop)하며 네트워크를 학습하는 기법

Batch normalization (BN)

미니배치 단위로 각 층 입력의 분포(평균·분산)를 정규화한 뒤,
학습 가능한 스케일(γ)·시프트(β) 파라미터를 적용하는 기법

Transfer Learning

이미 학습된(pre-trained) 모델의 지식(가중치·특징)을
새로운 과제에 재활용하는 기법

  1. Source Task(A)에서 대규모 데이터로 CNN 학습 → 공유 가능한 특징 획득

  2. 학습된 모델의 앞쪽 합성곱(conv) 블록은
    고정(Freeze) 혹은 미세조정(Fine-tune)

  3. 뒷단 완전연결(FC)·헤드(Head)를 새 과제(Task B)에 맞춰
    재구성(클래스 수 변경 등)

  4. Task B 데이터로 뒷단만 재학습 또는 전체 네트워크 약한 학습률로 미세조정

Use of CNN in Image Processing

이미지 처리에서 CNN의 활용

  • Feature Extraction
    : 합성곱과 풀링 반복으로 입력에서 의미 있는 패턴(에지, 질감, 형태 등) 추출

  • Classification Head: 추출된 특징 맵을 1차원 벡터로 펼쳐(Flatten) 완전연결층(FC)으로 분류용 고수준 표현 생성

  • Probabilistic Distribution: 최종 Softmax로 각 클래스에 대한 확률값 반환

0개의 댓글