brunch

You can make anything
by writing

C.S.Lewis

by Chris송호연 May 22. 2017

Conv Net: 모듈 방식의 관점

Conv Net - 구글 브레인 Chris Olah

이 글은 colah.github.io 의 블로그의 글을 저작자 Chris Olah의 허락을 받고 번역한 글입니다.io 의 블로그의 글을 저작자 Chris Olah의 허락을 받고 번역한 글입니다.


http://colah.github.io/posts/2014-07-Conv-Nets-Modular/


서론

지난 몇 년 동안 딥 뉴럴 네트워크는 컴퓨터 시각 및 음성 인식과 같은 다양한 패턴 인식 문제에 대한 획기적인 결과를 이끌어 냈습니다. 이러한 결과를 이끌어내는 필수 구성 요소 중 하나는 CNN (convolutional neural network) 라고 불리는 특별한 종류의 신경망 입니다.

가장 기본적인, CNN은 같은 뉴런의 많은 동일한 복사본을 사용하는 일종의 신경 네트워크로 생각할 수 있습니다. 이것은 네트워크가 많은 뉴런을 가질 수있게하고, 실제 매개 변수의 수 (뉴런의 행동 방식을 설명하는 값)를 상당히 적게 배워야 할 필요가있는 동안 계산적으로 큰 모델을 표현합니다.

2D Convolutional Neural Network



같은 뉴런의 사본을 여러 개 갖는 이 기법은 수학과 컴퓨터 과학의 기능 추상화와 비슷합니다. 프로그래밍 할 때 같은 코드를 수백번 작성하는 것 보다 한 번 함수를 작성한 후 여러 위치에서 사용하면 프로그래밍이 더 빨라지고 버그가 줄어 듭니다. 유사하게, CNN는 한 번 신경을 학습하고 여러 곳에서 사용할 수 있으므로 모델을 배우고 오류를 줄이는 것이 더 쉬워집니다.


CNN의 구조

신경망에서 오디오 샘플을보고 인간이 말을하고 있는지 여부를 예측한다고 가정 해 보겠습니다. 어쩌면 누군가가 말하면 더 많은 분석을하고 싶을 것입니다.

서로 다른 시점에서 오디오 샘플을 얻을 수 있습니다. 샘플은 고르게 분포되어 있습니다.

신경망으로 그들을 분류하고 분류하는 가장 간단한 방법은 그것들을 모두 Fully-connected layer에 연결하는 것입니다. 여러 뉴런이 있으며 모든 입력은 모든 뉴런에 연결됩니다.

보다 정교한 접근법은 데이터에서 대칭을 이루는 특성을 발견하는 법입니다. 우리는 데이터의 로컬 속성(local properties)에 대해 많은 관심을 갖고 있습니다. 예를 들어, 주어진 시간에 어떤 주파수의 소리가 있는지, 그들은 증가하거나 감소하고 있는가? 등등이 있습니다.


우리는 모든 시점에서 동일한 속성을 중요하게 생각합니다. 처음에는 주파수를 아는 것이 유용합니다. 중간에있는 주파수를 아는 것이 유용하며 끝 부분의 주파수를 아는 것도 유용합니다. 다시 말하지만, 오디오 샘플을 판별하기 위해 오디오 샘플의 작은 창만 살펴 봐야한다는 점에서 이들은 로컬 속성입니다.


그래서 우리는 A라는 뉴런의 그룹을 만들 수 있습니다. 이 뉴런 그룹 A는 우리 데이터의 작은 시간 세그먼트를 바라봅니다. A 그룹은 모든 데이터 세그먼트를 보고 특정 Feature을 추출 합니다. 이 콘볼루션 레이어의 결과값은 Fully-connected layer, F에 입력됩니다.


위의 예에서 A는 두 개의 세그먼트만 보고 있습니다. 이것은 현실적이지 않습니다. 일반적으로 컨볼 루션 레이어의 윈도우는 훨씬 커집니다.


다음 예에서 A는 3 개의 데이터 세그먼트를 봅니다. 여전히 실용적이지 않습니다. 아쉽게도, A에 여러개의 데이터 세그먼트를 연결하는 것을 시각화 하는 것은 까다롭습니다.


컨벌루션 레이어의 아주 좋은 특성 중 하나는 그들이 구성 가능(composable)하다는 것입니다. 하나의 컨벌루션 레이어의 출력을 다른 레이어에 공급할 수 있습니다. 각 계층에서 네트워크는 더 높은 수준의보다 추상적 인 기능을 감지 할 수 있습니다.


다음 예제에서 우리는 새로운 뉴런 그룹 인 B를 추가합니다. B는 밑에있는 다른 콘볼루션 레이어들을 쌓아 올리는 데 사용됩니다.



콘볼루션 레이어는 대부분 풀링 레이어를 포함하고 있습니다. 특히, 매우 인기가있는 max-pooling 레이어라고 불리는 레이어가 있습니다.


종종 높은 수준의 관점에서 볼 때 기능이있는 정확한 지점에 대해서는 신경 쓰지 않습니다. 주파수가 약간 일찍 또는 뒤에 변경되면 문제가 발생합니까?


max-pooling 레이어는 이전 레이어의 작은 블록에 대해 최대 Feature를 사용합니다. 특정 피쳐가 이전 계층의 영역에 있지만 정확히 어디에 있는지는 출력되지 않습니다.


Max-pooling 레이어 종류의 "Zoom out" 풀링 계층 이후의 작은 패치는 이전의 훨씬 큰 패치와 일치하기 때문에 나중에 큰 콘볼루션 계층이 데이터의 더 큰 섹션에서 작동 할 수 있습니다. 또한 데이터의 아주 작은 변형에 대한 불변성을줍니다.


이전 예제에서 우리는 1 차원 컨벌루션 레이어를 사용했습니다. 그러나 콘볼루션 레이어는 고차원 데이터에서도 작동 할 수 있습니다. 실제로, CNN의 가장 유명한 성공은 2차원 CNN을 이미지 인식에 적용한 것입니다.


2 차원 콘볼루션 레이어에서 세그먼트를 보는 대신 A에이 이제 패치를 살펴볼 것입니다.


각 패치에 대해 A는 Feature를 계산할 것입니다. 예를 들어 가장자리의 존재를 감지하는 방법을 배울 수 있습니다. 또는 텍스처를 감지하는 방법을 배울 수도 있습니다. 또는 두 색상 간의 대비 일 수도 있습니다.


앞의 예제에서 우리는 콘볼루션 레이어의 출력을 Fully-connected 레이어에 공급했습니다. 그러나 우리는 1 차원의 경우에서와 같이 두 개의 콘볼루션 레이어를 작성할 수도 있습니다.

우리는 또한 2차원에서 Max-pooling을 할 수 있습니다. 여기서는 작은 패치에 대해 최대로 많은 피쳐들을 사용합니다.


이 점이 정말 중요합니다. 전체 이미지를 고려할 때 픽셀까지 가장자리의 정확한 위치는 신경 쓰지 않아도됩니다. 몇 픽셀 이내에 어디 있는지 알면 충분합니다.


동영상이나 용적 데이터 (예 : 3D 의학 스캔)와 같은 데이터의 경우 3 차원 콘볼루션 네트워크가 사용되기도합니다. 그러나, 그들은 널리 사용되지 않으며, 시각화하는 것이 훨씬 어렵습니다.

이제 우리는 이전에 A 뉴런 그룹에 대해 말한 적이 있습니다. 우리는 이것에 대해 좀 더 정확하게 이야기해볼까합니다 : A는 정확하게 무엇입니까?


전통적인 콘볼루션 레이어에서 A는 병렬로 묶여있는 뉴런들입니다. 이 뉴런들은 같은 입력을 받고 서로 다른 Feature들을 계산합니다.

예를 들어, 2 차원 콘볼루션 레이어에서 하나의 뉴런이 수평 모서리를 감지하고, 다른 하나는 수직 모서리를 감지하고, 다른 하나는 녹색 - 적색 콘트라스트를 감지 할 수 있습니다.

즉, 최근의 논문 'Network in Network'( Lin et al. )에서 새로운 "Mlpconv"계층이 제안되었습니다. 이 모델에서 A 뉴런은 다중 레이어를 가지며, 최종 레이어는 이 지역의 더 높은 레벨의 특징을 출력합니다. 이 논문에서이 모델은 몇 가지 매우 인상적인 결과를 얻었으며 여러 벤치 마크 데이터 세트에 대한 최신 기술 수준을 제시했습니다.


즉,이 포스트의 목적을 위해 표준 컨볼 루션 레이어에 중점을 둘 것입니다. 우리가 거기서 고려하기에는 이미 충분합니다!


콘볼루션 뉴럴 네트워크의 결과

예전에 우리는 컴퓨터 비전에서 CNN을 사용하여 혁신을 이루었다는 것을 시사했습니다. 계속하기 전에 이러한 결과들 중 일부를 동기 부여를 위해 간략히 논의하고자합니다.

2012 년 Alex Krizhevsky, Ilya Sutskever 및 Geoff Hinton은 기존 이미지 분류 결과를 물 밖으로 날려 버렸습니다 ( Krizehvsky 외 ).


그들의 진보는 서로 다른 조각들을 조합한 결과였습니다. 그들은 GPU를 사용하여 매우 크고 깊은 신경 네트워크를 훈련 시켰습니다. 그들은 새로운 종류의 신경 세포 (ReLUs)와 'overfitting'(DropOut)이라는 문제를 줄이기위한 새로운 기술을 사용했습니다. 그들은 많은 이미지 카테고리 ( ImageNet ) 를 가진 매우 큰 데이터 세트를 사용했습니다 . 물론, 그것은 CNN였습니다.


아래에서 설명 된 그들의 아키텍처는 매우 깊었습니다. 그것은 5 개의 콘볼 루션 레이어, 3 개가 산재되어 있고, 3 개의 Fully-connected 레이어가 있습니다. 초기 레이어는 2 개의 GPU로 나뉘어져 있습니다.


그들은 그들의 네트워크를 훈련하여 이미지를 1,000 개의 다른 범주로 분류했습니다.

무작위로 추측하면, 정확한 대답은 0.1 %라고 추측 할 수 있습니다. Krizhevsky, et al. 의 모델은 정답을  63 %까지 맞출 수 있습니다. 또한, 상위 5 개의 답변 중 하나는 85 %까지 맞출 수 있었습니다!


상단 4개는 정답으로 분류된 예시입니다.

하단 4개는 오답으로 분류된 예시입니다. 각 예시는 이미지를 갖고 있고, 밑의 글씨는 이미지를 설명하는 단어입니다. 그리고 밑에 5가지 추측값은 따라 해당 이미지에 대한 예측 분류입니다. 그래프는 확률을 의미합니다. From Krizehvsky et al..


심지어 그 오류 중 일부는 나에게 꽤 합리적으로 보입니다!

우리는 첫번째 레이어가 무엇을 배우는지 살펴보겠습니다.


콘볼루션 레이어는 두 GPU간에 분할되어 있음을 상기하십시오. 정보가 각 레이어 앞뒤로 이동하지 않으므로 분할된 면이 실제 연결이 끊어집니다. 모델이 실행될 때마다 양측이 특화된 것으로 밝혀졌습니다.


한쪽 뉴런은 흑백에 초점을 맞춰 다른 방향과 크기의 가장자리를 감지합니다. 반대편에있는 뉴런은 색상과 질감을 전문으로 색 대비와 패턴을 감지합니다. 4 뉴런은 무작위로 초기화 된다는 것을 기억하십시오 . 인간은 아무도 가지 않고 가장자리 감지기가되거나 이런 방식으로 분리되도록 설정했습니다. 그것은 단순히 이미지를 분류하기 위해 네트워크를 훈련하는 것으로부터 시작되었습니다.


이 놀라운 결과 (및 그 당시의 다른 흥미 진진한 결과)는 시작에 불과했습니다. 그들은 신속하게 수정 된 접근법을 테스트하고 결과를 점차적으로 개선하거나 다른 영역에 적용하는 많은 다른 작업이 이어졌다. 그리고 신경 네트워크 공동체에 더하여, 컴퓨터 비전 공동체의 많은 사람들은 깊은 회선 신경 네트워크를 채택했습니다.

콘볼루션 (convolutional) 신경망은 컴퓨터 비전과 현대식 패턴 인식에 필수적인 도구입니다.


콘볼루션 뉴럴 네트워크 정형화

{xn}, {yn} 입력이 있는 1 차원 컨볼 루션 레이어를 고려해보십시오.

투입물의 측면에서 산출물을 비교적 쉽게 기술 할 수 있습니다 :



예를 들어, 위의 경우 :



유사하게, 2 차원 컨벌루션 레이어를 고려할 때, 입력 {xn,m}과 출력 {yn,m}을 고려합니다.



우리는 다시 입력 값으로 산출물을 적어 볼 수 있습니다.


예를 들어:


이 것을 A(x) 공식과 합쳐보겠습니다.


A(x)=σ(Wx+b)


적어도 이론적으로 컨볼 루션 신경 회로망을 구현하는 데 필요한 모든 것을 갖추고 있습니다.

실제로 이것은 종종 CNN에 대해 생각하는 가장 좋은 방법은 아닙니다. 라는 수학 연산의 관점에서 대안 배합,이 회선 종종 더 도움이됩니다.


콘볼루션 연산은 강력한 도구입니다. 수학에서는 편미분 방정식의 연구에서 확률 이론에 이르기까지 다양한 맥락에서 나옵니다. PDE에서의 역할 때문에 부분적으로, 회선은 물리학에서 매우 중요합니다. 또한 컴퓨터 그래픽 및 신호 처리와 같은 많은 응용 분야에서 중요한 역할을합니다.


우리에게는 콘볼루션이 여러 가지 이점을 제공합니다. 첫째, 순진한 관점이 제시 할 수있는 것보다 훨씬 더 효과적인 콘볼루션 레이어 구현을 가능하게합니다. 둘째, xs 의 색인 생성에서 현재 보여지는 모든 bookkeepings를 다루는 우리의 공식에서 많은 난장판을 제거 할 것입니다 - 현재의 배합은 아직 성가신 것처럼 보이지 않을 수 있습니다. 그러나 그것은 우리가 까다로운 케이스에 아직 빠지지 않았기 때문입니다. 마지막으로, 콘볼루션은 콘볼루션 레이어에 대한 추론을 위한 상당히 다른 관점을 제공합니다.


나는 당신의 계산 방법의 우아함에 감탄했습니다. 진정한 수학의 말을 타고이 분야를 뛰어 다니는 것이 좋을 것입니다. 우리와 같은 사람들은 힘들게 발걸음을 옮겨야합니다. - 알버트 아인슈타인

이 시리즈의 다음 게시물

다음 글을 읽어보십시오!

이 게시물은 CNN와 그 일반화에 대한 시리즈의 일부입니다. 처음 두 게시물은 깊은 학습에 익숙한 사람들을위한 후기 일 것이고, 나중에는 모든 사람들에게 관심을 가져야합니다. 업데이트를 받으려면 RSS 피드 를 구독하십시오 !

아래 또는 옆에 의견을 말하십시오. 풀 요청은 github에서 만들 수 있습니다 .


감사 인사

저는 Eliana Lorch, Aaron Courville 및 Sebastian Zany의 의견과 지원에 감사드립니다.  


동일한 뉴런의 여러 복사본을 사용하는 모든 신경 네트워크가 CNN라는 것은 아닙니다. CNN는보다 일반적인 트릭, 응용 신경 네트워크의 한 유형입니다 체중 동점을. 이를 수행하는 다른 종류의 신경망은 반복적 인 신경망과 재귀 적 신경망입니다.


A 와 같은 뉴런 그룹, 여러 곳에 나타나는 모듈을 모듈 이라고도하며 모듈 을 사용하는 네트워크를 모듈화 된 신경 네트워크 라고도 합니다.

그들은 또한 종이에서 7을 사용하여 테스트합니다.


이것은 망막의 봉과 원뿔에 대해 흥미로운 비유를 갖는 것으로 보입니다.

작가의 이전글 계산 그래프로 역전파 이해하기

작품 선택

키워드 선택 0 / 3 0

댓글여부

afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari