CNN

Sam (토론 | 기여)님의 2021년 9월 14일 (화) 22:30 판

1 개요

합성곱 신경망. convolutional neural network.

이미지 인식, 음성인식 등 다양한 곳에서 사용. 특히 이미지 인식 분야에서 강력하게 쓰인다.

기본적인 신경망은 Affine계층으로 구현되는 완전연결이었다. affine계층 뒤에 활성화함수가 연결되었는데, CNN에선 활성화함수 앞에 convolutional layer, 뒤에 pooling layer가 붙는다.

일반적으로 은닉층에서 사용하고, 출력 부근에선 affine + 활성화함수 조합을 사용한다.

1.1 개념

완전계층 연결에서의 문제가 있다. 완전연결을 위해 데이터를 1차원 평면화 해주는데, 이때 데이터의 형상이 무너진다. 각 데이터의 거리, 색 조합 등의 정보가 중요할 수도 있는데, 완전연결에선 이를 그냥 한 줄로 세워버리기 때문이다.

때문에 이미지를 그대로 기입할 방법이 필요하게 되었고, 특징 맵이라는 개념으로 입력과 출력을 처리한다.

기본적으로 입력데이터에 필터를 씌워 연산하여 대략적인 형태정보를 뽑아낸다. 이 필터가 매개변수(가중치)에 해당하게 된다. 필터를 여러개 사용하여 다음 층으로 넘기는 것이 일반적이다.

용어 설명
합성곱 계층 특징을 추출하기 위한 계층. 특징 맵을 뽑아낸다.
풀링 계층 세로, 가로 방향의 공간을 줄이는 연산.

해당 공간에서 가장 큰 데이터만 남기는 최대풀링과

대상 영역에서 평균값을 내놓는 평균풀링 등의 방법이 있다.

이미지 인식에선 주로 최대풀링을 사용한다.

학습해야 할 매개변수가 없이 단순 연산으로 진행된다.

합성곱 계층의 필터.

필터를 이미지 처리하면 처음엔 무작위 점이지만, 학습이 이루어질수록 필터별로 규칙성을 갖는 이미지가 된다. 이 필터에 따라 세로선을 강조하는 필터가 되기도 하고, 가로선을 강조하는 필터가 되기도 하는 등 뭔가 정보가 추출된다는 느낌을 준다.

연구에 따르면 층이 깊어질수록 저수준 시각정보 > 추상적 특성을 추출하게 된다. 점차 사물의 의미를 이해해가는 듯한 것처럼 보인다.

1.2 용어

용어 설명
패딩 입력데이터의 겉을 특정 값으로 둘러싸 채운다.

주로 출력 크기를 조정하는 용으로 사용해 입력 데이터의 크기를 일정하게 유지하기 위해 쓰인다.

스트라이드 필터는 행렬을 한 칸씩 이동하며 연산을 진행하는데, 스트라이드는 이 진행 크기를 의미한다. 스트라이드를 키우면 출력 크기가 작아진다.
차원 이미지의 경우 가로세로에 더해 색 정보가 담겨 3차원 정보가 된다.

이때 차원마다 필터를 달리 적용하는 것이 일반적이다. 당연히 차원마다 입력데이터의 크기나 필터의 크기는 같아야 한다.

1.3 합성곱 계층 구현

im2col(image to column)을 이용한다. 이미지를 행렬로 바꾸어 처리한 후 선형대수 라이브러리를 이용해 계산한다. 이것을 affine 계층 구현하듯 처리한다.

class Convolutions:
    def __init__(self, W, b, stride=1, pad=0):
        self.W = W
        self.b = b
        self.stride = stride
        self.pad = pad
    def forward(self, x):  # 이미지를 입력받는다.

2 CNN 예시

2.1 LeNet

손글씨 숫자를 인식하기 위해 1998년에 제안된 네트워크. 합성곱 계층과 풀링계층을 반복하고 마지막에 완전연결계층을 거치면서 결과를 출력한다.

최근에 사용하는 CNN과 다른 점은

  • 활성화함수로 시그모이드 함수를 사용한다는 것. 최근엔 ReLU를 주로 사용한다.
  • LeNet은 서브샘플링으로 중간데이터의 크기를 줄이지만, 현재엔 최대풀링이 대세.

2.2 AlexNet

2012년에 발표된 것. 딥러닝이 주목받게 된 계기이다. LeNet과 크게 다르지 않지만, GPU 등 하드웨어의 발달로 빛을 보게 된 기법이다.

활성화함수로 ReLU 사용, LRN(Local Response Nomalization)으로 국소정규화, 드롭아웃을 사용하여 모델을 개선시켰다.

2.3 VGG

합성곱 계층과 완전연결 계층을 섞어 16층이나 19층으로 심화했다. 작은 필터를 사용한 합성곱 계층을 연속으로 거치는 것과 풀링계층으로 점차 크기를 줄여나가는 것이 특징이다.

2014년 ILSVRC 대회에서 2등을 차지했으나, 구성이 간단하여 자주 사용되는 기법이다.

2.4 GoogLeNet

2014년 ILSVRC 대회에서 1등. 계층이 한 방향으로만 깊은 것이 아니라 '폭'이 있다. 이를 인셉션 구조라 하는데, 이는 앞 계층의 데이터를 서로 크기가 다른 필터, 풀링을 여러개 적용하여 그 결과를 결합하는 방식이다.

2.5 ResNet