brunch

You can make anything
by writing

C.S.Lewis

by 차근차근 AI Nov 02. 2023

생성형 AI는 어떻게 우리가 원하는 것을 이해할까요?

이전 글에서 생성형 AI는 대규모의 데이터를 학습한 모델이, 학습한 내용을 기반으로 사용자가 원하는 콘텐츠를 생성해 내는 인공지능의 한 종류라는 것에 대해 말씀드렸습니다. 그렇다면 생성형 AI는 어떻게 우리가 원하는 게 무엇인지 알아듣는 걸까요? y = f(x)에서 입력 데이터 x를 컴퓨터가 이해하고 처리할 수 있는 숫자 벡터로 바꾸는 과정이 그 핵심입니다. x는 텍스트, 이미지, 오디오 등 여러 가지 포맷이 될 수 있지만, 가장 간단한 텍스트 예시를 먼저 살펴보겠습니다.


텍스트, 즉 인간의 언어를 숫자 벡터로 표현하는 방법에는 여러 가지가 있습니다. 가장 간단한 방법은 주어진 텍스트에 포함된 단어의 개수를 세어서 숫자 벡터의 차원을 정의하고, 각 단어에 번호를 붙여 숫자 벡터를 표현하는 것입니다. 예를 들어, "사과 자두 포도 강아지 고양이"이라는 텍스트는 사과, 자두, 포도, 강아지, 고양이라는 5개의 단어로 구성되어 있으니 숫자 벡터는 5차원이 되고, 각 단어마다 인덱스를 0, 1, 2, 3, 4로 지정한 뒤 해당 단어의 인덱스에 1을, 나머지 인덱스에는 0을 넣어서 아래 표와 같이 5차원의 숫자 벡터 5개로 표현할 수 있습니다. 이러한 숫자 벡터를 원-핫 벡터라고도 부릅니다.


이러한 원-핫 벡터 방식에는 큰 문제점이 있습니다. 단어 수가 많아지면 원-핫 벡터의 차원이 엄청나게 커지게 될 뿐만 아니라 벡터의 대부분이 0으로 채워진 희소 벡터(sparse 벡터)라서 컴퓨터의 리소스도 낭비되고, 계산 성능에도 안 좋은 영향을 미칩니다. 그뿐만 아니라, 단어들 간의 연관성을 표현할 수 없다는 문제가 있습니다. 위의 표를 보면 어떠한 과일/동물도 서로 관련이 있다는 것이 숫자 벡터에 전혀 표현되지 않는다는 것을 알 수 있습니다.


이 문제를 해결하기 위해 등장한 것이 바로 임베딩입니다. 임베딩은 고차원의 벡터를 낮은 차원의 벡터로 만드는 기술로, 서로 관련이 있는 데이터가 비슷한 벡터 공간에 위치하도록 하는 역할을 합니다. 영어사전에서 embed는 끼워 넣다로 번역이 되는데, 고차원의 희소 벡터에 망치질을 해서 낮은 차원으로 단어의 정보를 끼워 넣어 버린다고 상상해 보세요. 망치질을 통해 0으로 쓸데없이 낭비되던 차원을 줄여서, 훨씬 더 적은 숫자로도 하나의 단어를 벡터 공간에 표현할 수 있다는 것이 상상이 되시나요? 예를 들어 위의 표에 있는 사과는 [1,0,0,0,0]이라는 5차원의 원-핫 벡터에서 [0.9,0.1]이라는 2차원의 임베딩 벡터로 바뀔 수 있는 것입니다.


임베딩이라는 개념이 정말 중요한 이유는, 아래의 그림처럼 텍스트뿐만 아니라 이미지, 음악, 동영상 등 여러 종류의 데이터를 임베딩 벡터(낮은 차원의 벡터)로 변환함으로써 유사한 데이터가 서로 가까운 벡터 공간에 위치할 수 있기 때문입니다. 이미지 임베딩 결과는 비슷한 이미지들을 비슷한 벡터 공간에 위치시킬 것이고, 음악 임베딩 결과도 비슷한 음악들을 비슷한 벡터 공간에 위치시킬 뿐 그 원리는 모두 동일합니다. 


생성형 AI에서 이러한 임베딩 기술은 사용자의 입력을 분석하고, 주어진 입력에 맞게 적절한 출력을 생성하는데 중요한 역할을 합니다. 예를 들어, 사용자가 "윙크하는 강아지 이미지 생성"이라고 입력을 한 경우, "윙크", "강아지", "이미지", "생성"이라는 단어들이 각각 임베딩을 통해 낮은 차원의 숫자 벡터로 변환되고, 이 벡터들이 생성형 AI 모델이 적절한 이미지를 생성하는데 도움을 주는 것입니다.


왼쪽의 데이터(텍스트, 이미지, 음악, 동영상)가 중간의 딥러닝 모델을 거쳐 오른쪽의 임베딩 벡터로 변환되어 벡터 공간에 위치한 모습입니다. 음표끼리, 장바구니끼리 모여있네요.

출처: Google Cloud의 Vertex AI Embeddings API + Matching Engine: Grounding LLMs made easy 강의


이번 글에서는 생성형 AI가 인간의 언어를 이해하는 출발점인 임베딩이라는 중요한 개념에 대해 알아보았습니다. 한 줄로 요약하면 다음과 같습니다.

데이터를 낮은 차원의 숫자 벡터로 표현하는 임베딩을 통해, 서로 관련이 있는 데이터가 비슷한 벡터 공간에 위치하게 되고, 이것이 생성형 AI가 우리가 원하는 것을 이해하는 첫걸음입니다.
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari