핸즈온 LLM 1장 정리

2026년 8월 6일

인공 지능이란?
인공지능이란 지능적인 기계, 특히 지능적인 컴퓨터 프로그램을 만드는 과학과 공학이다.
인공지능 분야는 컴퓨터를 활용해 인간 지능이 어떻게 작동하는지 이해하려고 연구한다.
하지만 AI가 생물학적으로 관찰되는 방법에만 국한되지 않는다.
- 존 매카시

Language AI란 인간 언어를 이해, 처리, 생성할 수 있는 기술을 개발하는 데 초점을 맞춘 AI의 하위 분야이다.

언어 모델의 역사는 비구조적인 텍스트를 표현하는 한 방법 BoW(Bag of Words)라는 기법으로 시작한다.

BoW의 작동 방식

위 2문장이 있다고 가정해보자.

That is a cute dog My cat is cute

이 문장을 개별 단어나 부분단어를 토큰화(tokenization)한다.

that is a cute dog my cat is cute

위 단어들을 세분화하여 고유한 단어를 모두 합쳐서 어휘사전을 만든다.

that is a cute dog my cat

위 어휘사전을 사용하여 각 문장에 단어가 얼마나 많이 등장하는지 이해한다.

이를 벡터화해서 텍스트를 표현한다.

이러한 방식에는 단점이 있다. 언어를 언어 그 자체로 생각하고, 본질과 의미를 무시한다.

즉 cat 은 cat 그 자체이지 고양이라는 의미를 담고 있지 않다는 뜻이다.

이를 보완하여 word2vec은 임베딩으로 텍스트의 의미를 담는다.

임베딩이란?

모델이 언어를 계산할 수 있도록 의미를 숫자 좌표로 표현하는 방식이다.

컴퓨터는 Cat, Cute 같은 글자를 그대로 이해하지 못하기 때문에 이를 먼저 토큰 ID로 바꾼다.

cat : 토큰 id는 3821
cute : 토큰 id는 9182

하지만 이는 단순한 식별 번호일 뿐이지, 서로의 id가 가깝다고해서 의미까지 가까운것이 아니다.

이 토큰 id를 의미가 담긴 숫자 배열로 변환하는 것이 임베딩이다.

cat → [0.21, -0.45, 0.82, ...]
cute → [0.19, -0.41, 0.79, ...]

여기서 의미가 비슷하면 벡터 또한 가까워진다.

신경망을 사용해 의미 표현을 생성한다. 이 신경망은 여러 층이 서로 연결되어 구성되고, 각 층은 정보를 처리하는 여러 노드로 이루어져있다.

한 층의 노드와 다음 층의 노드를 잇는 연결에 입력값에 따라서 특정한 가중치가 부여된다.

가중치 : 이 입력을 얼마나 중요하게 반영할지를 나타내는 숫자

신경망이란?

입력을 받아 여러 단계의 계산을 거친 뒤, 원하는 출력을 만드는 수학적 계산 구조 즉, 계산기라고 생각하면 된다.

이 신경망은 입력층 => 은닉층 => 출력층

총 3개의 레이어로 나뉜다.

입력층 외부 데이터를 숫자로 받아들인다. LLM에선 문장을 토큰화하고 임베딩한 벡터가 입력된다.

은닉층 입력 숫자들을 가중치로 조합해 새로운 숫자를 만든다.

출력층 마지막 계산 결과를 우리가 원하는 형태로 바꾼다. 예를 들어

먹는다  높은 점수
산다    중간 점수
파랗다  낮은 점수

위 점수를 확률로 바꾸고, 디코딩을 통해 다음 토큰을 선택한다.

일반 프로그램에선 사람이 직접 규칙을 작성한다.

if subject == "고양이" and object == "사료":
    result = "먹는다"

하지만 언어에는 가능한 문장이 너무 많아서 모든 규칙을 사람이 작성할 수 없다.

그렇기때문에 신경망은 데이터를 통해 계산 규칙을 학습하는 구조이다.

학습한다는 것은 가중치를 수정한다는 뜻이다. 처음엔 가중치가 거의 무작위라서 예측을 하지 못한다.

입력: 고양이는 사료를
정답: 먹는다
예측: 달린다

모델은 예측이 얼마나 틀렸는지 계산하고, 정답에 가까워지도록 가중치를 수정한다.

예측
→ 정답과 비교
→ 오차 계산
→ 가중치 수정
→ 다시 예측

이 과정을 여러번 겪다보면 다음과 같은 언어 패턴을 예측할 수 있게 된다.

고양이 + 사료 → 먹는다
자동차 + 도로 → 달린다
학생 + 책 → 읽는다

하지만 위의 word2vec의 임베딩 또한 정적인 단어 표현을 만든다.

예를 들어, bank는 은행이란 뜻도 되지만 강둑을 의미하기도 하는데 위의 방식으로는 은행이란 뜻만 갖고 있는 것이다. (의미가 하드코딩 되어있다고 보면 됨)

임베딩은 문맥에 따라 달라져야하기때문에, 이를 해결하기 위해 순환 신경망 (RNN)이 등장했다.

입력 문장을 인코딩, 출력 문장을 디코딩하는 작업이다.

인코딩

입력 데이터를 모델이 계산할 수 있는 숫자 표현으로 변환하는 과정이다.

"나는 음악을 좋아한다"
        ↓ 토큰화
["나는", "음악을", "좋아한다"]
        ↓ ID 변환
[1042, 8271, 3520]
        ↓ 임베딩
숫자로 이루어진 벡터들

모델은 이 벡터들을 처리하면서 단어 간의 관계와 문맥을 반영해서 내부 표현을 만든다.

단순히 문자를 숫자로 치환하는 것이 아니라

  1. 어떤 단어가 중요한지
  2. 단어들이 서로 어떤 관계인지
  3. 문장의 전체 의미가 무엇인지
  4. 앞뒤 문맥상 어떤 뜻으로 사용되었는지

등 맥락 자체를 담아서 모델이 이해할 수 있는 형태로 정리한다.

디코딩

모델이 만든 내부 표현이나 확률을 실제 출력으로 변환하는 과정이다.

예를 들어서 모델이 다음 단어의 확률을 계산했다고 가정해보자.

"좋아한다"  45%
"듣는다"    30%
"연주한다"  15%
"싫어한다"  10%

여기서 어떤 토큰을 선택할지 결정하는 과정이 디코딩이다.

선택한 토큰을 기존 문장 뒤에 붙이고, 다시 다음 토큰을 예측한다.

나는 음악을
→ 좋아한다
→ .
→ [종료]

이때 선택 방법에 따라서 답변이 달라질 수 있다.

Greedy decoding : 확률이 가장 높은 토큰 선택 Sampling : 확률에 따라 무작위로 선택 Top-k : 확률 상위 k개 안에서 선택 Top-p : 누적 확률이 p가 되는 후보 안에서 선택 Beam search : 여러 문장 후보를 함께 탐색

그래서 같은 모델과 같은 질문이어도 계산법 설정에 따라서 결과가 달라질 수 있다.

하지만 이 문맥 임베딩은 하나의 임베딩으로 전체 입력을 표현하기 때문에 긴 문장을 처리하기 어려웠다.

그래서 이 구조를 개선한 어텐션이라는 방법이 등장했다.

예를 들어

철수가 영희에게 사과를 건냈다. 그녀는 웃었다.

라는 문장이 있다고 가정해보자.

여기서 그녀는 이라는 단어를 모델이 처리할때 모든 단어를 똑같이 보지 않는다.

철수가   → 관련도 낮음
영희에게 → 관련도 높음
사과를   → 관련도 낮음
건냈다   → 관련도 중간

그녀는과 관련성이 높은 영희에게 더 많은 주의(attention)을 배분한다.

어텐션을 통해 긴 문장에서도 서로 관계성이 있는 단어들을 찾아내고 가장 주의를 기울일 단어를 추적할 수 있다.

제가 어제 서점에서 구매한 책은 생각보다 어려웠습니다.

이러한 문장이 있다고 했을때, 어려웠습니다의 주체는 생각보다가 아닌 책이다.

이러한 어텐션을 기반으로 설계 된 신경망 구조를 트랜스포머(Transformer)라고 한다.

트랜스포머의 인코더 블록은 셀프어텐션과 피드포워드 신경망 두 부분으로 구성된다.

GPT나 클로드 같은 모델들 모두 트랜스포머 기반으로 만들어졌다.

셀프어텐션

셀프어텐션이란 문장 속 각 토큰이 같은 문장에 있는 다른 토큰들을 참고해, 자신의 의미를 문맥에 맞게 다시 만드는 계산 방식이다.

철수는 은행에서 돈을 찾았다.
철수는 강가의 은행에서 쉬었다.

위 두문장을 살펴보자. 은행만 보면 금융기관인지 강둑인지 알기 어렵다. 셀프 어텐션은 주변 단어와의 관련성을 계산한다.

은행 → 돈, 찾았다를 강하게 참고
     → 금융기관이라는 의미로 표현

은행 → 강가, 쉬었다를 강하게 참고

즉, 모델 내부에서 은행은 항상 똑같은 숫자 벡터로 남지 않는다.

어떤 문장에 들어갔는지에 따라서 문맥이 반영 된 벡터로 바뀐다.

피드포워드 신경망

피드포워드 신경망은 셀프 어텐션으로 모든 정보를 각 토큰 내부에서 가공하는 단계라고 보면 된다.

위 두개의 작업 흐름을 살펴보자.

철수는 은행에서 돈을 찾았다.

여기서 첫번째로 셀프 어텐션 단계를 거친다.

은행에서
  ├── 철수는   조금 참고
  ├── 돈을     많이 참고
  └── 찾았다   많이 참고

위 셀프어텐션 작업의 결과로 벡터가 다음처럼 바뀐다.

셀프 어텐션 전:
“은행”이라는 기본적인 의미

셀프 어텐션 후:
“철수가 돈을 찾은 금융기관”이라는 문맥이 반영된 표현

다른 토큰들도 마찬가지로 위와 같은 셀프어텐션을 거친다.

철수는   → 은행, 찾았다 등의 정보 참고
은행에서 → 돈, 찾았다 등의 정보 참고
돈을     → 은행, 찾았다 등의 정보 참고
찾았다   → 철수, 은행, 돈 등의 정보 참고

위 작업이 끝나면 피드포워드 신경망 단계를 거친다.

은행에서:
[철수 정보 + 돈 정보 + 찾았다 정보가 반영된 벡터]

셀프 어텐션 결과 벡터
→ 가중치 행렬과 계산
→ 활성화 함수
→ 다시 가중치 행렬과 계산
→ 새로운 벡터

셀프 어텐션의 결과로, "은행 + 돈 + 찾았다" 정보가 섞여 있는데, 이를 피드포워드 신경망 단계에서 이 조합을 다음 예측에 유용한 형태로 가공한다.

또 이를 금융기관의 의미가 더 잘 드러나는 숫자로 표현하여 출력한다.

요약해보면

셀프 어텐션 : 누구의 정보를 참고하지? 피드포워드 : 가져온 정보를 어떻게 가공하지?

이다.