CNN

[퍼온 글]CNN(합성곱 신경망)에 대한 직관적인 설명

출처(ujjwalkarn의 블로그):

합성곱 신경망이란 무엇이며 왜 중요한가요?

합성곱 신경망( ConvNet 또는 CNN )은 이미지 인식 및 분류와 같은 분야에서 매우 효과적인 것으로 입증된 신경망 의 한 종류입니다 . ConvNet은 얼굴, 사물, 교통 표지판 식별은 물론 로봇과 자율주행차의 시각 제어에도 성공적으로 활용되고 있습니다.

2017년 5월 28일 오후 11시 41분 55초 화면 캡처.png
그림 1: 출처 [ 1 ]

위 그림 1 에서 컨볼루션 신경망(ConvNet)은 장면을 인식하고 관련 캡션(“축구 선수가 축구공을 차고 있다”)을 제안할 수 있습니다. 그림 2는 일상적인 사물, 사람, 동물을 인식하는 데 컨볼루션 신경망이 사용된 예를 보여줍니다. 최근에는 컨볼루션 신경망이 문장 분류와 같은 여러 자연어 처리 작업에서도 효과적인 것으로 입증되고 있습니다.

2016년 8월 7일 오후 4시 17분 11초 화면 캡처.png
그림 2: 출처 [ 2 ]

따라서 컨볼루션 신경망(ConvNet)은 오늘날 대부분의 머신러닝 전문가에게 중요한 도구입니다. 하지만 컨볼루션 신경망을 이해하고 처음 사용하는 것은 때때로 부담스러울 수 있습니다. 이 블로그 게시물의 주요 목적은 컨볼루션 신경망이 이미지에서 어떻게 작동하는지 이해하는 것입니다.

신경망에 대해 잘 모르시는 분이라면, 이 글을 계속 읽기 전에 다층 퍼셉트론에 대한 짧은 튜토리얼을 읽어보시고  작동 원리를 이해하시는 것을 추천합니다. 이 글에서는 다층 퍼셉트론을 “완전 연결 계층”이라고 부릅니다.

LeNet 아키텍처(1990년대)

LeNet은 딥러닝 분야를 발전시키는 데 도움을 준 최초의 합성곱 신경망 중 하나였습니다. Yann LeCun의 이 선구적인 연구는  1988년 이후 여러 차례 성공적인 반복을 거쳐 LeNet5로 명명되었습니다[ 3 ]. 당시 LeNet 아키텍처는 주로 우편번호, 숫자 등을 읽는 것과 같은 문자 인식 작업에 사용되었습니다.

아래에서는 LeNet 아키텍처가 이미지를 인식하는 방법을 직관적으로 살펴보겠습니다. 최근 몇 년 동안 LeNet을 개선한 여러 새로운 아키텍처가 제안되었지만, 모두 LeNet의 주요 개념을 기반으로 하고 있으며, LeNet에 대한 명확한 이해가 있다면 비교적 쉽게 이해할 수 있습니다.

2016년 8월 7일 오후 4시 59분 29초 화면 캡처.png
그림 3: 간단한 ConvNet. 출처 [ 5 ]

그림 3  의 합성곱 신경망은 원래 LeNet과 유사한 구조를 가지고 있으며, 입력 이미지를 개, 고양이, 보트, 새의 네 가지 범주로 분류합니다(원래 LeNet은 주로 문자 인식 작업에 사용되었습니다). 위 그림에서 알 수 있듯이, 보트 이미지를 입력으로 받았을 때, 네트워크는 네 가지 범주 중 보트에 가장 높은 확률(0.94)을 부여합니다. 출력 계층의 모든 확률의 합은 1이어야 합니다(이 글 후반부에서 설명).

위 그림 3 에 나타난 컨볼루션 신경망에는 네 가지 주요 연산이 있습니다 .

  1. 회선
  2. 비선형성(ReLU)
  3. 풀링 또는 서브샘플링
  4. 분류 (완전 연결 계층)

이러한 연산들은 모든 합성곱 신경망(ConvNet) 의 기본 구성 요소이므로  , 이러한 연산들이 어떻게 작동하는지 이해하는 것은 ConvNet을 제대로 이해하는 데 중요한 단계입니다. 아래에서는 각 연산의 직관적인 의미를 살펴보겠습니다.

이미지는 픽셀 값으로 이루어진 행렬입니다.

기본적으로 모든 이미지는 픽셀 값으로 이루어진 행렬로 표현될 수 있습니다.

8-gif.gif
그림 4: 모든 이미지는 픽셀 값의 행렬입니다. 출처 [ 6 ]

채널은 이미지의 특정 구성 요소를 나타내는 데 사용되는 일반적인 용어입니다. 표준 디지털 카메라로 촬영한 이미지는 빨강, 초록, 파랑의 세 가지 채널을 가지고 있습니다. 이는 각각 0에서 255 사이의 픽셀 값을 갖는 세 개의 2차원 행렬(각 색상마다 하나씩)이 서로 겹쳐 쌓인 것으로 생각할 수 있습니다.

반면에 회색조 이미지는 채널이 하나뿐입니다. 이 글에서는 회색조 이미지만 다룰 것이므로 이미지를 나타내는 단일 2차원 행렬을 사용하겠습니다. 행렬의 각 픽셀 값은 0에서 255 사이의 범위를 가지며, 0은 검은색, 255는 흰색을 나타 냅니다  .

합성 단계

컨볼루션 신경망(ConvNet)은 “컨볼루션(convolution)” 연산자 에서 이름을 따왔습니다  . 컨볼루션 연산자의 주요 목적은 입력 이미지에서 특징을 추출하는 것입니다. 컨볼루션은 입력 데이터를 작은 정사각형으로 나누어 이미지 특징을 학습함으로써 픽셀 간의 공간적 관계를 보존합니다. 여기서는 컨볼루션의 수학적 세부 사항은 다루지 않고, 이미지에서 어떻게 작동하는지 이해하는 데 집중하겠습니다.

위에서 논의했듯이 모든 이미지는 픽셀 값으로 이루어진 행렬로 간주할 수 있습니다. 픽셀 값이 0과 1뿐인 5×5 이미지를 생각해 보겠습니다(참고로 회색조 이미지의 경우 픽셀 값은 0에서 255까지의 범위를 가지며, 아래의 녹색 행렬은 픽셀 값이 0과 1뿐인 특수한 경우입니다).

2016년 7월 24일 오후 11시 25분 13초 화면 캡처

또한 아래와 같은 3×3 행렬을 생각해 보십시오.

2016년 7월 24일 오후 11시 25분 24초 화면 캡처
컨볼루션 개략도

그러면 아래 그림 5 의 애니메이션에 표시된 것처럼 5×5 이미지와 3×3 행렬의 컨볼루션을 계산할 수 있습니다 .

그림 5: 컨볼루션 연산. 출력 행렬을 컨볼루션 특징 또는 특징 맵이라고 합니다. 출처 [ 7 ]

위의 계산이 어떻게 이루어지는지 잠시 생각해 보세요. 주황색 ​​행렬을 원본 이미지(녹색) 위로 1픽셀씩 이동시키면서(이를 ‘스트라이드’라고 합니다), 각 위치에서 두 행렬의 요소 간 곱셈을 계산하고, 그 결과값을 더하여 최종 정수를 얻습니다. 이 정수가 출력 행렬(분홍색)의 한 요소가 됩니다. 3×3 행렬은 각 스트라이드에서 입력 이미지의 일부만 “인지”한다는 점에 유의하세요.

CNN 용어에서 3×3 행렬은 ‘ 필터 ‘, ‘커널’, ‘특징 검출기’ 라고 하며 , 필터를 이미지 위로 이동시키고 내적을 계산하여 생성된 행렬은 ‘컨볼루션 특징’, ‘활성화 맵’, ‘특징 맵  이라고 합니다 . 필터는 원본 입력 이미지에서 특징을 검출하는 역할을 한다는 점에 유의해야 합니다.

위 애니메이션에서 알 수 있듯이 필터 행렬의 값이 다르면 동일한 입력 이미지에 대해서도 서로 다른 특징 맵이 생성됩니다. 예를 들어 다음 입력 이미지를 살펴보겠습니다.

111.png

아래 표에서 우리는 위의 이미지를 다양한 필터로 컨볼루션했을 때의 효과를 볼 수 있습니다. 보시다시피, 컨볼루션 연산 전에 필터 행렬의 수치 값을 변경하기만 하면 에지 검출, 선명도 향상, 흐림 효과와 같은 작업을 수행할 수 있습니다[ 8 ]. 즉, 서로 다른 필터는 이미지에서 에지, 곡선 등과 같은 서로 다른 특징을 감지할 수 있습니다. 이와 같은 더 많은 예는  여기 섹션 8.2.4에서 확인할 수 있습니다 .

2016년 8월 5일 오후 11시 3분 화면 캡처.png

 컨볼루션 연산을 이해하는 또 다른 좋은 방법은 아래 그림 6 의 애니메이션을 살펴보는 것입니다 .

giphy.gif
그림 6: 합성곱 연산. 출처 [ 9 ]

빨간색 테두리로 표시된 필터가 입력 이미지 위를 지나가면서(컨볼루션 연산) 특징 맵을 생성합니다. 녹색 테두리로 표시된 또 다른 필터가 동일한 이미지에 컨볼루션 연산을 수행하면 그림과 같이 다른 특징 맵이 생성됩니다. 컨볼루션 연산은 원본 이미지의 국소적인 종속성을 포착한다는 점에 유의해야 합니다. 또한, 이 두 필터가 동일한 원본 이미지에서 서로 다른 특징 맵을 생성하는 방식에도 주목하십시오. 이미지와 위의 두 필터는 앞서 설명했듯이 숫자 행렬이라는 점을 기억하세요.

실제로 CNN은 학습 과정에서 이러한 필터 값을 스스로 학습합니다 (단, 학습 전에 필터 개수 , 필터 크기 , 네트워크 아키텍처 등의 매개변수를 지정해야 합니다). 필터 개수가 많을수록 더 많은 이미지 특징을 추출할 수 있고, 네트워크는 처음 보는 이미지에서 패턴을 인식하는 능력이 향상됩니다.

특징 맵(컨볼루션 특징)의 크기는 컨볼루션 단계를 수행하기 전에 결정해야 하는 세 가지 매개변수[ 4 ]에 의해 제어됩니다.

  • 깊이: 깊이는 컨볼루션 연산에 사용하는 필터의 개수에 해당합니다. 그림 7  에 나타난 네트워크에서는  원본 보트 이미지에 서로 다른 세 개의 필터를 사용하여 컨볼루션을 수행하므로 그림과 같이 세 개의 서로 다른 특징 맵이 생성됩니다. 이 세 개의 특징 맵은 2차원 행렬이 쌓여 있는 것으로 생각할 수 있으므로 특징 맵의 ‘깊이’는 3이 됩니다.
2016년 8월 10일 오전 3시 42분 35초에 캡처한 화면
그림 7
  • 스트라이드(Stride): 스트라이드는  필터 행렬을 입력 행렬 위로 이동시키는 픽셀 수를 나타냅니다. 스트라이드가 1이면 필터가 한 픽셀씩 이동합니다. 스트라이드가 2이면 필터가 두 픽셀씩 건너뛰면서 이동합니다. 스트라이드가 클수록 생성되는 특징 맵의 크기가 작아집니다.
  • 제로 패딩: 때때로 입력 행렬의 테두리 주변에 0을 채워 넣으면 입력 이미지 행렬의 테두리 요소에 필터를 적용할 수 있어 편리합니다. 제로 패딩의 좋은 점은 특징 맵의 크기를 제어할 수 있다는 것입니다. 제로 패딩을 추가하는 것을 와이드 컨볼루션 이라고 하고 , 제로 패딩을 사용하지 않는 것을 내 로우 컨볼루션 이라고 합니다. 이는 [ 14 ] 에서 명확하게 설명되어 있습니다 .

비선형성(ReLU) 소개

위 그림 3 에서 모든 컨볼루션 연산 후에 ReLU라는 추가 연산이 사용되었습니다  . ReLU는 정류 선형 단위(Rectified Linear Unit)의 약자로 비선형 연산입니다. 그 출력은 다음과 같습니다.

2016년 8월 10일 오전 2시 23분 48초 화면 캡처.png
그림 8: ReLU 연산

ReLU 활성화 함수는 픽셀 단위로 적용되는 요소별 연산으로, 특징 맵에서 모든 음수 픽셀 값을 0으로 대체합니다. ReLU를 사용하는 목적은 컨볼루션 신경망에 비선형성을 도입하는 것입니다. 실제 데이터의 대부분은 비선형적이기 때문입니다. (컨볼루션 연산 자체는 선형 연산, 즉 행렬의 요소별 곱셈과 덧셈입니다.) 따라서 ReLU와 같은 비선형 함수를 도입하여 비선형성을 고려하는 것입니다.

아래 그림 9 를 보면 ReLU 연산을 명확하게 이해할 수 있습니다 . 이 그림은 위 그림 6  에서 얻은 특징 맵 중 하나에 ReLU 연산을 적용한 결과를 보여줍니다  . 여기서 출력 특징 맵은 ‘정류된’ 특징 맵이라고도 합니다.

2016년 8월 7일 오후 6시 18분 19초 화면 캡처.png
그림 9: ReLU 연산. 출처 [ 10 ]

ReLU 대신 tanh 또는  시그모이드 와 같은 다른 비선형 함수를  사용할 수도 있지만, 대부분의 상황에서 ReLU가 더 나은 성능을 보이는 것으로 나타났습니다.

풀링 단계

공간 풀링(서브샘플링 또는 다운샘플링이라고도 함)은 각 피처 맵의 차원을 줄이면서 가장 중요한 정보를 유지합니다. 공간 풀링에는 최대값, 평균, 합계 등 다양한 유형이 있습니다.

맥스 풀링(Max Pooling)의 경우, 공간적 영역(예: 2×2 윈도우)을 정의하고 해당 윈도우 내에서 보정된 특징 맵의 가장 큰 요소를 추출합니다. 가장 큰 요소를 추출하는 대신 평균(평균 풀링)을 사용하거나 윈도우 내 모든 요소의 합을 구할 수도 있습니다. 실제 적용 사례에서는 맥스 풀링이 더 나은 성능을 보이는 것으로 나타났습니다.

그림 10은  2×2 윈도우를 사용하여 정류된 특징 맵(합성곱 + ReLU 연산 후 얻은 맵)에 대한 맥스 풀링 연산의 예를 보여줍니다.

2016년 8월 10일 오전 3시 38분 39초 화면 캡처.png
그림 10: 최대 풀링. 출처 [ 4 ]

2×2 윈도우를 2셀(또는 ‘스트라이드’)만큼 이동시키면서 각 영역에서 최댓값을 취합니다. 그림 10 에서 볼 수 있듯이 , 이렇게 하면 특징 맵의 차원이 줄어듭니다.

그림 11 에 나타난 네트워크에서는   풀링 연산이 각 특징 맵에 개별적으로 적용됩니다(이로 인해 세 개의 입력 맵에서 세 개의 출력 맵이 생성됩니다).

2016년 8월 7일 오후 6시 19분 37초 화면 캡처.png
그림 11: 정류된 특징 맵에 풀링을 적용한 결과

그림 12는 위 그림 9  의 ReLU 연산 후 얻은 정류된 특징 맵에 대한 풀링의 효과를 보여줍니다  .

2016년 8월 7일 오후 6시 11분 53초 화면 캡처.png
그림 12: 풀링. 출처 [ 10 ]

풀링의 기능은 입력 표현의 공간적 크기를 점진적으로 줄이는 것입니다[ 4 ]. 특히, 풀링은

  • 입력 표현(특징 차원)을 더 작고 관리하기 쉽게 만듭니다.
  • 네트워크의 매개변수 및 계산 수를 줄여 과적합을 제어합니다  [ 4 ].
  • 이는 입력 이미지의 작은 변형, 왜곡 및 이동에 대해 네트워크를 불변하게 만듭니다(입력의 작은 왜곡은 풀링의 출력에 영향을 미치지 않습니다. 왜냐하면 우리는 주변 영역에서 최대값/평균값을 취하기 때문입니다).
  • 이는 이미지의 거의 스케일 불변 표현(정확한 용어는 “등변”입니다)에 도달하는 데 도움이 됩니다. 이는 이미지에서 객체가 어디에 있든 객체를 감지할 수 있기 때문에 매우 강력합니다(자세한 내용은 [ 18 ] 및 [ 19 ] 참조).

지금까지의 이야기

2016년 8월 8일 오전 2시 26분 9초 화면 캡처.png
그림 13

지금까지 컨볼루션, ReLU 활성화 함수, 풀링이 어떻게 작동하는지 살펴보았습니다. 이러한 레이어들은 모든 CNN의 기본 구성 요소라는 점을 이해하는 것이 중요합니다. 그림 13 에서 볼 수 있듯이 , 두 세트의 컨볼루션, ReLU 활성화 함수, 풀링 레이어가 있습니다. 두 번째 컨볼루션 레이어는 첫 번째 풀링 레이어의 출력에 6개의 필터를 사용하여 컨볼루션을 수행하여 총 6개의 특징 맵을 생성합니다. 그런 다음 이 6개의 특징 맵 각각에 ReLU 활성화 함수를 적용합니다. 마지막으로, 정류된 6개의 특징 맵 각각에 대해 맥스 풀링 연산을 개별적으로 수행합니다.

이러한 레이어들을 함께 사용하면 이미지에서 유용한 특징을 추출하고, 네트워크에 비선형성을 도입하고, 특징 차원을 축소하면서 특징이 스케일과 변환에 대해 어느 정도 등변성을 갖도록 만들 수 있습니다[ 18 ].

두 번째 풀링 레이어의 출력은 다음 섹션에서 설명할 완전 연결 레이어의 입력으로 사용됩니다.

완전 연결 계층

완전 연결 계층은 출력 계층에 소프트맥스 활성화 함수를 사용하는 전통적인 다층 퍼셉트론입니다(SVM과 같은 다른 분류기도 사용할 수 있지만, 이 글에서는 소프트맥스에 집중하겠습니다). “완전 연결”이라는 용어는 이전 계층의 모든 뉴런이 다음 계층의 모든 뉴런에 연결되어 있음을 의미합니다.  다층 퍼셉트론에 익숙하지 않다면 이 글을 읽어보시는 것을 추천합니다.

컨볼루션 및 풀링 레이어의 출력은 입력 이미지의 고수준 특징을 나타냅니다. 완전 연결 레이어의 목적은 이러한 특징을 사용하여 훈련 데이터셋을 기반으로 입력 이미지를 다양한 클래스로 분류하는 것입니다. 예를 들어, 우리가 수행하려는 이미지 분류 작업은 아래 그림 14 에서 볼 수 있듯이 네 가지 가능한 출력을 가집니다 (그림 14는 완전 연결 레이어의 노드 간 연결을 보여주지 않습니다).

2016년 8월 6일 오전 12시 34분 02초 화면 캡처.png
그림 14: 완전 연결 계층 – 각 노드는 인접 계층의 다른 모든 노드에 연결되어 있습니다.

분류 외에도 완전 연결 계층을 추가하는 것은 이러한 특징의 비선형 조합을 학습하는 (일반적으로) 저렴한 방법이기도 합니다. 컨볼루션 및 풀링 계층의 대부분의 특징은 분류 작업에 적합할 수 있지만 이러한 특징의 조합은 훨씬 더 좋을 수 있습니다[ 11 ].

완전 연결 계층의 출력 확률 합은 1입니다. 이는 완전 연결 계층의 출력 계층에서 활성화 함수로 소프트맥스(Softmax)를 사용함으로써 보장됩니다 . 소프트맥스 함수는 임의의 실수 값 점수 벡터를 입력받아 0과 1 사이의 값으로 이루어진 벡터로 변환하며, 이 벡터들의 합은 1이 됩니다.

이 모든 것을 종합해 보면, 역전파를 이용한 훈련이 완성됩니다.

위에서 설명한 바와 같이, 컨볼루션 + 풀링 레이어는 입력 이미지에서 특징을 추출하는 역할을 하고, 완전 연결 레이어는 분류기 역할을 합니다.

아래 그림 15 에서  입력 이미지가 보트이므로 보트 클래스의 목표 확률은 1이고 나머지 세 클래스의 목표 확률은 0입니다.

  • 입력 이미지 = 보트
  • 목표 벡터 = [0, 0, 1, 0]
2016년 8월 7일 오후 9시 15분 21초 화면 캡처.png
그림 15: 컨볼루션 신경망 훈련

컨볼루션 네트워크의 전체 학습 과정은 다음과 같이 요약할 수 있습니다.

  • 1단계: 모든 필터와 매개변수/가중치를 무작위 값으로 초기화합니다.
  • 2 단계 : 네트워크는 훈련 이미지를 입력으로 받아 순방향 전파 단계(완전 연결 계층에서의 순방향 전파와 함께 컨볼루션, ReLU 및 풀링 연산)를 거쳐 각 클래스에 대한 출력 확률을 계산합니다.
    • 위의 배 이미지에 대한 출력 확률이 [0.2, 0.4, 0.1, 0.3]이라고 가정해 봅시다.
    • 첫 번째 학습 예제에 대해서는 가중치가 무작위로 할당되므로 출력 확률 또한 무작위입니다.
  • 3단계: 출력 계층에서 총 오류를 계산합니다(4개 클래스 모두에 대한 합산).
    •  총 오차 = ∑ ½ (목표 확률 – 출력 확률) ²
  • 4단계: 역전파를 사용하여 네트워크의 모든 가중치에 대한 오류의 기울기를 계산하고 , 경사 하강법을 사용하여 출력 오류를 최소화하도록 모든 필터 값/가중치 및 매개변수 값을 업데이트합니다.
    • 가중치는 전체 오차에 대한 기여도에 비례하여 조정됩니다.
    • 같은 이미지를 다시 입력하면 출력 확률은 이제 [0.1, 0.1, 0.7, 0.1]이 될 수 있으며 이는 목표 벡터 [0, 0, 1, 0]에 더 가깝습니다.
    • 이는 네트워크 가 가중치/필터를 조정하여 출력 오류를 줄임으로써 특정 이미지를 정확하게 분류하는 방법을 학습 했음을 의미합니다.
    • 필터 개수, 필터 크기, 네트워크 아키텍처 등의 매개변수는 모두 1단계 이전에 고정되어 있으며 학습 과정 동안 변경되지 않습니다. 필터 행렬과 연결 가중치 값만 업데이트됩니다.
  • 5단계: 학습 세트에 있는 모든 이미지에 대해 2~4단계를 반복합니다.

위 단계들은  컨볼루션 신경망(ConvNet)을 학습시키는 과정  입니다. 즉, 컨볼루션 신경망의 모든 가중치와 매개변수가 최적화되어 학습 데이터셋의 이미지를 정확하게 분류할 수 있게 된 것입니다.

새로운 (이전에 보지 못한) 이미지가 컨볼루션 신경망에 입력되면, 네트워크는 순방향 전파 단계를 거쳐 각 클래스에 대한 확률을 출력합니다. (새로운 이미지에 대한 출력 확률은 이전의 모든 훈련 예제를 정확하게 분류하도록 최적화된 가중치를 사용하여 계산됩니다.) 훈련 데이터셋이 충분히 크다면, 네트워크는 (바람직하게는) 새로운 이미지에 대해서도 일반화 성능이 우수하여 올바른 범주로 분류할 수 있을 것입니다.

참고 1: 위의 단계는 훈련 과정에 대한 직관을 제공하기 위해 지나치게 단순화되었으며 수학적 세부 사항은 생략되었습니다. 수학적 공식화 및 철저한 이해를 위해서는 [ 4 ] 및 [ 12 ]를 참조하십시오.

참고 2: 위 예시에서는 컨볼루션 레이어와 풀링 레이어를 번갈아 사용하는 두 세트를 사용했습니다. 하지만 이러한 연산은 하나의 컨볼루션 신경망에서 원하는 만큼 반복될 수 있습니다. 실제로 오늘날 최고의 성능을 자랑하는 컨볼루션 신경망 중 일부는 수십 개의 컨볼루션 및 풀링 레이어를 가지고 있습니다! 또한 모든 컨볼루션 레이어 다음에 풀링 레이어가 반드시 있어야 하는 것은 아닙니다. 아래 그림 16 에서 볼 수 있듯이 , 풀링 연산 전에 여러 개의 컨볼루션 + ReLU 연산을 연속적으로 배치할 수 있습니다. 또한 아래 그림 16에서 컨볼루션 신경망의 각 레이어가 어떻게 시각화되었는지 확인해 보세요.

자동차.png
그림 16: 출처 [ 4 ]

합성곱 신경망 시각화

일반적으로 컨볼루션 단계가 많을수록 네트워크가 인식할 수 있는 더 복잡한 특징이 많아집니다. 예를 들어, 이미지 분류에서 컨볼루션 신경망(ConvNet)은 첫 번째 레이어에서 원시 픽셀로부터 에지를 감지하는 법을 학습한 다음, 두 번째 레이어에서 이러한 에지를 사용하여 간단한 모양을 감지하고, 더 높은 레이어에서 이러한 모양을 사용하여 얼굴 모양과 같은 고차원 특징을 감지할 수 있습니다[ 14 ]. 이는 아래 그림 17 에서 확인할 수 있습니다. 이러한 특징은 컨볼루션 심층 신념 네트워크(Convolutional Deep Belief Network)를 사용하여 학습되었으며   , 이 그림은 단지 아이디어를 설명하기 위한 예시일 뿐입니다(실제 컨볼루션 필터는 사람에게는 의미가 없는 객체도 감지할 수 있습니다).

2016년 8월 10일 오후 12시 58분 30초 화면 캡처.png
그림 17: 컨볼루션 심층 신념 네트워크에서 학습된 특징. 출처 [ 21 ]

Adam Harley는 손글씨 숫자의 MNIST 데이터베이스로 훈련된 컨볼루션 신경망의 놀라운 시각화를 만들었습니다[ 13 ]. CNN이 어떻게 작동하는지 자세히 이해하려면 직접 사용해 보는 것을 강력히 추천합니다 .

아래에서는 입력값 ‘8’에 대해 네트워크가 어떻게 작동하는지 살펴보겠습니다. 그림 18 의 시각화에서는 ReLU 연산이 별도로 표시되지 않는다는 점에 유의하십시오.

conv_all.png
그림 18: 손으로 쓴 숫자로 학습된 ConvNet 시각화. 출처 [ 13 ]

입력 이미지는 1024픽셀(32×32 이미지)로 구성되어 있으며, 첫 번째 컨볼루션 레이어(Convolution Layer 1)는 6개의 서로 다른 5×5(스트라이드 1) 필터가 입력 이미지와 컨볼루션되어 생성됩니다. 보시다시피, 6개의 서로 다른 필터를 사용하면 깊이가 6인 특징 맵이 생성됩니다.

컨볼루션 레이어 1 다음에는 풀링 레이어 1이 이어지는데, 이 레이어는 컨볼루션 레이어 1의 6개 특징 맵에 대해 각각 2×2 맥스 풀링(스트라이드 2)을 수행합니다. 풀링 레이어의 아무 픽셀 위에 마우스 포인터를 올려놓으면 이전 컨볼루션 레이어에 형성되는 2×2 그리드를 확인할 수 있습니다( 그림 19 참조 ). 2×2 그리드에서 가장 큰 값(가장 밝은 값)을 가진 픽셀이 풀링 레이어에 도달하는 것을 알 수 있습니다.

2016년 8월 6일 오후 12시 45분 35초 화면 캡처.png
그림 19: 풀링 작업 시각화. 출처 [ 13 ]

풀링 레이어 1 다음에는 5×5(스트라이드 1) 크기의 컨볼루션 필터 16개가 있어 컨볼루션 연산을 수행합니다. 그 다음에는 2×2 맥스 풀링(스트라이드 2)을 수행하는 풀링 레이어 2가 있습니다. 이 두 레이어는 위에서 설명한 것과 동일한 개념을 사용합니다.

그러면 완전 연결(FC) 계층이 세 개 생깁니다. 다음과 같습니다.

  • 첫 번째 FC 레이어에 120개의 뉴런이 있습니다.
  • 두 번째 FC 레이어에 있는 100개의 뉴런
  • 세 번째 FC 레이어에는 10개의 뉴런이 있으며, 이는 10개의 숫자에 해당합니다. 이 레이어를 출력 레이어라고도 합니다.

그림 20 에서 출력 계층의 10개 노드 각각이 두 번째 완전 연결 계층의 100개 노드 모두에 연결되어 있는 것을 확인할 수 있습니다(그래서 이름이 완전 연결입니다).

또한 출력 계층에서 유일하게 밝은 노드가 ‘8’에 해당한다는 점에 주목하세요. 이는 네트워크가 손글씨 숫자를 정확하게 분류했음을 의미합니다 (노드가 밝을수록 해당 노드의 출력이 높다는 것을 나타내며, 즉 8이 다른 모든 숫자 중에서 가장 높은 확률을 가진다는 것을 의미합니다).

최종.png
그림 20: Filly 연결 레이어 시각화. 출처 [ 13 ]

동일한 시각화의 3D 버전은 여기에서 확인할 수 있습니다 .

기타 컨볼루션 신경망 아키텍처

 컨볼루션 신경망은 1990년대 초부터 존재해 왔습니다. 우리는 최초의 컨볼루션 신경망 중 하나인 LeNet에 대해 위에서 논의했습니다 . 다른 영향력 있는 아키텍처는 아래에 나열되어 있습니다[ 3 ][ 4 ].

  • 르넷(1990년대): 이 글에서 이미 다뤘습니다.
  • 1990년대부터 2012년까지: 1990년대 후반부터 2010년대 초반까지 합성곱 신경망은 초기 단계에 있었습니다. 데이터와 컴퓨팅 성능이 점차 향상됨에 따라 합성곱 신경망이 처리할 수 있는 작업들이 더욱 흥미로워졌습니다.
  • AlexNet (2012) –  2012년, Alex Krizhevsky 외 연구진은 LeNet보다 더 깊고 넓은 네트워크를 가진 AlexNet을 발표했으며 , 이 프로젝트로 2012년 ImageNet 대규모 시각 인식 챌린지(ILSVRC)에서 압도적인 차이로 우승을 차지했습니다. 이는 기존 접근 방식에 비해 획기적인 발전이었으며, 현재 CNN의 광범위한 활용은 이 연구 덕분이라고 할 수 있습니다.
  • ZFNet (2013) –  ILSVRC 2013 우승작은 매튜 제일러와 롭 퍼거스가 개발한 컨볼루션 신경망이었습니다. 이 신경망은 ZFNet (Zeiler & Fergus Net의 줄임말)으로 알려지게 되었습니다. ZFNet은 아키텍처 하이퍼파라미터를 조정하여 AlexNet을 개선한 것입니다.
  • GoogLeNet (2014) –  ILSVRC 2014 우승은 Google의 Szegedy 등이 개발한 컨볼루션 네트워크였습니다. 이 네트워크의 주요 공헌은 Inception Module 을 개발하여 네트워크의 매개변수 수를 획기적으로 줄인 것입니다(AlexNet의 6천만 개에 비해 4백만 개).
  • VGGNet (2014) –  ILSVRC 2014에서 준우승을 차지한 네트워크는 VGGNet 으로 알려지게 되었습니다 . 이 네트워크의 주요 공헌은 네트워크의 깊이(레이어 수)가 우수한 성능을 위한 중요한 요소임을 보여준 것입니다.
  • ResNets(2015) –  Kaiming He 외 여러 명이 개발한 Residual Network는 ILSVRC 2015에서 우승을 차지했습니다. ResNets는 현재 컨볼루션 신경망 모델 중 단연 최첨단이며, (2016년 5월 기준) 실제 컨볼루션 신경망을 사용할 때 기본적으로 선택되는 모델입니다.
  • DenseNet(2016년 8월) – Gao Huang 외 여러 연구자들이 최근 발표한 DenseNet은    레이어가 피드포워드 방식으로 다른 모든 레이어와 직접 연결된 구조입니다. DenseNet은 경쟁이 치열한 다섯 가지 객체 인식 벤치마크 작업에서 기존 최첨단 아키텍처 대비 상당한 성능 향상을 보여주었습니다. Torch 구현은 여기에서 확인할 수 있습니다 .

결론

이 글에서는 합성곱 신경망(CNN)의 주요 개념을 간단하게 설명하려고 노력했습니다. 몇 가지 세부적인 내용은 생략하거나 지나치게 단순화했지만, 이 글을 통해 합성곱 신경망의 작동 원리를 어느 정도 이해하셨기를 바랍니다.

이 글은  데니 브리츠(Denny Britz)의 “자연어 처리를 위한 컨볼루션 신경망 이해(Understanding Convolutional Neural Networks for NLP )” (읽어보시길 추천합니다)에서 영감을 받았으며, 여기에 있는 여러 설명은 해당 글을 기반으로 합니다. 이러한 개념들을 더 깊이 이해하려면 스탠포드 대학교의 컨볼루션 신경망 강의 자료와 아래 참고 자료에 언급된 다른 훌륭한 자료들을 살펴보시기 바랍니다  . 위 개념  을 이해하는 데 어려움이 있거나 질문/제안 사항이 있으면 아래에 댓글을 남겨주세요.

이 게시물에 사용된 모든 이미지와 애니메이션은 아래 참고 자료 섹션에 명시된 해당 저작권자의 소유입니다.

참고 자료

  1. karpathy/neuraltalk2 : Torch를 사용한 효율적인 이미지 캡셔닝 코드, 예제
  2. Shaoqing Ren  외,  “Faster R-CNN: 영역 제안 네트워크를 이용한 실시간 객체 탐지”, 2015,  arXiv:1506.01497 
  3. 신경망 아키텍처 , 에우제니오 쿨루르첼로의 블로그
  4. CS231n 시각 인식용 합성곱 신경망, 스탠포드
  5. 클라리파이 / 기술
  6. 머신러닝은 재밌어요! 3부: 딥러닝과 컨볼루션 신경망
  7. 컨볼루션을 이용한 특징 추출, 스탠포드
  8. 커널(이미지 처리)에 대한 위키피디아 문서 
  9. 컴퓨터 비전을 위한 딥러닝 방법론, CVPR 2012 튜토리얼 
  10. 롭 퍼거스의 신경망 강의, 2015년 머신러닝 여름학교
  11. CNN에서 완전 연결 계층은 어떤 역할을 하나요? 
  12. 합성곱 신경망, 앤드류 기비안스키 
  13. AW Harley, “합성곱 신경망의 대화형 노드-링크 시각화”, ISVC, 867-877쪽, 2015 ( 링크 ). 데모
  14. 자연어 처리를 위한 합성곱 신경망 이해하기
  15. 합성곱 신경망에서의 역전파
  16. 합성곱 신경망을 이해하기 위한 초보자 가이드
  17. Vincent Dumoulin  , “딥러닝을 위한 컨볼루션 연산 가이드”, 2015, arXiv:1603.07285
  18. 딥러닝과 일반적인 머신러닝의 차이점은 무엇인가요?
  19. 합성곱 신경망은 어떻게 불변 특징을 학습할 수 있을까요?
  20. 컴퓨터 비전을 위한 심층 컨볼루션 신경망의 분류 체계
  21. 홍락 리  , “계층적 표현의 확장 가능한 비지도 학습을 위한 컨볼루션 심층 신념 네트워크”( 링크 )

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다