Pull to refresh

Comments 52

Интересно, когда наступит момент, когда для вычислений проще будет подключить состояния 8-сегментного индикатора калькулятора к нейросети и на выходе получить другие состояния 8-сегментного индикатора

Да хоть сейчас - это будет вырожденная переобученная (overfitting) нейросеть, которая эквивалентна просто таблице решений для всех значений аргументов.

Это то понятно, речь именно про то, что это будет проще, чем писать код, вычисляющий

На БЭСМ тоже можно было делать какую‑нибудь очередную автоматизацию полива цветов, но это тогда не было проще, чем с помощью аналоговых вычислений. А сейчас — проще.

В принципе, если читать "переобученная нейросеть" как "таблица", то таблицы значений тригонометрических функций всегда использовались на процессорах с только целочисленными операциями для ускорения. В играх на ZX так точно.

Не споря с вами: На МК61 тогда писать x - 0.166667x^3 тоже было не проще…

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

Вот, речь как раз про то, что сейчас это не рационально — а когда наступит момент, когда рационально?

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

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

Я думаю тут все будет куда проще : выдать нейросетям некий "калькулятор" или даже "компьютер" с классической математикой и прочим - всё, как у людей. Получится аналог человека с компом. То есть нейронке достаточно будет вбить некие числа или даже написать некое ПО для решения задачи такого типа, которую проще выполнить на обычном оборудовании, скажем так. Вот это будет рационально, равно как и у людей - сначала появились счеты, затем арифмометры и компьютеры. Или например с письмом - намного же проще записать некую информацию на бумаге\камне\бересте, чем ее выучить наизусть. Конечно простые вещи проще запомнить - ну так и ИИ сейчас условные 2 + 2 решит без калькулятора)

Code Interpreter в chatGPT, это же оно, не?

В контексте математики скорее интеграция с Wolfram, но в общем случае да. И вроде GPT 4 уже умеет без наводок сам дойти до того, что надо написать кусок кода на питоне и выполнить.

>Вот, речь как раз про то, что сейчас это не рационально — а когда наступит момент, когда рационально?

Никогда, очевидно. С чего бы этот момент вообще должен настать? Посчитать "на калькуляторе" будет всегда проще

для вычислений проще будет подключить состояния 8-сегментного индикатора калькулятора к нейросети и на выходе получить другие состояния 8-сегментного индикатора

А потом — бац! — один сегмент перегорел.

— Он там управлял системой подземки – никаких нареканий, идеальный работник, а потом однажды эта штука просто забыла запустить вентиляторы, когда было надо. Поезд заезжает на пятнадцать метров под землю, пассажиры выходят, воздуха нет, бум!
– Эти штуки вроде как учатся на собственном опыте, правильно? – продолжает Джарвис. – Ну и все думали, что зельц научился запускать вентиляторы по какому-то очевидному признаку. Жару тела, движению, уровню углекислого газа, ну ты понимаешь. В результате выяснилось, что эта хрень просто смотрела за часами на стене. Прибытие поезда совпадало с предсказуемым набором паттернов на цифровом дисплее, поэтому она включала вертушки, когда видела один из них.
– Ага. Точно. – Джоэл качает головой. – А какие-то вандалы часы разбили. Или что-то вроде того.

— Питер Уоттс. Морские звезды.

И это все равно звучит дешевле, чем разработка и внедрение системы АСУЗ для подземки, и уж тем более, чем математическая верификация такой системы. Ведь в случае ошибки не верифицированной математически АСУЗ ответственным за ошибку "оператором-стрелочником" по сути является разработчик/внедренец системы АСУЗ.

В то время как использование больших языковых моделей в качестве операторов неавтоматизированных систем управления зданием несет многие преимущества
  • БЯМ, как и кожаный мешок за сотни лет до нее, несет полную ответственность, является оператором-"стрелочником"

  • БЯМ не устает, не требует пересменки, во время которой ценная информация о текущей ситуации может быть потеряна

  • БЯМ с охоткой выдает всю дискриминирующую себя и прочих виновных лиц информацию по инциденту

  • БЯМ легко заменяется на более эффективную БЯМ

Предлагаете обучать нейросеть ментальной арифметике? :)

Я правильно понимаю, что в итоге получилась точность до 9 знаков?

А после рядов Тейлора говорили о необходимой точности в 15 знаков.

Как я понял, не совсем так. Автор сравнивает точность многочлена из ряда Тейлора и многочлена, полученного по алгоритму Ремеза, оба 9-й степени, и второй получается на 3 порядка лучше. Для калькулятора скорее всего просто возьмут более высокую степень.

Интересно, пробовали ли получить логическую функцию для вычисления синуса побитово напрямую (хотя-бы для fixed point представления углов и самого синуса)? По типу того как получают код для семисегментного индикатора по числу, через карты Карно и прочее.

А смысл?

Ну получится какое-то выражение. Я делал fixed point LUT для цифрового вычислительного синтезатора, оттуда можно извлечь конкретное логическое выражение для каждого бита выхода.

Look-up tables (перекодировочные таблицы) как раз тем и отличаются, что для их реализации не нужен какой-то алгоритм.

Если интересен какой-то алгоритм и то, как его можно сделать в "железе", можно в сторону CORDIC посмотреть.

Вообщето CORDIC в оборудовании реализуется не напрямую а в комбинации с таблицами. Оптимизация

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

Так это писалось в играх в 90е, вместе с хитрожопыми интнрполяциями и битовой магией. Отсюда хороше известный комментарий what the f**k из кода Quake

Я имею в виду сделать такое непосредственно в процессоре (как если бы мы разрабатывали процессор с новой архитектурой). Не таблично, не алгоритмически, а именно комбинаторно. Биты угла преобразуем напрямую в биты синуса с помощью сложного каскада логических вентилей.

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

Можно посмотреть на быстрое и довольно простое преобразование cordic.

А не проще в некоторых случаях таблицы Брадиса в память загрузить, интересно.

Выбирать из памяти будет гораздо быстрее

Сразу же заметно, что эта функция периодическая и что она имеет сильную симметрию в интервале от 0 до π/2:

А что значит сильная симметрия? И какие еще виды симметрии бывают?

Причем только в интервале от 0 до π/2 ))

Если я правильно понял оригинал – должно быть:

Сразу же заметно, что функция периодична и обладает ярко выраженной симметрией ...

И что такое "ярко выраженная симметрия"? А слабо выраженная тогда как будет? Симметрия или есть или нет. Ну по крайней мере в математике.

В оригинале не меньший бред, кмк: "strong symmetry of the interval between 0 and Pi/2"

Симметрия интервала. Сильная. Ну да.

Нам явно что-то про повторяемость четвертьпериода хотели сказать, но вышло не очень.

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

Зеркальная симметрия, как здесь, и прочие являютя видами полной симметрии. Но существует еще понятие искаженной симметрии в численных методах и статистике - где симметрия соблюдается с отклонениями

Простите, но суть вашего ответа не могу уловить.

"Strong symmetry"==="полная симметрия"?

У тангенса нет симметрии, хотя он нечётная функция?

Симметрия - это не повторяемость, хотя в определении симметрии так и говорится, что она есть инвариант (т.е. по сути повтор) после преобразований? (Хотя если хочется, можно заменить повтор на подобие, конечно, но суть не поменяется)

Про искаженную симметрию беглый гуглеж, к сожалению, не выдал ничего.

UPD

Зачем вообще в статье говорить о симметрии, когда нужна именно повторяемость четверть периода?

Никак не в защиту "strong symmetry", но там вообще-то вагон и тележка вариантов симметрии (ну хорошо, может только тележка), а не просто – есть или нет.

Ну конечно, типов симметрии много. Но в любом конкретном случае каждая из них или есть, или её нет. ;)

Интересно сравнить эти вычисление с вычислениями по "таблице объёмов красных резиновых мячей")) Может быть иметь в памяти табличку правильных значений и интерполировать циферки в промежутке будет быстрее и точнее, чем каждый раз высчитывать, как в первый раз...

Ряд тейлора вроде как многие (МК-85, например) советские калькуляторы (кроме производства "Светлана" - те использовали CORDIC).

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

Как считать синус на современных процессорах - понятно, а вот как это было сделано "в железе" лет 40 назад - гораздо интереснее.

А полиномы Чебышёва не подойдут ?

А разве ряд Тейлора это аппроксимация синуса? А не именно разложение синуса в точности? В том плане, что мы сами можем выбирать точность, до которой нужно считать

Аппроксимация появляется, когда бесконечный ряд Тейлора (на самом деле Маклорена) заменяется на конечный.

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

тригонометрические функции на разных архитектурах процессора, операционных системах и языках программирования могут давать разный ответ

А вот это полный беспредел. Для того и придумывали стандарт IEEE на числа с плавающей точкой (single, double), чтобы результат на разных архитектурах совпадал побитово. Как это может быть, что он различается для синуса?

насколько помню, в этом стандарте обязательно правильное округление результата только для алгебраических операций: +, -, *, /, √

У нас внутренние тесты не проходятся на arm (на мак M1/2 и на малинке).
Потому что косинус возвращает разные младшие разряды на arm vs intel.
В одном из тестов на geodist расхождение получается целый метр.

Эх, ностальгия. Помнится, когда-то еще на 286 я написал простенький трехмерный движок, показывающий на CGA-мониторе динамически меняющуюся картинку из точек в узлах деформируемой пространственной сетки. Всё это работало в реальном времени, картинка выглядела вполне натурально, а код влезал в один килобайт.

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

Для моих целей угол задавался одним байтом, и результат возвращался тоже в одном байте (был нормирован не на 1, а на 127). Для разрешения готовой картинки 320×200 этого было вполне достаточно.

Чтобы успевать обсчитывать несколько сотен точек за время одного кадра, вычисление синуса было реализовано как выборка из таблицы. Ее можно было посчитать заранее, но она получалась слишком большой — счет реально шел даже не на десятки байт, а на байты. Поэтому было принято решение генерировать таблицу в начале работы программы.

Вы будете смеяться, но для этой задачи точности генерации с помощью нехитрого выражения y=1−x² с какой-то нормировкой оказалось достаточно. Визуально вращение было вполне плавным — пиксели размером с кулак вносили превосходящую погрешность.

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

Можно построить треугольник с заданным углом и вычислить значение - длину противолежащего катета разделив на длину гипотенузы

На бумажке предлагаете это делать? С линейкой, или как?

Вначале найти метод построения на бумаге, потом если сможешь, создать программу для моделирования построения треугольника

Sign up to leave a comment.

Articles