개발자식

[딥러닝] CNN 본문

AI/Deep Learning

[딥러닝] CNN

밍츠 2022. 10. 9. 04:53

CNN

- Convolutional Neural Network의 약자로 일반 Deep Neural Network(DNN)에서 이미지나 영상과 같은 데이터를 처리할 때 발생하는 문제점들을 보완한 방법이다.

- convolution 작업을 수행하는 신경망

 

DNN의 문제점은?

- 이미지는 480x480과 같은 형태로 표현되어 하나의 row로 표현되지 않아 하나의 row로 변환하게 되는 순간 데이터는 큰 손실을 갖게 된다.

- 그래서 DNN은 이미지 행렬을 하나의 row로 만들고 신경망에 입력으로 넣어 가중치를 계산하여 정보 손실이 크다.

- CNN은 사람이 보는 것처럼 이미지 행렬 2차원 배열에서 가로, 세로축 모두 합성곱 연산과 풀링 연산으로 특징점을 추출하기에 정보 손실이 적다.

- 연산량도 CNN이 더 적다.

- CNN은 새로운 모델이라기보다 graphical feature를 추출하는 것에 초점을 맞춘 모델이다.

 

그래서 CNN은 어떻게 학습시키는 것일까?

- 하나의 이미지로부터 픽셀 간의 연관성을 살린 여러 개의 이미지를 생성하는 과정을 반복한다. (Convolution)

- 해당 과정을 반복하면 이미지의 숫자는 많아지면서 크기는 점점 줄어든다. (with Pooling)

- 최종적으로 도출된 특정 이미지의 데이터는 1차원 row 데이터로 취급해도 무관한 상태가 된다. (Flatten)

- DNN과 동일하게 만들어진 네트워크를 통해서 output을 출력한다.

 

cnn의 핵심 convolution

출처 : https://medium.datadriveninvestor.com/convolutional-neural-networks-3b241a5da51e

- filter를 원본 이미지에 적용하는 방식이다. 

- input data에 필터를 일정 간격(stride)으로 이동시키면서 연산을 적용시키는 것이다.

-> 이미지 전체를 보는 것이 아니라 부분을 보는 것이 핵심 아이디어

 

convolution layer

- convolution layer에서는 특징을 추출하는 필터와 이 필터의 값을 비선형 값으로 바꿔주는 activation function으로 이루어져 있다.

- convolution layer의 학습 파라미터 수는 입력 채널 수 * 필터 폭 * 필터 높이 * 출력 채널 수이다.

 

convolution layer 출력 데이터 크기 계산

  • 입력 데이터 높이 : H
  • 입력 데이터 폭 : W
  • 필터 높이 : FH
  • 필터 폭 : FW
  • stride 크기 : S
  • 패딩 사이즈 : P

- 두 식의 결과는 자연수가 되어야 한다.

- 그리고 convolution 레이어 다음에 풀링 레이어가 온다면, feature map의 행과 열 크기는 polling 크기의 배수여야 한다.

 

convolution을 통해 특징을 추출하는 과정에서 이미지가 너무 많아지는 문제가 발생한다.

이러한 문제를 해결하기 위해서 Polling 작업을 진행한다.

 

polling layers란

- convolution을 거쳐서 나온 activation maps이 있을 때, 이를 이루는 convolution layer을 resizing 하여 새로운 layer를 얻는 것이다.

- polling을 convolution의 후속 과정이 아닌 별도의 개념으로도 정의한다. (matrix 연산을 사용하지 않고 각 픽셀에서 값을 뽑아내는 과정으로도 이해할 수 있다.)

- conv layer와 activation을 거쳐 나온 output인 activation feature map에 대하여 테크닉을 적용한다.

 

사용하는 이유는?

- 앞선 레이어들을 거치고 나온 output feature map의 모든 data가 필요하지 않기 때문이다.

 

효과는?

- 파라미터를 줄이기 때문에, 해당 네트워크의 표현력이 줄어들어 오버 피팅을 억제한다.

- 파라미터를 줄이므로, 그만큼 비례하여 computation이 줄어들어 hardware resource를 절약하고 속도가 증가한다.

 

특징은?

- training을 통해 train 되어야 할 파라미터가 없다.

- polling의 결과는 채널 수에는 영향이 없으므로 채널 수는 유지된다. (independent)

- input feature map에 변화가 있어도 polling의 결과는 변화가 적다. (robustness)

 

종류

  • max polling
  • average polling
  • stochastic polling
  • cross channel polling
  • etc

polling 레이어 출력 데이터 크기

- 입력 데이터의 행 크기와 열 크기는 polling 사이즈의 배수여야 하기 때문에 polling 레이어의 출력 데이터의 크기는 행과 열의 크기를 polling 사이즈로 나눈 몫이다.

CNN 용어 정리

  1. 합성곱(convolution)
    • 합성곱 처리 결과로부터 feature map을 만든다.
    • 연산 과정
  2. 채널(channel)
    • 컬러 이미지는 3개의 채널로 구성
    • 흑백 이미지는 1개의 채널로 구성
    • (높이, 폭, 채널)
    • convolution layer에 유입되는 입력 데이터에는 한 개 이상의 필터(커널)가 적용된다. 1개 필터는 feature map의 채널이 된다. convolution layer에 n개의 필터가 적용된다면 출력 필터는 n개의 채널을 갖게 된다.
  3. 필터(커널)
    • 이미지의 특징을 찾아내기 위한 공용 파라미터이다.
    • 필터 = 커널
    • 일반적으로 정사각 행렬로 정의된다.
    • cnn에서 학습 대상이 필터 파라미터이다.
  4. stride
    • 필터는 입력 데이터를 지정한 간격으로 순회하면서 합성곱을 계산하는데, 여기서 지정된 간격으로 필터를 순회하는 간격을 stride라고 한다.
    • ex) stride = 2, 필터는 2칸씩 이동하면서 합성곱을 계산한다.
  5. feature map
    • convolution layer의 입력 데이터를 필터가 순회하며 합성곱을 통해 만든 출력을 feature map 또는 activation map이라고 한다.
    • feature map은 합성곱 계산으로 만들어진 행렬이고 activation map은 feature map 행렬에 활성 함수를 적용한 결과이다.
  6. padding
    • convolution 레이어에서 Filter와 stride에 작용으로 feature map 크기가 입력 데이터보다 작은데 패딩을 이용해 출력 데이터가 줄어드는 것을 방지한다.
    • 패딩은 입력 데이터의 외각에 지정된 픽셀만큼 특정 값으로 채워 넣는 것이다 (보통 0으로 채워 넣음)
    • 추가로 이미지의 외각을 인식하는 학습 효과도 있다.
  7. pooling layer
    • convolution layer의 출력 데이터를 입력으로 받아서 출력 데이터의 크기를 줄이거나 특정 데이터를 강조하는 용도로 사용한다.
    • 일반적으로 polling 크기와 stride를 같은 크기로 설정하여 모든 원소가 한 번씩 처리되도록 설정한다.

 

아래의 사진으로 파라미터 개수와 출력 데이터의 크기를 계산해보자

  • convolution layer1
    • 입력 데이터 shape : (39,31,1)
    • 출력 데이터 shape :
      • row : (39 - 4) / 1 + 1 = 36
      • col : (31 - 4) / 1 + 1 = 28
      • channel : 20
    • 학습 파라미터 : 4 * 4 * 1 * 20 = 320개
  • max polling layer1
    • 입력 데이터 : (36,28,20)
    • 출력 데이터 :
      • row : 36 / 2 = 18
      • col : 28 / 2 = 14
      • channel : 20
    • 학습 파라미터 : 0
  • convolution layer2
    • 입력 데이터 shape : (18,14,20)
    • 출력 데이터 shape :
      • row : (18 - 3) / 1 + 1 = 16
      • col : (14 - 3) / 1 + 1 = 12
      • channel : 40
    • 학습 파라미터 : 3 * 3 * 20 * 40 = 7,200개
  • max polling layer2
    • 입력 데이터 : (16,12,40)
    • 출력 데이터 :
      • row : 16 / 2 = 8
      • col : 12 / 2 = 6
      • channel : 40
    • 학습 파라미터 : 0
  • convolution layer3
    • 입력 데이터 shape : (8, 6 ,40)
    • 출력 데이터 shape : 필터 (3,3)
      • row : (8 - 3) / 1 + 1 = 6
      • col : (6 - 3) / 1 + 1 = 4
      • channel : 60
    • 학습 파라미터 : 3 * 3* 40 * 60 = 21,600개
  • max polling layer3
    • 입력 데이터 : (6,4,60)
    • 출력 데이터 :
      • row : 6 / 2 = 3
      • col : 4 / 2 = 2
      • channel : 60
    • 학습 파라미터 : 0
  • onvolution layer4
    • 입력 데이터 shape : (3,2,60)
    • 출력 데이터 shape :
      • row : (3 -2) / 1 + 1 = 2
      • col : (2- 2) / 1 + 1 = 1
      • channel : 80
    • 학습 파라미터 : 2 * 2 * 80 * 60 = 19,200개
  • flatten layer
    • fully connected neural network의 형태로 변경하는 레이어로 파라미터가 존재하지 않고, 입력 데이터의 shape 변경만 수행한다.
    • 입력 데이터 : (2,1,80)
    • 출력 데이터 : (160,1)
  • softmax layer
    • 분류 클래스 : 100개
    • 입력 데이터 : (160,1)
    • 출력 데이터 : (100,1)
    • weight shape : (100,160)
    • 파라미터 : 100 * 160 = 160,000개

출처 : http://taewan.kim/post/cnn/

 

CNN은 어떻게 파라미터 수를 줄이는 것일까??

-> parameter sharing

  • (x, y)에서 어떤 patch feature가 유용했다면, 이 feature는 다른 위치(x2, y2)에서도 유용할 것이다를 전제로 각 depth 내에 뉴런들이 같은 가중치와 편향을 가지도록 제한한다.
  • 여기서 depth는 신경망의 layer수가 아닌 feature map의 개수이다.
  • 즉 depth방향으로 자른 2차원 slice를 ‘depth slice’라 할 때, 각 depth slice 내에 뉴런들이 하나의 파라미터를 서로 ‘공유’하도록 하는 것이다.

출처 : https://nanunzoey.tistory.com/entry/CNN-Parameter-Sharing

 

 

마지막으로 1x1 Convolution을 적용하는 이유는?

- 차원을 줄이고

- 파라미터 수는 줄이고 깊이는 늘리기 위해서이다.

-> 파라미터가 줄어들면 성능이 증가하는데, 깊이가 늘어나면 파라미터가 증가하기 때문에 1*1 convolution을 진행한다.

 

cnn 개념 용어를 정리하다 보니 길어졌다..!

틀린 부분이 있다면 지적해주세요!

Comments