찔끔찔끔씩😎

[CNN] 합성곱 신경망 (Convolutional Neural Network) 본문

Study/인공지능

[CNN] 합성곱 신경망 (Convolutional Neural Network)

댕경 2022. 5. 16. 18:53
728x90

🔎 CNN Architecture, 합성곱 신경망

합성곱 신경망은 이미지 처리에 탁월한 성능을 보이는 신경망이다.

합성곱 신경망은 크게 '합성곱층(Convolution layer)''풀링층(Pooling layer)' 으로 구성된다.

 

  • 합성곱층(Convolution layer)
    • CONV: 합성곱 연산
    • ReLU: 합성곱 연산의 결과가 활성함수를 지난다.

 

  • 풀링층(Pooling layer)
    • 풀링 연산을 진행

 

🔎 채널

이미지 처리의 기본적인 용어

기계는 글자나 이미지보다 숫자 즉, 텐서를 더 잘 처리한다.

 

이미지는 높이, 너비, 채널 3차원의 텐서이다.

  • 높이 = 이미지 세로 방향 픽셀 수
  • 너비 = 이미지 가로 방향 픽셀 수
  • 채널 = 색 성분

 

이때 각 픽셀은 0~255 사이의 값을 가진다.

흑백의 경우 채널 수가 1이며, 컬러의 경우 RGB 조합으로 채널 수가 3이다.

ex) 손글씨 데이터는 흑백 이미지로 채널 수 = 1 이며, 2828 픽셀의 데이터 이므로 28*28*1 크기의 3차원 텐서이다.

 

🔎 합성곱 연산, Convolution operation

합성곱층은 합성곱 연산을 통해서 이미지의 특징을 추출하는 역할을 한다.

  • 커널(kernel)또는 필터(filter)라는 n*m 크기의 행렬로 이미지를 처음부터 끝까지 겹쳐가며 훑는다.
  • 겹쳐지는 부분의 각 이미지와 커널 원소의 값을 곱하여 모두 더한 값을 출력으로 한다.

 

step 1 example

 

step 2 example

 

step 3 example

 

3 * 3 크기의 특성 맵

 

위와 같이 입력으로부터 커널을 사용하여 합성곱 연산을 통해 나온 결과를 특성 맵(feature map) 이라한다.

커널로 3*3을 사용하였지만 사용자가 임의로 정할 수 있으며,

커널의 이동범위 또한 한 칸이 아닌 다르게 설정할 수 있다. 이때 커널 이동범위를 스트라이드(stride)라고 한다.

 

🔎 패딩 Padding

5*5 이미지에 3*3 커넬로 합성곱 연산을 하면, 스트라이드가 1일 경우 3*3 특성맵을 얻을 수 있다.

이처럼 합성곱 연산시 특성 맵은 입력 이미지보다 크기가 작아지는 특징이 있는데, 합성곱 층을 여러개 쌓았다면 최종적으로 얻은 특성맵은 초기 입력보다 매우 작아진 상태일 것이다.

합성곱 연산 이후에도 특성맵의 크기가 입력의 크기와 동일하게 유지되도록 하고 싶다면, 패딩(Padding)을 사용하자.

 

패딩은 합성곱 연산을 하기 전에 입력의 가장자리에 지정된 개수의 폭만큼 행과 열을 추가해주는 것이다. 주로 0으로 채우는 제로 패딩을 사용한다.

 

5*5 이미지에 1폭짜리 제로패딩을 사용한 것

 

🔎 가중치

다층 퍼셉트론과 비교해보자. 3*3 이미지를 처리한다고 생각해보자.

 

다층 퍼셉트론의 가중치

먼저 이미지를 1차원 텐서인 벡터로 만들어야 한다.

이는 곧 1) 입력층은 9개의 뉴런을 가진다. 는 의미이고

2) 4개의 뉴런을 가지는 은닉층을 추가한다고 해보자.

각 연결선은 가중치를 의미하므로, 가중치는 총 36개이다.

 

합성곱 신경망의 가중치

2*2 커널과 스트라이드 =1 을 사용하여 3*3 이미지를 처리한다.

 

합성곱 신경망에서의 가중치는 커널 행렬의 원소들이다. 이를 인공 신경망 형태로 표현하면 아래와 같다.

 

최종적으로 특성 맵을 얻기 위해서는 동일한 커널로 이미지 전체를 훑으며 합성곱 연산을 진행하는데, 이때 사용되는 가중치는 결국 4개뿐이다. 그리고 각 합성곱 연산마다 이미지의 모든 픽셀을 사용하는 것이 아니라 커널과 맵핑되는 픽셀만을 입력으로 사용한다. 결국 합성곱 신경망은 다층 퍼셉트론을 사용할 때보다 훨씬 적은 수의 가중치를 사용하며 공간적 구조 정보를 보존한다.

 

합성곱 연산을 통해 얻은 특성 맵은 다층 퍼셉트론 때와 마찬가지로 비선형성 추가를 위해 ReLU 함수 등을 통과하게 된다.

 

즉, 합성곱 연산을 통해 특성 맵을 얻고, 활성화 함수를 지나는 연산을 하는 합성곱 신경망의 층을 합성곱 신경망에서는 합성곱 층(convolution layer)이라 한다.

 

🔎 3차원 텐서의 합성곱 연산

다수의 채널을 가진 입력데이터를 가지고 합성곱 연산을 어떻게 할까?

  1. 커널의 채널 수도 입력의 채널 수 만큼 존재하게 만들면 된다. “입력데이터의 채널수” = “커널의 채널 수”
  2. 합성곱 연산을 채널마다 수행한다.
  3. 결과를 모두 합하여 최종 특성 맵을 추출한다.

 

위 과정에서 3개의 커널이 아닌 3개의 채널을 가진 1개의 커널이라는 점을 주의하자.

입력 = 높이 3 * 너비 3 * 채널 3

커널 = 높이 2 * 너비 2 * 채널 3

특성맵 = 높이 2 * 너비 2 * 채널 1

 

🔎 풀링, Pooling

풀링층에서는 특성 맵을 다운샘플링하여 특성맵의 크기를 줄이는 풀링 연산이 이루어진다.

풀링 연산에는 일반적으로 최대 풀링과 평균 풀링이 사용된다.

 

맥스 풀링은 위 예시와 같이 커널과 겹치는 영역 안에서 최댓값을 추출하는 방식으로 다운샘플링을 수행하며, 평균 풀링은 평균값을 추출하는 연산을 수행한다.

 

풀링 연산은 커널과 스트라이드 개념이 존재한다는 점에서 합성곱 연산과 유사하지만, 학습해야 할 가중치가 없고 연산 후에 채널 수가 변하지 않는다는 점 (입력값과 출력값의 채널 수 비교) 의 차이가 존재한다.

 

 

Comments