AI Engineering/이론

Attention is All You Need, Transformer의 시작

마늘냄새폴폴 2026. 9. 24. 19:33

안녕하세요! 이번 포스팅에선 AI 이론 포스팅의 시작점이 되는 포스팅으로써 여태까지 공부했던 AI 이론을 하나의 흐름으로 꿰기위해 꼭 필요한 포스팅입니다. 

 

들어가기 앞서 이 분야를 연구원도 아닌 제가 왜 공부하게 되었는지를 짧게 설명하고 넘어가야될 것 같네요. 

 

저는 어릴 때 풍력발전기를 보고도 '쟤는 그 어디에도 전기를 생산할 것 같지않게 생겼는데 어디서 전기를 만들고 있는거야?' 라는 의문이 들만큼 동작원리를 궁금해했습니다. 

 

그 아이는 커서 LLM이 토큰을 어떤 원리로 뱉고있는지가 너무 궁금해서 호기심에 하나 둘씩 공부하기 시작했습니다. 근데 처음 공부할 당시는 진짜 이게 무슨 외계어인가 싶었거든요. 

 

저는 백엔드만 공부했었고 웹백엔드랑은 전혀 다른 길이었어서 하나도 모르겠더라구요. 그럼에도 천천히 공부하면서 하나씩 개념을 확립시킬때마다 앎의 즐거움을 느끼게 되었고 그 과정에서 불을 지핀건 유튜브에서 홍정모 교수님의 영상을 보고 난 뒤였습니다. 

 

"모든것이 빠르게 급변하는 시기엔 그럼에도 변하지 않는 것을 공부해라"

 

그것이 이 분야를 공부하게된 계기입니다. 그리고 저는 이 포스팅을 통해서 AI 이론 공부를 처음 입문하는 분들을 위해서 최대한 정제해서 포스팅을 할 생각입니다. 

 

유튜브에는 엄청나게 어려운 내용을 설명해주시는 분들이 있고 실무에 엄청 도움되는 얘기를 해주시는 분들이 많은데 정작 이론을 알기쉽게 설명해주시는 분은 없는거같아서 제가 이해한 부분까지 이 포스팅을 통해서 알기쉽게 한번 포스팅을 진행해볼까합니다. 

 

그럼 시작해보죠!

 

토큰이란 무엇인가

이젠 흔하게 들리고 익숙한 토큰이란게 뭔지부터 짚고 넘어가겠습니다. 

 

토큰은 LLM이 텍스트를 처리하는 기본 단위입니다. 

 

우리는 문장은 동사, 조사, 명사처럼 문법적인 기준으로 나누기도 하죠. 하지만 LLM은 반드시 문법에 맞춰 문장을 나누지 않습니다. 자주 등장하는 글자나 단어를 기준으로 텍스트를 나눕니다. 

 

예를 들어서 사람은 "인공지능"이라는 단어를 하나의 단어로 인식하지만 어떤 모델은 "인공", "지능"처럼 여러 토큰으로 나눌 수도 있습니다. 좀 드물게 등장하거나 특수문자같은 경우는 더 작은 조각으로 나뉠 수도 있습니다. 

 

즉, 모델은 자기가 학습할 때 얼마나 많이 등장하느냐에 따라 문장을 토큰이라는 단위로 나누고 이를 기반으로 계산한다는 것입니다. 

 

이 작업을 하는 친구를 우리는 "토크나이저"라고 부릅니다. 

 

모델은 모델 계열마다 사용하는 토크나이저가 달라서 똑같은 문장을 입력하더라도 GPT계열과 Llama계열 모델에서 계산되는 토큰 수가 서로 다를 수 있습니다. 

 

이렇기 때문에 프론티어 회사에서 토큰을 비용으로 책정하는 이유이기도합니다. 토큰을 많이 입력하고 많이 출력한다는건 그만큼 들어가는 컴퓨팅 자원이 많다는 의미이기 때문입니다. 

 

임베딩이란?

토크나이저가 문장을 토큰으로 나눴다고 해서 모델이 곧바로 그 토큰의 의미를 알게 되는 것은 아닙니다. 각 토큰은 모델이 이해할 수 있는 "벡터"로 토큰을 계산합니다. 

 

컴퓨터는 애초에 문자를 인식하지 못해서 숫자로 이해하는건 다들 많이 알고 계시죠? 이게 그 일환입니다. 

 

그리고 이 토큰을 벡터로 변환하는 과정을 "임베딩"이라고 합니다. 

 

예를 들어서 "사과"라는 토큰이 있다고 가정해보죠. 

 

사람은 사과를 보면 자연스럽게 빨갛고, 둥글고, 달다라는 여러 의미를 떠올립니다. 임베딩도 이처럼 토큰에 속성을 부여해주는데 사람이 직접 의미를 부여해주느건 아니고, 모델이 엄청나게 많은 문장을 학습하는 과정에서 자연스럽게 부여되는 것이죠. 

 

"사과"와 "자두"는 모두 과일이고 먹다, 달다, 씨앗같은 단어들과 함께 사용되는 경우도 많습니다. 그러니까 자연스럽게 사과와 자두에 먹다, 달다, 씨앗 같은 속성이 부여되는 것이죠. 

 

그리고 이 둘은 서로 비슷한 속성을 가지고 있기 때문에 모델은 자연스럽게 이 둘의 "유사도"가 높다 라고 판단할 수 있는 근거가 됩니다. 

 

반대로 "자동차"라는 토큰은 "사과"와는 전혀 다른 상황에서 사용하기 때문에 자연스럽게 이 둘의 유사도가 낮다 라고 판단할 수 있습니다. 

 

그런데 여기서 인간의 언어에는 "동음이의어"라는 것이 있다는 것을 잊으면 안됩니다. 

 

"사과를 먹었다"

"친구에게 사과했다"

 

이 두개의 문장에서 사과는 전혀 다른 뜻을 가지고 있기 때문인데요. 

 

"사과"라는 토큰이 임베딩 작업을 거치고 나면 그 속성은 고정되고 이 두 문장에서 "사과"의 임베딩도 고정입니다. 

 

하지만 모델이 Attention이라는 연산을 통해서 이 둘은 다른 사과라는 것을 모델이 이해하고 서로 다른 문맥으로 변화시킬 수 있습니다. 

 

즉, 임베딩은 토큰이 가진 출발점이고 문맥은 Transformer 구조 안에서 Attention 연산을 통해 확장된다고 말 할 수 있습니다. 

 

벡터와 유사도

임베딩에서 살짝 더 들어가면 벡터라는 개념이 나오는데 이 벡터는 간단하게 얘기해서 여러 개의 숫자를 한 줄로 모아놓은 것입니다. 동시에 기하적으로는 크기와 방향을 가진 화살표로 생각할 수도 있습니다. 

 

설명을 더 단순하게 풀어가기 위해서 과일을 다음 세 가지 특징으로 표현한다고 가정해보죠. 

  • 단맛
  • 신맛
  • 크기

그럼 사과는 [8, 5, 6], 자두는 [7, 6, 3], 자동차는 [0, 0, 10] 이렇게 표현할 수 있습니다. 

 

물론 실제 LLM의 임베딩 공간에선 이렇게 딱딱 나눠져있지는 않습니다. 물론 17번째는 단맛, 35번째는 크기 이렇게 나눠져있는 것도 아닙니다. 

 

그래도 벡터를 이용하면 두 표현이 얼마나 비슷한 방향을 가리키는지 계산할 수 있습니다. 

 

들어가는 입구인 현재 포스팅에서 수식을 넣고싶진 않아서 간단하게 이야기하자면

 

"서로 다른 방향을 가리키는 두 벡터의 사이각이 좁으면 유사하다."

 

이렇게 이해하셔도 무방합니다. 

 

그러니까 서로 다른 방향을 가리킨다면 유사도가 낮은 것이고 (사과, 자동차) 비슷한 방향을 가리키면 유사도가 높은 것이죠 (사과, 자두)

 

Query, Key, Value

Transformer에서 빠지지 않는 개념이 바로 Q, K, V입니다. Q는 Query, K는 Key, V는 Value의 약자이며 각 의미는 다음과 같습니다. 

 

  • Query : 현재 위치가 어떤 정보를 필요로하는지
  • Key : 각 토큰이 어떤 요청과 관련있는지
  • Value : 해당 토큰이 전달할 정보

이것도 꽤나 두루뭉술한 얘기라서 그냥 쉽게 얘기해서

 

  • Query : 뱉어야되는 대상 (텍스트, 이미지, 음성, 영상)
  • Key/Value : 정보가 있는 대상 (텍스트, 이미지, 음성, 영상)

그러니까 만약에

 

Question : "이 사진에서 사람이 몇명이야?"

Answer : "3명입니다"

 

이런 질답이 있으면 텍스트를 뱉어야되는 쪽과 정보를 가져오는 쪽이 있을겁니다. 즉, 뱉어야되는 대상(텍스트 / Q) 그리고 정보가 있는 대상 (이미지 / K, V) 이렇게 구분하셔도 무방합니다. 

 

물론 정확히 얘기하면 그런건 아니지만 이해하는데는 전혀 무리없습니다. 

 

더 정확한 표현은 포스팅을 앞으로 진행하면서 중간 즈음에 정리하도록 하겠습니다. 

 

마치며

일단 포스팅의 시작점으로 이번 포스팅을 작성하게 되었습니다. 이후에 바로 수식이 나올거같은데... 사실 수식은 최대한 쓰기 싫은데 그래도 수식을 의미로 풀어서 최대한 쉽게 설명해보겠습니다. 

 

그러니까 수식이 등장해도 무서워하지 마시고 이쁘게 봐주셨으면 좋겠습니다. 

 

긴 글 읽어주셔서 감사합니다! 오늘도 즐거운 하루 되세요!