스터디 탭이 생기고 나서 수학 기초 얘기부터 쭉 글을 쓰기 시작했었는데 기초 이론에 대한 얘기는 좀 끊긴 상태였습니다. 새로운 정보들이 너무 많이 쏟아지다보니 그것들을 소개하는 것만 해도 내용이 많았었고, 작년 초반쯤에는 저도 생성AI의 원리에 대해서 자신있게 설명하기엔 부족한 점이 많았었습니다. 지금도 아직 모르는 부분이 많지만 그래도 요즘들어서 빈 부분이 하나씩 채워지는 느낌이라 제가 생각한 내용들을 설명드리려고 합니다.



오늘 다룰 얘기는 매니폴드 가설 (manifold hypothesis) 입니다. 매니폴드가 무슨 뜻인지는 설명을 하면서 천천히 얘기하도록 하겠습니다. 아래 영상을 보시면서 이 본문의 해설과 같이 생각해보신다면 그렇게 어렵지 않게 무슨 얘기를 하는 것인지 느끼실 수 있을 것입니다. 수식이나 증명이 아닌 그냥 느낌에 대한 이야기이니까 직관적으로 생각해주시면 되겠습니다.



https://www.youtube.com/watch?v=BePQBWPnYuE





먼저, 컴퓨터는 '정보' 를 어떻게 다룰까요? 정보가 텍스트라면 아스키코드, 유니코드 같이 글자당 1~4바이트 정도를 사용해서 표현을 하고, 정보가 이미지라면 픽셀당 1비트~32비트를 사용해서 가로*세로 픽셀만큼의 비트맵으로 표현을 합니다. 영상이라면 다시 그 픽셀수에 프레임수를 곱한만큼 내용이 커지겠죠. 그러한 데이터는 그대로 표현되기도 하지만 압축을 해서 표현하는 경우도 많습니다. jpg 나 mp4 같은 포맷이 대표적이겠네요. 하지만 그렇게 압축된 표현도 결국 메모리에 들어가서 어떤 연산을 하게 된다면 압축되지 않은 표현을 써야하기 때문에 압축에 대한 얘기는 생략하겠습니다.


생성형 AI같은 딥러닝의 세계에서는 일반적인 방법으로 정보를 다루는 방법에서 약간 더 발상의 전환이 필요합니다. 바로 '공간' 의 개념입니다.


왜 공간이라는 개념이 필요할까요? 딥러닝의 세계에서 모델을 학습시킬 때에는 역전파를 통해서 모델 안에 있는 수백만~수십억~수백억의 파라메터들을 조금씩 조정하게 되는데, 역전파가 가능하기 위한 전제조건은 딥러닝의 레이어에 들어가는 로직들이 '미분가능한(differentiable)' 수식들로 구성되어야 한다는 점입니다. 

미분가능 이라는 의미는, 입력이 스무스하게 변하면 출력도 스무스하게 변한다라고 러프하게 이해하면 되겠습니다. 파이토치같은 것으로 모델의 포워드 함수를 정의해주면 백워드 함수는 파이토치가 자동으로 만들어주게 되고, 따라서 역전파도 자동으로 구현이 됩니다만, 포워드 함수에서는 쓸 수 있는 문장이 미분가능한 수식들로만 파라메터를 변형시켜야 한다는 제약이 생깁니다. 


우리가 다루려는 대상을 공간 안의 벡터로 표현하고, 대상의 변화를 벡터의 움직임으로 표현하기로 하면 그러한 변화는 '미분가능한 수식' 이라는 조건을 만족할 수 있게 됩니다. 이 약속이 지켜지고 데이터가 잘 준비된다면 그 알고리즘은 인간이 아닌 컴퓨터가 짜줄 수 있는 영역으로 들어오게 되는 것이지요.


일반적인 정보를 공간 안으로 가져오는 것은 상당히 단순무식한 방법이라고 할 수 있습니다. 정보의 단위만큼 벡터의 차원을 늘리면 됩니다.


점 한개의 밝기가 (0 = 어두움 ~ 1 = 밝음) 으로 표현된다고 하면 그 점 1개를 표현하는 데에는 1차원 공간 (R^1) 이 있으면 됩니다. 저 그림에서는 초록색 점이 중간에서 약간 왼쪽에 있으니까 오른쪽에 있는 회색 점이 평균보다 약간 어두운 색으로 표현되었습니다


이런 식으로 하면 2차원 공간에서는 점 2개의 밝기를 표현할 수 있고, 3차원 공간에서는 점 3개의 밝기를 표현할 수 있습니다.


저 2차원 공간이 있다면 세상에 존재할 수 있는 모든 흑백점 2개의 밝기의 조합이 저 공간안의 점들로 표현할 수 있게 된다는 것입니다.


이런식으로 점점 공간을 확장시킨다면 가록 256픽셀, 세로 256 픽셀의 이미지는 256*256 = 65536 공간의 한 점으로 표현할 수 있을 것입니다.



65536차원이면 이미 하이퍼큐브를 넘어서 시각화가 불가능한 영역입니다. 그냥 공간이  존재하고 그 공간의 점 하나에는 256*256 이미지가 대응되겠거니 하고 생각하면 됩니다


저렇게 테니스 선수의 이미지도 저 65536 공간안의 한 점일 것이고

저런 아저씨의 이미지도 또 다른 공간 안의 한 점일 것입니다.


하지만 저 65536차원의 광활한 공간 안에서 저렇게 사람이 봤을때 의미가 있는 영역은 아주아주아주아주아주 일부분일 것이고, 대부분의 공간에는 노이즈 이미지가 가득 차 있을 것입니다

0~255 사이의 랜덤한 값을 256*256 개 모아서 비트맵 형태로 모아놨는데 그게 사람이 봤을때 그럴듯한 이미지일 확률은 극히 작을 것이니까요.


저 공간은 정보의 밀도가 매우 희소한 (sparse) 공간이며, 공간 안에서의 거리와 위치 관계도 인간이 인식했을 때의 의미(semantic)를 특별히 담고 있지 못한 공간입니다. 기껏해야 (1,1..., 1, 1) 쪽으로 점이 이동하면 이미지가 밝아진다 라는 정도의 정보밖에 없습니다.


의미를 담고 있다? 라는 부분에 대해 좀 더 설명하겠습니다. 예를 들어서 저 공간 안에 두 점이 있다고 가정합시다. 한 점은 어떤 여자가 입을 다물고 있는 이미지에 해당하고, 또 다른 한 점은 그 여자가 입을 벌리고 웃고 있는 이미지라고 합시다.



만약에 저 두 공간 사이에 선을 그어서 그 선 사이에 있는 점들을 쭉 따라간다고 해보면, 그 중간 결과는 두개의 이미지가 알파블렌딩된 것으로 보이게 될 것입니다


입을 닫은 이미지와 입을 벌리고 웃고 있는 이미지를 블렌딩하면 일단  이미지가 깨져보일 것이고, 의미상으로 '입을 열고 있는' 이미지와도 차이가 있을 것입니다.


만약에, 입을 실제로 벌리고 있는 영상을 캡춰해서 그 중간 프레임을 저 공간상에 표현한다면 어떻게 될까요? 직선과는 좀 다른 궤적을 그릴 것이라고 상상해볼 수 있을 것입니다


이 부분이 핵심입니다. 저렇게 의미가 연결된 직선은 항상 그을 수 있을까요? 영상에서 부드럽게 움직이는 프레임(의미상으로 연결된 이미지들) 들을 공간상에 표현하면 그 점들은 공간상에서 항상 연결되어 있을까요? 그 연결된 선 안에서 뽑은 점들은 '깨지지 않은' 이미지들로만 구성되어 있을까요? 매니폴드 가설이 참으로 성립하는 경우 (그러한 이미지들을 선택한다면) 라면 위의 명제들도 모두 성립할 것입니다.



매니폴드는 공간 안에서 어떤 성질들을 만족하는 부분공간이라고 대강 이해하도록 합시다. 전체 공간에서 대부분을 차지하는 노이즈들이나 깨진 이미지들 (위에서 두 이미지가 그냥 무성의하게 알파블렌딩된 이미지) 를 제외하고 인간이 보기에 안 깨졌다라고 생각되는 점들만 모아놓은 부분공간이 매니폴드를 형성하는 것입니다.


이 '매니폴드 가설' 이 '가설' 인 이유는 공간 안의 어떤 점이 매니폴드에 속할 것인가, 속하지 않을 것인가를 판단하는 기준이 '사람이 보기에 의미가 있다' 라는 것이기 때문입니다. 깨지면 매니폴드 밖, 깨지지 않으면 매니폴드 안인거죠


방법은 모르겠지만 전체 공간 안에서 '사람의 얼굴 모양'을 담은 매니폴드를 찾았다고 하면 그 매니폴드 안에서 아무 점이나 뽑아도 '깨지지 않고' '사람의 얼굴로 인정할 수 있는' 이미지가 나올겁니다



그리고 가장 재미있는 점은 그 점 사이에서 연결된 경로를 만들어서 따라가면 그 점에 해당하는 결과 이미지도 '의미상으로 연결된 (=스무스하게 변화하는)' 형태로 나타날 것이라는 점입니다




의미를 보존하고, 스무스하게 이동이 가능한 부분공간인 성질은 상당히 흥미로워보입니다. 이전에는 저런 매니폴드를 뽑아내는 방법을 몰랐지만 이제는 딥러닝이라는 방법을 통해서 저런 매니폴드를 추출할 수 있는 방법을 찾게 되었습니다!



그럼 좀 더 구체적인 매니폴드의 성질을 알아보도록 합시다



차원이 너무 많으면 설명하기 복잡하니 다시 2차원으로 차원을 좁혀서 새로운 예제로 설명하겠습니다. 위의 그림에는 우리가 보기에 의미가 있는 어떤 점들이 위와 같은 형태로 배치되어 있다고 생각해보겠습니다


전체 공간은 2차원 공간이기 때문에 저 공간 안에서의 위치를 표현하기 위해서는 2개의 숫자가 필요하지만, 만약에 저 부분공간 안에 있는 점만 대상으로 한정한다면 굳이 숫자를 2개 쓰지 않고 저 곡선의 시작부터 끝까지를 구간으로 잡아서 구간내의 1차원 좌표로도 표현이 가능할 것입니다.


즉 매니폴드 공간으로 한정한다면 원래 공간의 차원보다 더 적은 차원으로도 정보를 표현할 수 있다는 것입니다.


그리고 매니폴드 1차원 공간에서의 좌표를 알고 매니폴드가 어떠한 구조인지 안다면 원래의 2차원 좌표로도 변환이 가능할 것입니다.


사실 매니폴드가 전체 공간의 부분공간이다. 라는 표현은 수학적으로는 약간 부족한 표현입니다. 조금 더 엄밀하게 표현하자면 전체 공간의 부분공간과 잠재공간 사이에는 위상동형사상(homeomorphism) 이 존재한다라고 표현할 수 있겠네요. 위상수학하면 한번쯤 들어봤을, 도너츠와 커피잔은 위상수학에서는 같은 대상 (구멍이 한개 뚫려있는 매니폴드) 으로 본다는 센스로 이해하시면 됩니다.


앞서 설명하면서 모든 가능한 이미지를 전부 담고 있는 공간은 거의 대부분이 노이즈로 차있고 공간안에서 한 점을 뽑아도 의미가 없을 확률이 절대적으로 높다고 설명했습니다. 그렇다는 말은 우리가 관심을 갖고 있는 매니폴드 공간은 전체 공간의 부피중 극히 일부의 공간만 차지한다고 할 수 있는 것이지요


원래는 65536 차원 공간에서 표현해야 할 이미지에서 매니폴드를 잘 압축시키면 훨씬 적은 차원 (예:10차원) 이내의 공간으로도 다양한 이미지를 표현할 수 있을 것입니다


간단한 사례로 예를 들어서 MNIST 데이터셋을 VAE 라는 구조를 이용해서 차원을 줄인 경우를 보면 다음과 같습니다. 원래 MNIST 는 28*28 픽셀로 구성되어 있으므로 숫자 이미지 한장은 784차원 공간 속의 한 벡터로 표현할 수 있습니다만, 이것을 2차원으로 압축시킨 다음에 차원축을 따라서 나열해보면 아래와 같은 결과를 얻을 수 있습니다



* 매니폴드를 몇차원으로 줄일지는 모델을 설계하는 사람의 마음입니다. 위의 경우는 원 데이터의 형태가 단순하고 시각화를 용이하게 하기 위해서 2차원으로 줄인 케이스중 하나일 뿐입니다. 


매니폴드 안에서는 의미있는 이미지만 얻게되지만, 매니폴드 바깥으로 나가면 깨진 이미지가 생기게 됩니다. 


이제 우리는 매니폴드라는 용어 대신 잠재공간(latent space) 라는 표현을 대신 쓰도록 하겠습니다. 매니폴드는 사실 잠재공간이 형성하는 특징을 설명하는 수식어에 더 가깝다고 봐야 할것 같네요. 어쨌건 잠재공간은 대체의 경우 전체 공간 (이미지 모델의 경우 픽셀공간) 의 더 차원이 작은 부분공간으로 쏙 들어갈 수 있기 때문에 임베딩(embedding space)  공간이라고도 합니다. 



디퓨전 모델을 학습하면서 중간 과정의 결과들을 살펴보면 벼라별 희한한 이미지들을 다 볼 수가 있게 됩니다. 학습하면서 중간에 보게 된 인간의 팔다리가 기이하게 엉겨붙은 이미지들을 소개해드리고 싶지만... 여러분의 안구건강을 위해 생략하도록 하겠습니다) 또는 완전하게 학습되지 않은 모델들 (대부분의 디퓨전 모델들은  대상을 의도적으로 좁히지 않는한 완전히 학습시키는 것이 불가능합니다.) 에서도 깨진 모습들은 다양하게 나타날 수 밖에 없습니다.


이미지의 경우 생성 딥러닝 모델에는 다양한 형태들이 존재합니다. VAE, GAN, 디퓨전, 등등등... 모델의 구조에 따라 차이는 존재합니다만, 기본적으로 딥러닝 생성모델이 하는 일은 두 공간사이의 이동입니다. 즉 전체 공간 -> 잠재 공간으로의 이동 (인코딩), 잠재 공간 -> 전체 공간으로의 이동 (디코딩) 이 그것입니다.


스테이블 디퓨전 같은 경우에는 VAE와 UNET 이라는 두개의 구성요소로 나눠지게 되고, 디퓨전이라는 모델의 특성상 한번에 디코딩이 일어나지 않고, 여러 타임스텝을 통해 형성된 궤적 (trajectory) 을 따라서 잠재공간 -> 픽셀공간으로의 디코딩이 일어난다는 특성이 있습니다. 또한 확률 모델이기 때문에 DDIM 같이 확률항을 제거한 버전의 모델에서만 픽셀공간-> 잠재공간으로의 인코딩이 가능해집니다. 이런 인코딩방식이 DDIM Inversion 입니다.

우리가 모델을 학습한다고 하는 것은 딥러닝 모델을 이용해서 디코딩/인코딩을 수행하는 것입니다. 어떤 데이타셋을 갖고 학습했냐에 따라 형성된 잠재공간은 달라집니다. 


예를 들어 글자만 갖고 학습했으면 폰트 잠재공간의 매니폴드를 형성하는 모델이 나올 것이고


만화풍 여자 이미지로 학습했으면 해당 매니폴드를 학습할 것이며


개 이미지를 갖고 학습했으면 개 매니폴드를 학습할 것입니다


그런데 매니폴드 가설은 어디까지나 가설입니다. 예를 들어 남자와 여자의 얼굴이 뒤섞인 데이타셋으로 학습하면 남자와 여자를 모두 담고 있는 매니폴드가 나올것입니다. 그리고 그 매니폴드를 가로지르는 한 축을 잘 선택하면 '성별 벡터' 같은 것을 찾아낼 수도 있겠죠.


그렇다면 그 성별벡터의 중간쯤에서 이미지를 디코딩한다면 중성적인 느낌의 얼굴이 나올것입니다. 그런 얼굴을 갖고 사람들에게 '이건 깨진 이미지일까? 아닐까?' 라고 묻는다면 (=중성적인 얼굴도 정상적인 사람의 얼굴로 인정할 것인가?) 대부분 사람의 얼굴이 맞다고 인정할 것입니다.


그렇다면 개의 이미지와 사람의 이미지를 섞어놓은 데이터셋은 어떨까요? 매니폴드가 잘 형성될까요? 아니면 서로 연결되어 있지 않은 분리된 2개의 매니폴드들 (사람 매니폴드, 개 매니폴드) 로 형성될까요? 이부분에 대한 해석은 여러분께 맡기겠습니다.


이제는 좀 더 실제 사례의 관점에서 생각해보겠습니다.

이미 학습이 되어있는 이미지 생성 모델에 lora 같은 것을 이용해서 파인튜닝을 하면 매니폴드는 어떻게 변화할까요? 

이 부분에 대한 답을 생각해본다면 우선 디퓨전 모델은 확률 모델이란 점을 생각해야 합니다. 엄밀하게 말해서 디퓨전 unet 모델이  학습한 것은 각 타임스텝에 따라 결과물로 가는 궤적이 어느쪽을 향해야 하는지에 대한 정보이며, 그 정보는 확정적인(deterministic) 부분과 랜덤성이 있는 (stochastic) 부분으로 나뉘어져 있으므로 확률모델이라고 할 수 있습니다. 

우리가 이미지 한장을 한 스텝 학습하게 되면 랜덤 노이즈에서 출발해서 그 학습 이미지의 전체 혹은 부분을 목표로 이동하는 방법을 알게됩니다. 확률 밀도이기 때문에 비슷한 이미지를 상대적으로 더 많이 학습한다면, 어떤 노이즈에서 시작하더라도 결국 그쪽으로 향해갈 확률이 높아지게 됩니다.


하지만 그 결과물은 정확히 학습한 이미지로 향하는 것이 아니라, 학습한 이미지로 계산한 잠재공간상의 목표지점 어느 부근에서 멈추게 됩니다. 그리고 그 결과점은 학습했던 이미지들의 분포 상에서 interpolate 된 latent 공간 내의 한 점이 될 것입니다.


잠재공간 내에서 학습된 점들 사이에 인터폴레이션 된 한 점을 향해 이미지가 만들어진다라는 의미를 잘 이해할 필요가 있습니다. 예를 들어서 베이스 모델 (예: sdxl) 그림체도 학습 (예: 특정 애니 작가 그림체) 시키고, 캐릭터 (예: 외형, 복장 등)도 학습시키고 포즈 (예: 손가락 하트 포즈) 도 학습시키고 싶다고 해봅시다. 특질 A, B, C 가 있다고 할 때 소수의 a1, a2, a3, b1, b2, b3, c1, c2 같은 데이터만 주고 디퓨전 모델이 알아서 어련히 잘 조합을 만들어줄 수 있으면 좋겠지만 현실은 그렇지 못합니다. 캡션이 별로여서 그런건가, 내지는 로라 랭크나 학습률 같은 파라메터를 잘못 줘서 그런가 고민하면서 여러가지 실험을 해도 쉽게 결과가 나오진 않습니다.


CLIP 같은 모델을 이용해서 조건부 확률분포를 형성하게 하는 것이 도움을 주기는 하지만 그 효과는 제한적입니다. 특히 스테이블 디퓨전의 CLIP 은 문장 전체의 의미를 포착하기보다는 단어 토큰단위로 이미지를 생성하는 비중이 더 큽니다.

[mother teresa fighting against poverty 라는 프롬프트로 생성한 이미지 사례. 물론 계속 이미지를 찍다보면 정상도 나오겠지만.... 웃겨서 퍼옴]



이럴 때에는 기본으로 돌아가서 우리가 만들려고 하는 매니폴드의 변화된 모습이 무엇일지를 상상해보기 바랍니다. 디퓨전 모델은 변화된 매니폴드의 잠재공간으로 오고가는 방법을 학습하는 것 뿐이며 매니폴드의 모양은 딥러닝모델이 만들어주는 것이 아니라 우리가 데이터셋을 제공해줌으로써 결정되는 것입니다. 딥러닝 모델이 만들어낸 '창의적인 결과' 는 매니폴드 안에서의 인터폴레이션의 산물일 뿐입니다. 우리가 학습시켜준 매니폴드의 바깥은 깨진 이미지나 노이즈가 대부분의 영역을 차지합니다. 우리는 학습이라는 과정을 통해 안전하게 갈 수 있는 잠재공간의 영역을 확장시켜준 것 뿐입니다. 


또한 확률 모델의 특징상, 결과물이 샘플링될 빈도는 학습한 빈도에 비례하게 됩니다. 내가 A 컨셉을 학습했었다고 하더라도 그 위에 다시 B 컨셉을 계속 학습시키면 A 컨셉이 샘플링될 확률은 줄어들게 될 것입니다.



이제 위키백과에서 '다양체 가설' 이라는 항목을 검색해봅시다


제가 소개한 글을 보고 나서 위의 문단이 좀 더 이해가 되는 것 같다고 느끼셨다면,  특히 보간법(=interpolation) 이 의미하는 바를 느끼셨다면 좋겠습니다.


보너스1) 생성AI 의 방법중 가장 기본이라고 할 수 있는 VAE 와 디퓨전 모델의 관계


결론부터 말하자면 디퓨전 모델은 계층화된 VAE 의 한 형태라고 볼 수 있습니다

https://ar5iv.labs.arxiv.org/html/2208.11970


VAE 는 픽셀공간과 잠재공간을 인코더와 디코더로 연결하는 상대적으로 단순한 구조로 구성되어 있습니다만, 구조상 정확성의 한계가 있습니다. 모델이 학습하려는 잠재공간을 데이터셋에서 보이는 확률공간과 최대한 가깝게 근사시키는 것이 VAE 의 목표인데, 직접 확률밀도공간을 모델링 (likelihood maximization) 하는 것이 불가능(intractable)하므로 ELBO 라는 간접적인 목표를 추구했기 때문입니다. 구체적으로는 vae 로 샘플링해서 생성한 이미지는 원 데이터셋만큼 선명하게 보이지 않고 뿌연 결과물을 보여줍니다.


이걸 해결하기 위해서 한번에 목표를 학습시키지 않고 노이즈를 추가해서 여러단계로 학습 목표를 계층화한 다음 각 단계를 하는 것이 hierarchical VAE 이고, 이것은 디퓨전 모델의 다른 방향에서의 해석이라고 할 수 있습니다.  


보너스2) 디퓨전 DPO 같은 강화학습에서는 긍정예제와 부정예제의 쌍으로 학습시키는 것을 구현했는데, 잠재공간 매니폴드와의 관계는 어떻게 될까?


[작성중...]




이상으로 매니폴드 가설과 잠재공간에 대한 소개를 마치겠습니다. 다음에는 기회가 된다면 파라메터 공간의 인터폴레이션(모델의 머지) 이라던가 CLIP 같은 모델의 동작에 대해서 다뤄볼까 합니다.  읽어주셔서 감사합니다.