[RISE] 2주차 수행내용

세휘·2021년 3월 18일
1

RISE 프로젝트

목록 보기
1/12

CNN study

  • CNN이란?
  • Convolution 연산
  • CNN의 구성요소
  • CNN의 매개변수 설정

CNN (Convolutional Neural Network)


CNN이란?

Convolution(합성곱) 연산을 사용하여 데이터에서 유용한 정보를 추출하는 인공신경망이다.

이전의 이미지 인식은 2차원의 이미지데이터를 1차원 배열로 변환하여 입력했다면, CNN은 2차원 데이터로 입력 가능하여 이미지의 공간정보를 유지한채 학습을 하게되는 모델이다.
따라서, 이 신경망은 이미지 및 오디오 데이터에 가장 적합하다.

CNN의 핵심아이디어는 이미지 전체를 보는 것이 아니라 부분을 보는 것이다. 이 ‘부분’을 보도록 하는 것을 filter라고 한다. filter 파라미터는 CNN에서 학습의 대상이다.
filter는 이미지의 특징을 찾아내기 위한 공용 파라미터이다. CNN에서 filter와 kernel은 같은 의미이다. filter는 일반적으로 (4, 4)이나 (3, 3)과 같은 정사각 행렬로 정의된다.

입력 이미지는 Convolution layer를 통과할 때 feature map이라고 하는 여러 개의 출력이미지를 생성한다. (Convolution Layer에 유입되는 입력 데이터에는 1 개 이상의 filter가 적용된다. 1개 filter는 feature map의 채널이 되므로, Convolution Layer에 n개의 필터가 적용된다면 출력 데이터는 n개의 채널을 갖게 된다.)


채널 (channel)

이미지 픽셀 하나하나는 실수이다. 컬러 이미지는 각 픽셀을 RGB 3개의 실수로 표현한 3차원 데이터이므로 3개의 채널로 구성된다. 반면에 흑백 명암만을 표현하는 흑백 이미지는 2차원 데이터로 1개 채널로 구성된다.
높이가 39 픽셀이고 폭이 31 픽셀인 컬러 사진 데이터의 shape은 (39, 31, 3)이고, 높이가 39픽셀이고 폭이 31픽셀인 흑백 사진 데이터의 shape은 (39, 31, 1)이다.










Convolution(합성곱) 연산

Convolution의 수학적 정의는 '하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자'이다.

정의나 식만으로는 잘 이해가 되지 않아서 이미지데이터로부터 filter를 거쳐 feature map을 만들어내는 것을 convolution연산으로 이해하였다.

아래 예시는 shape이 (5,5)인 2차원 입력데이터를 1개의 filter로 합성곱 연산을 수행하는 과정이다. stride란 filter의 이동 간격을 의미하는데, 이 때의 stride는 1이다.


아래 그림은 또다른 예시이다.
입력 데이터를 (3, 3) 크기의 filter로 Convolution(합성곱)하는 과정이다.




입력 데이터가 여러 채널을 가질 경우, 입력 데이터를 filter가 지정된 간격(stride)으로 순회하며 채널별로 Convolution(합성곱)을 하고 모든 채널(컬러의 경우 3개)의 합성곱의 합을 feature map으로 만든다. 입력 데이터는 채널 수와 상관없이 filter 별로 1개의 feature map이 만들어 진다.

패딩 (Padding)

Convolution Layer에서 filter와 stride의 작용으로 feature map 크기는 입력데이터 보다 작아진다. Convolution Layer의 출력 데이터가 줄어드는 것을 방지하는 방법이 패딩(Padding)입니다. 패딩은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는 것을 의미합니다. 보통 패딩 값으로 0으로 채워 넣는 Zero Padding을 수행한다.
패딩을 통해서 Convolution Layer의 출력 데이터의 사이즈를 조절하는 기능 외에도, 외곽을 “0”값으로 둘러싸는 특징으로부터 인공 신경망이 이미지의 외곽을 인식하는 학습 효과도 있습니다.










CNN의 구성요소

  1. Convolution Layer
  2. ReLU Layer
  3. Pooling Layer
  4. Fully Connected Layer
  5. Loss Layer (Softmax Layer)

CNN은 Convolution Layer와 Max Pooling Layer를 반복적으로 stack을 쌓는 특징 추출(Feature Extraction) 부분과 Fully Connected Layer를 구성하고 마지막 출력층에 Softmax를 적용한 분류 부분으로 나뉜다.

1. Convolution Layer

하나의 Convolution Layer는 Convolution 처리와 Activation function으로 이루어져 있다. 여기서 활성화 함수를 사용하는 이유는 선형함수인 convolution에 비선형성을 추가하기 위해서이다.

첫 Convolution layer의 출력 feature map은 edge 및 색 구성 변화와 같은 기본 특징을 검출하는 것을 학습할 수 있다. 제 2 Convolution layer는 정사각형, 원 및 다른 기하학적 구조와 같은 약간 더 복잡한 특징을 검출할 수 있다.


2. ReLU Layer

ReLU는 f(x)=max(0,x)인 활성화함수이다. 이를 통해 feature map에서 음수를 효과적으로 제거 할 수 있다. 사실 Convolution Layer에서 언급한 Activaton function이 이 ReLU 활성화함수를 의미한다. 여러 가지를 참고해서 정리하다 보니 약간 헷갈릴 수 있는데, ReLU Layer는 Convolution Layer와 따로 구분해서 볼 필요는 없는 것 같다.


3. Pooling Layer

이미지의 크기를 계속 유지한 채 FC(Fully Connected) Layer로 가게 된다면 연산량이 기하급수적으로 늘 것이다. 적당히 크기도 줄이고, 특정 feature를 강조할 수 있어야 하는데 그 역할을 Pooling Layer에서 하게 된다.

Pooling Layer는 Convolution Layer와 비교하여 다음과 같은 특징이 있다.

  • 학습대상 파라미터가 없음
  • Pooling Layer를 통과하면 행렬의 크기가 감소함
  • Pooling Layer를 통한 채널 수 변경이 없음

풀링 (Pooling)

Pooling은 각 결과값(feature map)의 차원을 축소해 주는 것을 목적으로 한다. 연관성이 낮은 부분을 제거하여 각 결과값의 크기를 줄이는 과정이다.


Pooling에는 대표적인 방법으로 Max pooling과 Average pooling이 있다. 위 이미지와 같이 Pool의 크기가 2x2인 경우 2x2크기의 matrix에서 최댓값(max)이나 평균값(average)를 가져와 결과값의 크기를 반으로 줄여준다.

CNN에서는 주로 Max Pooling을 사용하는데, 이는 뉴런이 가장 큰 신호에 반응하는 것과 유사하다고 한다. Max Pooling을 함으로써 노이즈가 감소하고 속도가 빨라지며 영상의 분별력이 좋아지는 효과가 있다.


4. Fully Connected Layer (완전연결계층, Dense Layer)

여러 번의 convolution과 max pooling layer를 하고 나면, Fully Connected Layer를 통해 고난도의 추론을 할 수 있게 된다. 완전연결계층의 뉴런은 이전 계층의 모든 activation에 연결된다.

Fully Connected Layer을 적용하기 이전에 Pooling한 결과인 다차원의 데이터를 쭉 펼쳐 1차원의 벡터데이터로 변환해주는 Flatten (or Vectorization)의 과정이 필요하다.


5. Loss Layer (Softmax Layer)

Loss Layer는 훈련이 예측(출력) 레이블과 실제 레이블 간의 편차에 페널티를주는 방식을 지정하며, 일반적으로 신경망의 최종 계층이다. 각기 다른 작업에 적합한 다양한 손실 함수를 사용할 수 있다.

CNN에서는 분류 문제에 적합한 Softmax 손실함수를 사용한다.










CNN 매개변수 설정

CNN의 Convolution Layer에서 하이퍼파라미터는 다음과 같다.

  • Convolution Filter의 개수
    • 각 Layer에서의 연산시간을 비교적 일정하게 유지하며 시스템의 균형을 맞추는 것이 좋다. 보통 Pooling Layer를 거치면 1/4로 출력이 줄어들기 때문에 Convolution Layer의 결과인 Feature Map의 개수를 4배정도 증가시키면 된다.
  • Filter의 크기
    • 작은 필터를 여러 개 중첩하면 원하는 특징을 더 돋보이게하면서 연산량을 줄일 수 있다. 요즘 대부분의 CNN은 3x3 size를 중첩해서 사용한다고 한다.
  • Padding여부
    • Padding은 Convolution을 수행하기 전, 입력 데이터 주변을 특정 픽셀 값으로 채워 늘리는 것이므로, Padding을 사용하게 되면 입력 이미지의 크기를 줄이지 않을 수 있습니다.
  • Stride
    • Stride는 Filter의 이동 간격을 조절하는 파라미터이다. 이 값이 커지게 되면 결과 데이터의 사이즈가 작아지게 된다.

CNN은 Filter의 크기, Stride, Padding과 Pooling 크기로 출력 데이터 크기를 조절하고, filter의 개수로 출력 데이터의 채널을 결정합니다.

Convolution Layer 출력데이터 크기

입력 데이터에 대한 filter의 크기와 Stride에 따라서 Feature Map 크기가 결정된다.

  • 입력 데이터 높이: H
  • 입력 데이터 폭: W
  • filter 높이: FH
  • filter 폭: FW
  • Stride: S
  • Padding 크기: P

    식의 결과는 자연수가 되어야 한다. 또한 Convolution Layer 다음에 Pooling Layer가 온다면, Feature Map의 행과 열의 크기는 Pooling 크기의 배수여야 한다. 만약 Pooling 사이즈가 (3, 3)이라면 위 식의 결과는 자연수이고 3의 배수여야 합니다. 이 조건을 만족하도록 Filter의 크기, Stride, Pooling 크기 및 Padding 크기를 조절해야 한다.

Pooling Layer 출력데이터 크기

Pooling Layer에서 일반적인 Pooling 크기는 정사각형이므로, Pooling 크기를 Stride와 같은 크기로 만들어서 모든 요소가 한번씩 Pooling되도록 만든다. 입력 데이터의 행 크기와 열 크기는 Pooling 크기의 배수여야 한다.

결과적으로 Pooling Layer의 출력 데이터의 크기는 행과 열의 크기를 Pooling 크기로 나눈 몫과 같다. Pooling 크기가 (2, 2)라면 출력 데이터 크기는 입력 데이터의 행과 열 크기를 2로 나눈 몫이다. pooling 크기가 (3, 3)이라면 입력데이터의 행과 크기를 3으로 나눈 몫이 된다.




[참고]

CNN(Convolutional Neural Network)이란?
CNN, Convolutional Neural Network 요약
Convolutional neural network From Wikipedia
[딥러닝/머신러닝] CNN(Convolutional Neural Networks) 쉽게 이해하기




3주차에는 keras를 이용한 CNN 예제를 실습할 예정이다.

0개의 댓글