뉴럴 네트워크, 매니폴드, 토폴로지 - 구글 브레인 Chris Olah
이 글은 colah.github.io 의 블로그의 글을 저작자 Chris Olah의 허락을 받고 번역한 글입니다.
원문 출처 : http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/
최근에 학계와 업계에선 딥 뉴럴 네트워크에 엄청난 흥분을 보이고 있습니다. 이는 딥 뉴럴 네트워크가 컴퓨터 비전 등의 분야에서 엄청난 혁신을 이끌어내고 있기 때문입니다. 하지만 여전히 딥 뉴럴 네트워크에 대해 수 많은 고민거리가 있습니다. 그 중에 하나는 딥 뉴럴 네트워크의 작동원리를 이해하는 것 자체가 너무나 도전적이기 때문입니다. 만약에 어떤 사람이 딥 뉴럴 네트워크를 잘 훈련시킨다면, 이 딥 뉴럴 네트워크는 엄청난 품질의 결과를 내놓습니다. 하지만, 이 동작원리를 이해하는 것은 어렵습니다. 만약에 딥 뉴럴 네트워크에 버그가 있더단지 연산을 실패한다면, 우리는 무엇이 잘못되어가고 있는지를 이해하기 어렵습니다.
일반적으로 딥 뉴럴 네트워크가 하는 행동들을 이해하기 어렵지만, 낮은 차원의 딥 뉴럴 네트워크 (각 레이어에 단지 몇 개의 뉴런만 존재하는 딥 뉴럴 네트워크) 만 놓고 본다면 우리는 이 네트워크를 이해하기가 한층 쉬워집니다. 사실상, 우리는 딥 뉴럴 네트워크의 학습과정을 시각화하여 이해할 수 있습니다. 이러한 시각은 우리를 딥 뉴럴 네트워크의 작동 방식과 뉴럴 네트워크의 연결을 토폴로지(Topology)라 불리는 수학 영역과 연계하여 한 층 더 깊은 직관을 갖게 합니다.
특정 데이터 세트를 분류하는 딥 뉴럴 네트워크의 작업을 낮은 차원에서 이해하는 등, 낮은 차원의 딥 뉴럴 네트워크를 통해 수많은 흥미있는 주제들이 따라오게 됩니다.
아주 간단한 데이터셋으로 시작해보겠습니다. 두 커브 그래프가 하나의 평면 위에 있습니다. 네트워크는 이 두가지 선을 구분하는 법을 배울 것입니다.
뉴럴 네트워크의 작동방식(혹은 다른 어떤 분류 알고리즘)을 시각화하는 분명한 방식은 단순히 모든 가능한 데이터 포인트에서 어떻게 데이터를 분류하는지 하나하나 보는 것입니다. 우리는 가능한한 단순한 뉴럴네트워크의 형식으로 시작해보겠습니다. 입력 레이어가 하나이고 출력 레이어가 하나인 네트워크로 시작해보겠습니다. 이런 네트워크는 단순히 이 두가지 데이터를 하나의 선으로 분류할 것입니다.
이런 네트워크는 그리 흥미롭지 않습니다. 현대 뉴럴 네트워크는 일반적으로 입력과 출력 사이에 여러개의 레이어를 가진 히든 레이어라 불리는 것들을 가집니다. 최소한으로 줄여보자면, 하나의 히든 레이어를 가집니다.
전과 같이, 우리는 다른 도메인에서 점들의 차이를 바라봄으로 네트워크의 작동원리를 시각화할 수 있습니다. 이는 단순히 선 하나보다는 좀 더 복잡한 곡선으로 데이터를 분리합니다.
각각의 레이어에서 네트워크는 데이터를 변환합니다. 그리고 새로운 형태로 만들어냅니다. 우리는 각각의 형태로 표현된 데이터를 보고 네트워크가 어떻게 이들을 분류하는지 알 수 있습니다. 우리가 마지막 표현에 이를때, 네트워크는 데이터를 관통하는 선을 그릴 것입니다. (혹은 좀 더 높은 차원이라면 hyperplane을 그릴 것입니다.)
전의 시각화에서 우리는 데이터의 원시 표현을 바라보았습니다. 당신은 입력레이어를 바라보는 것을 생각해볼 수 있습니다. 우리는 이제 첫번째 레이어에 의해 변하는 그래프를 볼 것입니다. 당신은 이를 히든 레이어를 바라보는 것이라고 생각할 수 있습니다.
각각의 차원은 레이어에서 신호를 보내는 뉴런과 연계됩니다.
전의 섹션에서의 접근법에 따라, 우리는 각각의 레이어에 해당하는 표현을 봄으로 네트워크를 이해하는 법을 배웠습니다. 이는 표현의 구분된 표현의 리스트를 볼 수 있게 해주었습니다.
약간 다루기 힘든 주제는 우리가 시작점으로부터 마지막까지 진행과정을 이해하는 것입니다. 감사하게도, 뉴럴 네트워크 레이어는 이를 수행하기 위해 좋은 속성들을 가지고 있습니다.
레이어의 "weight" 매트릭스를 선형으로 변환시킵니다.
우리는 연속적인 변환으로 이를 아래와같이 시각화할 수 있습니다.
이 레이어는 행렬곱 연산(Affine Transformation)과 활성 함수(Activation function)으로 이루어진 다른 표준 레이어와 동일한 레이어입니다.
우리는 이 테크닉을 적용하여 더 복잡한 네트워크를 이해할 수 있습니다. 예를 들어, 두 개의 나선을 구분하는 다음의 네트워크는 4개의 히든 레이어를 사용하여 약간 서로 엮여 있습니다.
시간이 지날 수록, 우리는 원시 표현으로부터 높은 레벨의 표현까지 뉴럴네트워크가 학습을 해나가는 과정을 볼 수 있습니다. 처음의 원시적인 표현에서 두개의 나선은 서로 엮여있었지만, 마지막에는 직선으로도 구분을 할 수 있게 되었습니다.
반면에 동일하게 여러 레이어를 가진 다음의 네트워크는 좀더 심하게 엮여있는 두 나선을 구분하는 데 실패합니다.
이는 우리나 낮은 차원의 뉴럴 네트워크를 사용하고 있기 때문에 도전적이라는 점을 잘 짚어주고 있습니다. 만약에 우리가 좀 더 넓은 네트워크를 사용한다면, 분류하는 것은 꽤 쉬워질 것입니다.
(Andrej Karpathy는 ConvertJS를 활용하여 당신이 인터렉티브하게 네트워크 학습과정을 탐험할 수 있도록 멋진 데모를 만들었습니다. )
밤이 깊어서, 절반 정도만 번역하였습니다.
다음 2편에서 마저 토폴로지와 매니폴드에 대한 설명을 해주는 뒷 부분을 번역하겠습니다 :)
https://brunch.co.kr/@chris-song/20