LLM 시대, LangChain(랭체인)으로 배우는 AI 소프트웨어 개발
이번에는 LLM(Large Language Model)의 작동원리를 설명합니다. 이 강좌를 집필하던 시점인 2025년 1월까지는 주류 LLM은 공통적으로 Transformer라는 뉴럴 네트워크 아키텍처를 채택하고 있습니다. Transformer는 텍스트뿐만 아니라, 이미지, 음성, 동영상 등 다양한 모달리티(형식)를 통합적으로 처리할 수 있기 때문에 단순한 텍스트 기반 LLM부터 멀티모달 LLM에 이르기까지 핵심 구성요소로 사용됩니다. 이번에는 Transformer를 중심으로 한 LLM구조와 각 구성요소의 동작원리를 이해하는데 목적이 있습니다. 우선 언어모델을 살명하고 주요 LLM 구성요소인 Transformer, 토크나이저, 샘플링기법을 다룹니다.
LLM은 이름 그대로 언어모델의 규모가 큰 모델을 의미합니다. '대규모'의 의미와 '소규모' 언어모델의 차이점은 알기 위해 우선 언어모델의 기본개념을 살펴봅시다. 여기서는 '언어모델'이라는 용어를 언어와 모델로 분해하여 각각의 개념과 이를 결합한 언어모델을 차례대로 설명합니다.
모델은 여러 맥락에서 사용되는 용어입니다. 언어모델의 경우, '모델'은 현실세계의 현상을 예측하기 위한 수식이나 소프트웨어를 의미합니다. 이러한 모델은 입력을 받아 특정 예측값을 출력합니다. 아래 그림에서는 일반적인 모델을 사각형으로 표현하며, 왼쪽에서 들어오는 화살표는 입력, 오른쪽으로 나가는 화살표는 출력을 나타냅니다. 입력과 출력은 각각 하나 이상의 값으로 구성될 수 있습니다. 예를 들어 기상모델은 대기상태나 해양상태등 다양한 변수들을 입력받아 미래의 기온이나 강수량을 예측합니다.
모델을 만드는 방법에는 다양한 접근방식이 있으며, 그 중 하나가 바로 머신러닝(기계학습)입니다. 머신러닝으로 생성된 모델은 수식으로 정의됩니다. 예를 들어, y = b + ax 라는 심플한 수식은 하나의 단순 모델로 볼 수 있습니다. 이 경우 입력은 x이고, 출력은 y입니다. x와 y는 각각 입력변수(통계학: 설명변수)와 출력변수(통계학: 반응변수)라고 부릅니다. 여기서 a계수와 b절편은 모델의 파라미터로 머신러닝알고리즘에 의해 결정됩니다. 예를 들어 a의 값이 클수록 x의 영향력이 크다는 것을 의미합니다. 머신러닝 분야에서는 a와 b 대신 w0, w1등의 기호가 사용되며, 여기서 w는 weight(가중치)의 첫글자입니다.
이와 같은 파라미터가 2개인 모델은 극히 소규모 모델이라고 볼 수 있습니다. 실제 머신러닝에서는 주어진 입력 및 출력 예제로부터 자동으로 (기계적으로) 파라미터를 학습합니다. 실무에서 사용하는 모델은 여러 수식을 결합하여 더 복잡한 형태를 띠지만, 기본적으로 입력과 출력 예제를 통해 파라미터를 결정하는 방식은 동일합니다. 모델의 복잡도가 증가하면 파라미터수도 증가하게 되는데, LLM에서 '대규모'라고 하는 이유 중 하나는 이 파라미터의 수가 매우 많다는 점입니다.
머신러닝 분야에서는 파라미터를 벡터나 행렬 형태로 표현하는 경우가 많습니다. 예를 들어 w = [w0, w1, ... , wn]와 같은 벡터로 또는 여러 벡터를 모아 행렬 w로 표현할 수 있습니다. LLM은 이러한 다수의 가중치를 표현하는 행렬들이 여러개 결합되어 모델의 파라미터를 구성합니다. 또한 가중치 행렬의, 갯수가 많고 각 행렬의 크기가 큰것도 LLM의 특징 중 하나입니다. 나중에 설명하는 파라미터와 크기에 대한 예제도 소개합니다.
언어는 일정한 문법에 따라 구성된 단어와 문장의 집합입니다. 자연어(영어, 한국어 등)와 프로그래밍 언어(Python, Java등)는 대표적인 예입니다. LLM은 자연어와 프로그래밍 언어 모두를 다룰 수 있습니다. 이는 모델 학습에 사용된 데이터에 자연어 텍스트와 프로그래밍 코드가 모두 포함되어 있기 때문입니다. 모델은 이러한 데이터로부터 언어의 통계적 특징을 추출하여 문법과 의미론을 추상적으로 학습하며, 이로 인해 학습 데이터에 포함되지 않은 새로운 언어적 특징도 생성할 수 있습니다. 즉, LLM이 다루는 언어는 여러 언어의 합집합으로 이해할 수 있습니다.
다만, 각 언어별 모델 성능은 학습 데이터의 양에 어느 정도 의존하는 것으로 알려져 있습니다. 일반적으로 학습 데이터가 많은 언어일수록 모델 성능이 우수한 경향이 있고, 주로 영어 데이터를 사용하여 학습한 모델은 한국어등 다른 언어보다 다소 나은 성능을 보일 수 있습니다. 이와 같은 현상은 자연어뿐만 아니라 프로그래밍 언어에도 적용될 수 있습니다.
언어 모델은 언어와 모델이라는 개념이 결합된 것입니다. 이는 언어로 작성된 텍스트 데이터를 입력으로 받아 특정 예측을 출력하는 모델을 의미합니다. 언어모델이 수행하는 작업을 태스크(task)라고 하며 태스크에 따라 입력과 출력이 달라집니다.
예를 들어 아래 표와 같이 자연어 처리 태스크와 해당 태스크에서의 입력 및 출력을 나타냅니다. 대표적인 태스크 중 하나인 자기회귀 언어 모델링은 텍스트 일부를 입력받아, 그 후에 올 가능성이 높은 토큰(token)을 출력합니다. 여기서 토큰은 언어 모델이 처리하기 쉬운 단위로 텍스트를 분할한 것입니다. 일반적으로 단어를 더 세분화한 서브워드(subword)가 토큰으로 사용됩니다. 또 다른 예로 문장 생성 태스크는 프롬프트(텍스트 시작 부분이나 요약 등)를 입력받아 프롬프트에 이어지는 자연스로운 문장을 출력합니다.
아래 표에서 특히 중요한 태스크는 자기회귀 언어 모델링입니다. 자기회귀 언어 모델은 입력된 텍스트의 일부를 기반으로 그 이후에 올 가능성이 높은 토큰을 출력하며, 출력된 결과를 다시 입력으로 사용하는 재귀적(recursive) 처리방식을 통해 긴 문장이나 텍스트를 생성할수 있습니다. 예를 들어, 아래 그림은 자기회귀 언어 모델의 동작 형태를 보여줍니다. 여기서 "오늘의 날씨는"이라는 텍스트를 입력받아 "맑습니다"라는 텍스트를 출력하는 과정을 가정해 봅니다. 첫번째 호출에서는 '맑다'라는 토큰이 생성되고, 두번째 호출에서는 '습니다'이라는 토큰, 마지막으로 '.'토큰이 생성되어 최종 출력이 완성됩니다.
자연어 처리 작업의 입출력예시
LLM(Large Language Model)은 이름 그대로 파라미터 수가 매우 많은 언어 모델을 의미합니다. 그렇다면 '대규모'란 의미는 무엇일까요? 이는 모델의 파라미터 수에 달려 있습니다. 명확한 기준은 없지만, LLM의 기초가 된 GPT-3의 파라미터수가 175억개임을 감안할 때, 대략 100억개 이상의 파라미터를 보유한 모델을 LLM(대규모언어모델)이라 부릅니다. 파라미터수가 많아질수록 학습에 필요한 시간과 학습 데이터의 양도 크게 증가하게 됩니다. 따라서, LLM은 파라미터 수, 학습시간, 학습 데이터 모두가 매우 큰 모델입니다.
LLM이 소규모 모델과 뚜렷하게 구분되는 점은 바로 '창발적 능력(Emergent Abilities)'의 유무입니다. 창발적 능력이란, 모델의 규모가 일정수준을 초과하면 갑자기 획득되는 다양한 능력을 의미합니다. 이러한 능력들은 프롬프트로 모델에 지시함으로써 활용할 수 있습니다.
창발적 능력은 명시적으로 훈련된 것이 아니라, 단순히 방대한 양의 텍스트 데이터로 다음 토큰을 예측하는 학습만으로 자연스럽게 획득된 점이 기존 머신러닝에서 별도로 훈련한 능력과 다릅니다. LLM 이전에는 계산, 데이터 분류, 문법검사, 키워드 스포팅과 같은 기본 자연어 처리 태스크마다 개별적인 훈련이 필요했지만, 창발적 능력은 그러한 별도 훈련없이도 휙득합니다. 이로 인해 LLM은 높은 범용성을 가지며, 다양한 용도로 활용할 수 있습니다. 또한, 모델 규모가 더욱 커짐에 따라 새로운 창발적 능력의 흭득도 기대됩니다. 따라서 LLM(대규모언어모델)은 앞으로 다양한 분야에서 더욱 폭넓게 활용될 가능성이 큽니다. 창발적 능력의 예시는 아래 표에 제시되어 있으며, LLM은 프롬프트로 주어진 지시에 따라 다양한 능력을 발휘합니다. 이러한 능력들이 명시적으로 가르쳐진 것이 아니라 자동으로 학습된 것이라는 점은 주목할만합니다.
LLM의 창발적 능력 예시
LLM의 기본 처리 과정은 이전 토큰들을 입력을 받아 다음 토큰을 출력하는 것입니다. 이 과정을 반복함으로써, 보다 긴 문장이나 텍스트를 생성할 수 있습니다. 대규모 텍스트 데이터세트를 활용해 LLM은 다음 토큰을 예측할 수 있도록 사전학습(Pre-training)이 됩니다. 이렇게 사전학습된 모델을 '사전학습된 언어모델(Pre-trained Model)'이라고 부릅니다. 이후, 사전학습된 언어모델에 파인튜닝(Fine-tuning, 미세조정)기법을 적용하여 특정 태스크에 맞게 최적화할 수 있으며, 이를 통해 더욱 실용적인 응용이 가능해 집니다.
대화형(Conversational) LLM: 대화형 LLM은 사람과의 대화를 전제로 하는 모델입니다. 사전학습된 LLM에 대화 데이터를 이용하여 파인튜닝을 진행함으로써 구현됩니다. 이 모델은 주로 사용자와 어시스턴트 간의 이전 대화 내역을 받아 적절한 응답을 생성합니다.
멀티모달(Multimodel) LLM: 멀티모달 LLM은 텍스트 외에도 이미지, 음성, 동영상 등 다양한 모달리티의 정보를 함께 처리할 수 있는 모델입니다. 서로 다른 모달리티(예: 텍스트와 이미지, 텍스트와 음성 등)를 결합하여 처리함으로써, 보다 풍부한 정보를 활용할 수 있습니다.
이들 모델은 기본적으로 이전 토큰 시퀀스로부터 다음 토큰을 예측하는 동일한 원리르 따르지만, 입출력 형식이나 구성요소에서는 약간의 차이가 있습니다. 아래에는 이런 모델들의 동작방식과 구성에 대해 설명합니다.
① 사전학습된 언어모델
사전학습된 언어모델은 주로 '토크나이저(Tokenizer)'와 Transformer 두 부분으로 구성됩니다. 아래 그림은 사전학습된 언어모델의 구성도를 보여줍니다.
토크나이저: 텍스트 데이터를 세부단위인 토큰으로 분할하고, 각 토큰을 고유한 숫자(토큰ID)로 변환합니다. 이 토큰 ID 시퀀스가 Trasnformer의 입력으로 사용됩니다.
Transformer: 토크나이저로부터 생성된 토큰ID 시퀀스를 입력으로 받아 다음 토큰ID를 예측합니다. 예측된 토큰ID는 재귀적으로 다음 입력으로 활용되어, 이를 반복함으로써 긴 문장이나 텍스트를 생성할 수 있습니다.
▣ 토크나이저를 통한 토큰화
아래 그림은 토크나이저가 텍스트를 토큰으로 분할하는 과정을 나타냅니다. 예를 들어, "오래전 할아버지와"라는 문장이 입력될 경우, 토크나이저는 다음과 같은 방식으로 토큰화합니다.
아래는 각 토큰ID와 토큰 대응 예시입니다.
128000: <|begin_of_text|>
12354: 오
17132: 래
9516: 전
32058: 할
7653: 아
24963: 버
3908: 지
12753: 와
<|begin_of_text|>는 문장의 시작을 나타내는 특수 토큰으로 토크나이저가 자동으로 삽입합니다.
▣ Transformer를 이용한 다음 토큰 예측
토큰ID 시퀀스가 Transformer에 입력하면, Transformer는 다음 토큰ID에 대한 확률 분포를 출력합니다. 예를 들어, 다음과 같은 확률 분포가 나왔다고 가정해 봅시다.
위 예시에서 토큰ID 1629와 2345의 확률이 상대적으로 높다면, 이들 토큰이 다음 토큰으로선택될 가능성이 높아집니다. 실제 토큰을 선택할 때는 나중에 설명하는 temperature나 top-p와 같은 파라미터를 활용하여 확률 분포를 조정함으로써, 출력결과의 다양서을 제어할 수 있습니다.
이렇게 선택된 토큰ID는 현재 토큰ID시퀀스의 끝에 추가됩니다. 그리고 업데이트된 토큰ID 시퀀스가 다음 Transformer의 입력으로 사용됩니다. 예를 들어, 현재 토큰ID 시퀀스가 다음과 같다고 생각해봅시다.
여기서 다음 토큰ID로 1629가 선택되면, 토큰ID 시퀀스는 다음과 같이 업데이트됩니다.
이 새롭게 생성된 토큰ID 시퀀스가 다음 Transformer의 입력이 되며, 같은 과정을 반복하게 됩니다. 이러한 반복은 텍스트 끝을 나타내는 특수토큰(<|end_of_text|>)이 생성되거나, 미리 설정된 토큰수만큼 생성이 이루어질 때까지 계속됩니다.
▣ 생성된 토큰 시퀀스 디코딩
Transformer로부터 반복적으로 샘플링하여 얻는 결과는 이어지는 문장에 해당하는 토큰ID 시퀀스입니다. 이 토큰ID 시퀀스를 토크나이저를 통해 디코딩하면, 최종적으로 생성된 문장의 텍스트 형태를 얻을 수 있습니다. 예를 들어, 다음과 같은 토큰 ID 시퀀스를 얻었다고 가정해 봅시다.
각 토큰ID가 다음과 같은 토큰에 대응한다고 가정하면,
13070: 할
150916: 머
4081: 니
53779: 가
3956: 살고
7017: 있
62232: 었습니다
13: .
158322: 행복
32179: 하
53779: 게
167085: 살았습니다
558: .
128001: <|end_of_text|>
토크나이저가 이 매핑정보를 사용해 토큰ID 시퀀스를 디코딩하면 최종적으로 다음과 같은 문장 텍스트를 얻을 수 있습니다.
단, 최종 출력에서는 문장의 시작과 끝을 나타내는 특수토큰(<|begin_of_text|>와 <|end_of_text|>)은 제거되어 실제사용자에게는 자연스러운 문장만 노출됩니다.
대화형 LLM은 사람과의 대화를 전제로 한 LLM(대규모언어모델)을 의미합니다. 이 모델은 사전학습된 언어 모델에 대화 데이터를 사용하여 파인튜닝을 수행함으로써 구현됩니다. 대화 데이터에는 역할(Role)이 포함되며, 일반적으로 사용되는 역할은 사용자(Human)와 어시스턴트(AI)입니다. 대화 데이터에서는 사용자와 어시스턴트가 번갈아가며 발언합니다.
대화형 LLM에 대한 입력은 대화내역과 사용자 발언으로 구성됩니다. 대화가 시작될 때 대화 내역은 비어 있으며, 사용자의 발언만이 입력으로 제공됩니다. 대화형 LLM이 이 대화내역과 사용자의 발언 이후에 자연스러운 응답을 생성합니다.
예를 들어 아래 그림은 대화형 LLM의 입출력 예시를 보여줍니다.
대화형 LLM 입출력 예시
이 대화내역은 '사용자', '어시스턴트', '사용자'의 세가지 발언으로 구성되어 있습니다. 대화형 LLM은 이러한 대화내역의 맥락을 이해한후, 어시스턴트 역할로서 다음과 같은 응답 메시지를 생성합니다.
이처럼, 대화형 LLM은 사용자와 어시스턴트 간의 과거 대화내용을 입력으로 받아 적절한 응답을 생성합니다. 대화형 LLM은 사전학습된 언어 모델보다 더 복잡한 입출력을 처리하기 때문에, 입력토큰화 및 디코딩 방식도 다소 복잡해집니다. 이후 아래 그림을 활용하여 앞서 제시한 예시를 바탕으로 대화형 LLM의 입력 토큰화 및 디코딩 방법에 대해 설명합니다. 아래 그림에서는 아래쪽에 입력, 위쪽에 출력이 표시됩니다.
▣ 대화 내역의 토큰화
대화형 LLM의 입력은 대화내역과 사용자의 발언입니다. 토크나이저는 이 대화내역과 사용자의 발언을 토큰 시퀀스로 변환합니다. 이때, 누가 발언했는지 구분하기 위한 헤더와 대화의 종료를 나타내는 특수 토큰이 포함됩니다. 여기서는 Llama 3의 구현예시를 참고하여 아래 표에서 제시된 토큰ID를 사용하여 설명합니다.
<|start_header_id|>: 헤더(역할정보)의 시작
<|end_header_id|>: 헤더(역할정보의 종료
<|eot_id|>: 한개 턴(발언)의 종료 (end of turn)
토큰ID 목록
참고 URL: https://github.com/meta-llama/llama3/blob/main/llama/test_tokenizer.py
예를 들어, 다음과 같은 메시지가 입력되었다고 가정해 봅시다.
이 대화내역은 다음과 같은 토큰화될 수 있습니다.
시퀀스 시작에는 <|begin_of_text|>가 삽입되고,
각 발언 앞에는 <|start_header_id|>로 시작하여 역할정보(예: user 또는 assistant)가 삽입되고,
역할 정보의 끝은 <|end_header_id|>로 표시되며,
각 발언의 끝에는 <|eot_id|>가 삽입됩니다.
이와 같이 구성된 토큰 시퀀스는 대화내역과 사용자의 발언을 체계적으로 표현하여, 모델이 대화의 맥락과 발언 주체를 명확히이해할 수 있도록 돕습니다.
▣ Transformer를 이용한 다음 토큰 예측
대화형 LLM에서 다음 토큰 예측은 일반 LLM과 동일하게 진행됩니다. 대화형 LLM은 Transformer가 생성하는 확률분포를 기반으로 다음 토큰ID를 샘플링합니다. 이렇게 샘플린된 토큰ID는 기존 입력시퀀스의 끝에 추가되고, 업데이트된 시퀀스가 다음 Transformer입력으로 사용됩니다. 이 과정을 반복함으로써 대화의 맥락에 맞는 응답을 생성할 수 있습니다.
샘플링 과정은 다음 조건 중 하나가 만족되면 종료됩니다.
특정 종료 토큰 (<|end_of_text|> 또는 <|eot_id|)가 생성되는 경우
미리 정해진 토큰수만큼 생성된 경우
특히 종료조건으로 <|eot_id|>가 추가된 점이 사전학습된 언어모델과의 차이점입니다.
▣ 생성된 토큰 시퀀스의 디코딩
생성된 토큰 시퀀스는 토크나이저를 통해 디코딩되어 텍스트로 변환됩니다. 생성된 토큰 시퀀스에는 특수 토큰들이 포함되어 있기 떄문에, 이들을 적절히 처리해야 합니다. 특수 토큰의 종류가 늘어났다는 점을 제외하면, 생성된 토큰시퀀스의 디코딩 방식은 사전학십된 언어모델과 거의 동일합니다.
대화형 LLM의 API(Application Programming Interface)는 디코딩된 텍스트를 API에서 정한 메시지 형식으로 출력합니다. 이때 메시지 구조를 나타내기 위해 <|start_header_id|>, <|end_header_id|>, <|eot_id|>등의 특수 토큰을 힌트로 사용용하여 응답 메시지를 구합니다.
멀티모달 LLM은 여러 모달리티(데이터형식)를 처리할 수 있도록 설계된 대규모 언어모델을 의미합니다. GPT-4o, NeXT-GPT, Llava, VideoPoest, Macaw-LLM등 대표적인 멀티모달 LLM들입니다. 멀티모달 LLM은 텍스트, 이미지, 음성, 동영상등 다양한 형시긔 데이터를 입력받아, 이를 통합적으로 처리 할 수 있습니다.
아래 그림은 멀티모달 LLM의 개념적 구성입니다. 멀티모달 LLM의 입력은 텍스트, 이미지, 음성, 동영상 등 여러 모달리티를 포함할 수 있으며, 각 입력 데이터는 전용 인코더를 통해 Transformer에서 처리할 수 있는 토큰 시퀀스로 변환됩니다. Transformer는 이 토큰시퀀스를 입력으로 받아 다음 토큰 시퀀스를 예측하고, 예측된 토큰 시퀀스는 디코더를 통해 적절한 데이터 형식으로 변환되어 출력이 생성됩니다.
사용되는 인코더와 디코더는 모델에 따라 다릅니다. 예를 들어 아래 표는 몇가지 멀티모달 LLM이 사용하는 인코더 목록을 보여줍니다. 텍스트 인코더로는 일반적으로 사전학습된 언어모델과 동일한 토크나이저를 사용합니다. 그러나, VideoPost처럼 메인 Transformer와 직접적인 관련이 없는 모델을 텍스트 인코더로 활용하는 경우가 있습니다. VideoPost는 Transformer에 입력되는 토큰을 처리하기 위해 T5 XL이라는 텍스트 인코더를 사용합니다.
이미지, 음성, 동영상등 다른 모달리티에 대해서도 다양한 인코더를 활용할 수 있습니다. 예를 들어, 이미지 인코더로는 ImageBind나 CLIP-ViT, 음성인코더로는 AudioLDM, Whisper, 동영상 인코더는 Zeroscope, MAGVIT등이 사용됩니다. 이들 인코더는 각 모달리티에 특화된 특정 벡터를 생성하며, 필요한 경우 Transformer가 입력으로 처리할 수 있는 형태(토큰 임베딩 벡터 시퀀스)로 변환됩니다.
멀티모달 LLM의 인코더 예시
다음은 NExT-GPT등의 구현예시를 참고하여, 멀티모달 LLM의 입력 인코딩과 디코딩에 대해 설명합니다. 아래 그림에서는 멀티모달 LLM의 예시를 보여주며, 여기에서는 다음과 같은 프롬프트를 가정합니다.
▣ 입력의 인코딩
멀티모달 LLM의 입력은 여러 모달리티(형식)를 포함할 수 있습니다. 이러한 입력은 각 모달리티에 맞는 전용 인코더를 사용하여 Transformer가 처리할 수 있는 토큰 시퀀스로 변환됩니다.
텍스트 입력 인코딩
일반 대화형 LLM과 마찬가지로 텍스트 입력은 토크나이저를 통해 토큰 시퀀스로 변환됩니다. 토크나이저는 텍스트를 토큰 시퀀스로 분할하고 역할 정보나 발언 구분을 나타내는 특수 토큰(예: 헤더, 턴 종료토큰 등)을 추가합니다. 이번 예제의 프롬프트는 이와 같이 토큰 시퀀스로 변환됩니다. 이 변환 과정은 대화형 LLM의 경우와 동일하게 진행됩니다.
이미지 입력 인코딩
이미지 입력은 ImageBind와 같은 모델을 사용하여 수행됩니다. ImageBind는 이미지를 고정길의 벡터 표현으로 변환하여, 이 벡터는 추가적인 프로젝션 층을 통해 Transformer가 입력할 수 있는 토큰 임베딩 벡터 시퀀스로 변환됩니다.
여기서 토큰 임베딩 벡터란, 각 토큰을 고차원 수치 벡터로 표현한 것을 의미합니다. 또한, 이미지 정보는 텍스트 토큰 시퀀스에도 통합됩니다.
이 예제에서는 입력 이미지가 네 개의 이미지 토콘([IMG0] ~ [IMG3])으로 분할되어 해당 이미지위치를 나타내는 특수 토큰으로 사용됩니다. 이 특수 토큰은 Transformer의 임베딩 층을 거친 후, 이미지 인코더가 생성한 토큰 임베딩 벡터로 대체됩니다.
통합입력(입력시퀀스 연결)
이렇게 인코딩된 텍스트와 이미지의 토큰 시퀀ㅅ스는 연결되어 Transformer의 입력으로 사용됩니다. 이 토큰 시퀀스는 Transformer의 임베딩층에 투입되며, 임베딩층에 대한 자세한 설명은 다음에 설명합니다. 또한, 이미지에서 생성된 토큰 임베딩 벡터는 임베딩 층을 거친 후의 토큰 시퀀스에 직접 통합됩니다.
음성 인코딩
음성 입력은 AudioLDM과 같은 모델을 사용하여 처리됩니다. AudioLDM은 음성신호를 멜 스펙트로그램(음성 특징량)으로 변환한 후, 이를 이산적인 음성 토큰으로 양자화합니다. 이 음성 토큰들을 Transformer가 입력할 수 있는 토큰 임베딩 벡터 시퀀스로 변환됩니다.
동영상 인코딩
동영상 입력은 Zeroscope와 같은 모델을 사용하여 처리됩니다. Zeroscope는 동영상을 개별 프레임으로 분할하고, 각 프레임을 이미지로 취급하여, ImageBind와 유사한 방식으로 토큰 임베딩 벡터 시퀀스로 변환합니다.
▣ Transformer를 이용한 다음 토큰 예측
Transformer는 인코딩된 토큰 시퀀스를 입력으로 받아, 다음 토큰 시퀀스를 예측합니다. 이 과정은 일반 LLM과 동일하게 진행되며, 입력 토큰 시퀀스의 문맥을 고려하여 다음 토큰의 확률 분포를 생성합니다.
멀티모달 LLM에서는 출력 토큰 시퀀스에 텍스트뿐만 아니라, 이미지, 음성, 동영상등을 나타내는 특수 토큰이 포하모딜 수 있습니다. 예를 들어, 위 그림의 경우, Transformer는 텍스트와 이미지의 문맥을 동시에 고려하여 어시스턴트의 응답을 생성합니다. 생성된 토큰 시퀀스에는 [IMG0] ~ [IMG3]과 같은 이미지 토큰이 포함되며, 이들 토큰은 이미지의 위치를 나타내는 마커로 사용됩니다. 해당 이미지 토큰에 대응하는 토큰 임베딩 벡터는 이후 이미지 디코더로 전달되어 최종 출력 데이터로 변환됩니다.
▣ 생성된 토큰 시퀀스의 디코딩
생성된 토큰 시퀀스는 각각의 디코더를 통해 원래의 데이터형식으로 변환됩니다.
텍스트 디코딩
텍스트 디코딩은 토크나이저를 사용하여 수행됩니다. 토크나이저는 생성된 토큰 시퀀스에서 특수 토큰을 제거한 후, 나머지 토큰들을 텍스트로 변환합니다. 예를 들어, 위 그림의 경우, 생성된 토큰 시퀀스의 텍스트 부분은 다음과 같이 디코딩됩니다.
이미지 디코딩
이미지 디코딩은 생성된 이미지 토큰을 사용하여 진행됩니다. 이 이미지 토큰들은 사전 학습된 이미지 생성 모델(예: Stable Diffusion)에 입력되어, 원본 이미지로 재구성됩니다. 위 그림에서는 [IMG0] ~ [IMG3]와 같은 이미지 토큰들이 이미지 디코더를 통해 이미지로 변환됩니다.
음성과 동영상 디코딩
음성 디코딩은 생성된 음성 토큰을 사용하여, 사전학습된 음성 생성 모델(예: WaveNet)에 입력함으로써 음성신호를 구성합니다.
동영상 디코딩은 생성된 동영상 토큰을 사용하여 진행되며, 동영상 토큰은 프레임 단위의 이미지 생성 모델의 입력으로 사용됩니다. 이렇게 생성된 일련의 이미지 프레임들이 결합되어 동영상을 구성합니다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon Jaewoo Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5