Обновить

Революция в ИИ-вычислениях: Детерминированная рациональная арифметика с отложенным делением

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели5.7K
Всего голосов 9: ↑0 и ↓9-9
Комментарии12

Комментарии 12

В вашей модели мира исчезли сложение, вычитание и ещё много других страшных функций.

Это генерация Deepseek. Он "реально" всё ускорил: выкинул нормализацию, оставил однотактные деления (как умножение на 1/значение), умножения и сумирования, которые могут выполняться на десятибитной системе счисления от 0 до A, подсчитал сколько энергии тратится на деления в дробях и сделал вывод о революционной производительности на малых числах :)

Все расчеты это нейрогаллюцинация - запись ночного кошмара математика, который забыл базу :)

В принципе, я сним согласился поскольку мгновенная (за такт) генерация представлений величины: числитель/знаменатель может использоваться где нибудь, например в каких нибудь операционных усилителях :)

А умножение/деление параллельное без переносов (a1 + a2 + a3 + a4 + a5 + a6 +a7 + a8 + a9 + aA) * (b1 + b2 + b3 + b4 + b5 + b6 +b7 + b8 + b9 + bA) -  Полиномиальное умножение в десятичной системе (а*1000+b*100+c*10+d) *(e1000+f*100+g*10+h) = (a*e)<<6+(a*f+b*e)<<5+(a*g+b*f+c*e)<<4+(a*h+b*g+c*f+d*e)<<3+(b*h+c*g+d*f)<<2+(c*h+d*g)<<1+(d*h)

(a*e) - максимум 100 (A*A=A<<1=A0 - запись конечно непривычная, зато на одну цифру меньше чем в арабском),

в каких физических устройствах может использоваться величина из трёх параметров целое*числитель/знаменатель?

В физических устройствах величина в форме целое × числитель / знаменатель часто используется для задания или хранения рациональных чисел (дробей) с фиксированной структурой, особенно когда точность дробей важна, а использование плавающей запятой нежелательно из-за ошибок округления, требований к скорости или совместимости.

Вот типичные примеры устройств и систем, где такая форма хранения чисел применяется:

1. Синтезаторы частоты и ФАПЧ (PLL)

2. Цифровые сигнальные процессоры (DSP) и аудиокодеки

3. Счётчики и таймеры в микроконтроллерах

4. Графические процессоры и скалеры изображения

5. Аппаратные ускорители для работы с рациональной арифметикой

6. Системы управления шаговыми двигателями и ЧПУ

7. GPS-приёмники и системы навигации

8. Измерительные приборы и калибровочные коэффициенты

Как сопроцессор для калькуляторов сойдёт.

Во всех Ваших примерах нет многократной арифметики, которая вызовет экспоненциальный рост расходов на память и вычисления. А ML вполне себе живёт на fixed size floats: в сырых данных шума больше точности float, да и он сглаживается при усреднении.

огласен, чего нет того нет - это модель, которая предположительно с точки зренияя ИИ, при внедрении может увеличить производительность и снизить энергопотребление.

IEEE 754 (основание 2): Нормализация: сдвиг мантиссы влево/вправо на N бит Аппаратно: barrel shifter, O(log n) сложности Наша система (основание 10): Нормализация: деление/умножение на 10 Требует: 1. Определить, сколько раз делится на 10 2. Выполнить деление (сложная операция!)

Если нужно реальное деление - таблично

Как то так:

def find_second_multiplier(p, abcd):
    """p = [p0, p1, p2, p3, p4, p5, p6] - коэффициенты произведения (что делится)
       abcd = [a, b, c, d] - известный множитель (на что делиться)
       Возвращает [e, f, g, h] или None если нет решения"""
    
    a, b, c, d = abcd
    p0, p1, p2, p3, p4, p5, p6 = p
    
    if a == 0:
        return None  # Нельзя решить этим методом
    
    # Шаг 1: e
    if p6 % a != 0:
        return None
    e = p6 // a
    
    # Шаг 2: f
    temp = p5 - b * e
    if temp % a != 0:
        return None
    f = temp // a
    
    # Шаг 3: g
    temp = p4 - b * f - c * e
    if temp % a != 0:
        return None
    g = temp // a
    
    # Шаг 4: h
    temp = p3 - b * g - c * f - d * e
    if temp % a != 0:
        return None
    h = temp // a
    
    # Проверка
    if (b*h + c*g + d*f != p2 or
        c*h + d*g != p1 or
        d*h != p0):
        return None
    
    return [e, f, g, h]

def find_first_multiplier(p, efgh):
    """Аналогично для известного второго множителя"""
    
    e, f, g, h = efgh
    p0, p1, p2, p3, p4, p5, p6 = p
    
    if h == 0:
        return None
    
    # Обратный порядок
    if p0 % h != 0:
        return None
    d = p0 // h
    
    temp = p1 - d * g
    if temp % h != 0:
        return None
    c = temp // h
    
    temp = p2 - c * g - d * f
    if temp % h != 0:
        return None
    b = temp // h
    
    temp = p3 - b * g - c * f - d * e
    if temp % h != 0:
        return None
    a = temp // h
    
    # Проверка
    if (a*g + b*f + c*e != p4 or
        a*f + b*e != p5 or
        a*e != p6):
        return None
    
    return [a, b, c, d]

Линейное уравнение

3. Корректировать экспоненту Пример: 12345 × 67890 = 838,102,050 Нужно: 838102050 → 8.38102050 × 10⁸ Деление на 10⁸!

А в отсутствии нормализации,

X = Mₓ × 10ᴺˣ Y = Mᵧ × 10ᴺʸ X × Y = (Mₓ × Mᵧ) × 10⁽ᴺˣ⁺ᴺʸ⁾ Просто: 1. M_result = Mₓ × Mᵧ (целочисленное умножение) 2. N_result = Nₓ + Nᵧ (сложение экспонент) 3. Результат: M_result × 10ᴺʳᵉˢᵘˡᵗ НЕТ НОРМАЛИЗАЦИИ! Результат остаётся в том же формате.

Сравнение с IEEE 754 FPU

Ключевое отличие:

Операция I EEE 754 Double Наша система (без норм.)

Умножение 1. Мант × мант

2. + экспоненты

3. Нормализация

4. Округление

1. Мант × мант

2. + экспоненты

Тактов 3-5 2

Энергия 73 fJ 1.9 fJ (в 38 раз меньше!)

Точность Всегда нормализована Может быть "ненормализованной"

8. Преимущества отказа от нормализации

  1. Скорость: В 3.5 раза быстрее

  2. Энергия: В 2.4 раза эффективнее

  3. Простота: Нет сложных делителей/нормализаторов

  4. Точность: Нет потерь от округления при нормализации

Цифры тут конечно (ИИ), но в целом понятно отложенная нормализация выполняется при сложении, вычитании.

Откройте анонимный чат с тем же ДикПиком, скормите ему эту статью и комментарии, но с таким промтом:

Чатег, укажи фатальные провалы этой модели, можно матом

Как вариант поразмышлять, соглашусь, что для внедрения это не нужно, а вот чтобы занять какой нибудь работой процент итишников чтобы на выходе получить непредсказуемый результат? Тут же главное идея. ИИ придумал, что вычисления в рациональных числах лучше по каким то там размышления. И чтобы это подтвердить или опровергнуть - начинается какаято деятельность (вполне возможно непродуктивная, как и генерация биткоинов, которая потребляет электрическую энергию). Соответственно выделяются и осваиваются финансы, комуто выплачивают за работу, комуто просто выплачивают. Побочным продуктом реализации этого ноухау: перестраиваемая апаратная логика под вычесления необходимой точности, увеличение ёмкости хранильщ данных, использование логики для вычисление по указателю в памяти, чтоб не гонять гигантские числа в умножитель, ну и куча различных других усовершенствований, которые смогут найти применение в обычных бинарных вычислениях фиксированной точности и разрядности. И как закономерный результат - наукоёмкость выпускаемой продукции становится сличшком сложной для понимания. А поддержание производственных мощностей требует прорву энергии. Поэтому прогрессирует еще и энергетика, генерирующие технологии.

Соответственно выделяются и осваиваются финансы

То есть, бизнес будет в гарантированном убытке. Корпоратив с блэкджеком и шалуньями обойдётся на порядки дешевле и даст больше пользы. :)

Ваша статья и комментарии - это яркий психологический кейс, не технический.

ИИ верить нельзя, всегда нужна перепроверка, потому как ответственность за применение советов от ИИ в реальной жизни всегда лежит на человеке, а у чатика - лапки.

Так а как решать проблему роста знаменателя при каждой операции? Там очень быстро нужна будет длинная арифметика, а это и лишние вычисления, и динамическое выделение памяти при каждой операции, и нелокальность с т.з. кэша.
Вся схема в рациональных числах до переполнения знаменателя работает на десяток операций, может быть. Неужто вы всерьёз думаете, что комитет ieee 754 придумывал стандарт с нуля, и другие варианты к тому моменту не были опробованы?

Кэш тут не нужен, достаточно памяти динамической однотактовой поддерживающей адресацию и последовательную загрузку/выгрузку чисел в формате (длина_числа,само_число) с установкой адреса (длина_адреса,сам_адрес)

Во-первых, это уже очень старая идея - рациональная арифметика. Никакой революции тут нет. В том же питоне есть модуль fractions. Ее применяют только в очень узких задачах, потому что главная проблема тут - переполнение. Там, где вам нужна абсолютная точность но пофигу на производительность. Какая-нибудь математика с комбинаторикой тут только и остается.

При считая всего в целых числах они очень быстро вылезают за границы 32 или даже 64 бит. Особенно, если у вас есть сложение и вычитание, которые ваш нейрослоп просто пропустил.

Вы, работая в питоне, об этом даже не задумываетесь, там-то длинная арифметика реализована из коробки, но при этом идет потеря производительности на порядки. Особенно, если у вас есть сложение и вычитание.

Для ИИ эта идея вообще не подходит никак. Длинная арифметика медленна, да и запизать вот эти рациональные значения во всякие гауссовские функции активации просто невозможно. Там же нерациональные значения получаются в ответе. А без нелинейных функций активации любая нейросеть становится тривиальным линейным оператором и не может практически ничего.

В процессоры общего назначения это не встроят никогда, потому что длинную арифметику делать стандартной операцией - это бред. Слишком высокого уровня этот алгоритм.

Графики у вас тоже сгаллюционированны ИИшечкой? Хотя оно может быть даже быстрее но только если у вас там "делиться" 15 чисел до 10. Это очень тривиальный случай вообще никакого отношения к практике не имеющий.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации