본문 바로가기

AI & ML

[DL] CNN, Convolution Neural Network

CNN이란?

CNN은 Convolution Neural Network의 약자로 합성곱 신경망을 이용한 딥러닝 기법이다.

DNN에서 이미지, 영상 등의 데이터 처리 시 생기는 문제점들을 보완하기 위해 인간의 시신경을 모방한 방법으로 Vison 분야에서 우수한 성능을 보인다.

구조

CNN은 완전 연결 계층(Fully Connected Layer, FCL)이 아닌 합성곱(Convolution)층과 풀링(Pooling)층으로 구성되어 있다.

CNN의 구조는 보통 아래와 같다.

Convoltion

Convolution은 Input에서 stride값 만큼 filter(kernel)를 이동시켜 연산을 진행한다. 이때 Input의 data 손실을 막기 위해 padding을 설정하기도 한다. 아래 그림처럼 input에 filter를 적용시켜 연산해 output을 얻어낸다.

Filter

filter는 input의 특징을 찾아내기 위한 공용 paramter로 Kernel이라고도 불린다. CNN에서 filter와 kernel은 같은 의미로 사용된다.

filter는 주로 3*3과 같은 정사각 행렬로 정의되며 지정된 stride값 만큼 이동하며 합성곱을 계산하고 모든 channel의 합성곱의 합을 Feature Map(output)으로 만든다.

단일 channel을 가진 위 사진을 예로 들어 계산하면

  • filter가 이동하며 input과 겹치는 부분을 찾는다
  • 겹치는 input값과 Filter를 곱한다
  • 곱의 합을 Feature Map에 저장한다

Stride

filter가 한번에 움직이는 이동량을 의미한다. CNN에서 stride는 보통 1로 설정된다.

Padding

padding은 input data의 손실을 막기 위해 설정한다. 위 사진처럼 convolution을 수행할 경우 output의 크기가 input의 크기보다 작아지게 된다.

padding은 input의 가장자리에 값을 추가하는 것으로 여러 layer를 지나면서 output의 크기가 점점 작아지고, 가장자리에 위치한 정보들이 소실되는 것을 막는다. 가장자리에 0을 갖는 pixel을 추가하는 것을 zero-padding이라고 하며, CNN에서는 주로 zero-padding이 사용된다.

위 사진처럼 1pixel짜리 zero-padding을 수행한 결과 input과 output의 크기가 동일, 이미지의 손실이 없음을 알 수 있다.

그러나 padding을 과하게 설정할 경우 noise가 커질 수 있다는 점을 주의해야 한다.

Output size

Convolution Layer를 통과한 Output의 Size는 다음과 같다.

$Output\space size = \cfrac{input\space size - filter\space size + (2*padding)}{stride} +1$

Pooling

pooling은 convolution layer의 output을 input으로 받아 data의 크기를 줄이거나 특정 data를 강조하는 용도로 사용한다.

pooling 방법으로는 Max-Pooling, Average-Pooling이 주로 사용된다. Max-Pooling은 구역에서의 최댓값을, Average-Pooling의 경우 평균값을 계산하여 사용하며 Vision 분야에서는 주로 Max-Pooling 기법이 사용하는데 이는 뉴런의 반응과 유사하기 때문이다.

Pooling 크기와 stride 값은 일반적으로 동일하게 설정해 모든 원소가 한번씩 처리되도록 설정한다. Pooling Later는 Convolution Layer와 비교해 다음과 같은 특징을 갖는다.

  • 학습 대상 parameter 없음
  • Layer 통과 시 행렬 크기 감소
  • Layer 통한 channel 수 변화 없음

그렇다면 pooling을 사용하는 이유는 무엇일까?

  • 선택 영역에서 픽셀의 위치가 변경되어도 동일한 출력값 가짐
  • 처리 이미지 크기 감소 통한 학습 시간 단축
  • overfitting 문제 완화

Fully Connected Layer

Fully Connected Layer, FC Layer에서는 Classification 단계로 Convolution, Pooling Layer를 통과해 추출된 Feature들을 분류한다.

쉽게 말하면 다차원 행렬을 1차원 벡터로 펼치는 layer로 이후 activation function이나 softmax를 적용해 결과를 도출하는 작업을 한다.

'AI & ML' 카테고리의 다른 글

[DL] RNN, Recursive Neural Network  (0) 2024.02.25
[ML] Logistic Rrgression, 로지스틱 회귀  (1) 2024.01.21
[ML] Linear Regression, 선형회귀  (0) 2024.01.20