AI가 그리지 못하는 것들
최근 Generative AI 기술이 급격히 발전하면서, 많은 사람들이 직접 사용해 보는 경험을 하고 있다.
특히, Text to Image 모델은 사용자가 입력한 텍스트를 바탕으로 이미지를 생성하는 기능으로 큰 인기를 끌고 있다.
그러나 이러한 AI 모델은 종종 사람의 손을 부자연스럽게 표현하는 문제로 화제가 되곤 했다.
그런데 최근, AI가 특정한 그림을 유독 그리지 못한다는 흥미로운 현상이 포착되었다. 바로 "꽉 찬 와인잔"이다.
왜 AI는 꽉 찬 와인잔을 제대로 표현하는 데 어려움을 겪을까? 그리고 이번 와인잔 이슈는 어떤 이유에서 비롯된 걸까?
이번 글에서는 AI의 이미지 생성 과정과 한계, 그리고 프롬프팅의 중요성에 대해 탐구해보려고 한다.
꽉 찬 와인잔을 못 그린다고?
최근 X(구 트위터)에서 꽉 찬 와인잔을 그리는 것이 화제가 되었다.
해당 글의 인용들을 확인해 보면, 다들 꽉 찬 와인잔을 그리려고 노력하지만 와인잔의 모양이 이상해지거나, 와인이 반만 차 있거나, 와인잔이 와인을 담지 못하고 흘러내리는 장면들을 그리고 있다.
나도 궁금해서 직접 와인을 그려보라고 시켜보았다.
첫 번째로 "꽉 찬 와인잔을 그려줘"라고 말했을 때는 절반만 찬 와인잔을 그렸다.
여러 프롬프트를 거쳐서 긴장감 넘치게, 한 방울만 더 넣으면 흘러내리도록 프롬프트를 작성하니 와인이 꽉 찼지만, 뭔가 표면이 이상하고 와인이 아닌 것처럼 그려졌다.
비슷한 예시로 "10:10이 아닌 시계", "완전히 뒤집힌 접시"가 있다.
사람들이 생각하기에는 어라? 왜 이걸 그리지 못하지? 싶을 수 있다. 그렇지만 AI는 그리지 못한다.
원인이 무엇일까?
Generative AI의 학습 과정과 한계
Generative AI, 특히 Text to Image 모델은 사용자가 입력한 텍스트를 해석하고, 그에 맞는 이미지를 생성하는 방식으로 작동한다. 이 과정은 크게 학습 단계와 생성 단계로 나눌 수 있다.
1. 학습 과정: 거대한 데이터를 통한 패턴 학습
Text to Image 모델이 이미지를 생성하려면 먼저 방대한 양의 이미지와 텍스트 데이터를 학습해야 한다. 이를 위해 AI 모델은 다음과 같은 방식으로 학습을 진행한다.
- 데이터 수집: 인터넷, 데이터베이스 등에서 이미지와 그에 대한 설명(캡션)을 포함한 대량의 데이터를 수집한다.
- 텍스트-이미지 매핑 학습: 이미지와 캡션 사이의 관계를 학습하여, 특정한 텍스트가 주어졌을 때 어떤 시각적 요소가 포함될지 이해할 수 있도록 한다.
- 확률적 생성 능력 습득: 학습을 통해 AI는 "고양이"라는 단어를 입력하면 귀가 뾰족하고 수염이 있는 동물의 이미지를 생성해야 한다는 것을 확률적으로 인식하게 된다.
일반적으로 딥러닝 기반의 Diffusion 모델이 이러한 학습을 수행하는데, 이는 초기에는 무작위한 노이즈에서 시작하여 점진적으로 이미지를 만들어가는 방식이다.
2. 이미지 생성 과정: 입력된 텍스트를 바탕으로 픽셀을 채워나가기
학습이 완료된 후, AI가 이미지를 생성하는 과정은 다음과 같다.
- 텍스트 해석: 사용자가 입력한 프롬프트를 분석하여 어떤 요소들이 포함되어야 하는지 파악한다.
- 초기 노이즈 생성: 완전히 무작위한 픽셀(노이즈)에서 시작한다.
- 노이즈 제거 및 이미지 생성: 학습한 데이터를 바탕으로 점진적으로 노이즈를 제거하면서, 입력된 텍스트에 맞는 형상을 만들어낸다. 이 과정에서 모델은 가장 확률이 높은 픽셀 배치를 결정하여 이미지의 형태를 잡아간다.
- 디테일 보정: 색상, 질감, 명암 등을 조정하면서 보다 자연스러운 이미지를 생성한다.
이 과정은 일반적인 사진을 촬영하는 것이 아니라, AI가 처음부터 그림을 "상상해서" 그려내는 것과 비슷하다. 그렇기 때문에 학습 데이터의 한계나 패턴 인식 오류로 인해 특정한 부분을 비정상적으로 표현하거나 잘못된 결과를 생성하는 경우도 발생한다.
프롬프팅의 중요성
그렇다면 AI가 학습하지 않은 개념을 표현하는 것은 불가능할까? 꼭 그렇지는 않다.
적절한 프롬프트를 사용하면, AI가 이미 알고 있는 정보를 활용하여 유사한 결과를 생성할 수 있다.
예를 들어, 이전에 예시로 들었던 "완전히 뒤집힌 접시"가 있다. 단순히 "뒤집힌 접시를 그려줘"라고 입력하면 AI는 기존의 데이터만을 활용하여 이미지를 생성하려 하므로, 오류가 발생할 확률이 높다. 하지만 다음과 같은 방식으로 프롬프트를 설계하면 결과가 개선될 수 있다.
"완전히 뒤집힌 접시"
상황설명, 설거지 하다가 아이가 접시를 뒤집어서 나무 장판위에 접시를 '평평하게' 두었다. 일반적으로 어른이라면 하지 않겠지만, 어린이가 실수로 하였다. 그래서 장판에 완전히 장판위에 붙어있다.
이런 상황을 설명하는 그림을 그려줘, 아이는 빼줘.
얼추 뒤집힌 접시처럼 보이는 그림이 그려졌다.
프롬프팅은 단순히 명령을 내리는 것이 아니라, AI가 학습한 개념을 최대한 활용하도록 돕는 과정이다. 이는 마치 화가에게 그림을 의뢰할 때 구체적인 요구사항을 설명하는 것과 비슷하다. AI가 이해할 수 있는 방식으로 지시를 내리고, 피드백을 주고, 조정을 반복하면 우리가 원하는 결과에 가까운 이미지를 얻을 수 있다.
약간의 팁을 주자면, Generative AI마다 동일한 프롬프트라도 재생성 횟수에 따라 원하는 결과물이 나올 확률이 달라진다.
내가 주로 사용하는 ChatGPT(DALL-E)는 두번째 시도에 최고의 결과물을 출력하는 경우가 잦았다.
마무리
현재 AI는 패턴을 학습하여 이미지를 생성하지만, 인간처럼 사물을 ‘이해’하고 그리는 것은 아니다. 예를 들어, 인간은 손가락이 다섯 개라는 사실을 개념적으로 알고 있지만, AI는 단순히 확률적으로 손가락을 배치할 뿐이다. 그렇기 때문에 학습 데이터의 한계나 잘못된 패턴이 있을 경우, 손가락 개수가 늘어나거나 형태가 이상하게 표현되는 오류가 발생한다.
최근 AI가 생성한 이미지에 대해 인간이 피드백을 제공하는 RLHF(Reinforcement Learning with Human Feedback) 기법이 도입되면서, Generative AI가 더 정확한 결과물을 내놓도록 학습하는 과정이 진행되고 있다. 점점 Gen AI 기술이 발전하면서 이를 제대로 활용하는 사람과 그렇지 않은 사람들 간의 격차가 벌어지고 있다는 생각이 든다.
"프롬프트"라고 말하니 뭔가 신기술 같고 코딩 잘하는 사람들만 쓸 수 있을 것 같은, 먼 세상 단어의 느낌을 받을 수도 있다. 하지만 나는 프롬프트는 결국 "요구사항의 구체화"라고 생각한다. 내가 원하는 것이 무엇인지 정확히 파악하고, 어떻게 결과물을 내고 싶은지 작성하는 것 말이다. 최근 본 유튜브 영상에서 질문을 잘 하기 위해서는 최대한 자세히, 상황 설명을 작성하고 원하는 것을 포함해 물어보라고 했다. 프롬프트도 결국은 어떻게 질문을 잘 하는지에 대한 논의의 연장선상인 것 같다.