[Generative-AI]멀티모달 AI의 작동원리(Text to Image)
0. 멀티모달이란?
- 기존의 챗봇, 이미지 구분 등은 텍스트면 텍스트, 이미지면 이미지, 단일한 데이터만 사용하였다.
- 하지만, 요즘은 음성을 텍스트로, 텍스트를 입력하면 이미지가 나오고, 이미지를 입력하면 텍스트로 설명하는 모델이 나오고 있음
- 이런 것을 멀티모달이라고 한다. 대표적인 예로는 DALLE가 멀티모달이라고 할수 있다.
- DALLE는 텍스트를 입력하면, 그림을 아주 잘 그려준다.
1. 멀티모달의 원리는?
- 일반적인 이미지 분류, 문장생성 등의 방법을 CNN과 Transformer를 익히면서 이해했는데, 멀티모달은 어떻게 이뤄지는 것일까? 어떻게 텍스트를 이해하고 이미지를 만들어 주는 것일까?
- 대학원에서 교수님께서 간단하게 알려준 개념은, 각각의 잠재공간으로 유사한 공간배치(?)로 임베딩하는 학습을 하고, 그 잠재공간상에 유사한 것을 이어주는 개념이라고 알려주었다.
- 간단히 텍스트 '강아지', '고양이', '자동차' 등을 A라는 잠재공간에 위치하게 잘 학습을 시키고, 이미지 역시 다른 신경망으로 B라는 잠재공간으로 '강아지', '고양이', '자동차' 등의 이미지를 학습시키는 것이다. 그리고 그 두개를 유사한것끼리 잠재공간상에서 연결해주는 것을 학습.
- 대충 이런 개념이었지만, 실제 어떻게 구축이 되는지 명확히 알고 싶었다. 그래서 오늘은 달리가 어떤 맥락으로 작동하는지 개념만 잡아보고자 한다.
2. DALLE2 멀티모달 모델 학습구조 이해하기(Text to Image)
2-1. 전체 구조
- 텍스트가 입력되면, 텍스트 인코더에 의해 텍스트 임베딩 된다.
- 해당 임베딩을 프라이어에 통과하여 이미지 임베딩을 가져온다.
- 이미지 임베딩과 입력텍스트를 디코더에 넣으면, 이미지가 생성된다.
- 모델에서 보이듯, 텍스트인코더/프라이어/디코더가 핵심이라고 할수 있다. 이 3가지는 어떻게 학습이 이루어 질까?
2-2. 텍스트 인코더 학습원리
- 텍스트 인코더를 처음부터 훈련시키지 않고, OpenAI에서 만든 CLIP이라는 기존 모델을 사용
- CLIP은 텍스트-이미지 쌍으로 구성된 4억개의 데이터셋으로 훈련(텍스트 예: a cute banana made from modeling clay, 이미지예: 클레이로만든 바나나이미지)
- CLIP은 입력으로 받은 텍스트/이미지를 각각 임베딩> 텍스트 4억개 벡터/이미지 4억개 벡터 > 코사인 매트릭스(유사도 매트릭스)
- 이 학습을 통하여 텍스트를 입력하면, 해당 텍스트와 가장 유사한(값이 높은) 이미지 벡터를 알수 있고,
- 이미지를 입력하면, 해당 이미지와 가장 유사한 텍스트 벡터를 알수 있음(모두 ViT를 사용하여 임베딩)
- CLIP에서 사용한 텍스트 인코더를 통해, DALLE2인코더는 완료
2-3. 프라이어
- 프라이어는 우리가 앞에서 배웠던 diffusion개념이 들어간다.
- 간단히 디퓨전 개념을 기억해보면, 원본이미지에 랜덤한 잡음을 입혀서 잡음이 섞인 이미지를 입력하면 > 들어간 잡음을 알아내는 신경망을 학습하는 원리다 > 학습을 마치면, 이미지에 있는 잡음을 귀신같이 알아내어서, 그 잡음을 입히기전 이미지를 생성하는 개념
- 이 개념을 입력된 텍스트 임배딩에 매칭되는 이미지 임배딩을 찾아내는 prior에 적용하는 것이다.
- CLIP을 통해서, 우리는 텍스트를 입력하면 그에 매칭되는 (CLIP의)이미지임베딩 얻을수 있었다.
- 이 데이터 셋을 활용하여 잡음을 찾아내는 모델을 학습할수 있다.
- 텍스트 임베딩 : 이미지 임베딩 데이터셋에 잡음을 추가해서, 텍스트임베딩 : (잡음이 들어간)이미지임베딩
- 디퓨전 학습과 동일하게, 잡음을 찾아내는 신경망 학습 > 텍스트 임베딩에 매칭되는 이미지 임베딩을 잘 찾을수 있게 됨
- 학습하지 않은 텍스트 임베딩에 대해서도 매칭되는 이미지 임베딩 구성 가능
2-4. 디코더
- 디코더 이해하기전 GLIDE이해하기. GLIDE는 텍스트를 입력하면, 이미지 생성하는 모델
- GLIDE는 간단하다. 잡음제거 프로세스 전반에 텍스트 임베딩으로 안내하는 구조
- DALLE2는 이와 동일한 구조인데, 여기에 프라이어가 주는 이미지 임베딩을 함께 넣어주는 구조이다
- 이렇게 학습되어서 출력된 64*64 이미지를, 업샘플러를 통해서 이미지를 완성하는 것이다.
3. 멀티모달(text to image) 정리
- 텍스트 인코더 > 프라이어 > 이미지디코더로 구성
- 텍스트를 입력받아 임베딩(CLIP) > 프라이어를 diffusion개념으로 학습하여 매칭되는 이미지 임베딩 출력하는 것 학습 > GLIDE기반의 이미지 생성 모델로 텍스트 임베딩 + 이미지임베딩을 함께 U-Net에 제공하여 이미지 생성
- CLIP, GLIDE만으로도 이미지 생성이 되지만, prior가 있을경우 문장에 포함된 모든 정보를 정확히 반영하는 성과를 확인
멀티모달이 이렇게 구성되는구나, 하나의 예시를 학습함으로 조금 감을 잡았다!!!