인공지능 AI

[인공지능/딥러닝/AI] 합성곱 신경망 CNN(Convolutional Neural Network)

CNN은 딥러닝을 적용하는 거의 모든 분야에서 사용이 되고 있습니다. 

특히 이미지 인식 분야에서는 정확한 성능으로 인해 가장 많이 사용되고 있습니다.

 

일반 신경망 아키텍처와 CNN 아키텍처의 차이

2020/08/26 - [인공지능 AI] - [인공지능/AI]텐서플로를 이용한 MNIST 딥러닝학습

이전 게시글에서 공부했던 일반 신경망 아키텍처는 입력층,은닉층,출력층으로 이루어져 1. 입력데이터에 대해 2.  피드포워드를 수행하여 출력값 계산하고, 3. 정답T와 출력값을 비교하며 cross-entropy 손실함수 값을 구해서 4.최소가 될 때까지 오차역전파를 이용해 값을 최적화해갑니다.

 

하지만 합성곱 신경망 CNN 아키텍처는 위 일반신경망의 은닉층 부분이 1개 이상의 콘벌루션층(Convolutional Layer)과 완전연결층(Flatten Layer)로 바뀝니다. 

 

기본신경망 아키텍처처럼 2.피드포워드 수행과 3.cross-entropy로 비교 4. 오차역전파로 손실함수 최소가 될때까지 가중치와 바이어스 최적화 구조는 동일합니다.

하지만 2. 피드포워드 수행시 콘볼루션 연산과 풀링 연산을 하고 완전연결층으로 전달하는 구조라는 것이 차이점입니다. 

 

그렇다면 콘볼루션층(Convolution Layer) 의 구성을 알아보겠습니다.

conv(Convolution) 

콘볼루션 연산은 다음과 같이 수행합니다.

A1*F2+b2 => 입력 데이터 A1 특징(Feature) 추출
A2*F3+b3 => 입력 데이터 A2 특징(Feature) 추출

(CNN구조에서 *은 콘볼루션 연산을 의미합니다.) F2와 F3는 필터라고 부릅니다.

각각 A1*F2+b2=C2 는 콘볼루션층1으로 들어오는 데이터A1의 특징을 가진 데이터, A2*F3+b3=C3은 콘볼루션층2으로 들어오는 데이터A2의 특징을 가진 데이터입니다.

 

그렇다면 콘볼루션 연산은 어떻게 할까요

어려워보이지만 사실 곱셈과 덧셈으로만 이루어진 간단한 연산입니다.

출처: Cambridge University 

입력데이터 I 와 필터 K를 각각 곱하고 더해서 I*K에서 4라는 값을 도출해냅니다. 

이러한 연산을 합성곱, 즉 Convolution이라고 합니다

직관적으로 이러한 이미지로 이해할 수 있습니다.

 

여기에 콘볼루션층에 존재하는 바이어스를 최종적으로 더해주면 최종적인 Feature Map(특징 맵)이 완성됩니다.

 

pooling(풀링)

풀링은 입력데이터를 압축하여 연산량을 줄이는 역할을 합니다.

이미지: https://computersciencewiki.org/index.php/File:MaxpoolSample2.png

4x4 데이터에서 각각 최댓값을 뽑아내어 풀링을 수행합니다. 

즉, 왼쪽위. 오른쪽위. 왼쪽아래. 오른쪽아래 순서대로 이동하면서 최댓값을 뽑아내는 과정입니다.

 

최솟값 풀링, 평균값 풀링도 존재하는데 이미지 인식을 위해 CNN을 사용할때는 주로 최댓값 풀링을 사용합니다.

 

padding(패딩)

패딩이란 콘볼루션 연산 전에 입력 데이터 주변을 특정값(ex. 0) 으로 채우는 것입니다.

패딩을 수행하지 않고 콘볼루션연산을 하면 4x4 크기의 입력 데이터가 2x2 크기로 줄어듭니다.

그리고 이것이 반복되면 1x1 후에 데이터가 더 이상 존재하지 않게 되겠죠

 

이를 방지하기 위해 패딩을 사용하여 입력데이터 사방에 0과 같은 특정 값으로 채운 후에 콘볼루션 연산을 수행하면

입력데이터 크기와 동일한 크기의 데이터를 출력할 수 있습니다. 

이미지: https://medium.com/@ayeshmanthaperera/what-is-padding-in-cnns-71b21fb0dd7