오픈AI CLIP 모델의 이해/코드 분석/개발/사용
BIM 칼럼니스트 강태욱의 이슈 & 토크
이번 호에서는 생성형 AI의 멀티모달 딥러닝 기술 확산의 계기가 된 오픈AI(OpenAI)의 CLIP(Contrastive Language-Image Pre-Training, 2021) 코드 개발 과정을 분석하고, 사용하는 방법을 정리한다.
■ 강태욱
건설환경 공학을 전공하였고 소프트웨어 공학을 융합하여 세상이 돌아가는 원리를 분석하거나 성찰하기를 좋아한다. 건설과 소프트웨어 공학의 조화로운 융합을 추구하고 있다. 팟캐스트 방송을 통해 이와 관련된 작은 메시지를 만들어 나가고 있다. 현재 한국건설기술연구원에서 BIM/GIS/FM/BEMS/역설계 등과 관련해 연구를 하고 있으며, 연구위원으로 근무하고 있다.
이메일 | laputa99999@gmail.com
페이스북 | www.facebook.com/laputa999
홈페이지 | https://dxbim.blogspot.com
팟캐스트 | http://www.facebook.com/groups/digestpodcast
CLIP은 구글이 개발한 자연어 번역 목적의 트랜스포머 모델, 비전 데이터 변환에 사용되는 VAE(Variational Autoencoder) 개념을 사용하여 멀티모달 학습 방식을 구현하였다. 이번 호에서는 그 과정을 설명하고 파이토치로 직접 구현하는 과정을 보여준다. CLIP을 이용하면 유튜브, 넷플릭스와 같은 영상에서 자연어로 질의해 해당 장면을 효과적으로 검색할 수 있다.
참고로, CLIP에서는 트랜스포머가 핵심 컴포넌트로 사용되었다. CLIP과 같이 트랜스포머가 자연어 번역 이외에 멀티모달의 핵심 기술이 된 이유는 비정형 데이터를 연산 가능한 차원으로 수치화할 수 있는 임베딩 기술의 발전과 트랜스포머의 Key, Query, Value 입력을 통한 여러 학습 데이터 조합이 가능한 특징이 크게 작용했다.
그림 1. 멀티모달 시작을 알린 오픈AI의 CLIP 모델(Learning Transferable Visual Models From Natural Language Supervision, 2021)
트랜스포머와 VAE를 이용한 멀티모달 CLIP 네트워크를 좀 더 깊게 파헤쳐 보도록 한다. 앞서 설명된 트랜스포머, 임베딩과 관련된 개념에 익숙하다면, CLIP을 이해하고 구현하는 것이 그리 어렵지는 않을 것이다.
CLIP에 대한 이해
오픈AI에서 개발한 CLIP 모델은 공유 임베딩 공간 내에서 이미지 및 텍스트 형식을 통합하는 것을 목표로 했다. 이 개념은 기술과 함께 이미지와 텍스트를 넘어 다른 양식을 수용한다.(멀티모달) 예를 들어, 유튜브 등 비디오 애플리케이션 내에서 텍스트 검색 성능을 개선하기 위해 공통 임베딩 공간에서 비디오 및 텍스트 형식을 결합하여 모델을 학습시켰다.
사실, 임베딩 텐서를 잠재 공간(Latent Space)으로 이기종 데이터를 변환, 계산, 역변환할 수 있다는 아이디어는 VAE 기술, 구글의 트랜스포머 논문(2017)을 통해 개발자들 사이에 암시되어 있었다. 이를 실제로 시도해본 연구가 CLIP이다.
참고로, CLAP(Contrastive Language-Audio Pretraining)은 동일한 임베딩 공간 내에서 텍스트와 오디오 형식을 통합하는 또 다른 모델로, 오디오 애플리케이션 내에서 검색 기능을 개선하는 데 유용하다.
CLIP은 다음과 같은 응용에 유용하다.
이미지 분류 및 검색 : CLIP은 이미지를 자연어 설명과 연결하여 이미지 분류 작업에 사용할 수 있다. 사용자가 텍스트 쿼리를 사용하여 이미지를 검색할 수 있는 보다 다양하고 유연한 이미지 검색 시스템을 허용한다.
콘텐츠 조정 : CLIP은 부적절하거나 유해한 콘텐츠를 식별하고 필터링하기 위해 이미지와 함께 제공되는 텍스트를 분석하여, 온라인 플랫폼의 콘텐츠를 조정하는 데 사용할 수 있다.
참고로, 메타 AI(Meta AI)는 최근 이미지, 텍스트, 오디오, 깊이, 열, IMU 데이터 등 6가지 양식에 걸쳐 공동 임베딩을 학습하는 이미지바인드(ImageBind)를 출시했다. 두 가지 모달리티를 수용하는 최초의 대규모 AI 모델인 CLIP은 이미지바인드 및 기타 다중 모달리티 AI 시스템을 이해하기 위한 전제 조건이다.
CLIP은 배치 내에서 어떤 N×N(이미지, 텍스트) 쌍이 실제 일치하는지 예측하도록 설계되었다. CLIP은 이미지 인코더와 텍스트 인코더의 공동 학습을 통해 멀티모달 임베딩 공간을 만든다. CLIP 손실은 트랜스포머의 어텐션 모델을 사용하여, 학습 데이터 배치에서 N개 쌍에 대한 이미지와 텍스트 임베딩 간의 코사인 유사성을 최대화하는 것을 목표로 한다.
다음은 이를 설명하는 의사코드이다.
1. img_en = image_encoder(I) # [n, d_i] 이미지 임베딩 인코딩을 통한 특징 추출
2. txtxt_emdn = textxt_emdncoder(T) # [n, d_t] 텍스트 임베딩 인코딩을 통한 특징 추출
3. img_emd = l2_normalize(np.dot(img_en, W_i), axis=1) # I×W 결합(조인트) 멀티모달 임베딩 텐서 계산
4. txt_emd = l2_normalize(np.dot(txtxt_emdn, W_t), axis=1) # T×W 결합(조인트) 멀티모달 임베딩 텐서 계산
5. logits = np.dot(img_emd, txt_emd.T) * np.exp(t) # I×T * E^t 함수를 이용한 [n, n]코사인 유사도 계산
6. labels = np.arange(n)
7. loss_i = cross_entropy_loss(logits, labels, axis=0) # 이미지 참값 logits과 예측된 label간 손실
8. loss_t = cross_entropy_loss(logits, labels, axis=1) # 텍스트 참값 logits과 예측된 label간 손실
9. loss = (loss_i + loss_t)/2 # 이미지, 텍스트 손실 평균값
실제 오픈AI 논문에는 <그림 2>와 같이 기술되어 있다.(동일하다.)
그림 2
■ 자세한 기사 내용은 PDF로 제공됩니다.
작성일 : 2024-05-02