멀티모달 학습이란 두 종류의 데이터 사이를 변환하도록 생성 모델을 훈련시키는 학습이다. 여기서 두 종류의 데이터란, 이미지/텍스트/비디오 등을 의미한다.
Dall-E 2
이 모델은 텍스트 투 이미지 생성용으로 만든 모델이며 2022년 4월에 출시된 버전이다.
구조 : 입력 프롬프트 -> 텍스트 인코더 -> 텍스트 임베딩 -> 프라이어 -> 이미지 임베딩 -> 디코더 -> 이미지 생성
주요하게 볼 부분은 텍스트 인코더, 프라이어, 디코더 세가지이다.
1. 텍스트 인코더
역할
텍스트 프롬프트를 임베딩 벡터로 변환시키는 역할을 하며, 잠재 공간 내에서 텍스트 프롬프트의 개념적 의미를 나타낸다.
이 모델에서는 CLIP이라는 모델을 사용한다.
CLIP 모델
자연어 감독으로부터 시각적 개념을 효율적으로 학습하는 신경망으로 표현했는데 "Contrastive learning"이라는 기술을 사용해서 이미지와 텍스트 설명을 매칭한다.
Task는 "이미지와 가능성 있는 텍스트 설명 목록이 주어지면 모델의 임무는 이미지와 실제로 일치하는 설명을 찾는 것"이다.
이를 어떻게 학습시킬 수 있었을까? 아래 그림을 보면 이해할 수 있다.
데이터셋은 이미지와 해당 이미지에 대한 설명을 담고 있는 데이터가 배치로 들어가고 T1, I1은 각각 배치에서 1번째 이미지와 그 설명을 각각 텍스트 인코딩, 이미지 인코딩을 한 결과이다. 이 둘이 이미지와 텍스트가 공존하는 공간에서 유사한 벡터를 가진다면 코사인 유사도가 높을 것이고 그렇게 되도록 학습시킨다는 것이 핵심이다.
좋은 점은 이렇게 데이터를 많이 넣어서 학습하고 나면, 한번도 보여주지 않은 이미지에 대해서 zero-shot으로 잘 예측한다는 장점이 있고, 무엇보다 CLIP은 이미지와 그 이미지 안의 객체 속 text간의 관계를 잘 "이해"하고 있다는 점이다.
즉 Dall-E2는 텍스트 -> 이미지를 만들어내기 때문에 텍스트와 이미지의 관계를 잘 이해하는 모델인 CLIP을 텍스트 임베딩으로 활용한다.
2. 프라이어
역할
텍스트 임베딩을 이미지 임베딩으로 변환시켜주는데 논문의 저자들은 프라이어 모델을 훈련시킬 때 자기회귀 모델, 확산 모델 두가지 다른 방법을 시도했다.
자기회귀 사전
이 모델에서의 자기회귀 프라이어는 인코더-디코더 트랜스포머이다. 학습데이터는 CLIP의 텍스트-이미지 쌍 데이터셋으로 훈련되며, y에 해당하는 데이터는 이미지 데이터의 임베딩 벡터이고, input은 text 임베딩 벡터부터 이미지 임베딩 벡터를 하나씩 만들어내고 그 다음 예측은 현재의 결과를 input으로 활용한다.
확산 프라이어
단순하게 말하자면, 이미지 임베딩에만 잡음을 가하면서 학습데이터를 얻고 점진적으로 이 노이즈를 잘 제거해서 학습한 이미지 임베딩을 만들어낼 수 있도록 학습시키는 것을 의미한다.
3. 디코더
이제 이미지 임베딩을 이미지를 생성하는 디코더를 학습시킨다. 이 과정에서는 텍스트 + 이미지 임베딩을 모두 활용하고 동일하게 Diffusion 계열의 모델을 통해서 이미지를 생성해낸다. 임베딩 -> 이미지 -> 업샘플링(화질 올리기)을 통해서 파라미터에서 효율성을 가져간다.
4. 한계
속성 바인딩
주어진 텍스트 프롬프트에서 단어 간의 관계, 특히 속성이 객체와 어떻게 관련되어있는지 인지하는 능력인데 A red cube on top of a blue cube라는 프롬프트를 a blue cube on top of a red cube와 구분되어야 하는데 이 부분이 잘 작동하지 않는다.
텍스트 재현력
명확하게 그림 안에 text를 담을 수 없는데 텍스트 디코딩에 성공할 수 있지만 전체 단어를 구성할만큼 임베딩이 충분히 이해하지는 못한다.
Imagen
1. 전체 구조
- 동결된 텍스트 인코더 : T5-XXL 모델로 CLIP과 다르게 온전히 텍스트로만 학습해서 텍스트의 의미를 잘 이애한 모델이라고 볼 수 있다.
- Efficient U-Net : 이후부터는 이 모델을 활용해 이미지를 만들어낸다. Efficient가 붙은 이유는 메모리를 덜 사용하고, 더 빠르게 수렴하며, 샘플 품질이 더 좋다.
2. DrawBench
텍스트 투 이미지를 평가하는 200개의 텍스트 프롬포트 모음으로, 이 프롬프트를 활용해서 좋은 모델이 무엇인지에 대해서 평가/구분할 수 있는 데이터이다.
아래 시트에서 어떤 프롬프트가 있는지 확인해볼 수 있는데, 오른쪽에 category는 이미지를 잘 생성했다는 기준을 세우고 그에 맞는 프롬프트를 정리한 것이다.
https://docs.google.com/spreadsheets/d/1y7nAbmR4FREi6npB1u-Bo3GFdwdOPYJc617rBOxIRHY/edit#gid=0
Stable Diffusion
오늘날 가장 많이 사용되는 모델로 허깅 페이스에 코드와 모델 가중치가 이미 공개되어 있어서 누구나 자신의 하드웨어에서 이 모델을 사용할 수 있다.
이 모델의 핵심은 이전까지는 원래 이미지 자체를 바로 확산을 했다면 이미지 -> 인코더 -> 확산 과정 -> 랜덤 잡음 -> 디코더 + 텍스트 임베딩의 구조로 인코더, 디코더를 통해 잠재공간으로 바꾸고 이를 확산으로 처리했다.
이게 왜 좋은지 살펴보면 이미지 전체를 처리하는 것이 아니라 잠재 공간에서만 처리하고 처음과 끝에만 이미지를 처리하므로 훈련과정에서 속도나 성능을 향상시킬 수 있다.
플라밍고
플라밍고란 이미지와 텍스트 여러개가 주어지면 그 패턴을 통해서 유추해서 텍스트의 답을 내는 모델이라고 볼 수 있다. 위의 예시를 보면 바로 이해할 수 있다.
구조
0. 전체 구조에 대한 설명
이 논문의 핵심은 비전 데이터와 텍스트 데이터를 잘 합쳐서 이 둘간의 관계를 잘 이해해서 최종적으로 그에 맞는 텍스트를 출력해야한다.
비전 데이터와 텍스트 데이터 모두 고려해야하지만 이미지 데이터는 특성상 차원이 매우 높기 때문에 둘을 합치기가 어렵다.
그래서 1)이미지 데이터가 텍스트 데이터와 잘 어우러지도록 정보를 잃지 않으면서 축소시키는 작업이 필요하고, 2) 이 둘의 관계를 잘 조합해서 학습시킬 필요가 있다.
이 모델은 이 두문제를 어떻게 풀었는지 구조 하나하나를 살펴보면서 정리해보겠다.
1. 비전 인코더
입력에 포함된 시각 데이터를 임베딩 벡터로 변환하는 역할을 하며 이는 CLIP의 이미지 인코더와 유사하게 동작한다. 사전 훈련된 NFNet을 사용하며, 논문에서는 이 가중치를 freezing하고 학습시키지 않는다. 핵심은 이미지 -> 임베딩 벡터로 변환시키는 역할을 한다.
2. Perceiver Resampler : 이미지 임베딩 벡터를 텍스트 임베딩 벡터와 맞추기 위해 Perceiver 적용
비전 인코더는 여러 사진들을 input으로 받고, 비디오를 프레임당 받기 때문에 너무 많은 토큰이 생성될 수 있다. 그래서 이를 통해서 벡터의 길이를 축소해야한다.
아래가 perceiver resampler의 구조인데 셀프 어텐션이 아니라 크로스 어텐션을 사용한다. 구체적으로는 k, v는 입력시퀀스(이미지 임베딩)을 사용하고 query는 우리가 축소시키려는 크기의 잠재벡터를 넣어서 크로스 어텐션을 통해서 크기를 줄인다. 최종적인 출력은 언어 모델에 전달되는 고정 길이의 잠재 벡터이다.
3. 언어 모델
이제 이렇게 나온 이미지 정보와 텍스트를 모두 활용해서 최종 input인 텍스트를 만들어야한다. 그러면 이 두가지 정보를 적절하게 활용해야하는데 이 때도 위와 동일하게 Cross Attention을 사용한다. 최종적으로 출력할 정보가 text이기 때문에 query를 text로, perceiver Resampler를 통해 나온 vision 정보를 key, value로 사용해준다.
추가로 Masked라는 개념이 나오는데 아까 예시에서 보다시피 이미지와 텍스트 쌍이 순서대로 들어오기 때문에 미리 정답을 알려주면 안되기 때문에 Masking 처리를 한다.
이 때 텍스트 정보에도 해당 텍스트 쌍에서 이미지가 있는지 없는지 알려주는 것도 정보이기 떄문에 <image>와 같은 태그를 활용해서 텍스트와 함께 Flatten해서 input으로 넣는다.
4. 최종적인 feedforward
3번에서 이미지와 텍스트 정보를 크로스 어텐션해서 나온 정보는 tanh 게이트에 통과시키는데 신경망 초기화 때는 tanh로 인해서 다 0이 되어서 정보를 전달하지 않지만 훈련이 진행됨에 따라서 비전 데이터 정보가 혼합되면서 모델은 이 둘을 활용해서 정보를 활용해서 학습을 시작한다.
'Gate'는 모델이 어떤 정보에 집중할지를 결정하는 추가적인 조절 메커니즘을 제공해서 입력 데이터의 중요도에 따라 Attention의 강도를 조절하여, 더 관련성 높은 정보에 더 많은 집중을 할 수 있게 한다. 아마 이 모델 자체가 텍스트를 output으로 하는 데이터이고 정보의 양 자체가 텍스트가 더 많다고 생각해서 아마 text에 좀 더 집중하도록 하지 않았나 하는 생각이 든다.
추가로 공부할 내용
1. cross attention, masked cross attention
2. Imagen, 플라밍고, Stable Diffusion 모델 더 살펴보기
3. Perceiver 논문
참고 링크
1. https://ffighting.net/deep-learning-paper-review/multimodal-model/flamingo/
이 책의 마지막 장은 결론으로 되어 있는데 해당 내용은 큰 내용은 없고 지금까지 공부한 내용을 요약해서 따로 정리하지 않고 이 책은 이 장으로 마무리합니다.
'Machine Learning > 유튜브, 책, 아티클 정리' 카테고리의 다른 글
[book] 머신러닝 디자인 패턴 1. 데이터 표현 디자인 패턴 (0) | 2024.01.08 |
---|---|
만들면서 배우는 생성 AI 12장 - 월드 모델 (1) | 2023.12.15 |
만들면서 배우는 생성 AI 11장 - 음악생성 (1) | 2023.12.15 |
만들면서 배우는 생성AI 10장 : 고급 GAN (0) | 2023.12.14 |
만들면서 배우는 생성AI 9장 : 트랜스포머 모델 (0) | 2023.12.12 |