상세 컨텐츠

본문 제목

[Deep Learning-딥러닝]CNN(Convolution neural network) - 합성곱 신경망

Artificial Intelligence

by [성운] 2019. 9. 1. 14:02

본문

이번 포스팅은 컨볼루션 신경망(Convolution neural network) 입니다. 컨볼루션 신경망은 영상 인식에 특화된 딥러닝입니다. 컨브넷(ConvNet)1980~90년대에 개발된 기술입니다(LeCun Y.et., "Handwritten digit recognition with a back-propagation network")

컨브넷의 구조

컨브넷은 뇌의 시각피질이 이미지를 처리하고 인식하는 원리를 바탕으로 한 신경망입니다.

기본적으로 영상 인식은 분류 문제에 해당합니다. 예를 들어 사진을 보고 고양이인지 개인지 인식해내는 문제는 해당 사진을 개와 고양이 중 어느 범주로 분류할 지와 같은 문제입니다. 이러한 이유로 영상 인식에 사용되는 컨브넷의 출력층은 다범주 분류 신경망으로 구성하는 게 일반적입니다.

 

컨브넷 구조

 원본 이미지의 고유한 특징(feature)이 잘 드러나게 가동된 이미지를 사용해야 성능을 높일 수 있습니다. 특징을 추출하기 위해 컨볼루션 연산을 하며 다음 그림은 컨브넷의 구조를 나타냅니다.

데이터는 특징 추출 신경망을 먼저 통과하고 추출된 이미지는 분류 신경망에 다시 입력됩니다. 분류 신경망은 이미지의 특징을 토대로 이미지의 최종 범주를 분류합니다.
컨브넷의 특징 추출 신경망은 컨볼루션 계층(convolution layer)과 풀링 계층(pooling layer)을 차례로 쌓은 형태로 되어 있습니다. 컨볼루션 계층은 컨볼루션 연산을 통해 입력 이미지를 변환하는 역할을 합니다. 풀링 계층은 주위의 픽셀을 묶어서 하나의 대표 픽셀로 바꿉니다. 즉 풀링 계층은 이미지의 차원을 줄이는 역할을 합니다.

컨브넷은 주로 이미지를 대상으로 하므로 컨볼루션과 풀링 계층의 연산은 2차원상에서 이루어집니다.(다른 신경망과 다른 점)

 

합성곱 계층 – Convolution Layer

컨볼루션 계층은 특징 추출 신경망의 요소 중 하나입니다. 입력 이미지에서 고유한 특징을 부각하게 시킨 이미지를 새로 만들어내는 역할을 합니다. 이러한 이미지를 특징맵(feature map)이라고 부릅니다. 컨볼루션 계층은 필터를 이용해 이미지를 다른 이미지로 변환하며, 입력 이미지를 처리하면 특징맵을 얻을 수 있습니다. 참고로 컨볼루션 계층에서 출력되는 특징맵의 개수는 필터의 개수와 같습니다.

특징맵 수 = 필터 수

필터의 이동 방향은 왼쪽에서 오른쪽, 위에서 아래로 전체 영역을 커버할 때까지 이동합니다. CNN의 핵심 특징은 가중치 행렬 W와 편향 b를 은닉 계층의 모든 뉴런이 공유한다는 점입니다.

예를 들어 28*28 크기의 이미지를 필터 5*5, 스트라이드(stride) 1일 경우 24*24 크기의 은닉 계층을 만듭니다. 즉 은닉 계층의 모든 뉴런에 대해, 여기서는 24*24(576)개의 뉴런이 같은 Wb를 사용합니다. 즉 은닉 계층의 모든 뉴런에 대해, 여기서는 24*24(576)개의 뉴런이 같은 Wb를 사용합니다. 따라서 완전 연결 신경망에 비해 상당한 양의 가중치 매개변수가 감소한다는 것을 알 수 있습니다. 가중치 행렬 W를 공유하지 않는다면 5*5*24*24(14000)개가 필요합니다.

또한 좀 더 좋은 결과를 내기 위해서는 이미지 바깥으로도 윈도가 넘어갈 수 있도록 하는 게 좋습니다. 이를 위해 0으로 이미지의 바깥 테두리를 채울 수 있습니다. 이렇게 채울 테두리의 크기를 지정하는 매개변수를 패딩(padding)이라고 합니다.

컨볼루션 연산 방법

데이터가 이미지이므로 2차원이며, 필터도 2차원 행렬입니다. 필터는 보통 5*5 또는 3*3 행렬이 주로 쓰이며 요즘은 1*1행렬도 쓰입니다. 컨브넷에서 필터 행렬의 값은 신경망의 학습 과정을 통해 가중치 값을 결정합니다.

다음 예로 컨볼루션 연산을 알아보겠습니다.

컨볼루션 연산

컨볼루션 계층은 입력 이미지와 컨볼루션 필터를 연산해 특징맵을 얻어 냅니다. 컨볼루션 계층에서 추출할 특징맵은 컨볼루션 필더에 의해 학습됩니다. 즉 어떤 컨볼루션 필터를 사용하느냐에 따라 컨볼루션 계층에서 추출해 특징이 결정됩니다.

컨볼루션 필터로 처리된 특징맵은 활성함수를 거쳐 최종 출력됩니다. 참고로 문제에 따라 활성함수를 달리 쓰이며(ReLU, sigmoid, tanh), 아예 생략되는 때도 있습니다.

 

풀링 계층 – Pulling Layer

풀링 계층은 이미지의 크기를 줄이는 역할을 합니다. 다른 말로 원본 데이터의 차원을 줄입니다. 이미지에서 특정 영역에 있는 픽셀들을 묶어서 하나의 대푯값으로 축소합니다.

 고려점

  • 대푯값 선정 방법(보통 평균값 또는 최대값으로 함)
  • 픽셀 묶음 단위

다음 예는 최대값으로 풀링한 예제입니다.

풀링 연산

입력 이미지의 2*2 픽셀 형태로 묶되, 각 묶음은 픽셀이 겹치지 않도록 합니다. 위 특징맵이 풀링 계층을 통과하면, 2*2 픽셀의 이미지로 축소됩니다.

풀링 계층은 입력 이미지에서 인식 대상이 한쪽으로 치우쳐 있거나 돌아가 있어도 어느 정도 보상해주는 역할을 합니다. 또한 이미지의 크기를 줄여 주어, 계산량을 줄이고 과적합을 방지하는 데도 도움이 됩니다.

 

글이 도움이 되셨다면 공감 부탁 드립니다.

감사합니다.

 

[참고자료]

딥러닝 첫걸음

텐서플로 첫걸음

관련글 더보기

댓글 영역