자, 이제 여러분들만의 인공지능을 만들어 봅시다.
나 외부 없이, 이 에서 작은 를 직접 타이핑해 학습시키고 ·으로 대화해요. 먼저 전체 흐름부터 살펴보세요.
XSLM 개요
은 Extra Small Language Model이라는 뜻으로, SONUB에서 개발을 배우기 위해 직접 만든 용어입니다. thruthesky.github.io/xslm
웹 브라우저 안에서만 인공지능을 개발합니다
본 강좌에서 XSLM을 개발할 때에는 반드시 웹 만 100% 사용합니다. 의 이나 다른 터미널 같은 다른 프로그램을 사용하면 안 되고, 모든 것을 웹 브라우저 안에서 합니다.
XSLM 개발은 처음부터 끝까지 모두 sonub.com 인공지능 페이지 안에 있는 이 터미널로만 합니다. 여기서 만드는 은 아주 작아서 휴대폰에서도 웹 브라우저만으로 개발할 수 있습니다.
더 알아보기
-
XSLM은 여러 가지 방식으로 만들 수 있고, 각자의 컴퓨터에서도 개발할 수 있습니다.
-
하지만 SONUB은 XSLM을 처음 고안할 때 학습용으로 설계했습니다. 웹 브라우저 안의 만으로 모든 것을 개발할 수 있습니다.
-
누구나 쉽게 인공지능을 직접 만들어 볼 수 있도록, 공부하는 모든 과정을 웹 브라우저 안에서만 합니다.
-
터미널은 웹 브라우저 안에서 도는 리눅스(v86)라서 컴퓨터·태블릿·휴대폰 어디서나 같은 터미널을 씁니다. 휴대폰 화면 키보드에 없는 Tab· 같은 키는 터미널 위의 키 막대로 누릅니다.
웹 브라우저 안에서 여러분이 직접 만든 XSLM 인공지능 을 를 통해 전 세계 사람들이 모두 쓸 수 있게 공개할 것입니다. 내 모델 공개하기
크기만 작을 뿐, SLM·LLM 을 만드는 단계와 같습니다
XSLM 은 언어 모델의 크기가 아주 작을 뿐, 인공지능을 개발하는 이나 의 개발 단계와 매우 비슷합니다. 그래서 XSLM 개발을 배우면 인공지능을 아주 잘 이해할 수 있습니다.
- 같은 것
- 글을 모아 으로 나누고, 모델이 다음 토큰을 맞히도록 한 뒤, 그 로 글을 만들어 으로 서비스하는 순서와 원리가 같습니다.
- 다른 것
- 의 양, 수, 학습에 드는 컴퓨터와 시간이 훨씬 큽니다. 큰 모델은 대화를 잘하도록 다듬는 추가 학습( 등)도 더 거칩니다.
언어 모델을 처음부터 직접 완성하고, 준비와 학습부터 텍스트 생성, 나만의 챗봇 연결까지 모든 단계를 이해합니다. 아주 작은 학습용 모델이라 첫 답은 뒤죽박죽이지만, 모든 부품이 어떻게 움직이는지 알게 됩니다.
글을 로 바꾸고, 가 다음 번호를 예측하도록 학습합니다. 는 학습한 숫자를 읽어 실행하고, 은 Runner에 질문을 보냅니다. 각 부분을 직접 만듭니다. 이 제공하는 것은 계산과 파일 기능이지, 이미 학습된 두뇌가 아닙니다.
XSLM 이란 — LLM·SLM 보다 한 단계 더 작은 언어 모델
XSLM(Extra Small Language Model, 초소형 언어 모델)은 대규모 언어 모델(LLM)과 소형 언어 모델(SLM)보다 한 단계 더 작은, 파라미터가 수백만~수억 개 수준인 아주 작은 인공지능 모델을 뜻합니다. sonub.com 이 자체적으로 고안한 용어입니다.
- LLM: 파라미터 수백억~수천억 개. 의 에서 돌아갑니다.
- SLM: 파라미터 수십억 개 안팎. 성능 좋은 컴퓨터나 GPU 한 장에서 돌아갑니다.
- XSLM: 파라미터 수백만~수억 개. 스마트폰 같은 작은 기기에서도 돌아갑니다.
XSLM 의 핵심 특징은 세 가지입니다.
- 온디바이스() 최적화: 모델이 아주 가벼워서 스마트폰·웨어러블 기기· 장비처럼 연산 능력이 크게 제한된 기기에서도 연결 없이 혼자 돌아갑니다.
- 아주 낮은 비용: 보통의 SLM 은 모델을 올리는 데 수 (GB)의 이 필요하지만, XSLM 은 수백 메가바이트(MB) 이하의 로 돌아갑니다. 그래서 ·운영 비용이 거의 들지 않습니다.
- 한 가지 일의 전문가(Specialized Worker): 백과사전처럼 많이 아는 LLM 과 달리, XSLM 은 문장 요약·텍스트 분류·함수 ()·AI 의 제어(Router)처럼 한 가지 일만 아주 잘하도록 만듭니다.
이 과정에서 직접 만드는 XSLM 은 그보다도 훨씬 작은, 파라미터 1,248개짜리 학습용입니다. 원리를 눈으로 따라가려고 가장 작게 줄였을 뿐 부품은 같습니다. 같은 구조를 키우고 한 가지 일의 자료로 학습하면 위에서 말한 실용 XSLM 이 됩니다.
언어 모델이란 — 다음 토큰의 확률을 내는 함수
언어 모델은 앞에 나온 글을 보고 다음에 올 조각(토큰)마다 을 매기는 함수입니다. "the sun is" 다음이라면 예를 들어 warm 에 0.6, hot 에 0.2, blue 에 0.01 을 주고, 남은 0.19 는 의 다른 토큰들에 나눠 줍니다. 어휘 전체의 확률을 모두 더하면 1입니다.
글을 쓰는 것은 이 함수를 되풀이하는 일입니다.
- 지금까지의 글을 토큰 번호로 바꿉니다.
- 모델이 다음 토큰의 확률을 계산합니다.
- 확률에 따라 토큰 하나를 고릅니다.
- 고른 토큰을 글 뒤에 붙이고 처음으로 돌아갑니다.
· 같은 거대 모델도 바탕은 같습니다. 다른 것은 크기(가중치 수천억 개), 학습 자료의 양, 그리고 대화를 잘하도록 더한 추가 학습입니다. XSLM 은 이 바탕을 가장 작은 크기로 처음부터 만들어 부품마다 하는 일을 눈으로 확인하는 과정입니다.
처음부터 만든다는 것 — 무작위 숫자에서 시작
처음부터(from scratch) 만든다는 것은 남이 학습한 를 받지 않는다는 뜻입니다. XSLM 의 가중치 1,248개는 모두 random.gauss(0, 0.1) 로 뽑은 작은 무작위 숫자에서 시작합니다. 이때 모델은 아무것도 모르므로 어휘 40개에 거의 같은 확률을 줍니다.
학습이 하는 일은 하나뿐입니다. 자료에 실제로 나온 다음 토큰의 확률이 올라가도록 숫자를 조금씩 고칩니다. 이 다음 토큰 맞히기()만으로 문법·형식·자주 나오는 내용이 숫자 안에 쌓입니다. 정답 표시를 따로 붙일 필요가 없습니다. 글 자체가 문제이자 정답입니다.
그래서 모델이 무엇을 잘하게 되는지는 보다 자료의 형식이 정합니다. XSLM 자료는 모든 줄이 Q: 질문 다음 A: 답 형식이므로, 모델은 A: 뒤에 답 같은 글을 잇는 습관을 배웁니다. 대화하는 능력을 따로 넣는 는 없습니다.
직접 파이썬으로 만듭니다
여러분이 직접 파이썬 프로그래밍을 해서 인공지능을 개발하게 됩니다.
그래서 파이썬 코딩하는 법도 조금 배웁니다.
파이썬 프로그램은 하나로 실행합니다. 뒤에 파일 이름을 쓰면 그 파일의 코드가 실행됩니다.
python3 [파일이름.py]
직접 실습하기
터미널에서 첫 파이썬 프로그램 만들기
아래 명령을 터미널에 차례로 직접 입력해 보세요. 명령마다 Enter 를 누릅니다.
-
버전 확인하기
터미널에 이 명령을 입력합니다. Python 3 으로 시작하는 번호가 나오면 준비가 끝났습니다.
python3 --version -
파이썬 열기
python3 만 입력합니다. >>> 표시가 나오면 파이썬이 명령을 기다리는 것입니다.
python3 -
첫 명령 입력하기
>>> 뒤에 이 명령을 입력하고 Enter 를 누릅니다. 화면에 Hello 가 나옵니다.
print("Hello")Hello
-
파이썬 나가기
이 명령을 입력하면 파이썬을 닫고 터미널로 돌아옵니다.
exit() -
파일 만들기
는 터미널에서 쓰는 로, 파이썬 코드에 색을 입혀 보여 줍니다. 이 명령으로 hello.py 를 만들어 엽니다.
micro hello.py -
코드 입력하기
이 네 줄을 그대로 입력합니다. 마지막 줄 맨 앞의 빈칸 네 개는 for 가 되풀이할 줄이라는 표시이므로 꼭 넣습니다. Tab 을 눌러도 빈칸 네 개가 됩니다.
name = "XSLM" print("Hello,", name) for step in range(1, 4): print("Step", step) -
저장하고 닫기
+S 를 누르면 저장됩니다. Ctrl+Q 를 누르면 micro 가 닫힙니다.
Ctrl+S Ctrl+Q
-
프로그램 실행하기
터미널로 돌아왔으면 이 명령으로 실행합니다. 아래처럼 나오면 성공입니다.
python3 hello.pyHello, XSLM Step 1 Step 2 Step 3
-
직접 바꿔 보기
micro hello.py 로 다시 열어 XSLM 을 내 이름으로 바꾸고, 저장한 뒤 다시 실행합니다. 화면에 내 이름이 나옵니다.
전체 흐름 — 프로그램이 파일을 넘겨준다
XSLM 은 프로그램마다 앞 프로그램이 만든 파일을 읽어 다음 파일을 만드는 사슬입니다.
- prepare.py — data/raw.txt 를 읽어 data/train.txt 와 data/val.txt 를 만듭니다.
- tokenizer.py — train.txt 로 을 배워 data/tokenizer.json 을 만듭니다.
- engine.py·model.py — 계산 도구와 GPT 구조입니다. 혼자 파일을 만들지 않고 다른 프로그램이 불러 씁니다.
- train.py — 자료와 로 GPT 를 학습해 checkpoints/model.json 을 만듭니다.
- generate.py — model.json 을 읽어 글을 이어 씁니다.
- runner.py — generate 를 로 엽니다.
- xchat.py — Runner 에 질문을 보내고 답을 보여 줍니다.
앞 파일이 바뀌면 그 뒤를 다시 만들어야 합니다. 예를 들어 raw.txt 를 고치면 prepare → tokenizer → train 을 차례로 다시 실행합니다.
-
raw.txt 원본 질문·답
-
prepare.py 정리하고 학습·검증으로 나누기
-
tokenizer.py 글을 토큰 번호로 바꾸는 규칙
-
train.py 다음 토큰 맞히기 학습
-
model.json 학습한 저장
-
runner.py HTTP 로 생성 제공
-
xchat.py 터미널 대화 화면
얼마나 작은가 — 크기 비교
모델의 크기는 학습하는 숫자(파라미터)의 개수로 셉니다.
- XSLM: 1,248개 — 어휘 40, 폭 8, 1개, 1개.
- 작은 연습용 GPT(예): 약 2,800만 개 — 어휘 24,000, 폭 384, 블록 6개, 헤드 6개.
- Small(2019): 약 1억 2천만 개.
- GPT-3(2020): 약 1,750억 개.
XSLM 이 이렇게 작은 데는 까닭이 있습니다. 모든 숫자를 Python 하나(Value)로 다루고, 브라우저 안의 가상 에서 계산하기 때문입니다. 크기를 키우면 학습 한 번에 몇 분이 걸립니다. 대신 숫자 하나하나의 계산을 직접 읽을 수 있습니다. 구조는 GPT 와 같고, 크기와 계산 방식만 다릅니다.
같은 방법으로 키우면 SLM 이 됩니다
XSLM 을 배우면 끝이 아닙니다. 같은 방법으로 크기만 키워 가면 됩니다.
-
sonub.com 에서 XSLM 배우기 웹 브라우저 안에서
-
내 컴퓨터에서 더 큰 XSLM 만들기 똑같은 방법으로, 크기를 키워서
-
더 크게 만들면 SLM 똑같은 방법으로, 더 크게
만드는 단계는 같습니다. 크기가 커질수록 학습 자료와 컴퓨터, 시간이 더 필요하고, 계산은 같은 도구에 맡깁니다.
실제로 쓰이는 XSLM — 공개 모델과 줄이는 기법
이 크기의 모델은 이미 공개되어 쓰이고 있습니다.
- SmolLM2-135M(Hugging Face, 2024): 파라미터 약 1억 3,500만 개. 글을 이어 쓰는 GPT 형 모델로, 스마트폰에서도 돌아갑니다.
- MobileBERT(Google, 2020): 파라미터 약 2,500만 개. 글을 쓰기보다 문장을 이해해 분류하거나 글 속에서 질문의 답을 찾는 모델입니다.
큰 모델을 XSLM 크기로 줄이는 대표 기법은 두 가지입니다.
- (Knowledge Distillation): 큰 모델(선생)이 낸 확률을 작은 모델(학생)이 따라 배웁니다. 정답 하나만 보고 배울 때보다 더 많은 것을 배웁니다.
- (Quantization): 파라미터 하나를 소수 대신 8bit·4bit 숫자로 저장합니다. 메모리가 4~8배 줄고, 정확도는 조금 떨어집니다.
두 기법 모두 이 과정에서 만드는 학습 루프(6단계)와 가중치 저장(체크포인트)을 바탕으로 합니다. 과정을 마치면 이런 기법의 문서와 코드를 읽을 준비가 됩니다.
핵심 개념 아홉 가지 — 한 줄씩
과정에서 만나는 개념을 미리 한 줄씩 봅니다. 단계마다 자세히 다룹니다.
- 데이터 형식: 모델이 무엇을 할지 정합니다(3단계).
- 토크나이저: 글을 토큰 번호로 바꾸고 되돌립니다(4단계).
- : 토큰 번호를 숫자 벡터로 바꾸는 표입니다(5단계).
- : 몇 번째 자리인지 알려 주는 벡터입니다(5단계).
- : 앞자리 중 어디를 얼마나 볼지 정해 정보를 섞습니다(5단계).
- (): 섞은 정보를 자리마다 다시 가공합니다(5단계).
- 잔차 연결·: 원래 정보를 지키고 숫자 크기를 안정시킵니다(5단계).
- 다음 토큰 예측·: 정답 토큰의 확률로 잘한 정도를 잽니다(6단계).
- : 확률에서 실제 토큰을 고릅니다(7단계).
흔한 오해 네 가지
처음 만들 때 자주 하는 오해를 바로잡고 시작합니다.
- 모델 안에 문장이 저장되어 있다? 아닙니다. 지식은 모든 가중치의 숫자 패턴에 흩어져 있습니다. 숫자 하나를 열어 보아도 문장은 없습니다.
- 다음 단어를 에서 찾는다? 아닙니다. 모델은 매번 계산으로 어휘 전체의 점수를 냅니다. 검색은 하지 않습니다.
- 손실이 낮으면 사실을 말한다? 아닙니다. 학습 자료와 비슷한 글을 낼 확률이 높다는 뜻일 뿐입니다.
- 작은 모델은 원리가 다르다? 아닙니다. XSLM 과 거대 모델은 같은 부품을 씁니다. 크기·자료·추가 학습이 다를 뿐입니다.
하나 더 있습니다. 학습한 내용은 학습을 마친 순간에 굳습니다. 새 소식을 알려면 다시 학습하거나, 실제 서비스처럼 질문할 때 최신 문서를 찾아 함께 넣어야 합니다(, 9단계).
직접 타이핑하며 실습하기
터미널을 열고 아래 명령을 직접 입력하세요. 다섯 부분이 하는 일을 말로 설명해 보세요. 첫 실험은 타이핑을 줄이려고 짧은 영어 자료를 씁니다. 나중에 원하는 언어의 자료로 바꿀 수 있습니다.
python3 -c "print('XSLM: text -> tokens -> GPT -> Runner -> XChat')"
터미널에서 실습하기
여기까지 이해했나요?
토크나이저·모델·Runner·대화 화면의 역할을 구별할 수 있나요? 내가 학습한 가중치를 저장하고 다시 읽어 XChat에서 사용하면 완성입니다. 답이 엉뚱해도 전체 개발 과정을 배운 것입니다.
막혔을 때 확인하기
Python이 처음이라면 파이썬 과정에서 ····를 먼저 연습하세요. 아래 준비 운동에서 단어를 세어 다음 말을 고르는 원리를 먼저 볼 수도 있습니다.
자주 묻는 질문
이렇게 작은 모델을 만들어서 어디에 쓰나요?
이 과정에서 만드는 1,248개짜리 모델은 실용성이 거의 없습니다. 목적은 엔진을 직접 조립해 보는 것입니다. 토크나이저·임베딩·어텐션·손실··샘플링·서버를 한 번씩 손으로 만들어 보면, 큰 모델의 문서·논문·코드에 나오는 이름이 무엇을 가리키는지 알게 됩니다. PyTorch 로 넘어가도 개념은 그대로입니다. 같은 부품을 수백만~수억 개로 키워 한 가지 일의 자료로 학습하면 요약·분류·라우터처럼 실제로 쓰이는 XSLM 이 됩니다.
답이 엉뚱한데 실패한 건가요?
아닙니다. 기본 학습 20회는 모든 부품이 실제로 연결되어 도는지 확인하는 양입니다. 이 정도로는 확률이 거의 고르게 퍼져 있어 글이 뒤죽박죽입니다. 학습 손실이 처음 값(약 3.7)보다 내려가고, 체크포인트를 읽은 Runner 가 XChat 에 실제 생성 결과를 돌려주면 과정은 완성입니다. 품질을 올리는 실험은 6·7단계에서 합니다.
미리 학습된 모델을 받아 쓰면 안 되나요?
이 과정은 받지 않습니다. 받은 가중치는 이미 다 계산된 결과라서 학습이 어떻게 숫자를 바꾸는지 볼 수 없기 때문입니다. 실제 개발에서는 공개된 모델을 받아 내 자료로 조금 더 학습하는 미세 조정(fine-tuning)을 많이 씁니다. XSLM 에서 배운 학습 루프가 미세 조정에도 그대로 쓰입니다.
선택 준비 운동: 바이그램으로 단어 세어 보기
직접 개발로 이어지는 계획
처음에는 장난감처럼 작게 만들고, 원리를 이해한 뒤 점점 키웁니다.
문장 모으기
내가 배우고 싶은 주제의 문장을 모읍니다. 처음에는 10문장만 있어도 됩니다.
다음 단어 횟수 세기
어떤 단어 뒤에 어떤 단어가 몇 번 나왔는지 표로 만듭니다.
확률 점수 계산하기
고른 낱말 바로 뒤에 어떤 낱말이 몇 번 왔는지 셉니다 — 문장이 끝나는 것도 한 번으로 셉니다. 그다음 각 횟수를 전체 횟수로 나눕니다. “하늘은” 뒤에 “파랗다”가 세 번, “흐리다”가 한 번 왔다면 파랗다는 3 ÷ 4 = 75%, 흐리다는 25% 입니다.
두 선택 방식 비교하기
매번 가장 높은 후보를 고르거나(), 비율대로 제비를 뽑습니다() — 제비뽑기라도 같은 낱말이 다시 나올 수 있습니다. 뽑히면 멈춥니다. 이 단계 어디에도 그 문장이 사실인지 확인하는 부분은 없습니다.
내 기준으로 개선하기
더 좋은 문장, 더 많은 , 다른 선택 규칙을 넣어 나만의 으로 키웁니다.
처음이면 이렇게 따라 해 보세요
이 실습은 바로 앞 단어 하나만 보는 아주 을 만들어요. 어떤 단어 뒤에 어떤 단어가 왔는지 세고, 그 횟수를 로 바꾼 뒤, 확률만큼 기운 주사위를 굴려 다음 단어를 골라요.
- 을 그대로 두고 "다시 생성"을 누르세요. 훈련 문장에 있던 단어로만 이루어진 새 문장이 나와요.
- 확률 공식 칸을 보세요. 앞 단어 뒤에 그 단어가 온 횟수를 앞 단어가 나온 전체 횟수로 나눈 값이 확률이에요.
- 이어짐 횟수 표에서 줄은 앞 단어, 칸은 다음 단어예요. 칸이 진할수록 그 짝이 자주 나왔어요.
- 방식을 으로 바꾸고 다시 누르면 늘 같은 문장이 나와요. 으로 돌아가 를 올리면 문장이 점점 엉뚱해져요.
- 훈련 문장에 내 문장을 한 줄 더해 보세요. 은 이 횟수가 전부라서 표와 확률이 바로 바뀌어요.
더 깊이 배우고 싶다면 파이썬으로 직접 만들기 (AI 과정) 다음 단어는 어떻게 고를까
작은 확률 계산기
시작 문장의 마지막 단어 뒤에 이어진 후보가 아직 없습니다.
| 앞 단어다음 단어 | |
|---|---|
단어가 많아 처음 나온 8개만 보여요
핵심 개념
생각은 간단합니다. 문장을 많이 읽고, 어떤 낱말 바로 뒤에 어떤 낱말이 오는지 — 문장이 끝나는 자리까지 — 세어 봅니다. 그 횟수가 작은 표가 되고, 이 표만으로도 이 다음 낱말을 짐작할 수 있습니다. 이 화면에서 만드는 모델이 바로 그것입니다.
진짜 도 같은 생각으로 움직입니다. 다만 훨씬 큽니다. 작은 횟수 표 대신 예시에서 수십억에서 수천억 개의 숫자()를 익히고, 바로 앞 낱말 하나만이 아니라 질문 전체와 지금까지의 대화를 봅니다. 저장해 둔 문장을 찾아 꺼내는 것도 아닙니다. 그래도 마지막 단계는 여러분이 만드는 것과 같습니다 — 후보마다 점수를 매기고, 하나를 고릅니다.
이 실습과 실제 언어모델 비교
| 이 실습 () | ||
|---|---|---|
| 보는 범위 | 바로 앞 단어 하나 | 주어진 긴 |
| 배우는 것 | 이어진 횟수 표 | 숫자 |
| · | 아니요 | 예 |
| 스스로 사실 확인 | 아니요 | 아니요 |