목차
1. Day 3~4 - Parameter, Token, Tokenizer, Context Window, Transformer
1. Day 3~4 - Parameter, Token, Tokenizer, Context Window, Transformer
Day 3~4는 LLM 관련 개념적인 부분들을 좀 더 다루는 내용 위주였고,
해당 내용들에 대해 gpt에 질문들에 해가며 좀 더 깊이 공부했다.
실무를 하면서 대략적으로는 알고 있고 많이 들어왔던 개념들이지만, 이전까진 얄팍하게 알고 있었다면
이것들을 좀 더 깊게 파고들어서 공부해 보는 경험이었다.
1) Parameter(weight)
a. parameter의 역할
- 실제로 이 parameter들이 모델이 입력을 받았을 때 출력을 생성하는 것을 통제한다는 것
- 또한 모델 학습과정에서 지속적으로 이 parameter(weight)를 더 다음 토큰을 잘 예측하는 방향으로 조정해 나감
b. 모델의 parameter(weight) 수 변천사
- 모델의 parameter(weight) 수 변천사도 나름 흥미로웠다.
- 예전의 선형회귀 모델은 20~200 weight 정도였다면, lm은 weight 수 자체가 크게 다르다는 부분을 설명해 줬다.
(gpt 1 17m -> gpt 2 1.5b -> gpt 3 175b -> gpt 4 1.76t -> 10t 정도 (최신 프론티어 모델) )
=> 20년도에 AI 공부를 할 때 선형회귀부터 공부했었는데, 그때 parameter로 수십 개 정도의 단위를 가지고 예측모델을 만들었던 게 생각이 났다. 그런 방향에서부터 출발해서 LLM은 parameter 수가 비교도 안될 만큼 커진거구나 라는 걸
느낄 수 있던 순간이었다.
2) Token
=> 문자 단위 학습-> 단어 단위 학습 -> subword 기반 토큰화 방식의 변천사에 대해 들을 수 있었다.
이전까지 Token이라는 워딩에 대해 별생각 없이 쓰고 있었다면 그것의 변천사와
구체적으로 어떤 걸 의미하는 것인지를 좀 느낄 수 있는 순간이었다.
a. 토큰화 방식 변천사]
1. 문자단위
- 초기에는 신경망이 문자(character) 단위로 학습
(ex. "hello" → h → e → l → l → o 순서로 다음 문자를 예측)
- 시퀀스 안에서 다음에 나올 문자를 예측하는 방식
- 문자 단위이기 때문에 어휘(vocabulary) 크기는 작지만, 네트워크가 너무 많은 걸 추론해야 한다는 문제가 있음.
(문자 하나하나로 문맥과 의미를 추론하려면 상당히 어렵고 학습 부담이 큼)
- 단지 글자만 보고 단어와 문장의 의미까지 추론해야 하는 부담이 컸던 방식
2. 단어 단위
- 이후에는 신경망을 단어 단위로 학습시키는 방식이 도입됨.
(ex. "I like cats" → "I" → "like" → "cats" 순으로 다음 단어를 예측)
- 시퀀스에서 다음 단어를 예측하는 방식
- 단어는 이미 어느 정도 의미 단위이므로, 문자 단위보다 학습이 훨씬 쉽고 문맥 이해도 용이
- 하지만 단어 단위로 처리하면 어휘 수가 매우 커지고,
드물게 쓰이는 단어들은 학습에서 제외되거나 <UNK> 같은 특별 토큰으로 대체되는 문제가 발생
(의미 이해가 쉬워지지만, 어휘수가 폭발적으로 늘어나서 모델이 다루기 어렵고, 희귀 단어는 무시되거나
한 토큰으로 통합되기 때문에 세부 의미를 잃을 수 있음)
3. 서브워드(Subword) 기반
- 혁신적인 접근은 단어 전체가 아닌 단어를 쪼갠 덩어리(chunks of words)를 사용하는 것,
이를 토큰(tokens)이라고 부름
-문자 단위와 단어 단위의 중간 지점. 어휘(vocab) 크기를 적절하게 유지하면서, 신경망에 충분한 의미 정보를 제공
- 단어의 어근(stem)을 깔끔하게 처리할 수 있음
(ex. "running", "runner", "runs" → "run" + 접미사 형태로 나눔)
- 문자 단위의 한계(의미 파악 어려움)와 단어 단위의 한계(어휘 수 폭발)를 모두 완화
- 자주 나오는 단어는 한 토큰으로,
- 드물게 나오는 긴 단어는 여러 토큰으로 쪼갬.
- 희귀 단어도 쪼개서 표현 가능하므로 <UNK> 문제를 줄임.
구분 | 문자 단위(Character-level) | 단어 단위(Word-level) | 서브워드 단위(Subword-level) |
단위 | 한 글자(문자)씩 분리 | 단어별로 분리 | 단어를 의미 있는 덩어리(서브워드)로 분리 |
어휘(vocab) 크기 | 매우 작음 | 매우 큼 (희귀 단어 많음) | 중간 수준 |
의미 정보 | 거의 없음, 모델이 문맥에서 추론해야 함 | 단어 자체가 의미를 가짐 | 어근 + 접사 등 부분적 의미 유지 |
장점 | - 희귀 단어 문제 없음 - 모든 문자를 표현 가능 |
- 의미 파악이 쉬움 - 문맥 이해 용이 |
- 희귀 단어 처리 가능 - 적절한 어휘 크기 - 의미 정보 보존 |
단점 | - 긴 시퀀스 필요 - 학습 어려움 |
- 어휘 수 폭발 - 희귀 단어 <UNK> 발생 |
- 토큰 분할 규칙 설계 필요 |
예시 ("unhappiness") | u, n, h, a, ... | unhappiness | un, happi, ness |
3) Tokenizer
=> 그렇다면 실제 LLM 모델들에 대해서, Tokenizer가 각 모델에서 어떤 방식으로 작동하는지를
OpenAI 사이트( https://platform.openai.com/tokenizer )에 가서 직접 가서 돌려보며 이해해 볼 수도 있었다.
조금 더 token과 token화라는 개념이 감이 잡힐 수 있었달까?
a. 2번째 이미지 설명
- 위 이미지 중 2번째 이미지를 보면 각 단어(ex. "for") 앞에 space 가 있음
- "단어 간격" 도 의미가 있다고 보기 때문에, 이런 단어사이의 간격도 토큰에 포함을 시켜둔 걸 볼 수 있었다
- LLM이 학습하는 단위는 단어가 아니라 서브워드(Subword) 토큰
- BPE(Byte Pair Encoding) 같은 토크나이저는 단어뿐만 아니라 공백 + 단어 조합을 자주 등장하는 패턴으로 묶음
- "Hello"와" Hello"는 서로 다른 토큰으로 인식
b. 3번째 이미지 설명
- 위 이미지 중 맨 우측에 있는 3번째 이미지를 보면 masterers 같은 세상에 없지만 만들어낸 워딩에 대해서
"master"를 한 단위로 끊고 "ers"를 한 단위로 끊는 걸 볼 수 있었다.
- 이런 부분이 subword 단위로 토큰화를 한다는 걸 볼 수 있었던 예시였다.
=> 이런 없는 이상한 단어로 만들어도, ai가 그 의미를 이해하고 할 수 있는 방법에 대해 알 수 있는 기회였다.
가끔 ai에 프롬프트로 오타를 내거나 좀 없는 단어를 만들어내도 이해할 수 있는 이유인 듯
c. 토큰화에 대한 몇 가지 유용한 지식
- 숫자의 경우 3 digit number가 1 토큰으로 (gpt 토크나이저 기준) 취급
- 토큰 1개는 보통 4 character
- 1 token은 보통 0.75 words (영어에서)
- 1000 token 은 750 단어
- 셰익스피어 책 (900,000 단어)는 1.2m token
=> 모델 학습 시 특정 소스를 얼마큼 학습했다 할 때 참고될만한 요소인 듯
- 수학 공식, 코드는 토큰 더 큼 (숫자는 더 잘게 쪼개지기 때문)
=> 이런 긴 토큰 처리로 연산량 증가로 인해, 수학공식, 코드는 학습에 더 많은 노력이 소요되는 이유 중에 하나도 알 수 있었다
3) -1 BPE Tokenizer
=> tokenizer 공부 단계에서 나온 bpe tokenizer 방식에 대해서도 좀 더 궁금증이 생겨 관련 내용을 gpt에
물어봐가며 공부했다.
구체적으로 subword 토큰화를 어떻게 할 수 있고, 뒷단에서 어떻게 돌아가는 걸까? 가 궁금했는데
이에 대해 알아볼 수 있는 기회였다.
[간단 개념]
- 문자 단위 초기화 → 모든 단어를 문자 단위로 분리.
- 가장 빈도 높은 쌍 병합 → (l, o) → "lo"
- 다시 빈도 높은 쌍 병합 → (lo, w) → "low"
- 또 병합 → (e, r) → "er"
이 과정을 반복하면 자주 등장하는 부분은 하나의 토큰이 되고, 희귀 단어도 적절히 쪼개어 표현
=> 모델들에 입력 프롬프트로 "전달한 문장에 "a"가 몇 번 들어가 있을까? "를 물었을 때맞추기 어려웠던 것도 이런 토큰단위로 전달되고 모델이 처리하기 때문이라는 것도 조금 알 수 있던 계기였다. 모델은 글자단위가 아니라 서브워드 단위처리를 하기 때문에
문자 'a'가 몇 번 등장했는지를 세려면 토큰 내부를 다시 뜯어봐야 하는데, 모델은 기본적으로 그렇게 동작하지 않기 때문.
(LLM의 학습목표는 "다음 토큰 예측"이지 "문자 개수 세기" 같은 정확한 산술작업이 아니라서)
4) Context window
=> 실제 실무에서 여러 모델들을 비교하고, 최근 기술트렌드를 쫓아가다 보면
각 LLM 모델마다 Context Window size가 몇이니 하는 것들을 듣게 됐었다.
그때는 그냥 어렴풋이 아 뭔가 모델이 처리할 수 있는 정보량이 더 큰 거겠구나.. 정도의 느낌이었다면
이를 좀 더 자세히 파고들어 볼 수 있는 기회였다.
[Context window 개념]
- 정의: 모델이 다음 토큰을 생성할 때 고려할 수 있는 최대 토큰 수
- 포함되는 것:
- 시스템 프롬프트
- 이전 대화 기록( 유저 프롬프트, 모델 출력 쌍이 시간순서대로 토큰화되어 들어감)
- 현재 유저 입력
- (선택) 도구 호출 결과 (rag에서 검색한 문서, 플러그인 호출 응답 등)
- 역할: 모델이 참조, 내용, 문맥을 얼마나 잘 기억하는지 결정
- 토큰 제한
- 각 LLM에는 고정된 컨텍스트 윈도우 크기가 있음
- 예: GPT-4 (8k ~ 128k tokens), GPT-4o (128k tokens)
- 이 한도를 초과하는 오래된 내용은 모델 "기억"에서 사라짐 (토큰 슬라이딩 윈도우처럼 작동)
- 예: GPT-4o (128k 토큰)이라면, 시스템 프롬프트 + 전체 대화 + 현재 입력이 128k 토큰 이내여야 함.
- 각 LLM에는 고정된 컨텍스트 윈도우 크기가 있음
- 유의사항
- 시스템 프롬프트는 항상 포함되므로, 길이가 길면 실제 대화에 쓸 수 있는 토큰이 줄어듦.
- 이전 대화가 길어지면, 중요한 내용이 잘리지 않도록 요약 후 넣는 것이 좋음.
- 긴 컨텍스트가 필요 없는 작업(단일 질문/답변)은 이전 대화를 빼도 됨.
- 초과하면 앞(가장 오래된 부분)부터 잘라냄. 즉, 시스템 프롬프트 제외하고 과거 대화 기록이 오래된 순서대로 삭제
[대화: 오래된 부분] [최근 100토큰만 유지하는 창]
|──────────────────|[■■■■■■■■■■]
(새 입력이 들어오면 창이 앞으로 밀려남)
[자동요약/압축]
모델은 “압축”이나 “요약”을 스스로 하지 않음
- 다만, OpenAI ChatGPT 같은 상용 서비스나 일부 어플리케이션은
- 자동 요약 / 압축 로직을 추가해서 과거 대화를 짧게 만든 후 넣기도 함
-
- 사용자가 메시지를 보냄.
- 새 메시지를 과거 대화와 합침.
- 컨텍스트 윈도우 초과 시:
- 오래된 대화 chunk 선택
- LLM을 이용해 해당 chunk 요약 (또는 키 팩트 추출)
- 요약본을 시스템 프롬프트나 hidden memory 영역에 삽입
- 최종 컨텍스트를 모델에 전달하여 응답 생성.
=> 실제로 모델을 쓸 때 내 이전 대화내용 바탕 멀티턴 대화가 어떻게 가능했는지 context window와 sliding window 관련 기본 개념을 들으며 배울 수 있었다.
(물론 user id 기준으로 내용을 db에 저장하는 방식도 있긴 하지만)
5) Transformer
=> Transformer에 대해선 강의에서 간단하게만 언급했기 때문에, gpt에게 지속적으로 물어봐 가면서 공부해보기도 하고
별도 영상으로도 찾아보기도 했다. 대략적인 감은 익혔지만, 깊게 파고들어 가면 갈수록 계속 공부할게 생기는 느낌이라
적당히 멈춘 후 그때그때 좀 더 파고들어 보기로 결정했다.
전반적으로 3~4일 차 강의는 기존에 실무를 하고, 기사 등으로 AI 트렌드를 따라가면서 많이 접해서 대략적으로 알고 있던
개념들을 조금 더 직접 뜯어볼 수 있던 기회였다.
실제로 이 강의 듣기를 결심했던 이유 자체도, 이런 내가 대략적으로 알고 있던 개념들을 더 깊게 탐구해 보며(코드로든, 다른 방식으로든) AI 쪽에 대해 좀 더 알아보기 위해서였다.
정말 기초적인 개념들일 수도 있지만 강의를 듣는 목적 측면에서 꽤 만족했던 강의였다고 생각한다.
물론 강의 자체보다도, 그 강의내용을 바탕으로 gpt에 질문해 보며 더 깊게 파고들어 가는 과정이 좋았다.
쓰다 보니 글이 길어져 5일 차의 AI로 웹사이트 링크 분석해 마케팅 브로셔 만들기 내용과, 1주 차 과제를 했던 내용은 다음 글에서 적으려고 한다.
(다음 글도 기대해 주세요)
Profile:
'AI 공부' 카테고리의 다른 글
1. GPT API, Ollama 활용 Local LLM 으로 웹사이트 요약 구현 (6) | 2025.08.17 |
---|