Пять правил для алфавита весов
Вы узнаете
Какие значения может принимать тернарный вес, как пять измеренных правил оставляют одну формулу и что из неё убирает шестое правило.
Спека golden_sieve.t27 задаёт тернарному весу пять измеренных правил и шестое, которое сужает то, что они оставляют. S1: число значений — степень тройки; S2: не больше двух тритов, так как третий не дал значимого выигрыша. S3: одна линия накопителя, поэтому отношение любых двух весов рационально: плюс и минус фи проходят как общий масштаб, а 1 и фи требуют двух линий. S4: не больше шести входных битов на нейрон — спека называет это компромиссом, а не законом; S5: никаких ячеек DSP48E1 и SRL16E, для которых openXC7 записывал неверный битстрим, хотя каждый инструмент говорил OK. Пять правил оставляют TNF(k, b) с 3 или 9 уровнями, а S6 убирает форму с 9 уровнями: на любой целочисленной лестнице старший вес перевешивает остальные вместе, и решает один вход. Браузер выполняет все 3 теста и все 8 инвариантов.
Попробуйте
Запустите тесты; затем поменяйте в исходнике MAX_TRITS на 3 и посмотрите, какие две проверки упадут. В спеке триты задают порядок числа, а не вес: найдите exp_values у tnf4 и тест, который говорит, какое смещение не конечно.

The Golden Sieve as a t27 spec: five predicates a ternary weight alphabet must pass, compiled by t27c as WebAssembly in your browser. Seven backends; every test runs in the page.
specs/numeric/tnf4.t27
// SPDX-License-Identifier: Apache-2.0
// tnf4.t27 -- TNF4: Ternary Network Float, 4-bit class (bottom rung).
// Balanced-ternary exponent = 2 trits (3^2 = 9 offsets, exponent +-4, ~2.4
// decades), 1-bit mantissa, NO regime decode.
// layout: [ sign(1) | E = 2 balanced-ternary trits | M = 1 bit ]
//
// Positioning (the 4-bit rung is unique): the format-to-beat here is NOT tekum
// but **BitNet-1.58 ternary WEIGHTS** {-1,0,+1} -- a weight quantizer, not a real
// format. TNF4 is a genuine 4-bit REAL number (magnitude + ~2.4-decade range),
// so it plays the ACTIVATION/value role next to BitNet's weight role, exactly as
// tri_compute_bitnet.t27 attests (ternary weights x GF/TF activations). Against
// the binary 4-bit leader MXFP4 it trades block-scale range for a native ternary
// exponent and no block-decode. phi^2 + 1/phi^2 = 3 | TRINITY
module triformat_tnf4 {
use base::types;
const EXP_TRITS: u32 = 2;
const MANT_BITS: u32 = 1;
const EXP_OFFSET: u32 = 4; // (3^2 - 1) / 2
const OFFSET_MAX: u32 = 8; // 3^2 - 1 (reserved special row)
// 2-trit exponent field -> unsigned offset in [0,8].
fn exp_offset(t0: u32, t1: u32) -> u32 {
return t0 + (3 * t1);
}
fn is_finite(offset: u32) -> bool {
return offset != OFFSET_MAX;
}
fn exp_values() -> u32 {
return 9;
}
// ---- Tests / invariants ----
test offset_range {
assert(exp_offset(0, 0) == 0, "min offset (exponent -4)");
assert(exp_offset(2, 2) == 8, "max offset (reserved special)");
assert(exp_offset(1, 1) == 4, "center offset = exponent 0 (unity)");
}
test finiteness {
assert(is_finite(4) == true, "unity finite");
assert(is_finite(8) == false, "offset 8 special");
assert(exp_values() == 9, "3^2 exponent values (~2.4 decades) in 2 trits");
}
}
Все уроки
Модуль 1 · Лаборатория: наши исследования
Свой формат чисел, честная таблица результатов и таблицы модели, перемноженные на плате.
Модуль 2 · ИИ-числа: блок MX
Как ИИ-чипы хранят веса в нескольких битах: один общий масштаб на блок, сам байт масштаба и что один выброс делает с соседями.
Модуль 3 · Тернарные веса
Веса, которые бывают только минус масштаб, ноль или плюс масштаб, пять правил, которые должен пройти тернарный алфавит, и прогон тестов, который ничего не проверил.
Модуль 4 · Тернарный формат Ternary Network Float
Правило, которое компилятор проверяет до запуска любого теста, и 17-битное число с плавающей точкой, порядок которого — четыре сбалансированных трита.
Модуль 5 · Арифметика чисел со знаком
Умножить два числа со знаком, сложить их, когда знаки разные, и сделать то и другое сразу в умножении с накоплением.
Модуль 6 · Части нейрона
ReLU с изломом в нуле, степень двойки для softmax и argmax, который называет ответ.
Модуль 7 · Обучение на ошибке
Потеря, которая оценивает неверную догадку в битах, один шаг, который сдвигает вес против градиента, и скрытый слой, который нужен XOR.
Модуль 8 · BitNet: тернарные сети
Порог, который сжимает сумму обратно до трёх значений, один нейрон, который становится другой функцией при смене весов, и нейрон, который читает входы по 27 тритов за раз.
Модуль 9 · Тернарный MAC как чип
Скалярное произведение 27 тритов как провода без регистра, та же сумма, которую регистр копит на каждом такте, и небольшая целая сеть в конце курса.