새소식

AI

LLM 스터디 1주차) LLM Transformer

CloudNet@ 팀의 가시다님께서 Leading 하시는 LLM Study 1주차 스터디 내용 정리

 

1.1. LLM 개요

 

  • 인공지능(AI): 사람 수준의 지능을 갖춘 시스템
  • 머신러닝(ML): 데이터에서 자동으로 규칙을 학습하는 알고리즘
  • 딥러닝: 많은 층으로 구성된 신경망을 활용하는 머신러닝
  • 대규모언어모델(LLM): 사람의 텍스트를 해석하고 생성하는 심층 신경망
  • 생성형AI(GenAI): 심층 신경망을 사용하여 텍스트, 이미지, 미디어같은 컨텐츠를 생성할 수 있는 인공지능

 

1.1.1. 텐서(Tensor)

LLM 과 딥러닝에서 모든 데이터를 표현하는 기본 단위

  • 수학적 개념: 다차원 배열
    - 0차원: 스칼라(Scalar)
    - 1차원: 벡터(Vector)
    - 2차원: 행렬(Matrix)
    - 3차원이상: 텐서(Tensor)

 

1.1.2. 임베딩(Embedding)

LLM 과 딥러닝에서 텍스트를 숫자 벡터로 변환하는 과정

 

  • 토큰화(Tokenization)
    - 텍스트를 모델의 단어 사전(voca) 에 따라 작은 조각(토큰)으로 분해
  • 토큰 임베딩(Token Embedding)
    - 각 토큰을 모델 사전에 정의된 ID 로 변환하고, 해당 ID 에 해당하는 벡터를 임베딩 행렬에서 조회
    - 예시
    • 오늘 → ID 1 → [1,1,1]
    • 내일 → ID 10 → [1,20,2]
    • 어제 → ID 12 → [1,23,4]
  • 위치 인코딩 / 포지셔널 인코딩 (Positional Encoding)
    - 토큰 임베딩값에 위치 벡터 추가
LLM 에서의 역할
  • 입력 변환: 텍스트를 벡터로 변환하여 신경망이 처리 가능하도록 변경
  • 의미 보존: 단어의 의미를 벡터에 보관
  • 병렬 처리: 벡터 형태로 GPU 에서 빠르게 계산

 

1.2. 트랜스포머 핵심 구성 요소

트랜스포머(Transformer): LLM 을 구동하는 신경망 아키텍처

- ChatGPT, Claude 모두 트랜스포머 기반

- 현대 트랜스포머 아키텍처는 인코더 없이 디코더만 사용

 

1.2.1. 인코더(Encoder)

역할: 정보 읽기

- 입력된 텍스트를 분석하여 의미 파악

  • 과정
    - 임베딩된 단어들을 받음
    - 해당 단어들 사이의 관계를 계산
    - 문맥을 고려한 표현으로 변환

 

1.2.2. 디코더(Decoder)

역할: 답변 생성

- 인코더의 정보를 바탕으로 한 단어씩 생성

  • 과정
    - 이전에 생성한 단어들을 참고
    - 다음에 올 단어의 확률 계산
    - 가장 높은 확률의 단어 선택

 

1.3. 트랜스포머 구조

1.3.1. 전통적인 트랜스포머 구조(BERT) vs 현대적인 트랜스포머 구조(GPT, Claude)

 

1.3.2. 왜 인코더를 사용하지 않을까?

  • 범용성: 디코더 하나로 대화, 요약, 번역, 코딩 등 거의 대부분의 작업 가능
  • 구조 단순화: 인코더-디코더보다 학습과 확장이 용이
  • 스케일링 법칙(Scaling Law): 디코더 전용에서 파라미터 향상에 따른 성능 향상이 우월하다는 것이 증명됨

 

1.4. 어텐션 (Attention)

트랜스포머의 핵심이자, LLM 이 문맥을 이해하는 방법

- 지금 이 단어를 이해하기 위해, 문장의 어느 부분을 얼마나 참고할까? 를 계산하는 메커니즘

  1. 단어 해석을 위해 문장 속 다른 단어들을 참고
  2. 각 단어와의 관련성(가중치)를 계산
  3. 가중치만큼 주변 단어의 정보를 섞어서, 해석할 단어의 표현을 문맥에 맞게 다시 조정

- 모델이 각 단어가 서로에게 얼마나 집중(Attention)하는 지 숫자로 계산하기 때문에 어텐션이라고 사용

 

1.4.1. 왜 어텐션이 필요한가?

- 같은 단어라도 문맥에 따라 의미가 다름

- 같은 단어는 같은 임베딩 벡터로 시작하지만 주변 단어와의 어텐션 계산을 통해 완전히 다른 의미로 해석

 

1.4.2. 어텐션 계산 과정

3가지 벡터와 가중치로 계산 (Query, Key, Value)

 

예시: 오늘은 눈이 많이 내렸다.
  • Query(질문)
    - 지금 해석하려는 단어가 무엇인 지 알려줄 단서가 있는가?
    - 눈이 란 단어의 정체를 모르겠는데, 이것이 의미하는 게 뭐야?
  • Key(열쇠 벡터)
    - 해석하려는 단어 속 문장에 이런 정보들이 있다. (신호/태그)
    • 오늘은: 시간 관련 정보가 있어, 가져가!
    • 눈이: 나 자신에 대한 정보가 있어, 가져가!
    • 많이: 정도 관련 정보가 있어, 가져가!
    • 내렸다: 강수 현상 관련 정보가 있어, 가져가!
  • Value(값 벡터)
    - Key 단어에 포함된 실제 의미 정보
    • 오늘은: 시간이라는 의미 정보
    • 눈이: 자기 자신의 의미 정보
    • 많이: 정도라는 의미 정보
    • 내렸다: 강수 현상이라는 의미 정보
  • Weight(가중치)
    - Query - Key 를 비교해서 나온 관련성 점수
    - 0~1 사이로 측정되며 1 에 가까울수록 관련이 높음
    - Key 에서 생성되지만 Value 와 계산되어 최종 표현 완성
    • 오늘은: 이 단어는 '눈이' 와 관련성 점수가 0.1 이야.
    • 많이: 이 단어는 '눈이' 와 관련성 점수가 0.35 야.
    • 내렸다: 이 단어는 '눈이' 와 관련성 점수가 0.55 야. → 가중치가 가장 높네? 이 단어가 의미하는 Value 가 신뢰성이 높겠다!
  • 어텐션 계산
    - 눈이 표현 = 0.1 * Value(오늘은) + 0.35 * Value(많이) + 0.55 * Value(내렸다)
    - 내렸다의 의미(Value)가 가장 많이 반영되었으니 눈이 가 의미하는 뜻은 눈(雪) 일 확률이 가장 높음

 

1.4.3. 어텐션 메커니즘

  • 셀프 어텐션(Self Attention)
    - Query, Key, Value 가 모두 같은 문장에서 나오는 어텐션
    - Query, Key, Value → 문장 A
    - '오늘은 눈이 많이 내렸다' → 1개의 문장에서 어텐션 결정
  • 크로스 어텐션(Cross Attention)
    - Query 와 Key, Value 문장 출처가 다른 어텐션, 전통적인 트랜스포머 구조 (인코더 - 디코더)
    - Query → 문장 A
    - Key, Value → 문장 B
  • 멀티헤드 어텐션 (Multi-Head Attention)
    - Query, Key, Value 계산을 한 번만 하지 않고 여러 세트(헤드)로 병렬로 동시 계산
    - 1번의 셀프 어텐션으로는 단어와의 관계를 잘 포착하기 어려워 세트(헤드)마다 다른 관계에 주목하여 계산한 후 최종 결정
  • 멀티헤드 셀프 어텐션 (Multi-Head Self Attention)
    - 같은 문장(Self) 안에서라도 여러번(Multi-Head) 어텐션을 계산

  • 마스크드 셀프 어텐션(Masked Self Attention)
    - 미래에 나올 단어는 미리 보지 못하게 막아놓은(마스킹) 셀프 어텐션
    - 현대 트랜스포머 구조에서 사용하는 것 - 마스크드 멀티헤드 셀프 어텐션
    - 텍스트 생성 시에는 다음에 출력할 단어를 모르기 때문에 미래 단어는 마스킹된 것

 

1.5. MLP / FFN

멀티레이어 퍼셉트론(Multi-Layer Perceptron) / 피드포워드 네트워크(FFN)

- 어텐션 다음으로 나타나는 두 번째 핵심 레이어

- 트랜스포머 = 어텐션 + MLP

- 어텐션에서 나온 정보를 각 단어별로 더 정교하게 다듬는 역할

- 텐서 차원을 넓혔다가 다시 좁힘 (768 → 3072 → 768)

- 넓은 차원에서는 훨씬 더 복잡하고 다양한 패턴을 표현할 수 있음

 

1.5.1. 왜 MLP 가 필요한가?

- 어텐션 만으로는 추론될 수 있는 내용이 한정적(선형적)

- 어텐션은 입력된 벡터를 적당한 비율(가중치)로 계산한 결과일 뿐

 

- 선형 변환(차원 확장, 768 → 3072)만으로는 비선형적 답변을 얻어내기 어려움

- 이를 극복하기 위해 MLP 에서는 보다 더 창의적인 추론(비선형적 답변)을 하기위해 활성화 함수를 사용

- 활성화 함수 계산을 통해 비선형적 뒤틀림을 추가하여 삼각형 밖으로 내보냄

 

1.6. 트랜스포머 블록

1개의 트랜스포머 블록은 한 세트의 어텐션과 MLP 로 구성

- 여러 개의 트랜스포머 블록이 순차적으로 계산되어 최종 결과물 도출

- 각각의 트랜스포머 블록은 순서대로 계산(병렬X)

 

1.6.1. 블록쌓기

- 이전 트랜스포머 블록의 결과물이 다음 트랜스포머 블록으로 전달되어 다시 계산됨

- 동일한 단어여도 블록을 거치면서 내포하는 의미가 더 풍부해짐

- 의미가 풍부할수록 LLM 모델이 다음 단어를 정확하게 예측할 수 있음

 

1.7. 출력(Output)

1.7.1. Output Logit

트랜스포머 블록의 결과로 도출될만한 단어 후보군에 매긴 점수(원시 점수)
  • 예시 - 어제는 맑았는데, 오늘은 눈이 ???
    • 왔다: 8.2
    • 맑아졌다: 7.2
    • 바나나: -3.1

 

1.7.2. Softmax

- Output Logit 자체는 단순 숫자이며 확률이 아님

- Output Logit 의 확률의 합이 100%가 되게 변환하는 함수

 

1.7.3. 샘플링

- LLM 모델은 softmax 까지 계산하고 나온 확률을 정렬하고 그 중에서 단어를 선택

  • 왜 가장 확률이 높은 걸 선택하지 않나??
    - 그럴 경우 항상 동일한 답변을 하게 되어 뻔하고 기계적이게 됨
샘플링 실행: LLM 에 동일한 질문을 해도 매번 다른 응답을 하는 이유
  • 샘플링 기법
    1) Temperature
    - 확률 분표 조절하여 답변을 다양하게 or 뻔하게 만듦
    - 낮은 온도: 0에 가까울 수록 출력 답변 후보의 개수가 줄어듦, 보수적. 예측 가능한 답변
    - 높은 온도: 0에서 멀어질 수록 답변 후보의 개수가 늘어남, 창의적, 할루시네이션 가능성 상승
    2) Top-k
    - 상위 k개만 답변 후보로 남기기
    - 단어 후보를 확률 별로 나열한 후 상위 k 개만 남기고 나머지는 삭제
    3) Top-p
    - 누적 확률이 p%가 될때까지만 후보를 남기기
    - 개수가 아닌 답변 후보들의 확률 합 기준

Contents

포스팅 주소를 복사했습니다