컨택한 랩실 교수님께 LLM에 대해서 기초적인 지식을 쌓고 싶다고 말씀드렸더니 석사분들을 통해서 강의를 추천해주셨다!
Pretraining(사전 훈련 단계)
download, preprocess

pretraining의 첫번째 단계는 인터넷에서 정보를 다운받는 것이다.(데이터 수집)
우리는 고품질, 아주 많은 데이터를 얻고자 노력한다. 이것을 달성하기 위해서는 위와 같은 단계를 거친다.
url filtering은 데이터를 수집하고싶지 않은 사이트(광고, 유해사이트 등등)을 필터링하고, text extraction에서는 html 코드에서 필요한 정보 텍스트만 얻는 등의 과정을 거친다.
또한 language filtering은 데이터셋에 언어를 어떤 비율로 포함시킬 것인지를 정할 수 있다. 만약 영어 비율을 높인다면 이를 학습시킨 모델이 영어는 매우 잘하지만 다른 언어에는 좀 약할 수 있다.
Tokenizer

인터넷에서 이런 텍스트를 모았으면, 이제 이를 신경망에 어떻게 입력할지를 정해야한다.
만약 UTF-8로 인코딩한다면

이런식의 정보를 얻을 수 있다. 위 경우는 두가지 심볼을 가지고 있고, 그래서 시퀀스(길이)가 매우 길다
신경망에서는 시퀀스 길이가 매우 한정적이기 때문에 보통 심볼을 조절해서 시퀀스를 줄인다.

예를 들어 위와 같이 8비트를 1바이트로 묶어서 255개의 심볼을 사용하는 경우가 있다.
하지만 여기서 더 줄일 수도 있다. 시퀀스에서 특정 부분이 반복될 때(223 뒤에 13이 자주 온다) 이를 묶어 하나의 심볼로 만들 수 있다.
GPT-4는 이런식으로 해서 10277개의 심볼을 가지고 있다고 한다.
위와 같이 심볼을 이용해서 글을 토큰화 하는 과정을 tokenization이라고 한다.

이것은 실제 GPT가 글을 토큰화 하는 방식이다.
neural network training
우리는 이제 이 토큰들의 윈도우를 가져온다. (토큰들을 몇개씩 묶어서 가져올건지)
0개부터 최대크기까지 다영하지만 너무 긴 윈도우는 계산하는데 너무 많은 비용이 든다.
예를 들어 4개의 토큰을 가진 윈도우를 사용한다고 할 때

우리의 어휘는 100277 종류의 토큰을 가지고 있기 때문에 neural network를 통해서 각 토큰이 다음에 올 확률을 구할 수 있다.
처음에는 저 확률값이 랜덤이다. 현재 문서에서는 "post"가 저 단어들 다음에 와야하는데 현재는 3%밖에 안된다고 판단하고있다.
따라서 우리는 가지고 있는 데이터를 통해 튜닝하여 3962번 토큰이 올 확률을 높이고 나머지 토큰의 확률은 낮춰야한다.
이런 계산 과정은 병렬로 처리된다.

왼쪽 아래에 있는 숫자들은 매개변수들이다. 이 값들은 초기에는 완전 랜덤이지만, 디제잉?하는 것처럼 계속해서 조절된다.
이 매개변수 값들을 조정하여 모델을 튜닝한다.

예를 들어 이와 같이 계산된다.

실제 신경망은 이와 같은 구조를 가지고 있다.
이 네트워크는 트랜스포머라고 불리고 80000여개의 매개변수를 가지고 있다.
처음에 토큰은 임베딩을 통해 백터화된다. 백터화 된 값을 가지고 위의 신경망을 거쳐 계산된다.
inference
inference(추론)은 훈련된 데이터를 바탕으로 특정 토큰 다음에 올 토큰을 추론하여 새로운 문장을 만드는 것이다.

즉 실제로 데이터에 존재했던 값이 나올수도 있고 안나올수도 있다.
GPT는 조정된 하이퍼파라미터를 바탕으로 추론하여 사용자에게 응답을 한다.

GPT2의 경우, 16억개의 파라미터와 1000억개의 토큰을 가지고 있다.
현대와 비교해서 굉장히 작은 숫자이다. 하지만, 현재 GPT가 이때에 비해서 좋아진 이유는 파라미터, 토큰의 증가 뿐만 아니라, 양질의 데이터가 많아졌고, 컴퓨터의 성능이 더 좋아졌기 때문이다.
GPT2 구현해보기

그래서 강의자분은 이 GPT를 100만개의 토큰이 있는 데이터셋으로 구현해보셨다고 한다.
각 줄은 100만개의 다음 토큰을 예측할 수 있도록 파라미터를 조정하는 것이다.
이때 손실(loss)를 잘 보아야한다. 손실이 작을수록 더욱 좋은 파라미터를 가지는 것이다. 매 업데이트마다 손실은 감소하는 방향으로 진행된다.
위 과정에서는 32000번의 업데이트를 수행한다.

학습을 하면서 주기적으로 추론을 수행하는데, 초기 추론 결과는 일관성이 전혀 없지만, 몇번 업데이트를 한 모델의 추론 결과는 완벽하지는 않더라도 어느정도의 일관성은 유지하는 것을 볼 수 있다.
하지만 이렇게 만든 모델은 그냥 아주 비싼 자동완성정도밖에 안된다. 사용자의 질문에 그저 암기한대로 답변을 하기 때문에 때로는 엉뚱한 방향으로 답변을 할수도 있다.

예를 들어 위키피디아의 데이터를 학습한 모델에서 얼룩말에 대해 설명해달라고 하면 그저 위키피디아에 있는 글을 암송한다.
이건 마치 같은 글을 100번 읽어 외운 사람이 답변하는 것과 같다.
또한 모델이 학습한 이후에 나온 정보(2023년까지의 데이터를 학습했는데 2024년에 대한 질문)를 물어볼 경우
모델이 엉뚱한 방향으로 추론하여 사용자에게 거짓말을 할수도 있다.
Post-training(사후 훈련 단계)
우리는 모델이 단순히 다음 단어에 올 것을 추론하는 것이 아닌, 질문에 대한 답변을 얻기를 바란다(인간과의 상호작용) . 따라서 이를 위해 기본 pretraining된 모델을 가져와 포스트트레이닝에 넘겨준다.
이 포스트트레이닝 단계는 상대적으로 저렴하고 간단하게 할 수 있다.

이 단계에서는 이전에 pretraining을 통해 생성된 모델을 가져와 이전에 학습하던 데이터는 모두 없애고, 새로운 데이터로 이어서 학습시킨다.
이 때 데이터는 인간의 대화내용(실제 인간이 만들어낸 데이터)이다. 데이터 갯수는 이전에 pretraining때보다 훨씬 적다.
tokenization
대화 내용을 데이터셋으로 사용하려면 토큰화해야한다. 이건 일종의 인코딩으로, tcpip packet 인코딩 방식과 유사하다.

이런식으로 데이터를 정해진 방식으로 배치하고, 모든 사람이 이해할 수 있도록(규칙에 따라) 구성한다.

위와 같은 사용자의 대화는(2+2가 뭐냐? 뭐다) 1차 시퀀스로 29개의 토큰이 된다.
이때 user과 assistant를 구별하기 위해 im_start, im_sep, im_end와 같은 특별한 토큰이 추가된다.
이 토큰들은 지금까지 학습된 적이 없는 토큰이고, 사후 훈련 단계에서 새로 우리가 추가하는 것이다.
hallucination
모델의 환각현상이다. 존재하지 않는 지식을 마음대로 추론하여 사용자에게 거짓말을 하는 것
모델이 학습할 당시 알고있지 않았던 지식을 질문할 경우, 모델은 '모른다'라고 하지 않는다. 왜냐면 대화 방식을 배울 때 항상 자신감 있게 답하는 것을 학습했기 때문이다. 따라서 가지고 있는 정보 중에서 가장 가능성이 높은 추측을 제공한다.
이걸 어떻게 고칠까?
일단 모델이 해당 내용을 알고 있는지 모르고 있는지를 알아내야한다.
모델이 알고 있는 내용을 물어봤을 때는 그 일관된 답변을 내놓는다. 하지만, 모르는 내용을 물어봤을 때에는 그때그때 다른 답변을 내놓는다.
따라서 반복적으로 모델에게 질문을 하고 대답의 일관성을 파악하면 이게 진실인지 거짓인지 판단할 수 있다.
여기에다가 사후 훈련 단계에서 모른다라고 이야기 하는 것을 학습시킨다면 모르는 것은 모른다고 이야기 하는 기능을 만들 수 있다.
두번째 방식은 도구를 사용할 수 있도록 하는 것이다. 우리는 다른 사람이 모르는 것을 물어봤을 때 검색을 통해 정보를 얻고 이야기해줄 수 있다. LLM도 마찬가지로 진행된다.

이렇게 모르는 질문이 들어왔을 때, search_start와 같은 특수 토큰을 출력한다. 이것은 bing.com과 같은 곳으로 가는 쿼리가 된다. 모델은 쿼리를 실행하고, search end를 출력한다. 여기서 이 다음 시퀀스의 다음 토큰을 샘플링하는 대신, 실제 모델에서 생성을 일시 중단하고, bing.com과 같은 세션을 열고 검색어를 붙여 넣고, 검색에서 가져온 모든 텍스트를 받는다.
이 텍스트를 다시 특수 토큰과 같은 것으로 표현하고, 위 그림에서 [...] 부분에 붙여넣기한다. 텍스트가 여기 들어오면 컨텍스트 윈도우 안에 들어가게 되고, 컨텍스트 윈도우는 모델의 기억과 같은 일을 해서, 모델이 직접 접근할 수 있어 신경망에 직접 입력된다.
이렇게 하면 모델이 검색한 데이터를 직접 참조할 수 있다.
토큰 내의 지식은 작업기억이다. 즉 예전에 어디선가 본 희미한 기억이라고 할 수 있다.
하지만 컨텍스트 윈도우 안에 있는 지식은 직전에 본 무언가 라고 할 수 있다. 따라서 더욱 정확하다.
또한 인간이 gpt에게 너는 누구이니? 라고 물어봤을 때, gpt는 자신이 누구인지 사전에 학습한 내용을 바탕으로 질문한다.(인터넷 상의 글)
만약 이를 확실히 하고싶다면 개발자가 하드코딩을 통해 특정 질문에 대한 답을 파인튜닝 할 수 있다.
출처
https://youtu.be/91LWB9tvBzE?feature=shared
'AI > LLM' 카테고리의 다른 글
| [LLM] How Transformer LLMs Work : Understanding Language Models (0) | 2025.11.02 |
|---|---|
| [LLM]안드레이 카파시: ChatGPT와 같은 LLM 기술의 심층 분석(강화학습 등) (0) | 2025.09.25 |