본문 바로가기
LLM

[LLM] ChatGPT 4o 이미지 생성 모델, 어떻게 만들었는지 원리 탐구

by Tiabet 2025. 3. 28.

한국시간으로 3월 26일, OpenAI는 새로운 이미지 생성 모델을 ChatGPT 4o를 통해 공개했다. 무료 버전에선 하루 3회, 유료 버전은 무제한으로 사용가능하다고 하는데, 무료 버전을 사용하는 일부 사람들은 정상작동하지 않는다는 말도 있다.

 

https://openai.com/index/introducing-4o-image-generation/

 

이 모델은 OpenAI의 기존 이미지 생성 모델인 DALL-E를 포함하여 세상의 이미지 생성 모델들이 불가능했던 것들, 예를 들면 이미지에 글자 넣기나 동일한 캐릭터 연속 생성, 사진의 객체는 그대로 유지하고 스타일만 바꾸는 등 정말 놀라운 성능을 보여줬다. 아래와 같은 놀라운 작업이 프롬프트 한 줄로 가능한 시대가 온 것이다.

 

Character Consistency

 

 

 

특히 커뮤니티에서는 위에서 말한 특징들을 살려 4컷만화를 생성하고 공유하는 것이 아주 큰 화제가 됐다.

 

정말 머릿속에 상상만 하는 것을 그림을 그릴 줄 몰라도 쉽게 이미지화할 수 있는 시대가 코앞으로, 정말 가까이 온 것 같다는 생각이 든다.

 

하지만 내가 이번 포스팅을 작성하는 것은 그냥 감탄 후기를 남기려는 것이 아니라 과연 어떤 기술을 쓴 것일까 하는 추측을 짧게 적어보려고 한다.

 

뭘 어떻게 만들었길래 이렇게 좋나? 뇌피셜 적어보기

 

내가 처음 이 기능을 사용해보고 놀란 것은 맨 처음에 노이즈가 잔뜩 낀 흐릿한 이미지에서, 순차적으로 선명한 이미지로 넘어간다는 것이었다.

ChatGPT로 BERT Architecture를 Attention Is All You Need 스타일로 바꿔보기

 

저 노이즈를 보자마자 떠오른 것이 있으니 바로 Diffusion 모델이다.

 

내가 얕은 지식으로 알기로 이미지 생성, 특히 Text-to-Image 모델에서 가장 널리 사용되고 있는 방법론은 첫째, ViT를 기반으로 한 OpenAI의 CLIP 모델, 둘째가 DDPM 알고리즘에 나온 Diffusion 모델이다.

 

OpenAI의 DALLE가 CLIP을 기반으로 한, 즉 트랜스포머 기반 모델이라면 Diffusion은 DDPM이라는 특수 알고리즘을 사용한 딥러닝 모델이다.

 

출처 : https://www.superannotate.com/blog/diffusion-models

 

Diffusion 모델 DDPM을 간단히 설명하면 위 그림처럼 원본 이미지에 Noise를 점점 추가해가면서 완전히 Noise로 만들어버린 뒤, 다시 복원시키는 알고리즘이다. 딥러닝 모델은 저 노이즈의 확률분포를 학습하고, 사용자가 모델 훈련에 사용한 이미지 외에도 다양한 이미지를 생성할 수 있게 된다. 

 

내가 위에서 첨부한 GPT4o의 이미지 생성 과정을 보면, 처음엔 아주 노이즈가 심했다가 점점 연해지는 모습을 볼 수 있는데, 난 이 모습이 굉장히 디퓨전스럽다고 느꼈다. 또한 OpenAI의 설명을 보면 기존 모델의 베이스는 유지했지만 굉장히 크게 바꿨다고 언급을 했는데, 이 점에서 DALLE에서 사용하던 CLIP 기술을ㅠ 기반으로 Diffusion을 섞은 것이 아닌가 하는 뇌피셜을 내게 됐다.

 

CLIP 기술을 완전히 버리진 않았다고 생각한 것은, 이미지의 노이즈가 어느 정도 걷어진 후 상단부터 순차적으로 이미지를 완성하는 특이한 모습을 보였기 때문이다.

 

출처 : Huggingface ViT

 

ViT는 모델의 원리를 힐끗 보면 이미지를 패치단위로 자르는 부분이 있다. 패치 단위로 자른다고 하는 것은 쉽게 말하자면 그냥 조각조각낸다고 이해하면 된다. ViT는 이 조각난 이미지들을 마치 문자처럼 취급하여 Transformer Encoder를 학습하게 된다. 나는 GPT4o의 이미지가 상단부터 차곡차곡 생성되는 점이 ViT의 이런 점을 차용하지 않았나 싶다.

 

정리해보면, 내 생각으론 기존 CLIP(ViT)을 기반으로 한 Diffusion 모델을 만들어낸 것이 아닌가 생각된다. 굳이 이 기술에  이름을 붙인다면 Global to Local 디퓨전이라고 부를 수 있지 않을까. 전체적인 흐름은 유지하되 패치단위로 한 번 더 디퓨전을 사용한 것 같기 때문이다.

 

물론 OpenAI는 Closed-Source 이기 때문에 내가 이 포스팅에서 말한 것은 100% 추측일 뿐이지만, 아무튼 굉장히 재밌고 아름다운 기술임에는 틀림없다. 그리고 최소한 Diffusion 모델을 결합했거나, 최소한 DDPM 알고리즘을 사용했다고는 생각된다.