본문 바로가기
Deep Learning

[딥러닝] CNN, 합성곱 신경망

by 단깅수 2024. 7. 8.
728x90

이번에 소개할 내용은 합성곱 신경망의 개념과 등장 배경, 구성 요소 등에 대한 내용이다.

합성곱 신경망이 등장하기 이전 딥러닝 모델은 MLP (Multi-layer Perceptron), 즉 퍼셉트론을 다층으로 쌓아서 사용했었다. 하지만 MLP 모델의 특성상 입력층, 출력층 모두 1차원이어야 하기 때문에 이미지 등 위치 정보가 중요한 데이터를 다루기에 적합하지 않다는 문제가 발생한다. 이 때 위치 정보를 살리기 위해서 합성곱 아이디어를 신경망 모델에 적용한 모델이 CNN이다.

 

합성곱 신경망 개요

https://yjjo.tistory.com/8

오늘날 사용되는 많은 CNN 구조의 기본 뿌리는 LeNet에서 유래했다. 

 

이미지 input을 받아서 행렬곱을 통해 위치적으로 중요한 부분에 더 큰 가중치를 두어 계산하는 방식으로 위치 정보를 보존하고 채널과 층을 여러개 쌓으면서 색상에 대한 정보도 보존하는 방식이다. 층을 거쳐 계산해 나아가다가 마지막 output에는 구분하고자 하는 class 개수만큼 차원을 설정해주어 계산한다고 요약할 수 있겠다.

 

컴퓨터는 image를 pixel 값으로 구성된 행렬로 인식하기 때문에 이러한 계산이 가능한데 예를 들어

- ex) 224 x 224 x 3 (height, width, RGB) 로 구성될 수 있다. 

구성 후에 어떤 식으로 계산되는지, 구성 요소는 뭐가 있는지 아래에서 바로 알아보도록 하겠다.


합성곱 신경망 구성 요소

1) Filter

필터는 입력 이미지의 특징을 잡아내기 위한 Detector의 역할을 수행한다.

예를 들어 이미지가 고양이임을 알기 위해서는 특징을 찾아야 한다. (뾰족한 귀, 둥근 얼굴, 긴 수염, 꼬리 등)

이를 신경망 층을 거치면서 행렬곱 연산을 통해 학습한다고 이해하면 편할 것이다.

 

아래는 필터에 관한 간단한 예시이다.

입력 이미지에서 곡선 특징을 잡아내기 위한 Filter로, 곡선에 해당하는 부분만 30의 가중치를 둔 모습이다.

왼쪽의 Filter size 는 7 x 7이라고 할 수 있다.

 

 

2) Feature Map

https://post-blog.insilicogen.com/blog/i/entry/346

합성곱 연산의 결과를 Feature Map이라고 부른다. 

그래서 이미지의 특징을 잘 잡아내어 반영했는지를 Feature map을 보고 확인할 수 있다.

특히 Result에 Activation Fuction (활성화 함수)를 적용할 수 있고 이를 Activation Map 이라고도 부를 수 있다.

 

3) Stride

https://wikidocs.net/152775

Stride는 위에서 설명한 필터가 Height 혹은 Width 방향으로 몇 칸씩 이동하면서 정보를 추출할지 정하는 개념이다.

당연한 얘기겠지만 Stride의 크기에 따라 후에 나올 Feature map의 크기가 바뀐다.

Stride를 크게 하면 정보의 손실이 커지지만 연산 속도나 시간 측면에서 효율적이고 Stride를 작게 하면 정보를 더 잘 보존할 수 있지만 연산 속도나 시간이 효율적이지 못하는 단점이 있어 선택과 집중을 잘 해야 할 것이다.

 

4) Padding

패딩 없이 필터와 Stride만으로 층을 거치면서 연산하게 되면 어쩔 수 없이 Feature Map의 크기가 줄어들 수밖에 없다.

합성곱 연산을 수행하기 때문에 당연히 줄어드는 결과를 얻는다.

만약 Filter 크기를 1 x 1로 설정한다면 크기가 줄어들지 않을 수 있지만 Filter 크기를 1 x 1로 설정할 이유가 없다.

따라서 Feature Map의 크기가 줄어듦을 방지하기 위해 나온 개념이 Padding이다.

 

행렬 Size가 줄어드는 것이 왜 문제가 되냐 할 수 있다.

행렬곱을 몇 칸씩 옮겨가면서 수행하면 모서리 부분은 상대적으로 연산이 덜 될 수 있다.

그래서 이미지 Fixel의 모든 부분이 동일한 비율로 합성곱될 수 있게 하는 역할도 Padding이 수행한다.

 

이러한 Padding은 몇 가지 종류가 있다.

  • Valid Padding : Padding을 하지 않는 것
  • Full Padding : Input의 모든 요소들이 합성곱 연산에 같은 비율로 참여하도록 하는 Padding
  • Same Padding : 합성곱 연산의 Output 크기를 Input 크기와 동일하게 유지하는 Padding
  • Zero Padding : Padding 영역을 0으로 채우는 Padding

아래는 Zero Padding의 예시이다.

https://velog.io/@nochesita

 

5) Pooling

Pooling은 합성곱 Layer의 Output을 Input으로 새롭게 받아 Feature Map의 크기를 줄이거나 특정 Input을 강조하기 위해서 사용한다.

일반적으로 한 원소가 두 번 이상의 Pooling 연산에 사용되지 않는 것이 특징이다.

종류로는 대표적으로 3가지가 있다.

  • Max Pooling : 최대값을 사용
  • Average Pooling : 평균값을 사용
  • Min Pooling : 최소값을 사용

 

6) Quiz

개념 이해에 도움이 되는 문제를 가져와봤으니 한 번 시간날 때 해보면 좋을 것이다.

  • Image Size : 480 x 224
  • Padding Size : 2
  • Filter Size : 6 x 6
  • Stride : 2
  • Max Pooling : 2 x 2
  • Output size : ??
728x90