GermannM commited on
Commit
e6dd5a3
·
verified ·
1 Parent(s): c63488c

Z-Born 4.5M: born-in-Z model + card + demo

Browse files
Files changed (7) hide show
  1. LICENSE +7 -0
  2. README.md +100 -0
  3. demo.py +98 -0
  4. meta.json +37 -0
  5. tokenizer.json +0 -0
  6. vocab.json +1 -0
  7. zborn.pt +3 -0
LICENSE ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Герман Янтарас
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction.
README.md ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ language:
4
+ - en
5
+ tags:
6
+ - z-system
7
+ - born-in-z
8
+ - low-rank
9
+ - svd
10
+ - cpu
11
+ - tiny-model
12
+ library_name: pytorch
13
+ pipeline_tag: text-generation
14
+ ---
15
+
16
+ # Z-Born 4.5M — рождённая в Z
17
+
18
+ **Z-Born** — первая модель **Z-системы**, которая **родилась в Z-форме**: с рождения
19
+ обучалась в факторизованном виде `W = U·S·Vᵀ`, а не была сжата постфактум.
20
+ Это 4.5 миллиона параметров, которые работают на CPU и пишут связный английский.
21
+
22
+ > **Born in Z, not compressed post-hoc.** Collapse (truncation to rank k) is a
23
+ > physical process with its own laws; a network trained from birth in factored
24
+ > form is collapse-immune by construction.
25
+
26
+ ## Архитектура
27
+
28
+ 1-layer tanh RNN в факторизованной форме:
29
+
30
+ ```
31
+ Wx = Ux · diag(Sx) · Vxᵀ (ранг k=32)
32
+ Wh = Uh · diag(Sh) · Vhᵀ (ранг k=32)
33
+ h_t = tanh(x_t·Wx + h·Wh + b)
34
+ head: Linear(2048 → 2048 BPE-токенов)
35
+ ```
36
+
37
+ - `v = 2048` BPE-токенов, `hid = 2048`, ранг `k = 32`
38
+ - Стоимость шага `O(hid·k)`, а не `O(hid²)` — широкий скрытый слой бесплатен
39
+ - **4 462 656 параметров** (fp32: 17 MB)
40
+
41
+ ## Обучение
42
+
43
+ - Корпус: WikiText-2 + WikiText-103 + TinyStories (~876M токенов), BPE-2048
44
+ - 300 000 шагов, CPU, 35.7 часа
45
+ - Рождена в Z-форме: параметры U, S, V с рождения (QR-инициализация, спектр 1.0→0.3)
46
+
47
+ ## Качество (честно)
48
+
49
+ | метрика | значение |
50
+ |---|---|
51
+ | val NLL (смешанный корпус) | 3.974 (ppl 53.2) |
52
+ | TinyStories NLL | 2.148 (ppl 8.57) |
53
+ | параметров | 4.46M |
54
+
55
+ Пример генерации (CPU, ~0.1 с/токен):
56
+
57
+ > Once upon a time, a little bird named Benny. Molly was not so happy. He loved
58
+ > to play with her toys and watch the park. The lady was sorry to always
59
+ > remembered a special day...
60
+
61
+ ## Быстрый старт
62
+
63
+ ```bash
64
+ pip install torch tokenizers
65
+ python demo.py "Once upon a time"
66
+ python demo.py "The meaning of life is"
67
+ ```
68
+
69
+ ## Файлы
70
+
71
+ | файл | что это |
72
+ |---|---|
73
+ | `zborn.pt` | веса модели (torch, `{'model': state_dict, 'meta': {...}}`) |
74
+ | `tokenizer.json` | BPE-токенизатор (tokenizers) |
75
+ | `demo.py` | живой чат на CPU (самодостаточный) |
76
+ | `meta.json` | метаданные обучения |
77
+
78
+ ## Ограничения (честно)
79
+
80
+ - Это **4.5M параметров** — не ассистент общего назначения. Это модель-исследование:
81
+ доказательство, что маленькая модель, рождённая в факторизованной форме, даёт
82
+ связную генерацию на CPU.
83
+ - Обучалась на 876M токенов — знания узкие, факты из учебников отсутствуют.
84
+ - Не настроена на диалог (instruction tuning не проводился).
85
+ - Код чат-демо — минимальный (top-k + repetition penalty), без стриминга.
86
+
87
+ ## Z-система
88
+
89
+ Z-Born — продукт **Z-системы** (z-system): физики информационных объектов.
90
+ Нейросетевые матрицы раскладываются через SVD на направления (U, V), масштабы (S)
91
+ и обрезание спектра до ранга k — «коллапс». Модель, рождённая в этой форме,
92
+ **устойчива к коллапсу по построению**. В репозитории Z-системы — законы
93
+ повреждения, спаривания, термодинамика спектра, телепортация (Z-поток).
94
+
95
+ Связанный проект — **Kenga** (github.com/GermannM3/kenga-lang): язык программирования
96
+ для живого ИИ (Prophet-память, тензоры, свой decoder, C99-бутстрап без Rust).
97
+ Z даёт физику внутренней структуры модели, Kenga — среду, в которой модель живёт.
98
+ Слияние проектов в работе.
99
+
100
+ © Герман Янтарас. MIT.
demo.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Z-Born 4.5M — живой чат на CPU.
4
+
5
+ pip install torch tokenizers
6
+ python demo.py "Once upon a time"
7
+ """
8
+ import os
9
+ import sys
10
+
11
+ os.environ['CUDA_VISIBLE_DEVICES'] = ''
12
+
13
+ if hasattr(sys.stdout, 'reconfigure'):
14
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
15
+
16
+ import torch
17
+ import torch.nn as nn
18
+
19
+ HERE = os.path.dirname(os.path.abspath(__file__))
20
+
21
+
22
+ class BornFactorRNN(nn.Module):
23
+ """1L tanh-RNN, рождённый в Z-форме: Wx/Wh ранга k (U,S,V)."""
24
+
25
+ def __init__(self, v, hid, k):
26
+ super().__init__()
27
+ self.v, self.hid, self.k = v, hid, k
28
+ self.Ux = nn.Parameter(torch.zeros(hid, k))
29
+ self.Vx = nn.Parameter(torch.zeros(v, k))
30
+ self.Sx = nn.Parameter(torch.zeros(k))
31
+ self.Uh = nn.Parameter(torch.zeros(hid, k))
32
+ self.Vh = nn.Parameter(torch.zeros(hid, k))
33
+ self.Sh = nn.Parameter(torch.zeros(k))
34
+ self.b_ih = nn.Parameter(torch.zeros(hid))
35
+ self.b_hh = nn.Parameter(torch.zeros(hid))
36
+ self.head = nn.Linear(hid, v)
37
+
38
+ def hidden(self, xt, h):
39
+ xin = (self.Vx[xt] * self.Sx) @ self.Ux.T
40
+ hh = ((h @ self.Vh) * self.Sh) @ self.Uh.T
41
+ return torch.tanh(xin + hh + self.b_ih + self.b_hh)
42
+
43
+ def step(self, xt, h):
44
+ h = self.hidden(xt, h)
45
+ return self.head(h), h
46
+
47
+ @torch.no_grad()
48
+ def generate(self, ids, n, temp=0.8, top_k=40, rep=1.12):
49
+ self.eval()
50
+ h = torch.zeros(1, self.hid)
51
+ logits = None
52
+ for tok in ids:
53
+ logits, h = self.step(torch.tensor([tok]), h)
54
+ out = list(ids)
55
+ for _ in range(n):
56
+ lg = logits[0]
57
+ if rep and out:
58
+ lg = lg.clone()
59
+ for t in set(out[-48:]):
60
+ lg[t] = lg[t] / rep if lg[t] > 0 else lg[t] * rep
61
+ lg = lg / max(temp, 1e-6)
62
+ if top_k and top_k < lg.numel():
63
+ thr = torch.topk(lg, top_k).values[-1]
64
+ lg = lg.masked_fill(lg < thr, float('-inf'))
65
+ nxt = torch.multinomial(torch.softmax(lg, -1), 1)
66
+ out.append(int(nxt))
67
+ logits, h = self.step(nxt.view(1), h)
68
+ return out[len(ids):]
69
+
70
+
71
+ def load():
72
+ ckpt = os.path.join(HERE, 'zborn.pt')
73
+ if not os.path.isfile(ckpt):
74
+ raise SystemExit('нет %s' % ckpt)
75
+ pack = torch.load(ckpt, map_location='cpu', weights_only=False)
76
+ meta = pack['meta']
77
+ from tokenizers import Tokenizer
78
+ tok = Tokenizer.from_file(os.path.join(HERE, 'tokenizer.json'))
79
+ m = BornFactorRNN(meta['v'], meta['hid'], meta['k'])
80
+ m.load_state_dict(pack['model'])
81
+ m.eval()
82
+ return m, tok, meta
83
+
84
+
85
+ def main():
86
+ prompt = ' '.join(sys.argv[1:]).strip() or 'The meaning of life is'
87
+ m, tok, meta = load()
88
+ print('Z-Born %s hid=%s k=%s n=%s step=%s CPU'
89
+ % (meta.get('kind', '?'), meta.get('hid'), meta.get('k'),
90
+ meta.get('n_born'), meta.get('step')))
91
+ ids = tok.encode(prompt).ids
92
+ out = m.generate(ids, n=120)
93
+ print('PROMPT:', prompt)
94
+ print(tok.decode(out))
95
+
96
+
97
+ if __name__ == '__main__':
98
+ main()
meta.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "kind": "bpe2048-factor",
3
+ "recipe": "1L tanh-born factored one-hot BPE",
4
+ "hid": 2048,
5
+ "k": 32,
6
+ "seq": 128,
7
+ "bs": 32,
8
+ "lr": 0.002,
9
+ "seed": 7,
10
+ "qr_seed": 11,
11
+ "v": 2048,
12
+ "vocab": 2048,
13
+ "train_tokens": 1238546057,
14
+ "val_tokens": 371069,
15
+ "train_chars": 2449160526,
16
+ "val_chars": 1142150,
17
+ "device": "cpu",
18
+ "n_born_theory": 4462656,
19
+ "total": 300000,
20
+ "corpora": [
21
+ "D:/z-system/_wikitext2",
22
+ "D:/z-system/_wikitext103",
23
+ "D:/z-system/_tinystories"
24
+ ],
25
+ "wiki_repeat": 3,
26
+ "wiki_end": 181187803,
27
+ "train_tokens_raw": 876170451,
28
+ "step": 300000,
29
+ "n_born": 4462656,
30
+ "wall_s": 128507.80147910118,
31
+ "last_loss": 3.0803170204162598,
32
+ "nll_train": 3.0575421333312987,
33
+ "nll_val": 3.9735021629486695,
34
+ "ppl_val": 53.17041661157406,
35
+ "nll_stories": 2.1479208919417907,
36
+ "ppl_stories": 8.567028090895379
37
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
vocab.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"c2i": {"\n": 0, " ": 1, "!": 2, "\"": 3, "#": 4, "$": 5, "%": 6, "&": 7, "'": 8, "(": 9, ")": 10, "+": 11, ",": 12, "-": 13, ".": 14, "/": 15, "0": 16, "1": 17, "2": 18, "3": 19, "4": 20, "5": 21, "6": 22, "7": 23, "8": 24, "9": 25, ":": 26, ";": 27, "=": 28, "?": 29, "@": 30, "A": 31, "B": 32, "C": 33, "D": 34, "E": 35, "F": 36, "G": 37, "H": 38, "I": 39, "J": 40, "K": 41, "L": 42, "M": 43, "N": 44, "O": 45, "P": 46, "Q": 47, "R": 48, "S": 49, "T": 50, "U": 51, "V": 52, "W": 53, "X": 54, "Y": 55, "Z": 56, "[": 57, "]": 58, "a": 59, "b": 60, "c": 61, "d": 62, "e": 63, "f": 64, "g": 65, "h": 66, "i": 67, "j": 68, "k": 69, "l": 70, "m": 71, "n": 72, "o": 73, "p": 74, "q": 75, "r": 76, "s": 77, "t": 78, "u": 79, "v": 80, "w": 81, "x": 82, "y": 83, "z": 84, "£": 85, "°": 86, "µ": 87, "Å": 88, "Æ": 89, "É": 90, "Í": 91, "×": 92, "à": 93, "á": 94, "â": 95, "ã": 96, "ä": 97, "ç": 98, "è": 99, "é": 100, "ì": 101, "í": 102, "ñ": 103, "ó": 104, "ô": 105, "ö": 106, "ø": 107, "ü": 108, "ā": 109, "ă": 110, "ć": 111, "ī": 112, "ł": 113, "ń": 114, "ō": 115, "ś": 116, "š": 117, "ū": 118, "ơ": 119, "ư": 120, "ə": 121, "ʻ": 122, "ˈ": 123, "ი": 124, "–": 125, "—": 126, "’": 127, "“": 128, "”": 129, "…": 130, "₹": 131, "→": 132, "−": 133, "": 134}, "unk": 0, "min_count": 30}
zborn.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0313978ec80c36115c87b91778281904fe0cc85cd40d1bd93d6253e67b17c084
3
+ size 17854693