검수요청.png검수요청.png

합성곱 신경망

해시넷
이동: 둘러보기, 검색
합성곱 신경망(CNN)

합성곱 신경망(CNN; Convolutional Neural Network)은 합성곱 연산을 사용하는 인공신경망(Artificial Neural Network, ANN) 중의 하나이다. 컨볼루션 신경망이라고도 부른다. 합성곱(convolution)이란 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 연산자이다. 합성곱을 사용하면 3차원 데이터의 공간적인 정보를 유지한 채 다음 레이어로 보낼 수 있다. 대표적인 합성곱 신경망으로는 LeNet(1998)과 AlexNet(2012)가 있으며, VGG, GoodLeNet, ResNet 등은 더 깊은 층을 쌓은 합성곱 신경망 기반의 심층신경망(DNN)이다.[1]

개요

합성곱 신경망(Convolutional neural network, CNN)은 컴퓨터 과학의 일종으로 시각적 이미지를 분석하는 데 쓰이는 인공 신경망의 한 종류이다.[2] 합성곱 신경망은 특히 음성 인식이나 사물 이미지 인식에서 주료 사용한다. 이 신경망은 다차원 배열 데이터를 처리가 가능하다. 따라서 컬러 이미지와 같은 다차원 배열 처리에 특화 되어 있다. 또한 일반적인 신경망은 이미지 데이터를 그대로 처리하는 데 반해 합성곱 신경망은 이미지에서 특징을 추출해 처리한다.[3] 그렇기 때문에 이미지 인식 분야에서 딥러닝을 활용한 기법은 대부분 합성곱 신경망을 기초로 만들어졌다. [4]

필터의 종류와 기능

또한 합성곱 신경망은 필터링 기법을 인공 신경망에 적용하여 이미지를 더욱 효과적으로 처리하기 위해 컨볼루션 네트워크 논문(LeCun , 1989)에서 처음 소개 되었다. 시간이 지나 '사물 인식에 적용하는 그라디언트 기반 학습'(LeCun et al., 1998) 논문에서 현재 딥 러닝에서 이용되고 있는 형태의 합성곱 신경망을 제안했다. 기존의 필터링 기법은 옆에 첨부한 그림과 같이 고정된 필터를 이용하여 이미지를 처리했다. 그러나 합성곱 신경망의 기본 개념은 "행렬로 표현된 필터의 각 요소가 데이터 처리에 적합하도록 자동으로 학습되게 하자"는 것이다. 예를 들어, 이미지를 분류 알고리즘을 개발하고자 할 때 필터링 기법을 이용하면 분류 정확도를 향상시킬 수 있다. 그러나 이 경우 한 가지 문제점은 사람의 직관이나 반복적인 실험을 통해 알고리즘에 이용될 필터를 결정해야 한다는 것이다. 이러한 상황에서 합성곱 신경망을 이용하면, 알고리즘은 이미지 분류 정확도를 최대화하는 필터를 자동적으로 학습할 수 있다.[5]

기원

합성곱 신경망의 기본

1958년에서 1959년, 데이비드 H. 허벨(David H. Hubel)과 토스텐 위젤(Torsten Wiesel)은 시각 피질의 구조에 대한 결정적인 힌트를 얻은 고양이 실험을 진행했다. 이들은 이 실험을 통해 시각 피질 안에 있는 수 많은 뉴런이 작은 국부 수용 영역(local receptive field)을 갖고 있다는 것을 화긴했다. 이는 뉴런이 시야에 들어온 일부 범위 안에 들어온 시각 자극에만 반응한다는 뜻이다. 뉴런의 수용 영역은 서로 겹칠 수 있으며, 이렇게 서로 겹친 수용 영역이 어루어져 전체 시야가 이루어진다. 또한 어떤 뉴런은 수직선의 이미지에만 반응하고, 어떤 뉴런은 특정 각도의 선에만 반응하는 반면에 어떤 뉴런은 넓은 수용 영역을 가진 데 반해 저수준의 패턴이 합친 복잡한 패턴(글귀 사물 등)에 반응한다는 것이 밝혀졌다.

이러한 관찰을 통해 허벨과 위젤은 높은 수준을 갖춘 뉴런이 바로 옆에 있는 낮은 수준을 가진 뉴런의 출력에 기반한다는 아이디어를 고안했다. 이 아이디어가 바로 지금의 합성곱 신경망으로 발전해 온 것이다. 이후 1998년에 발표 된 '사물 인식에 적용하는 그라디언트 기반 학습'(LeCun et al., 1998) 논문에서 손글씨 숫자를 인식하는 데 사용한 LenNet-5를 소개하면서 합성곱 신경망이 이 세상에 등장하게 되었다.[6]

특징

합성곱 신경망의 구조

기존 신경망 구조

첨부된 그림과 같이 기존 신경망은 서로 인접해 있는 계층의 모든 뉴련이 결합 되어 있는 완전연결(fully-connected) 상태로, 아핀(Affine) 계층으로 구성되어 있다. 이처럼 기존 신경망은 아핀으로 명시된 완전연결 연산과 ReLU(Rectified Linear Unit, ReLU) 함수와 같은 비선형 활성 함수의 결합으로 이루어진 계층을 여러 개 쌓은 구조이다.

기존 신경망 구조

합성곱 신경망은 기존 신경망에 합성곱 계층(Conv)와 풀링 계층(Pooling, 풀링 계층은 생략할 수 있다)을 완전연결한 계층 이전에 추가하여 원본 이미지에 필터링 기법을 적용한다. 이어 해당 이미지에 분류 연산을 수행하도록 구성한다. 그러면 합성곱 계층은 이미지에 필터링 기법을 적용하고, 풀링 계층은 각 이미지의 국소적인 부분을 하나의 대표적인 스칼라 값으로 변환하여 이미지 크기를 줄이는 등 다양한 기능을 수행한다. 합성곱 신경망의 또 다른 특징은 합성곱 계층과 풀링 계층을 추가해도 출력과 가까운 층에는 계속해서 사용한 'Affine-ReLU' 계층 구성을 사용할 수 있다는 것이다. 또한 마지막 계층에서는 'Affine-Softmax' 조합을 그대로 사용한다. 이것이 일반적인 합성곱 신경망의 구성이다.

합성곱 계층

필터

합성곱 계층에서의 수용 영역을 필터(filter) 또는 커널(kernel)이라고 한다. 바로 이 필터가 합성곱 계층의 가중치 파라미터(W)이며, 학습 단계에서 적절한 필터를 찾도록 만든다. 또한 합성곱 계층에서 입력 데이터에 필터를 적용하여 필터와 유사한 이미지의 영역을 강조하는 특징 맵을 출력하여 다음 층으로 전달한다.

필터의 구조

완전 연결 계층

여기서 말하는 완전 연결 신경망이란 서로 인접해 있는 계층의 모든 뉴런이 결합 되어 있는 신경망이란 뜻이다.[7]또한 이는 입력 데이터와 가중치가 1 대 1로 대응한 상태를 완전 연결이라고 말한다. 이는 행력의 내적(Affine)으로 표현 된다. 이 완전 계층의 문제점은 바로 데이터의 형상을 무시한다는 것이다. 입력 데이터가 다차원일 때, 완전 연결 계층에 입력하기 위해서는 이 다차원 데이터를 다차원으로 평탄하게 만든 다음 입력해야 하다. 즉, 이 계층을 이용해 MNIST 데이터셋을 분류하는 모델을 만들 경우, 3차원(세로, 가로, 채널)인 MNIST 데이터(28, 28, 1)를 입력층(input layer)에 넣어주기 위해서 3차원 에서 1차원의 평평한(flat) 데이터로 펼쳐줘서 넣어야만 했다. 다시 말해서 28, 28, 1이라는 3차원 데이터를 ​28×28×1=784 라는 1차원 데이터로 바꾼 다음 입력층에 그대로 적어 넣어야만 한다. 또한 이 계층의 단점인 '데이터 형상'의 무시를 이미지로 표현하면 다음과 같다.

완전연결계층의 단점

위 그림에서도 알 수 있듯이 완전 연결 계층은 공간적으로 가까운 픽셀은 값이 비슷하거나 RGB의 각 채널은 서로 밀접하게 관련되거나 거리가 먼 픽셀끼리는 별 연관이 업성지는 등, 3차원 속 의미를 갖는 본질적인 패턴을 무시(ignore)한다. 즉, 가장 흔한 다차원 데이터인 이미지를 생각해보면, 한 이미지는 2차원 픽셀 배열에 RGB 채널이 더해져 3차원을 이룬다, RGB의 각 채널들은 서로 밀접하게 연결 되어 있고, 픽셀 간의 거리에 따라서 연결 되어 있는 등 3차원 속에서 의미를 갖는 패턴을 갖고 있다. 그러나 완전 연결 계층은 형상을 무시하고 모든 입력 데이터를 동일 차원으로 취급하기에 형상에 담긴 정보를 살릴 수 없다. 3차원인 이미지를 1차원 데이터로 변형하면서 어떻게 '공간적 정보'를 잃게 되는 지 다음의 그림에서 확인할 수 있다.

완전연결계층의 단점

합성곱 연산

합성곱 계층은 합성곱 신경망에서 가장 중요한 구성요고이자, 완전연결 계층과는 다르게 데이터의 형상을 유지한다. 즉, 이미지와 같은 3차원 데이터를 입력하면 그 다음 계층에도 3차원 데이터로 전달한다. 따라서 합성곱 신경망은 이미지처럼 형상을 가진 데이터를 제대로 이해할 수 있다. 그렇기 때문에 합성공 신경망은 이미지 데이터처럼 형상을 갖고 있는 데이터를 제대로 학습할 수 있다고 볼 수 있다. 합성곱 신경망에서 합성곱 계층의 입출력 데이터는 다차원이라 이것을 특징 맵(Feature Map)이라고 한다. 또한 입력 데이트를 입력 특징 맵, 출력 데이터를 출력 특징 맵이라고 한다. 여기서 말하는 합성곱이란 특정 높이나 너비를 갖고 있는 필터(Filter, Kernel)를 일정 간격(Stride)으로 이동해가며 입력 데이터에 적용하는 것을 뜻한다. 합성곱 계층의 뉴런은 입력 이미지가 모든 픽셀에 연결 되는 것이 아니라 합성곱 계층 뉴런의 수용 영역 안에 있는 픽셀에만 연결 되기 때문에, 낮은 합성곱 계층에서는 저수준 특성에 집중하고, 그 다음으로 올라갈 수록 합성곱 계층은 고수준 특성으로 만들어가도록 한다.

합성곱연산 특징

합성곱 계층에서는 위 그림과 같은 합성곱 연산을 수행한다. 이 연산은 이미지 처리에서 말하는 필터(마스크) 연산에 해당한다. 위 그림과 같이 2차원의 입력 데이터가 들어오면 필터(커널)의 윈도우를 일정 간격으로 이동해 가며 데이터에 적용한다. 그 후, 입력과 필터에서 대응하는 원소끼리 곱한 후 그 총합을 구한 뒤 그 결과가 출력 되낟. 이 과젇을 모든 장소에서 수행하면 합성곱 연산의 출력이 완성 된다. 하나의 합성곱 계층에는 입력하는 이미지의 채널 개수 만큼의 필터가 조냊하며, 각 채널에 할당 된 필터를 적용함으로 합공 계층의 출력 이미지가 생성 된다. 예를 들어, 높이×너비×채널이 4×4×1인 텐서 형태의 입력 이미지에 대해 3×3 크기의 필터를 적용하는 합성곱 계층에서는 이미지와 필터에 대한 합성곱 연산을 통해 2×2×1 텐서 형태의 이미지가 생성된다.

합성곱연산 특징

완전연결 신경망에는 가중치 매개 변수와 편향이 있다. 마찬가지로 합성곱 신경망에는 필터의 매개변수가 완전연결 신경망의 가중치에 해당한다. 즉, 합성곱 신경망을 통해 학습이 거듭되면서 필터의 원소 값이 매번 경신되는 것이다. 편향 역시 합성곱 신경망에도 있지만 이 편향은 필터를 적용한 후 데이터가 더해진다. 이 편향은 언제나 하나만 존재한다. 합성곱 신경망을 실제로 구현할 때는 합성곱을 통해 생성된 행렬 형태의 이미지에 비아스(bias)라는 스칼라 값을 동일하게 더하도록 구현하기도 한다. 또한 이미지에 대해 필터를 적용할 때는 필터의 이동량을 뜻하는 스트라이드(stride)를 설정해야 한다. 스트라이드는 보통 1과 같은 작은 값이 적용해야 더 잘 작동하며, 스트라이드가 1일 경우 입력 데이터의 공간 크기는 풀링 계층에서만 조절 할 수 있다.스프라이드는 필터를 적용하는 위치의 간격이기도 하다, 스트라이드가 커지면 출력 크기가 작아지는 등 스트라이드 값에 따라 출력 이미지 크기가 달라진다.

스트라이드 값에 따른 출력 이미지 변화

위 그림처럼 입력 이미지에 합성곱을 수행하면 출력 이미지의 크기는 입력 이미지의 크기보다 점차 작아진다. 그렇기 때문에 합성곱 계층을 거치면서 이미지는 점차 작아지고, 이미지의 가장자리에 있는 픽셀 속 정보는 점점 사라진다. 이러한 문제점을 해결하기 위해 쓰는 것이 바로 패딩이다.

패딩

패딩은 합성곱 연산을 수행하기 전에 입력 데이터 주변을 특정 값(0,1 등-주료 0을 사용하기 때문에 제로 패딩[Zero padding]이라고 부른다)으로 채우는 것을 말한다. 이는 합성곱 연산에서 자주 사용하는 기법이다. 주로 입력 데이터와 출력 데이터의 크기를 맞추기 위해서 사용한다. 예를 들어 폭 1짜리 패딩이라고 하면 데이터 사방 1픽셀을 특정 값으로 채우는 것을 말한다. 그 예시는 아래 그림과 같다.

패딩 예시

패딩을 사용하는 주된 이유는 출력의 크기를 조절하기 위해서이다. 패딩 없이 입력 데이터에 필터를 씌워 합성곱 연산을 수행하면 출력 데이터는 입력 데이터이 베해 무조건 작아진다. 그래서 합성곱 연산을 계속 반복하면 어느 시점에서는 출력 크기가 1이 되고 더 이상 연산을 적용할 수 없게 된다. 이러한 상황을 예방하기 위해 패딩을 쓰는 것이다. 패딩을 사용하면 출력 데이터의 크기를 입력 데이트의 크기와 동일하게 설정할 수 있다. 즉, 입력 데이터의 공간적 크기를 고정한 채로 다음 계층에 전달할 수 있는 것이다.

풀링 계층

풀링(Pooling)은 가로 및 세로 방향의 공가을 줄이는 연산으로, 2차원 데이터의 가로 및 세로 방향의 공간을 줄이는 연산이다. 서브샘플링(Sub-sampling)이라고도 부른다. 풀링은 주로 윈도우 크기와 스트라이드의 값을 같게 설정한다. 다음 그림은 풀링을 처리하는 예시를 보여주는 것이다.

풀링 개념

풀링에는 최대 풀링(Max Pooling), 평균 풀링(Average Pooling) 등이 있다. 최대 풀링은 해당 영역에서 최대값을 취하는 연산이고, 평균 풀링은 대상 영역의 평균값을 계산하는 방법이다. 이미지 인식 분야에서는 주로 최대 풀링을 사용한다. 풀링 계층은 합성곱 계층과 달리 학습해야 할 매개 변수가 없다. 풀링은 대상 영역에서 최대값이나 평균을 취하는 명확한 처리 방식이기 때문이다. 또한 풀링 연산은 입력 데이터의 채널 수 그대로 출력 데이터를 보낸다. 풀링은 2차원 데이터의 크기를 줄이는 연산이므로 3차원을 결정하는 채널 수는 건드리지 않는다. 따라서 채널마다 독립적으로 계산한다. 그리고 풀링 계층은 입력의 변화에 영향을 적게 받는다. 입력 데이터가 조금 변하더라도 불링 게층 자체가 그 변화를 흡수하여 사라지게 하기 때문이다. [8]그러므로 풀링은 이미지 내의 위치 변화에 영향을 받지 않는다. 예를 들어 이미지 우측 상단에 있던 눈이 중앙으로 가더라도, 풀링을 이용하면 이미지 내의 불변성을 찾아내 공간적인 변화를 극복할 수 있다.

이미지 데이터의 특징은 서로 인접해 있는 픽셀들이 서로 매우 비슷하다는 것이다. 따라서 이미지는 픽셀 수준이 아니라, 특정 속성을 갖는 국소 영역 수준으로 표현할 수 있다. 또한 풀링 계층은 이미지 데이터의 이러한 특징을 바탕으로 만들어졌다. 합성곱 신경망에서는 이러한 풀링 계층을 이용하요 다양한 이점을 얻는다. 먼저 최대 풀링의 경우에는 국소 영역에서 가장 큰 값을 해당 영역의 대표값으로 설정한다. 또한 국소 영역 내부에서는 각 픽셀이 이동 및 회전을 해서 위치가 바뀌더라도 출력값이 동일하다. 따라서 풀링 계층을 이용할 경우, 이미지를 구성하는 요소가 바뀌더라더 출력값이 영향을 받는 문제를 줄일 수 있다. 이처럼 합성곱 신경망이 처리해야 하는 이미지 크기가 크게 줄어들기 때문에 인공신경망의 매개 변수 또한 크게 줄어든다. 그래서 풀링 계층을 이용하여 합성곱 신경망의 학습 시간을 크게 줄일 수 있다. 또한 오버피팅(overfitting) 문제 또한 어느 정도 줄일 수 있다.

동영상

각주

  1. 박희경,〈밑바닥부터 시작하는 딥러닝 Chapter7. 합성공 신경망(CNN)〉, 《모두의 연구소 DeepLap》
  2. 합성공 신경망〉, 《위키백과》
  3. 김콜리, 〈#6-(1) 합성곱 신경망(CNN) : 소개 및 구조〉, 《'브콜리의 집' 티스토리 블로그》, 2018-03-16
  4. 합성곱신경망 CNN (Convolutional Neural Network)]〉, 《'Practical Understanding of Data& Dex' 티스토리 블로그》, 2017-06-02
  5. 불, 〈[머신 러닝/딥 러닝 합성곱 신경망 (Convolutional Neural Network, CNN)과 학습 알고리즘]]〉, 《'Untitled' 티스토리 블로그》, 2019-02-16
  6. Excelsior-JH,〈06. 합성곱 신경망 - Convolutional Neural Networks]〉, 《'EXCELSIOR' 티스토리 블로그》, 2018-10-19
  7. 김콜리,〈#6-(2) 합성곱 신경망(CNN) : 합성곱 계층]〉, 《'Broccoli's House' 티스토리 블로그》, 2018-03-18
  8. 김콜리,〈#6-(3) 합성곱 신경망(CNN) : 풀링 계층〉, 《'Broccoli's House' 티스토리 블로그》, 2018-03-18

참고자료

같이 보기


  검수요청.png검수요청.png 이 합성곱 신경망 문서는 인공지능 기술에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.