CircleZone 1.0 33M

ภาษาไทย · English

โมเดลภาษาขนาด 33.7 ล้านพารามิเตอร์ ที่ออกแบบและเทรนขึ้นเองตั้งแต่ศูนย์บนการ์ดจอโน้ตบุ๊กใบเดียว

A 33.7M-parameter language model designed and trained from scratch on a single laptop GPU.


ภาษาไทย

นี่คืออะไร

CircleZone 1.0 33M คือโมเดลภาษาขนาดเล็ก (Small Language Model) สำหรับแชทภาษาอังกฤษแบบเป็นกันเอง เขียนโค้ดสถาปัตยกรรมเองและเทรนจากค่าสุ่มตั้งแต่ศูนย์บน NVIDIA RTX 4060 Laptop (8 GB) ไม่ได้นำโมเดลของผู้อื่นมาปรับแต่งต่อ

เป้าหมายของโปรเจกต์คือดูว่าโมเดลที่เล็กพอจะเทรนบนคอมพิวเตอร์ส่วนตัวได้ จะเรียนรู้ภาษาได้มากแค่ไหน ผลคือโมเดลเรียงประโยคภาษาอังกฤษได้ถูกไวยากรณ์ และตอบโต้ได้ถูกจังหวะแบบคนคุยกัน แต่ไม่มีความรู้ที่เชื่อถือได้เกี่ยวกับโลกจริง

ทำงานยังไง

โมเดลมีหน้าที่เดียวคือ ทายคำถัดไป ข้อความถูกหั่นเป็นชิ้นเล็กๆ เรียกว่า token แล้วโมเดลคำนวณว่า token ถัดไปน่าจะเป็นอะไร สุ่มเลือกหนึ่งตัว ต่อท้าย แล้วทำซ้ำไปเรื่อยๆ จนได้ประโยค

ความสามารถในการคุยไม่ได้ถูกเขียนเป็นกฎไว้ แต่เกิดจากการเห็นบทสนทนาหลายแสนบทระหว่างเทรน จนจับรูปแบบได้ว่าเมื่อมีคนทัก ควรตอบกลับแบบไหน

สถาปัตยกรรม

เป็น Transformer แบบ decoder-only ตระกูลเดียวกับ GPT, Llama และ Qwen โดยโครงสร้างตรงกับ Qwen3 ทุกส่วน จึงใช้กับ LM Studio, llama.cpp, Ollama และ transformers ได้ทันที

  • Attention แบบ GQA — ให้แต่ละคำมองย้อนไปหาคำก่อนหน้าที่เกี่ยวข้อง 8 หัวฝั่งถาม แชร์หน่วยความจำ 4 ชุด ประหยัดหน่วยความจำครึ่งหนึ่ง
  • RoPE — ระบุตำแหน่งของคำด้วยการหมุนเวกเตอร์ ทำให้รู้ระยะห่างระหว่างคำ
  • QK-Norm — ปรับขนาดก่อนคำนวณ attention ช่วยให้เทรนนิ่ง
  • SwiGLU — ชั้นประมวลผลที่เก็บความรู้ส่วนใหญ่ของโมเดล
  • RMSNorm — ปรับสเกลตัวเลขให้นิ่งก่อนเข้าแต่ละขั้น
  • Weight tying — ชั้นแปลงคำเป็นเวกเตอร์ใช้เมทริกซ์เดียวกับชั้นแปลงกลับเป็นคำ ประหยัด 4.2 ล้านพารามิเตอร์

การเทรน

เทรน 8,000 steps เห็นข้อความรวมราว 262 ล้าน tokens จากชุดข้อมูลราว 70 ล้าน tokens (อ่านวนราว 3.7 รอบ) ใช้ความแม่นยำ bf16, AdamW, learning rate แบบ warmup + cosine และหยุดเองเมื่อเริ่มท่องจำแทนที่จะเข้าใจ

ข้อมูลผสมจากนิทานสั้น (สอนไวยากรณ์), บทความ (สอนคำศัพท์), และบทสนทนาจริง (สอนการโต้ตอบ) ผลสุดท้ายได้ validation loss 2.6473 (perplexity ≈ 14 คือเวลาทายคำถัดไป โมเดลลังเลอยู่ระหว่างราว 14 ตัวเลือก)

ข้อจำกัด

  • ไม่มีความรู้ที่เชื่อถือได้ — 34 ล้านพารามิเตอร์ไม่พอเก็บข้อเท็จจริง โมเดลจะแต่งชื่อ สถานที่ และข้อมูลขึ้นเองอย่างมั่นใจ
  • อาจพูดหยาบหรือไม่เหมาะสม — ส่วนหนึ่งของข้อมูลเทรนเป็นแชทจริงจาก Discord
  • จำบริบทได้แค่ 512 tokens — คุยยาวเกินราว 5-10 เทิร์นจะเริ่มหลุด
  • ภาษาอังกฤษเท่านั้น — ไม่ได้เทรนภาษาไทย
  • เป็นโปรเจกต์เพื่อการเรียนรู้ ไม่เหมาะกับการใช้งานจริงใดๆ

English

What is this

CircleZone 1.0 33M is a small language model for casual English chat. The architecture was written by hand and the weights were trained from random initialization on a single NVIDIA RTX 4060 Laptop GPU (8 GB) — it is not a fine-tune of anyone else's model.

The goal was to see how much language a model small enough to train on a personal computer can learn. It writes grammatical English and replies with natural conversational timing, but has no reliable knowledge about the real world.

How it works

The model does one thing: predict the next token. Text is split into small pieces (tokens); the model scores every possible next token, samples one, appends it, and repeats until a reply is formed.

Nothing about chatting is hard-coded. The behaviour comes from seeing hundreds of thousands of conversations during training and picking up the patterns.

Architecture

A decoder-only Transformer in the same family as GPT, Llama and Qwen. Every component matches Qwen3, so it runs in LM Studio, llama.cpp, Ollama and transformers as-is.

  • Grouped-query attention — each token looks back at relevant earlier tokens; 8 query heads share 4 key/value heads, halving attention memory
  • RoPE — encodes token positions by rotating vectors, so the model knows how far apart words are
  • QK-Norm — normalizes queries and keys before attention for stable training
  • SwiGLU — the feed-forward layers that hold most of the model's knowledge
  • RMSNorm — keeps activations at a stable scale between steps
  • Tied embeddings — the input and output layers share one matrix, saving 4.2M parameters

Training

8,000 steps covering ~262M tokens of text from a ~70M tokens dataset (about 3.7 passes), with bf16 precision, AdamW, warmup + cosine learning-rate schedule, and early stopping when the model starts memorizing instead of generalizing.

The data mixes short stories (grammar), articles (vocabulary) and real conversations (turn-taking). Final validation loss is 2.6473 (perplexity ≈ 14: when predicting the next token, the model is choosing among roughly 14 candidates).

Limitations

  • No reliable knowledge — 34M parameters cannot store facts; it confidently invents names, places and details
  • May be rude or inappropriate — part of the training data is real Discord chat
  • 512-token context — conversations longer than ~5-10 turns degrade
  • English only — no Thai or other languages in training
  • A learning project — not suitable for any real-world use

สเปก / Specifications

Parameters / พารามิเตอร์ 33,697,536 (33.7M)
Layers × width / ชั้น × ความกว้าง 10 × 512
Attention heads (query / KV) 8 / 4, head dim 64
Feed-forward size 1408
Context / ความจำบริบท 512 tokens
Vocabulary / พจนานุกรม 8,192 (byte-level BPE)
Training steps 8,000
Validation loss 2.6473 (perplexity 14.1)
Hardware NVIDIA RTX 4060 Laptop, 8 GB

การแบ่งพารามิเตอร์ / Parameter breakdown

ส่วน / Component จำนวน / Count สัดส่วน / Share
SwiGLU feed-forward (10 layers) 21,626,880 64.2%
Attention (10 layers) 7,864,320 23.3%
Embedding (shared with output) 4,194,304 12.4%
RMSNorm 12,032 0.04%
รวม / Total 33,697,536 100%

แต่ละชั้นมี 2,950,272 พารามิเตอร์ · Each layer has 2,950,272 parameters.

ตัวอย่างคำตอบ / Example replies

คำตอบจริงจากโมเดล ไม่ได้คัดเลือก · Real, unedited samples.

คุณ / You โมเดล / Model
hello, how are you? i'm good and you??
what do you do for fun? Just work on a hobby, and I'll focus on everything
i had a bad day at work It's ok. I'm glad you enjoyed it.
do you like music? Nope, just a bit of my time to listen to.

ผลทดสอบมาตรฐาน / Benchmarks

วัดด้วย lm-evaluation-harness 0.4.13 แบบ 0-shot ไม่ใช้ chat template และไม่เปิดโหมดคิด ค่าเป็น % ความแม่น ± ค่าคลาดเคลื่อนมาตรฐาน ARC, HellaSwag, PIQA และ Global-PIQA ใช้ acc_norm ชุดอื่นใช้ acc

Measured with lm-evaluation-harness 0.4.13, 0-shot, no chat template, thinking off. Values are % accuracy ± standard error; acc_norm for ARC, HellaSwag, PIQA and Global-PIQA, acc elsewhere.

Benchmark ภาษา / Lang เดาสุ่ม / Random CircleZone 1.0 33M CircleZone 2.0 70M
XCOPA-th th 50% 53.4 ± 2.2 55.6 ± 2.2
Belebele-th th 25% 22.7 ± 1.4 24.2 ± 1.4
Global-PIQA-th th 25% 27.2 ± 4.4 21.4 ± 4.1
ARC-Easy en 25% 30.8 ± 0.9 32.5 ± 1.0
ARC-Challenge en 25% 21.8 ± 1.2 22.4 ± 1.2
HellaSwag en 25% 27.1 ± 0.4 27.0 ± 0.4
PIQA en 50% 56.0 ± 1.2 54.7 ± 1.2
Winogrande en 50% 50.1 ± 1.4 50.0 ± 1.4
LAMBADA en 0% 15.0 ± 0.5 16.7 ± 0.5
LAMBADA perplexity ↓ en – 586 726

สรุปตามจริง — ข้อสอบส่วนใหญ่ได้ใกล้การเดาสุ่ม ซึ่งเป็นเรื่องปกติของโมเดลขนาดต่ำกว่า 100M ที่สูงกว่าสุ่มชัดเจนมีแค่ ARC-Easy, PIQA และ LAMBADA (HellaSwag สูงกว่าแค่ราว 2 จุด) ภาษาไทยมีแค่ XCOPA-th ที่สูงกว่าสุ่มเล็กน้อย Belebele มีบทความยาวเกิน context 512 tokens จึงถูกตัดหัวบทความ 2.0 ถูก fine-tune โหมดคิดก่อนวัด ซึ่งทำให้ perplexity ของ LAMBADA สูงขึ้น (ทดลองกับ 1.0 พบว่า perplexity เพิ่มจาก 586 เป็นราว 1,500 หลังสอนคิด)

Honest summary — most tasks are at chance, as expected below 100M parameters. Only ARC-Easy, PIQA and LAMBADA are clearly above chance (HellaSwag by only ~2 points); in Thai only XCOPA-th is slightly above. Belebele passages exceed the 512-token context and get truncated. 2.0 was fine-tuned for thinking before evaluation, which raises LAMBADA perplexity (on 1.0 the same fine-tune moved it from 586 to ~1,500).

ผลดิบ / Raw results: benchmarks/

วิธีใช้ / Usage

LM Studio — ค้นหา IAMPOOM/CircleZone-1.0-33M แล้วดาวน์โหลด CircleZone-1.0-33M-F16.gguf · ตั้ง context ไม่เกิน 512 Search for IAMPOOM/CircleZone-1.0-33M and download CircleZone-1.0-33M-F16.gguf. Keep context at 512 or below.

transformers

from transformers import AutoModelForCausalLM, AutoTokenizer

tok = AutoTokenizer.from_pretrained("IAMPOOM/CircleZone-1.0-33M")
model = AutoModelForCausalLM.from_pretrained("IAMPOOM/CircleZone-1.0-33M")

msgs = [{"role": "user", "content": "hello, how are you?"}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt")
out = model.generate(ids, max_new_tokens=60)
print(tok.decode(out[0, ids.shape[1]:], skip_special_tokens=True))

ข้อมูลที่ใช้เทรน / Training data

Dataset License
roneneldan/TinyStories cdla-sharing-1.0
mookiezi/Discord-Dialogues apache-2.0
HuggingFaceTB/smollm-corpus odc-by
HuggingFaceTB/smol-smoltalk apache-2.0
Estwld/empathetic_dialogues_llm apache-2.0 (original Facebook release: cc-by-nc-4.0)
HuggingFaceTB/smoltalk apache-2.0
tatsu-lab/alpaca cc-by-nc-4.0
databricks/databricks-dolly-15k cc-by-sa-3.0

ใบอนุญาต / License

ข้อมูลเทรนบางส่วนอนุญาตเฉพาะการใช้แบบไม่แสวงกำไร โมเดลนี้จึงเผยแพร่ภายใต้ cc-by-nc-4.0 ห้ามใช้เชิงพาณิชย์

Some training data is licensed for non-commercial use only, so this model is released under cc-by-nc-4.0.

Downloads last month
54
Safetensors
Model size
33.7M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Datasets used to train IAMPOOM/CircleZone-1.0-33M

Evaluation results