AI는 어떻게 그림을 만드는 것일까?
1. AI는 그림을 그리는 것일까?
사람들은 AI가 그림을 그린다고 생각합니다. 우리가 그림을 그릴 때 머릿속으로 먼저 상상하고, 그것을 스케치하고 색칠하듯 말입니다.

하지만 실제 AI가 그림을 그리는 방식은 다릅니다. AI는 상상해서 그리지 않습니다. 사실 “그린다”라는 표현 자체가 올바른 표현이 아닙니다. AI가 그림을 그리는 방식은 확률을 계산해서 그리는 방식입니다. 그것도 한 번만 확률을 계산하는 것이 아니라 수 없이 많은 계산을 반복해서 만듭니다.

2. AI는 캔버스가 아니라 노이즈에서 시작된다.
AI는 빈 캔버스에서 그림을 그리지 않습니다.
무작위 확률 분포로 가득 찬 '노이즈' 상태에서 시작합니다.

왜 노이즈 상태에서 시작할까요?
그건 단순한 분포에서 복잡한 이미지 분포로 점진적으로 이동하는 것이 훨씬 안정적이고 학습하기도 쉽기 때문입니다. 즉, 처음부터 완성된 그림을 그리려 하기보단 뿌옇게 시작해서 조금씩 정리하는 것이 더 효율적이고 쉽기 때문입니다.

3. 그림을 그리는 원리 Diffusion 모델
그림을 그릴 때는 보통 Diffusion 모델을 사용합니다.
Diffusion 모델은 그림을 처음부터 그리는 것이 아니라 그림을 일부러 망가뜨렸다가 복원하는 과정을 학습합니다.

3.1 이미지를 망가뜨리는 과정
고양이 사진을 예로 들어보겠습니다.
먼저 고양이 처음 상태의 사진은 아래와 같습니다.

여기에 약간의 노이즈를 추가합니다.

다음 단계에 더 많은 단계의 노이즈를 추가합니다.

그 다음 단계에는 더 많은 노이즈를 추가합니다.

이 과정을 반복하면 결국 완전한 노이즈 이미지가 됩니다.

이미지 정보가 점점 사라지고 이 과정을 정방향 확산 과정(forward diffusion process)이라고 부릅니다.
3.2 노이즈 추가 규칙
여기서 중요한 것은 노이즈를 그냥 아무렇게나 마구 추가하는 것이 아닙니다. 규칙에 따라 추가하는데 이때, 일반적으로 가우시안 노이즈(정규분포 노이즈)가 사용됩니다.
가우시안 노이즈란?
가우시안 노이즈는 이미지나 데이터에 무작위로 작은 값을 더하는 잡음을 말합니다. 여기서 가우시안은 값이 정규분포(벨 모양 분포)를 따른 다는 이야기입니다.
즉, 대부분의 노이즈는 작은 값이면 큰 변화는 드물게 발생합니다. 그래서 이미지가 완전히 깨지지 않고 조금씩 흐려지듯이 망가집니다.
수학적으로 다루기 쉽고 확률 계산이 안정적이며 샘플링이 간단하기 때문에 주로 사용합니다.
3.3 모델 복원방향
모델은 이제 노이즈가 섞인 이미지에서 원래 방향으로돌아가려면 어떤 방향으로 픽셀을 수정해야 할까 고민을 하게 됩니다.
그래서 어떤 픽셀이 노이즈이고 어떤 구조가 실제 이미지인지 확률적으로 추정하고, 노이즈를 제거할 방향을 예측합니다.
이제 생성 단계에서는 학습 때 과정을 역으로 생성합니다. 아까 이미지를 망가뜨린 과정 역순으로 생각하면 됩니다. 이것을 역방향 확산 과정( reverse diffusion process )이라고 합니다.
완전한 노이즈 → 노이즈 조금 제거 → 확률 계산 → 노이즈 조금 더 제거 → 반복

어떤 픽셀이 노이즈인지, 어떤 구조가 실제 이미지인지 확률적으로 추정합니다. 그리고 어떻게 할지 노이즈를 제거하는 방향을 예측합니다.
처음엔 점처럼 보이다가 윤곽이 생기고, 형태가 잡히고, 결국 디테일까지 완성됩니다.
점 → 윤곽 → 형태 → 디테일
노이즈에서 이미지로 바꿔가는 것입니다.
4. 텍스트는 어떻게 숫자가 될까?
이제 이미지가 그려지는 구조는 우리가 알았습니다. 그런데 이미지를 생성하다보면 한 가지 중요한 의문점이 생기게 됩니다.
우리는 텍스트를 입력했는데 컴퓨터는 0,1,0,1 밖에 이해하지 못하잖아? 그런데 어떻게 문장을 이해하지?
예를 들어 우리가 이런 문장을 입력했다고 해봅시다.
“창가에 앉아있는 고양이, 사진 스타일”
사람은 이해할 수 있지만 컴퓨터는 이해할 수 없습니다. 그래서 먼저 텍스트를 숫자로 변환하는 과정을 거칩니다. 이 과정을 임베딩(embedding)이라고 합니다.
4.1 임베딩이란?
간단히 말하면 단어나 문장의 의미를 숫자 벡터로 표현하는 방법입니다. 예를들어 고양이란 단어는 모델 안에서 다음과 같이 변환됩니다.
고양이 -> [ 0.21. -0.34, …]
이러한 벡터 숫자배열로 변환됩니다. 이 값들은 단어의 의미를 반영하도록 학습된 좌표입니다.
벡터란?
벡터란 어떤 위치나 특징을 표현하는 숫자 배열입니다.
[0.21, -0.34, 0.54, 0.12]
이렇게 AI는 텍스트와 이미지 정보를 모두 벡터 형태로 바꿔서 계산합니다.
이러한 단어들은 2,3차원 이런 공간에 있는 것이 아니라 수백차원, 수천 차원이나 되는 고차원 벡터 공간에 있습니다. 즉, 단어 하나가 수백 개 이상의 좌표 값으로 표현됩니다.
예를 들어
고양이 -> [0.21, -0.34, 0.87, …]
강아지 -> [0.19, -0.3, 0.85, …]
자동차 -> [-0.65, 0.88, -0.22,..]
이렇게 표현됩니다.
그런데 여기서 자세히 보면 중요한 특징이 있습니다. 비슷한 의미를 가진 단어들은 벡터 공간에서 서로 가까운 위치에 놓입니다.

예를 들어, 고양이란 단어 근처에 강아지, 호랑이 같이 비슷한 단어들은 가까이에 모여있고 자동차, 비행기, 기차 같은 단어들은 먼 곳에 위치합니다. 이렇듯이 AI는 단어의 의미를 사전적 정의로 이해하는 것이 아니라 공간 속 위치 관계로 이해합니다.
4.2 텍스트 프롬프트
아까 문장인
“창가에 앉아있는 고양이, 사진 스타일”
을 살펴봅시다.
이 문자은 모델 안에서 여러 개의 벡터로 변환됩니다.
즉, 창가 벡터, 고양이 벡터, 사진 벡터 이 벡터들이 합쳐져 하나의 방향을 만들어 냅니다.

이제 이미지 생성 모델은 노이즈를 정리할 때 지금 생성되는 이미지가 이 벡터 방향과 얼마나 가까운가 계산합니다.
그 계산이 반복되면서 고양이 형태가 되고, 창가에 앉아있는 모습이 되고, 실제 사진 처럼 보이게 되는 것입니다.
이것을 벡터 정렬 이라고 합니다. 텍스트 벡터와 이미지 벡터가 같은 의미공간에서 서로 맞춰지는 것입니다.

그래서 모델은 이미지 벡터가 텍스트 벡터와 잘 맞는지 확인하고 이 값이 높을수록 이미지의 의미와 텍스트의 이미가 서로 잘 맞는다는 뜻이 됩니다.
5. 모든 것은 확률 분포로부터 시작
이미지는 수 많은 픽셀들의 집합입니다.
예를 들어 512*512 크기의 이미지라면 512* 512 약 26만개의 픽셀로 이루어져 있습니다.

AI는 이 픽셀을 한 번에 그리지 않고 각 픽셀에게 어떤 색일 가능성이 가장 높을지 판단을 합니다
예를 들어 어떤 픽셀에서 모델은
검은색일 확률 0.52
흰색일 확률: 0.14
빨간색일 확률 0.33
…

이렇게 판단하고 이 확률을 바탕으로 픽셀 값을 조금씩 수정하고 이 과정을 전체 이미지 픽셀에 대해 반복합니다.
여기서 샘플링이라는 개념이 등장합니다.
확률 분포에서 하나의 결과를 뽑는 과정인데, 예를 들어 결과 A : 50 % 결과 B: 30 % 결과 C: 10 %일 경우 A가 가능성이 가장 높지만 항상 A만 나오지는 않습니다. 가끔은 B도 나오고 C도 나올수도 있습니다.
AI 이미지 생성도 마찬가지입니다. 어떤 픽셀이 가장 그럴듯할까 계속 확률로 선택합니다.
6. 그래서 그림의 결과가 달라진다
같은 프롬프트를 넣어도 이미지가 매번 조금씩 다른지 이유가 바로 이 것입니다.
확률적으로 결과를 선택하기 때문에 자세가 조금 달라질 수도 있고, 색이 조금 바뀔 수도 있고, 배경이 달라질 수 도 있습니다.
하지만 전체적으로 볼 때는 프롬프트의 의미와 맞는 이미지가 생성되는 것입니다.

7. 손을 그릴 때 생기는 오류
AI가 만든 이미지를 보면 가끔 이상한 일이 생길 때가 있습니다. 손가락이 6개가 되어있거나, 손이 뒤틀린 방향으로 꺾여 있거나 하는 경우들입니다.

사람이 그릴 때는 보기에도 너무나 이상해 보이기 때문에 이러한 일이 일어나는 경우가 거의 없습니다.
그러나 AI는 가장 자주 실수 하는 부분이 바로 손을 그릴 때입니다.
왜냐하면 사람 손은 사람 몸에서 가장 복잡한 부분 중 하나이며 이는 확률 분포로 나타내기 어렵기 때문입니다.
7.1 왜 손이 어려울까?
사람 손은 다양한 각도 겹치는 모양이 존재하고 심지어 손가락은 5개입니다. 따라서 손의 모양은 겹치는 경우의 수가 매우 많습니다.
AI는 이미지를 고차원 확률공간에서 생성하는데 구조가 복잡할수록 공간도 더 복잡해지게 됩니다. 따라서 모델이 정확한 형태를 잡기 어려워집니다.
데이터 학습의 문제도 있습니다. 손은 인체의 다른 부위들과 다르게 물건을 잡고 있거나, 또는 일부가 가려져 있거나, 움직이거나 하는 중인 다양한 행동들을 하고 있는 경우가 많습니다.
즉, 손의 데이터의 형태가 일정하지 않기 때문에 손의 정확한 구조를 배우기 매우 어려운 환경이 됩니다.
8. 그렇다면 결국 AI는 이해하는가 추정하는가?
AI가 만든 글이나 이미지를 보면 사람들은 AI가 이를 이해하고 만든 걸까?라는 생각을 하게 됩니다.
겉으로 보면 그렇게 느낄 수 있지만 결국 AI는 세상을 이해하는 것이 아니라 패턴을 기반으로 추정할 뿐입니다.
예를 들어 우리는 고양이를 이해합니다. 고양이라는 동물이 어떤 동물인지 어떻게 움직이고 어떻게 행동하는지를 직접 경험하고 지식을 바탕으로 알고 있습니다.
반면에, AI에게 고양이라는 개념은 수많은 이미지와 텍스트 데이터 속에서 반복적으로 등장한 패턴의 집합일 따름입니다. 즉, 고양이를 아는 것이 아니라 고양이와 관련된 픽셀 단어와 단어 패턴의 분포를 알고 있는 것입니다.

예를 들어 우주고양이라는 프롬프트를 받으면 고양이형태와 우주 배경과 같은 패턴을 조합합니다. 이것은 상상이나 이해가 아니라 패턴 결합입니다.
9. 그렇다면 왜 우리는 AI가 이해한다고 느낄까?
그런데 우리는 왜 AI가 이해한다고 느낄까요? 그 이유는 AI의 결과가 너무 자연스럽기 때문입니다.
자연스럽게 그럴듯한 이미지를 만들어냈기 때문에 사람들은 무의식적으로 이건 이해가 있어야 가능한 결과라고 생각하게 됩니다.
하지만 실제로는 방대한 데이터에서 학습한 패턴을 확률적으로 가장 자연스럽게 조합한 결과입니다.

10. 그럼 AI가 만든 이미지는 창작이라고 볼 수 있을까?
그렇다면 우리는 AI가 만든 이미지가 과연 창작인가 하는 의문을 가지게 됩니다.
AI는 전에 없던 이미지를 만들어냅니다. 우리가 입력한 문장을 바탕으로 새로운 이미지를 생성합니다. 겉으로는 창작처럼 보입니다.
사람이 그림을 그릴 때는 보통 장면을 상상하고 구도를 선택하기 때문에 경험과 의도 그리고 해석이 들어갑니다.
반면 AI는 스스로 의도를 가지지도 않고 상상을 하지도 않습니다. AI가 하는 일은 데이터에서 학습된 패턴을 바탕으로 가능한 이미지를 계산하는 것입니다. 하나의 정답이 아니라 가능한 결과 중 하나를 뽑아내는 것입니다. AI가 만든 이미지는 픽셀의 배열, 확률 계산의 결과일 뿐입니다.

하지만 흥미로운 사실은 인간은 AI가 만든 이미지 속에서 이야기, 의도, 감정을 생각합니다. 예를 들어 우주 고양이 이미지를 보면 우리는 우주를 여행하는 고양이, SF장면, 상상 속 세계를 상상합니다. 이것은 AI가 의도한 것이 아닙니다.
결국 의미 있는 그림은 AI가 만들지만, 그 안의 의미는 인간이 만드는 것일지도 모릅니다. 즉. AI 이미지는 스스로 의도를 가진 창작은 아니지만, 인간의 해석을 통해 창작으로 받아들여질 수 있습니다.