t27.aiEnglish

Пять правил для алфавита весов

Вы узнаете

Какие значения может принимать тернарный вес, как пять измеренных правил оставляют одну формулу и что из неё убирает шестое правило.

Спека 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 и тест, который говорит, какое смещение не конечно.

Открыть интерактивный урок →

golden_sieve.t27, the ternary sieve, compiled inside the post
golden_sieve.t27, the ternary sieve, compiled inside the post ↗

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");
    }
}

Открыть спеку урока в плеере ↗

Все уроки