안녕하세요. 

이번 글에서는 intractable problem에 대해서 설명드리려고 합니다.

 

딥러닝 뿐만 아니라 컴퓨터를 통해 연구를 할 때, 자신이 설계한 모델컴퓨터 상에 돌아갈 수 있는지 없는지를 알아내는 것은 굉장히 중요한 문제입니다.

 

"왜냐하면, 어렵게  어렵게 모델을 설계했는데, 해당 모델이 계산 불가능하다면 컴퓨터 상에서 쓸 수 없기 때문이죠."

 

컴퓨터 과학에서는 보통 계산 불가능하다는 것intractable하다고 표현합니다.

 

"그렇다면, 계산 불가능하다는 것을 어떻게 정의할 수 있을까요? " 

 

지금부터 위의 질문에 대한 답을 찾아가면서 intractable에 대한 개념을 이해해보도록 하겠습니다.

 

※Note. 참고로 intractable computation을 설명하기 위해서는 필연적으로 수학 역사를 다루어야 합니다. 하지만, 제가 수학과가 아니기 때문에 잘 못 된 설명이 있을 수 있으니 발견 시 꼭 댓글 달아주시면 감사하겠습니다!!!!!   

 

 

 

 

 

 

1. 무한이라는 개념의 등장

식탁에 있는 오렌지 하나냉장고에 있는 오렌지 하나를 가져와 제 접시에 놓았습니다. 그렇다면, 제 접시에는 두 개의 오렌지가 있을 겁니다. 이것을 수식으로 표현하면 아래와 같죠.

1 + 1 = 2

오렌지라는 물체를 하나의 단위(unit) 즉 수(number)로 간주하기 때문에 위와 같은 식이 성립하죠. 이것은 우리 눈으로 직관적으로 확인 할 수 있기 때문에 매우 자명하다고 할 수 있습니다. 

 

"그런데, 여러분은 무한이라는 개념을 직관적으로 설명하실 수 있으신가요?"

"우리 주변에 무한이라는 개념을 관찰할 수 있는 것이 무엇이 있죠?"

 

처음에 이런 질문들을 듣는다면 굉장히 혼란스러우실 겁니다. 어떤 분들은 무한대(∞)를 세상에서 가장 큰 수라고 이야기 하기도 하지요. 그런데, 수라는 관점에서 무한대(∞)를 해석하면 "1+무한대>무한대"가 되어야 하는데, 수학적 정의에 따르면 "1+무한대=무한대" 이죠. 그래서, 무한대(∞)라는 것을 수라는 관점으로 제한하기에는 무리가 있어보입니다.

 

"그렇다면, 무한대라는 개념을 어떤 관점에서 이해하면 되는 것일까요?"

먼저, 아래 영상을 살펴보도록 하겠습니다!

 

 

 

"위 영상에서 살펴봤듯이 무한이라는 개념은 "과정(process)"이라는 관점에서 이해할 수 있습니다."

 

아래 영상에서 아르키메데스(Archimedes; BC.287)삼각형의 변의 무한이 작게 만들어가는 과정을 통해 원의 둘레정의하기도 했죠. 이때, 한 변의 길이가 무한히 작게 간다는 것은 0에 가까워 지는 것과 같은데, 이러한 과정을 설명하기 위해 무한소(infinitesimal)라는 개념이 등장하게 됩니다. (반대로, 무한대는 무한히 커지는 과정을 의미하겠죠?)

 

 

 

이 후, 아이작 뉴턴(Isaac Newton; 1642), 라이프니츠( Gottfried Wilhelm Leibniz; 1646)무한소(infinitesimal)라는 개념을 이용미적분학발전시키게 됩니다.

 

 

하지만, 당시 미적분학체계가 갖춰지지 않은 상태였기 때문에 베르나도 볼차노(Bernard Placidus Johann Nepomuk Bolzano; 1781), 오귀스탱 루이 코시(Augustin Louis Cauchy; 1789), 카를 바이어슈트라스(Karl Theodor Wilhelm Weierstraß; 1815) 등의 수학자들이 엡실론-델타 논법을 발명했고, 이를 통해 극한, 미분, 적분 등의 개념들을 엄밀화하기 시작합니다. 예를 들어, 극한이라는 개념은 "x가 한없이 커질 때, f(x)가 한 없이 어떤 값에 가까워지면 그 값을 극한 값"이라고 하는데, 이때 "한없이"라는 개념과 "가까워진다"라는 개념을 공리(axiom), 정리(definition) 이용 수학적으로 엄밀하게 정의한 것이죠. 그리고, 이러한 노력들을 통해 초기 해석학(analysis)이 탄생합니다. 

 

(↓↓↓코시의 엡실론-델타 논법 설명↓↓↓)

 

 

(↓↓↓ 해석학 탄생의 역사↓↓↓)

 

 

또한, 칸토어(Georg Ferdinand Ludwig Philipp Cantor; 1845)무한이라는 개념을 집합의 관점에서 정리하였고, 데데킨트(Julius Wilhelm Richard Dedekind; 1831) 실수체계를 엄밀하게 정리함으로써 무한이라는 개념을 체계화시켰습니다. 결국 해석학을 통해 대수학, 기하학에 대한 개념을 엄밀하게 하려는 시도까지 하게 되죠.

 

 

그림 출처: https://dm19sky.tistory.com/59

 

이렇게 무한이나 극한에 대한 개념체계화 함으로써 미적분학, 해석학이 발전해갔습니다. 하지만, 이러한 분야가 발전하는 것을 마음에 들지 않았던 수학자도 있었죠. "라위천 에흐베르튀스 얀 브라우어르(Luitzen Egbertus Jan Brouwer: 1881)"는 18~19세기 미적분학, 해석학의 발전이 기존 수학에 많은 문제점을 야기했다고 주장하는데 그 이유는 아래와 같습니다.

 

"수학이라는 것은 철저하게 공리(axiom)과 정리(definition)에 의해 견고하게 구축되어야 하는 분야인데, 무한이나 극한 같이 관찰하기 어려운 개념들을 추상화 되면서 이러한 체계들이 무너지고 있다"

 

라위천 에흐베르튀스 얀 브라우어르

 

 

예를 들어, 이 당시 집합론은 모든 수학의 근간이었는데, 러셀(Bertrand Arthur William Russell; 1872)이 집합론에 모순이 있다고 주장합니다. (러셀의 역설(Bertrand Russel's paradox)이라고 알려져있죠)

 

러셀

 

"이렇게 수학의 체계가 흔들리려고 할 때즘 독일의 수학자 힐베르트(David Hilbert; 1862)가 등장합니다."

 

 

 

 

2. 힐베르트와 괴델의 불완전성 정리

"힐베르트(David Hilbert; 1862)는 공리계를 잘 설계할 수 있다면 '러셀의 역설' 이 해결 될 수 있다고 주장했습니다."

즉, 당시 수학 개념들은 충분히 체계화 시킬 수 있다고 본 것이죠.

 

힐베르트

 

힐베르트는 1928년 볼로냐 세계 수학자대회에서 한 가지 문제를 던집니다.

 

"현재 존재하는 모든 수학 문제들을 풀 수 있는 일반적인 알고리즘(기계)이 존재하는가?"

 

이러한 질문을 던진 이유는 "모든 수학 문제들을 풀 수 있는 일반적인 알고리즘 또는 기계가 있다면 모든 수학 체계를 형식화 할 수 있다는 것을 의미"했기 때문입니다.

 

만약 모든 수학 문제들을 풀 수 있는 일반적인 알고리즘 또는 기계가 등장한다면 수학자들이 찾아내는 모든 수학 공식들을 계산 할 수 있을 것이고, 그렇게 되면 수학자들은 모두 실직할 것이라고 봤죠.

 

또한, 앞서 언급한 알고리즘(or 기계)이 등장하면 수학의 '무모순성', '완전성', 그리고 '결정가능성'을 증명할 수 있다고 주장합니다.

 

미국의 수학자 괴델( Kurt Gödel; 1906)은 힐베르트가 궁금해 했던 "모든 수학 문제들을 풀 수 있는 일반적인 알고리즘"은 없다고 주장합니다. 아무리 공리 체계가 잘 설계되더라도 러셀의 역설은 피할 수 없다고 주장하죠. 자신의 주장을 증명하기 위해 "괴델의 불완전성 정리(Gödel's incompleteness theorems)"를 발표합니다. 

 

괴델

 

또한 괴델주장뒷 받침수학자가 있었습니다. 바로, Alan Turing인데요.

 

"지금부터 Alan Turing에 대해 설명하면서 좀 더 intractable이라는 개념에 다가가도록 하겠습니다."

 

 

 

3. Alan Turing 그리고 Halting problem

Alan Turing(1921)1934년 케임브리지 수학과졸업하고, 학업더 연장하게 됩니다.

 

"1935년 Max Newman 교수의 수업 중 "괴델의 불완정성 법칙"에 대한 이야기를 듣게 됩니다."

 

그리고 힐베르트가 말한 "모든 수학문제를 풀 수 있는 일반적인 기계"에 대해서 관심을 갖게 됩니다. 결국, 1936년 "On Computable Numbers, with an Application to the Entscheidungsproblem" 이라는 논문에서 앞서 언급한 기계를 고안하게 되죠.  그리고, 오늘날 이 기계를 Turing Machine이라 부릅니다.  (해당 논문에서는 universal mahince이라고 표현된 것을 오늘날 Turing Machine이라고 부르게 된 것이죠)

 

https://www.semanticscholar.org/paper/On-Computable-Numbers%2C-with-an-Application-to-the-Turing/ab7790485f26ce65f9d83dd700c43e49058bdd2b

 

[PDF] On Computable Numbers, with an Application to the Entscheidungsproblem | Semantic Scholar

1. Computing machines. 2. Definitions. Automatic machines. Computing machines. Circle and circle-free numbers. Computable sequences and numbers. 3. Examples of computing machines. 4. Abbreviated tables Further examples. 5. Enumeration of computable sequenc

www.semanticscholar.org

 

 

 

 

힐베르트가 말한 "모든 수학문제를 풀 수 있는 일반적인 기계"는 바꿔말해 "모든 연산(=계산; computation)이 가능한 가상의 기계"라는 것과 같습니다. 왜냐하면 결국 "수학문제를 푼다는 것"은 "계산을 한다는 것"과 같으니까요.

 

"그렇다면, 이러한 Turing Machine을 이용해 어떻게 괴델의 주장을 뒷받침 했을까요?"

 

이에 대한 답을 하기 위해서 Turing Machine에 대해서 잠깐 설명해보도록 하겠습니다. 

 

 

[Turing machine 작동원리]

Turing machine 작동원리는 아래 영상들을 참고해주세요!

 

 

 

[Hibert's Decision Problem & Halting Problem]

힐베르트는 "'모든 수학 문제들을 풀 수 있는 일반적인 알고리즘 또는 기계'가 존재하면 '모든 수학적 문제에 대해서 그 문제가 참인지 거짓인지를 확실하게 결정해 줄 명확한 방법이 존재할 수 있는지'" 궁금해했습니다.

 

이러한 질문을 "힐베르트의 결정 문제(Hilbert's Decision Problem)"라고 합니다. 이 문제에 답을 하기 위해서는 수학 문제가 참인지 거짓인지 증명이 되어야 합니다. 앞서 Turing 머신은 모든 연산을 할 수 있기다고 배웠습니다. 그렇다면, 모든 수학적 문제를 Turing 머신에 넣었을 때 참인지 거짓인지 판명하면 수학의 '결정가능성'을 입증할 수 있게 되는 것이죠. 

 

 

"그런데 반대로, 수학의 '결정가능성'을 반증하려면 어떻게 해야할까요?"

 

Turing machine이 수학 문제를 입력 받았을 때, 참 또는 거짓과 같은 답을 내놓지 않는다면 '결정가능성'을 반증할 수 있을겁니다. 참 또는 거짓과 같은 답을 내놓지 않는다는건 Turing Machine이 어떤 결론에 도달하지 않고, 즉 멈추지 않고 계속해서 돌아간다는 뜻이죠. 그래서 Turing은 힐베르트의 결정 문제(Hilbert's Decision Problem)를 "(수학 계산이 가능한) Turing machine에 데이터를 입력했을 때, 해당 machine이 궁극적으로 정지하는지 정지하지 않는지"에 대한 문제인 Halting Problem으로 바꿔 생각합니다. 만약, 정지하지 않으면 수학의 '결정가능성'을 반증하게 되는 것이죠.

 

 

 

 

[Turing Machine과 오늘날 컴퓨터]

Turing Machine계산이 가능한 시스템을 갖고 있습니다. 폰 노이만(John von Neumann; 1903)은 이러한 Turing machine확장하여 폰 노이만 구조설계하죠. 그리고, 오늘날 폰 노이만 구조를 오늘날 컴퓨터의 prototype으로 보고 있습니다.

 

"바꿔 말해, 모든 컴퓨터는 Turing Machine을 기반으로 하고 있다고 할 수 있습니다."

 

예를 들어서, 슈퍼컴퓨터가 할 수 있는 계산은 일반 컴퓨터에서 할 수 있습니다.  왜냐하면 모두 CPU, GPU 같은 장치들로 연산이되기 때문이죠. 단지 일반 컴퓨터에서는 시간이 더 오래걸릴 뿐입니다. 다시말해, 계산 능력자체는 동일한 것이라 할 수 있습니다. 이와 같은 맥락으로, 일반 컴퓨터의 계산 능력은 Turing machine과 동일하다고 할 수 있는 것이죠. 

 

 

 

 

4. Intractable & Tractable (Feat. NP & P 문제)

Turing machine은 다른 말로 "결정론적 튜링 기계(Deterministic Turing Machine: DTM)"라고도 합니다. 

 

결정론적이라는 표현이 붙은 이유는 Turing Machine 작동원리 영상에서 언급됐듯이 "테이프의 symbol이 s이고, 현재 상태가 q라면 알고리즘에 의해 다음 명령어가 유일하게 결정"되기 때문이죠.  

 

Deterministic Turing Machine은 현대 모든 계산 기능을 갖춘 기계들 (ex: 컴퓨터, 스마트폰, 슈퍼 컴퓨터 등)을 대표합니다. 그래서, "어떤 문제를 컴퓨터를 사용해 다항시간(polynomial time) 내에 답을 구할 수 있냐?"는 질문을 "어떤 문제를 Deterministic Turing Machine을 사용해 다항시간내에 답을 구할 수 있냐?"라는 문제로 치환할 수 있는 것이죠.

 

"어떤 문제를 Deterministic Turing Machine을 사용해  다항시간내에 답을 구할 수 있냐?"

 

이 치환된 질문은 굉장히 중요합니다. 왜냐하면, 이 질문을 기준으로 intractable computation(problem)인지 tractable computation(problem)인지 구분하기 때문이죠. Deterministic Turing Machine을 이용하여 어떤 문제를 polynomial time(다항시간) 안에 풀 수 있으면 "해당 문제는 polynomial time complexity을 갖는다"라고 말할 수 있게되고, 해당 문제를 tractable problem으로 간주하게 됩니다. 반대로, polynomial time 안에 풀 수 없으면 intractable problem으로 간주하게 되죠.

 

 

[P문제]

컴퓨터 과학에서는 tractable computation(problem)을 Polynomial의 P를 따서 P문제라고 정의합니다. 다시 말해, polynomial time complexity를 가지면, tractable(=풀만한; feasible) 문제라고 여기며, 이러한 문제들의 집한을 P라고 나타내는 것이죠. 

 

 

현실에서는 어떤 문제를 풀 때 이용되는 알고리즘이 (차수가) 2차 이하의 time complexity를 가진다면 유효한 알고리즘이라고 합니다. 이러한 알고리즘으로 풀리는 문제들을 P 문제 또는 tractable problem이라고 하죠. 예를 들어, shortest path 같은 최단거리를 다루는 다양한 알고리즘은 이미 P문제, 즉 tractable problem이라는 것이 증명되었죠.

 

 

그림 출처: https://www.joyk.com/dig/detail/1608665582509127

 

 

[NP문제]

반대로 None-Polynomial time complexity를 가진다면 intractable computation(problem)으로 여기며, 이러한 문제들의 집합을 NP라 합니다.

 

현실적에서는 3차 이상의 time complexity를 갖고 있을 경우 NP로 정의합니다.

 

"정리하자면, P, NP 문제는 Turing machine과 같은 계산 시스템 관점에서 풀기 어려운 (=intractable; NP) 문제인지 그래도 현실적으로 풀기 수월한 (=tractable; P) 문제인지에 따라 결정되는 것입니다."

 

 

 

 

 

5. 왜 P, NP 문제를 구분하는 것이 중요한가요?

현재 딥러닝을 연구하는 사람들에게 컴퓨터는 빼놓을 수 없는 장비입니다. 설계한 딥러닝 모델을 컴퓨터에서 학습시키고 그 결과를 도출해야하기 때문이죠. 새로운 딥러닝 모델을 설계하기 위해서는 기존에 쓰이지 않은 개념들을 접목시켜야 합니다.

 

"그런데, 이러한 새로운 모델을 설계하고 연구 할 때 중요한 것이 "기존에 쓰이지 않은 개념"을 접목시킨 새로운 딥러닝 모델이 계산 가능해야 한다는 것입니다."

 

만약, 새로 설계된 새로운 딥러닝 모델이 계산 불가능하다면, 해당 모델을 학습시키는건 현실적으로 불가능하다고 볼 수 있겠죠?

 

예를 들어서, 초기에 딥러닝이 막 나왔을 때에는 mutual information이라는 개념이 접목되지 않은 상태였습니다. 그렇기 때문에 연구자들은 mutual information을 접목시켜 새로운 딥러닝 모델을 만들려고 했죠. 하지만, mutual information이라는 개념을 딥러닝에 적용하여 수식화해보니 intractable computation(problem) 인 것으로 판명됐습니다. (←이 부분에 대한 자세한 설명은 Self-Supervised Learning 카테고리에서 글을 작성한 후 링크를 걸어두도록 하겠습니다)

 

그렇다면, 연구자들은 mutual information이라는 개념을 적용하는 것을 포기해야 할까요? 

 

컴퓨터 분야(or 딥러닝 분야)에서는 이와같이 intractable computation 문제를 tractable computation하게 바꿔주는 mathematical trick이 사용되기도 합니다. 예를 들어, VAE에서는 generative model을 만들기 위해 variational inference를 사용해 intractable generative model을 tractable generative model로 바꿔 주었고, Self-Supervised Learning 분야에서는 contrastive learning을 하기 위해 intractable mutual information 문제를  tractable하게 바꿔주기도 합니다.

 

"다시말해, intractable computation 문제들을 tractable computation으로 변경해주는 mathematical trick을 이용하는 것이죠. "

 

 

 

 

지금까지 intractable이라는 개념에 대해서 알아보았습니다.

"앞에서 배운것을 요약하면 'Deterministic Turing Machine으로 어떤 문제를 다항시간안에 풀 수 있는지 없는지에 따라 intractable, tractable을 구분할 수 있다'라고 정리할 수 있습니다."

 

 

 

글을 마치면서 질문을 하나 남기겠습니다.

"최근에 나온 양자컴퓨팅은 nondeterministic Turing machine입니다. 그렇다면, 양자컴퓨팅을 이용하면 NP였던 문제들이 P문제가 될 수 있을까요?"

 

답은 아래영상에서 확인하시면 좋을 것 같습니다.

 

 

 

[Reference]

https://blog.zarathu.com/posts/2019-05-20-godelincompleteness/

 

Zarathu Blog: 괴델의 불완전성 정리

괴델(Kurt Gödel)의 불완전성 정리가 나온 배경을 소개하고 증명의 핵심 아이디어를 수학과 메타수학(meta-mathematics), 괴델수(Gödel number), 그리고 메타수학의 수학화 3가지로 나누어 설명하였습니다.

blog.zarathu.com

 

안녕하세요. 

이번 글에서는 이미지(data), 차원(dimension), 그리고 분포(distribution)간의 관계에 대해서 설명해보도록 하겠습니다.

 

앞으로 AutoEncoder, VAE, GAN이해하기 위한 가장 기본적인 background이니 만큼 잘 설명해보도록 하겠습니다.

 

 

 

1. 이미지와 차원(dimension) 간의 관계

먼저, 한 가지 질문을 던지면서 글을 시작하도록 하겠습니다.

 

"색(color)을 표현(representation)하기 위해서는 몇 차원이 필요한가요?"

 

답부터 말씀드리면 "색을 표현하기 위해서는 3차원이 필요"합니다. 현실세계에서는 3차원 (R,G,B) 값을 다양하게 조합하여 색상표현할 수 있죠. 그리고, 이렇게 표현된 공간을 "색 공간 (color space)"라고 부릅니다.

 

<그림 출처: https://geraldbakker.nl/psnumbers/rgb-explained.html>
<위 그림을 설명을 위해첨부되었습니다 . 실제 pixel 값과 색상이 매칭이 안될 수 도 있으니 유의하세요 !>

 

 

 

 

 

"그렇다면, 색을 표현할 수 있는 모든 경우의 수는 어떻게 될까요?"

 

당연히 조합 경우의 수를 구하면 되므로 \(255^{3}\)  이 될 것입니다

 

<그림 출처:  https://overface.tistory.com/593>

 

 

 

 

 

"gray color를 표현하기 위해서 필요한 차원은 무엇일까요?"

 

gray color1차원 (0~255) 으로 모두 표현 가능합니다. 또한, gray color표현할 수 있는 모든 경우의 수255가지가 되겠죠. 그래서, 흑백 이미지를 다루는 문제에서는 이미지를 1차원으로 가정하고 gray scale이라고 표현하기도 합니다.

 

<그림 출처:  https://medium.com/javarevisited/converting-rgb-image-to-the-grayscale-image-in-java-9e1edc5bd6e7>

 

 

 

 

 

"앞서 색상관련해서는 정해진 차원(1차원 or 3차원)이 필요하다고 했는데, 그렇다면 이미지를 표현하기 위해서도 정해진 차원이 필요한가요?"

 

결론부터 말씀드리면, 이미지에 대한 차원은 "이미지 크기에 따라 달라진다" 입니다. 아래 gray scale의 튜링 이미지의 크기가 200×200이라고 한다면, 이러한 이미지를 표현하기 위해서는 40000 차원이 필요합니다. 왜 이렇게 고차원이 나오는지 설명해보도록 하겠습니다. (사실 엄밀히 말하면 색상도 R,G,B외에 다른 요소들로 표현할 수 있으면 색상의 차원은 또 달라질 수 있습니다)

 

 

 

 

200×200 gray scale 이미지를 표현한다고 하면 어떻게 생각해볼 수 있을까요? 먼저, 이미지라는 것은 pixel의 조합으로 이루어져 있습니다. 그리고, 하나의 픽셀에는 하나의 색 표현이 가능하죠. Gray scale인 경우에는 하나의 pixel0~255 사이 값 중 하나가 할당될 수 있습니다.

 

<그림 참고: https://blog.tonkabi.com/blog/post/computer-vision-vs-human-vision>

 

 

그렇다면, 200×200 gray scale 이미지의 pixel들을 1차원 일렬로 늘린다고 생각해보겠습니다.

 

<2D 이미지를 1D 이미지로 늘리는 예시>

 

 

그럼 40000개의 pixel이 나올 것입니다. 이때, 각각의 pixel들은 0~255개의 값을 지니고 있죠. 이를 다른 관점에서 보면, 40000개의 독립된 변수로 볼 수 있고, 각각의 변수는 0~255 값의 범위를 갖고 있다고 할 수 있죠. 40000개의 독립된 변수하나의 이미지 구성될 수 있기 때문에, 200×200 gray scale 이미지는 40000차원을 갖는다고 할 수 있습니다. 200×200 이미지는 40000 차원의 독립된 변수들이 갖는 고유의 값들에 의해 표현될 수 있는 것이죠. 

 

 

 

"그렇다면, 200×200 gray scale 이미지를 표현할 수 있는 모든 경우의 수는 어떻게 될까요?"

 

정답은 아래에서 구한 것 처럼 \(10^{96329}\) 경우의 수가 됩니다.

 

 

 

 

 

2. 이미지와 분포간의 관계 

앞서 200×200 gray scale 이미지의 차원 40000차원이고, 표현할 수 있는 이미지의 개수 (경우의 수)는 대략  \(10^{96329}\) 라고 했습니다.

 

"그렇다면, 200×200 gray scale 에서 표현될 수 있는 모든 경우의 수에 해당하는 이미지들은 의미가 있다고 할 수 을까요?"

예를 들어, \(10^{96329}\) 경우의 조합들 중에서는 아래 왼쪽과 같이 의미 없는 이미지(noise image)들도 있을 것이고, 오른쪽 같이 사람이 구별할 수 있는 의미 있는 이미지가 있을 수 있습니다. 

 

<그림 출처: http://web.mit.edu/kenta/www/three/grayscale-noise/zxevanas/images/?S=A>

 

 

여기서 우리는 또 한 가지 질문을 던져볼 수 있습니다.

 

"200×200 gray scale  즉, 40000차원 상에서 의미있는 이미지들은 고르게 분포(uniform distribution)하고 있을까요? 아니면 40000차원이라는 공간의 특정 영역에 몰려있거나 특정 패턴으로 분포(non-uniform distribution)하고 있을까요?"

 

이러한 질문에 을 하는 방법 중 하나는 200×200 gray scale 이미지들을 uniform distribution으로 수 없이 샘플링 해봐서 경험적으로 보여주는 것입니다. 만약, uniform distribution을 전제로 수 없이 샘플링 했을 때, 의미있는 이미지들이 종종 보인다면 의미있는 이미지들이 40000차원 상에 고르게 분포한다고 볼 수 있겠죠.

 

(※ 직관적으로 이해하기 위해 편의상 40000차원을 아래 이미지 처럼 3차원으로 표현했습니다. (즉, 아래 그림은 '본래 40000차원이다'라고 간주하시면 될 것 같습니다))

 

 

"오토인코더의 모든 것"이라는 영상에서 이활석님은 20만번 샘플링한 결과 의미없는 이미지(noisy image)만 추출된 것을 확인 할 수 있었다고 합니다. 이러한 실험을 통해 의미있는 이미지들은 40000차원에서 특정 패턴 또는 특정 위치에 분포해 있다고 경험적으로 결론내릴 수 있게 되는 것이죠.

 

(↓아래 영상 1:01:25초 부터)

 

 

 

 

 

 

 

지금까지 AutoEncoder, VAE, GAN을 배우기 위한 기본 지식들을 정리해봤습니다.

다음 글에서는 AutoEncoder에 대해서 다루면서 dimension reduction에 대한 개념을 소개하도록 하겠습니다. 왜냐하면 VAE, GAN 같은 논문들을 살펴보려면 "latent"말을 이해하기 중요하기 때문이죠!

 

그럼 다음 글에서 뵙도록 하겠습니다! 

 

 

 

안녕하세요.

이번 글에서는 앞으로 GAN에 대한 글을 어떠한 방식으로 작성해나갈지 간단히 설명하려고 합니다.

 

  1. AutoEncoder
  2. VAE (paper review)
  3. GAN (paper review)
  4. DCGAN (paper review)
  5. 이외 다른 GAN 모델들 (paper review 위주)

 

첫 번째 AutoEncoder를 다루는 이유는 VAE라는 모델 설명하기 위해서 입니다.

AutoEncoder는 본래 generative model concept 목적으로 연구된 것이 아니라, dimension reduction 연구를 위해 사용되던 모델입니다. 하지만, VAE라는 모델이 AutoEncoder 기반으로 이루어져있기 때문에 VAE를 배우면서 AutoEncoder 관련 용어들이 종종 등장합니다. 그렇기 때문에 AutoEncoder를 제일 먼저 다루려고 합니다.

 

두 번째로 VAE를 다룰 예정입니다. 기존generative model을 만들기 위해서는 여러 어려움이 존재했습니다. 대표적으로 intractable computation 문제가 있었죠. 쉽게 말해, 컴퓨터로 generative model을 만들려고 하면 계산이 불가능할 정도의 복잡한 수식을 풀어내야 합니다. VAE는 이러한 intractable computation 문제를 tractable computation 문제로 전환시키는 기법을 도입하여 generative model을 만드는 시도를 했습니다. Generative model을 자주 다루다 보면 intractable이라는 용어와 probabilistic 이라는 용어가 자주 사용되는데, VAE 논문 리뷰하면서 이러한 용어들에 대한 설명을 하려고 합니다. 

 

세 번째로는 GAN을 다룰 예정입니다. Ian J. Goodfellow 논문리뷰하면서 GAN에 대해서 알아보려고 합니다. 그리고, 네 번째DCGAN을 다루면서 vision 분야에서 GAN을  어떻게 적용했는지 알아보겠습니다.

 

 

처음 GAN을 접하시는 분들이라면 지금 말씀드린 내용이 모두 이해가 안되시는게 당연합니다.

앞으로 포스팅 하는 글을 최대한 열심히 작성하여 다시 이 글을 보셨을 때, 이해하실 수 있게 노력해보도록 하겠습니다!

 

+ Recent posts