/ DATA

합성곱 신경망 기초(CNN, Convolution Neural Network)

CNN 강좌는 여러 절로 구성되어 있습니다.

CNN이란?

  • Convolution을 이용한 이미지 처리에 탁월한 성능을 보이는 인공신경망
  • 이미지 경우 이동되었거나, 방향이 뒤틀렸거나 등 다양한 변형이 존재한다. 기존 MLP는 픽셀 값이 약간 달라져도 민감하게 영향을 받는다는 단점
  • 데이터의 공간적 정보를 유지하면서 배열 데이터 정보를 다음 레이어로 보낼 수 있어서 이미지(RGB 채널의 3차원 배열) 분야에서 적극 활용
  • 이미지의 특징을 뚜렷하게 검출하기 때문에 이미지 분류에서 높은 성능

cnn_basic

CNN에서는 필터를 이용한 Convolution연산을 반복적으로 진행하면서 이미지의 특징을 검출하기 때문에 생각보다 구조가 간단합니다. 다음의 세 가지 layer를 기억하시면 됩니다.

  1. Convolution layer : 특징 추출(feature extraction)
  2. Pooling layer : 특징 추출(feature extraction)
  3. Fully-connected layer : 분류(classificaiton)
    cnn_basic_2

[ 학습 내용 ]

  1. 필터 (커널)
  2. 패딩, 스트라이드
  3. Pooling
  4. ReLu 활성화 함수
  5. Fully-Connected layer

필터(커널)

filter

  • 커널(kernel)이라고도 불리며 이미지의 특징을 찾아내기 위한 공용 파라미터
  • 필터 통과 이미지는 특성값을 가지고 있어 feature map 또는 activation map 라고함
  • 이미지 픽셀 값은 Convolution 연산에 의해 변환되고 이 과정에서 색상, 선, 형태, 경계 등의 특징(feature)이 뚜렷해짐
  • 필터가 많을수록 더 많은 이미지 특성을 추출하며, 컨볼루션 연산이 진행하면 할수록 이미지 크기는 작아지고 채널 수는 증가

패딩, 스트라이드

컨볼루션 연산을 계속할 경우, 이미지 크기가 작아져 어떻게 될까요? 연산할 수 있는 픽셀이 없어 더 이상 훈련할 수 없게 됩니다.

padding
패딩 (Padding)

  • Network가 깊어지면 이미지 크기가 무한정 작아지는 것을 막기 위해 패딩이 존재
  • 이미지 테두리에 일정 값(0 또는 1)을 넣어주는 작업

▶ 패딩 효과
① 합성곱 연산을 할 때마다 이미지 축소 문제 발생 → 연산 결과 실제 입력된 이미지와 같은 크기 출력
② 테두리에 위치한 픽셀은 필터 결과 단 한번만 사용 → 패딩으로 연산 두번 진행(테두리 이미지 정보 가져옴)

스트라이드 (Stride)

stride

  • 이미지에 필터를 적용하는 간격
  • 스트라이드 값을 크게 주면 이동 간격이 넓어져 출력 데이터의 크기가 작아짐
  • 패딩과 다르게 스트라이드는 출력데이터의 크기를 축소시키는 역할

풀링

pooling

  • Pooling layer는 대부분 convolutional layer 바로 다음에 위치해 공간(spatial size)을 축소
  • 채널 크기는 고정되며 입력 데이터의 크기가 축소되고 학습하지 않기 때문에 파라미터 수가 줄어들어 오버피팅(Overfitting) 방지

오버피팅(Overfitting) : 모델이 훈련 데이터에만 잘 맞춰진 경우로 결과가 훈련 데이터 정확도는 높지만 새롭게 입력 받는 테스트 데이터의 정확도는 낮아 모델 성능이 떨어지는 현상
풀링(Pooling)에는 맥스 풀링(Max Pooing)과 평균 풀링(Average Pooling)이 존재

① 맥스 풀링(Max Pooing) : 대상 이미지 영역에서 최대값을 구함 ② 평균 풀링(Average Pooling) : 대상 이미지 영역에서 평균값을 구함
※ stride =2 를 특징으로 함

[CNN 배열 공식]
cal

ReLu

relu

  • ReLu(Rectified Linear Unit) 활성화 함수는 비선형성 함수로 기본 선형 특성을 나타내는 layer에 비선형성을 증가
  • ReLu 함수의 범위는 R(z)=max(0, z) 양수이기 때문에 vanishing gradient 문제점을 극복하고 학습 속도와 성능을 향상시켜 CNN에서 주로 사용되는 활성화 함수

Fully-Connected layer

fully

  • CNN 마지막에서 분류(Classification)를 결정하는 단계
  1. flatten : 각 레이어를 1차원 벡터로 변환
  2. fully-conneced layer : 1차원 벡터로 변환된 레이어를 하나의 벡터로 연결 (각 층의 노드들은 하나로 연결)
    마지막으로 Softmax 함수를 이용해 가장 확률이 높은 class를 output으로 분류

참조 문헌

https://stanford.edu/~shervine/teaching/cs-230/cheatsheet-convolutional-neural-networks#layer
https://seongkyun.github.io/study/2019/01/25/num_of_parameters/
http://taewan.kim/post/cnn/