Pull to refresh

Comments 62

Очень любопытная идея. Желаю успехов в развитии.
Мне только не понятно, зачем делать свой компилятор и свой язык? Разве нельзя реализовать это как библиотеку к существующему языку? Например к тому же питону.

Разве нельзя реализовать это как библиотеку к существующему языку? Например к тому же питону.
Я язык пишу не для реализации этого алгоритма. Количество времени на разработку ограниченно и приходится выбирать, чем заниматься.
извините, не удержался:
офтоп - картинка про инженера-негуманитария
image

1) Если как-то оптимизировать вычисление плотности вероятности, жертвуя точностью в угоду скорости, то легко пропустить локальный минимум. А если считать всё точно, то даже для крайних значений для каждого веса объём вычислений вырастет как 2^N, где N — количество нейронов.


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

Если как-то оптимизировать вычисление плотности вероятности, жертвуя точностью в угоду скорости, то легко пропустить локальный минимум. А если считать всё точно, то даже для крайних значений для каждого веса объём вычислений вырастет как 2^N, где N — количество нейронов.
Объём вычислений зависит не только от количества нейронов, но и от количества слоёв. Про оптимизацию о которой я упомянул в статье, понятно в двух предложениях не рассказать, но она позволяет спроектировать сеть таким образом, что объем данных и количество вычислений можно снизить, а так же вычисления можно будет очень сильно распараллелить. Это всё равно не позволит обучать большого размера нейронные сеть, но позволит увеличить допустимый размер сети. Как я писал раньше, для такой оптимизации необходимо, чтобы произведение плотностных чисел, обладало нужным свойством.
Обучение базируется на том, чтобы корректировать веса с помощью обратного распространения ошибки, который, в свою очередь, требует того, чтобы функция активации была дифференцируема. Вопрос — как это считать в случае с использованием плотностей вероятности?
При использовании плотностных чисел, функция активации может быть фактически любой, главное чтобы её было легко вычислять. Думаю f(x) = x — в полне подойдёт.

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

Абсолютно согласен.
Более десяти лет назад учил нейронки генетическим алгоритмом довольно успешно, потому что не разобрался в back propagation. Заметил, что последний не всегда качественно обучает.
Надо делать много подходов — разных сетей, которые по факту инициализируются рандомными весами. По сути генетич. алгоритм.
Прошло много лет. Повторил дифуры, разобрался в back propagation и другой математике. Видел как рос DeepLearning и развивались методы оптимизации.
Ой! А что ж это? Dropout! Опять пришли откуда начинали.
P.S. Мозг это не полносвязная НС. В этом зарыт, я бы сказал, сакральный момент.
Искать оптимум в многомилиономерном пространстве параметров нейросети методом дихотомии… Причем для одной итерации обучения каждого веса нужно два раза прогнать всю обучающую выборку через нейросеть. Вы представляете НАСКОЛЬКО чудовищно медленно такое обучение будет происходить?
Представляю! Но я нигде не упомянул, что алгоритм быстрый, этот алгоритм может оказаться эфективным с точки зрения качества обучения. Так же мною была упомянута оптимизация которая может ускорить процесс обучения, правда я забыл уточнить, что данная оптимизация позволяет значительно упростить и сделать эффективнее процесс расспаралеливания вычислений.

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

Что такое "качество" обучения, и как вы меряете "эффективность"?

Что такое «качество» обучения

То на сколько обученная сеть справляется с поставленными задачами.
и как вы меряете «эффективность»?

Даю сети работу на которую она была рассчитана, чем меньше ошибок и чем точнее результат, тем эффективность выше.

Ну то есть на самом деле, ваше "качество" и "эффективность" — это одно и то же, и оба они — это обычная метрика качества (ну не знаю там, RMSE, если у вас задача регрессии).


И вы утверждаете, что у вас эти метрики будут хорошими. Насколько хорошими? Будут ли они (заведомо) лучше чем те метрики, которые дают существующие методы обучения? Если да, то почему?

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

Ах, может… ну тогда да, может. Вопрос только, кто готов тратить ресурсы на это "может", учитывая, что теоретического доказательства нет?

А зачем вы мне этот вопрос задаёте? Я кому то предложил это реализовать? Нет! Цитата из статьи:
будет крайне плохо если я умру и знания о этих числах уйдут со мной. Поэтому я и решил написать эту статью

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

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

То есть вы считаете, что надо писать статью обо всем, о чем вы не знали?

То есть я считаю, что нужно писать статью о том, что может быть полезно.

Вот это самое обоснование полезности я пытаюсь из вас достать. Пока оно сводится к "мне кажется, что это может быть полезно".

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

Это одна из причин, почему на хабре так много бесполезных статей.

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

Предлагаете взять метод градиентного спуска?
Суперпозиционные числа назовем общепринято — множество (диапазон) чисел. Плотностные числа — это называется распределением вероятности дискретной случайной величины или распределением плотности вероятности непрерывной случайной величины.
Эти математические объекты по своей сути — функции, и могут преобразовываться математическими операциями. Если операции дифференцируемы, то решения (результаты преобразования) можно найти аналитически. Там поверхностные интегралы, муть та еще…
Суперпозиционные числа назовем общепринято — множество (диапазон) чисел.

Нельзя назвать суперпозиционное число множеством, поскольку хоть они и похожи, но работа с ними ведётся по разному. Например и у множеств и у суперпозиционных чисел есть термин «разность», но означает совершенно разные операции. С таким подходом комплексное число можно назвать, комплексом из двух чисел, но результатом сложения комплекса из двух чисел — комплекс из четырёх чисел, но результат сложения двух комплексных чисел — комплексное число. Ну и говоря программистским языком — «Суперпозиционные числа и множества — это два разных типа, имеющие одинаковую структуру, но различные функции для работы с объектами данных типов.»
Плотностные числа — это называется распределением вероятности дискретной случайной величины или распределением плотности вероятности непрерывной случайной величины.

Таким способом можно называть всё что угодно:
дробь — отложенное вычисление
питьевая вода — соли различных металов растворённые в большом количестве монооксида водорода
воздух — газообразная смесь состоящая из кислорода и азота, с небольшим вкраплением водяного пара и иных газов

Я не претендую на общепринятость моих названии и написал статью об обучении нейронных сетей, но в статье указал как я пришёл к такому алгоритму, но чтобы в статье постоянно не писать «вот эти вот числа», или «вот те числа что я там раньше придумал», или тем более «распределением плотности вероятности непрерывной случайной величины», я дал таким числам название.
Например и у множеств и у суперпозиционных чисел есть термин «разность», но означает совершенно разные операции.
Сделал поиск в вашей слова «разность», но не нашёл его. Да и вообще математической формализации вашего изобретения тут явно не хватает, поэтому и написал ниже, что «если я правильно понял вашу мысль».

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

Цитата с примерами из статьи:
Результатом применения любой унарной операции к суперпозиционному числу, это суперпозиционное число, которое охватывает множество чисел, которые могут быть получены в результате применения унарной операции к любому числу из множества, которое охватывает исходное суперпозиционное число. Например: sin([-pi, pi]) = [-1, 1]. Результатом применения любой бинарной операции над суперпозиционными числами, это суперпозиционное число, которое охватывает множество чисел, которые могут быть получены в результате применения бинарной операции к двум любым числам из множеств, которые охватывают исходные суперпозиционные числа. Например: [-3, 6] — [-12, 7] = [-10, 18].

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

В математике есть строго определённые критерии, по которым математический объект можно рассматривать как «число».
С таким подходом комплексное число можно назвать, комплексом из двух чисел, но результатом сложения комплекса из двух чисел — комплекс из четырёх чисел, но результат сложения двух комплексных чисел — комплексное число.
Но вполне можно определить операцию над двумя комплексными числами, чтобы в результате получить кватернион — комплекс из четырёх чисел. А затем из него можно получить матрицу поворота 3х3 — комплекс из девяти чисел. И придумывать новый тип чисел для всего этого совсем не обязательно.
Если я правильно понял вашу мысль, то суперпозиционные числа в математике давно известны и называются либо векторами, либо многочленами. Ну а вы вправе определять алгебру над такими числами так, как вам вздумается.
Нет вы не правильно поняли, не по строению не по работе, это ни вектор, ни многочлен.
Достойно уважения то, что вы переизобрели такие понятия, как плотность вероятности и некоторые другие.

Но, к сожалению, вы опоздали на пару сотен лет. В нынешнее время более продуктивно сначала изучить то, что изобретено другими, а уже потом изобретать своё. Можно ли поинтересоваться вашим возрастом?

Насчёт предложенного вами метода поиска максимума. Рассмотрим одномерный случай, чтобы не усложнять.

Так вот, вы имеете функцию sin(x) на сегменте [-4,4] и хотите найти её максимум. Вы делите промежуток на 2 части [-4,0]; [0, 4] и выбираете ту из них, максимум на которой больше. Главная загвоздка данного шага в том, чтобы узнать, какую половину сегмента выбрать.

Понятно, что для синуса координаты максимумов известны, но что, если ваша функция неизвестная? Для неизвестной функции вам недоступна операция нахождения максимума на промежутке. Всё, что вы можете — это вычислить значение функции в какой-нибудь точке.

Чтобы выбрать промежуток, максимум на котором больше, вам придётся вычислить одно или несколько значений в каких-то точках на каждом из промежутков-кандидатов. Сколько это будет точек? Чтобы точно найти максимум на каждой из половин, надо вычислить значения на всём бесконечном множестве точек.

Поэтому ваш метод, хотя и интересен с философской точки зрения, на практике неприменим.

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

Зачем вы дали мне статью на википедию, в статье указано что я знаком с этим термином, числа по этому я и назвал «плотностные», от названия плотность вероятности, хотя я и узнал об этом термине после того как придумал алгоритм из статьи.
Но, к сожалению, вы опоздали на пару сотен лет. В нынешнее время более продуктивно сначала изучить то, что изобретено другими, а уже потом изобретать своё.

Количество знаний накопленных человечеством слишком велико, что один человек мог знать всё. Математика это не основной мой род занятий, с натяжкой можно назвать хобби. Но даже в моём основном хобби, которым является программирование, которым к слову я уже увлечён без малого 20 лет, 6 лет назад мне понадобилась структура с определёнными свойствами и я её изобрёл, а потом оказалось что такая структура была изобретена в 1959 и называется она «префиксное дерево», за 14 лет я читал и смотрел множество учебников, статей, видеороликов по программированию, проходил курсы и нигде никто не упомянул о префиксных деревьях. К тому же эта статья не о плотности вероятности, а про применение её в обручении нейронных сетей. Может кто то уже без меня придумал такой способ обучения, но мне об этом не известно. Если кто-то уже придумал такой подход в обучении нейросетей, ну ладно, одной статьёй больше, одной меньше, зато я буду уверен что если никто ещё не додумался использовать плотность вероятности в обучении нейронных сетей, то эта идея не исчезнет, если со мной, что то случиться.
Можно ли поинтересоваться вашим возрастом?
31
Так вот, вы имеете функцию sin(x) на сегменте [-4,4] и хотите найти её максимум. Вы делите промежуток на 2 части [-4,0]; [0, 4] и выбираете ту из них, максимум на которой больше. Главная загвоздка данного шага в том, чтобы узнать, какую половину сегмента выбрать.
Вы не внимательно читали статью, как находить в какой половине находиться максимум, указано (для этого и используются суперпозиционные числа).
Понятно, что для синуса координаты максимумов известны, но что, если ваша функция неизвестная? Для неизвестной функции вам недоступна операция нахождения максимума на промежутке. Всё, что вы можете — это вычислить значение функции в какой-нибудь точке.
Вы либо очень не внимательно читали статью, либо не смогли ничего понять. Попытаюсь объяснить максимально просто. Все расчёты в функциях ведутся с использованием суперпозиционных чисел. Допустим есть неизвестная нам функция, пусть это будет y = x^2 + 1, а нам нужно найти максимум на участке от 0 до 10, в начале вычисляем y([0, 5]) = ([0, 5])^2 + 1 = [0, 25] + 1 = [1, 26], затем вычислим y([5, 10]) = [5, 10]^2 + 1 = [25, 100] + 1 = [26, 101]. Как мы видим в первой половине значения варьируются от 1 до 26, а во второй от 26 до 101. Поскольку функция нам не известна, мы не знаем в какой конкретной точке находится максимум, но мы точно знаем в какой половине находится максимум, с помощью метода бинарного поиска мы сможем найти если не максимум, то как минимум число очень близкое к нему, что для обучения нейросетей нам и нужно.
Реально работающие методы поиска максимума (например, метод золотого сечения) вычисляют значение функции, руководствуясь определённой стратегией, и постепенно сходятся к максимуму. Критерий эффективности таких методов обычно в том, чтобы решить задачу за минимальное количество вычислений функции.
Функцию y = sin(x) я брал лишь для примера и простоты объяснения, на практике для обучения нейронных сетей нужно будет искать максимум в функции вида y(x1,x2,x3… xn) = огромное выражение использующие все иксы, не думаю что метод золотого сечения будет эффективней.
в начале вычисляем y([0, 5]) = ([0, 5])^2 + 1 = [0, 25] + 1 = [1, 26], затем вычислим y([5, 10]) = [5, 10]^2 + 1 = [25, 100] + 1 = [26, 101]

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


Поставим вопрос иначе: для ваших "чисел" определены все операции, которые используются в современном машинном обучении?

Поставим вопрос иначе: для ваших «чисел» определены все операции, которые используются в современном машинном обучении?

Для суперпозиционных чисел доступны все действия, которые доступны и для вещественных чисел. Вот цитата из статьи:
Результатом применения любой унарной операции к суперпозиционному числу, это суперпозиционное число, которое охватывает множество чисел, которые могут быть получены в результате применения унарной операции к любому числу из множества, которое охватывает исходное суперпозиционное число. Например: sin([-pi, pi]) = [-1, 1]. Результатом применения любой бинарной операции над суперпозиционными числами, это суперпозиционное число, которое охватывает множество чисел, которые могут быть получены в результате применения бинарной операции к двум любым числам из множеств, которые охватывают исходные суперпозиционные числа. Например: [-3, 6] — [-12, 7] = [-10, 18].
Для суперпозиционных чисел доступны все действия, которые доступны и для вещественных чисел.

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

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

По какому такому определению? Вот у вас есть число x=[-1, 1], чему равно 1/x?


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

Ээээ… так "можно производить" или "невозможно посчитать"?


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

Это какое-то ваше собственное определение "простых feedforward", я так понимаю?

По какому такому определению?

Результатом применения любой унарной операции к суперпозиционному числу, это суперпозиционное число, которое охватывает множество чисел, которые могут быть получены в результате применения унарной операции к любому числу из множества, которое охватывает исходное суперпозиционное число. Например: sin([-pi, pi]) = [-1, 1]. Результатом применения любой бинарной операции над суперпозиционными числами, это суперпозиционное число, которое охватывает множество чисел, которые могут быть получены в результате применения бинарной операции к двум любым числам из множеств, которые охватывают исходные суперпозиционные числа. Например: [-3, 6] — [-12, 7] = [-10, 18].


Вот у вас есть число x=[-1, 1], чему равно 1/x?
(-бесконечность,0)(0, бесконечность)
Ээээ… так «можно производить» или «невозможно посчитать»?
Можем ли мы в математическом смысле вычислить выражение TREE(3)*TREE(3) — да можем, а использовать для вычисления в реальных компьютерных программах — нет, не хватит места для хранения в двоичном виде.
Это какое-то ваше собственное определение «простых feedforward», я так понимаю?

Да. Но в различных источниках по которым я изучал нейронные сети, всегда рассматривалась нейронная сеть в которой каждый сигнал поступает на вход каждого нейрона следующего слоя и сигналы умножались на веса, а сумма каждого сигнала перемноженного на вес поступает на вход функции активации, в последствии я изучал и более сложные feedforward сети и у меня почему то отложилось в голове название таких сетей как «простые feedforward», это мой недочёт, но я и не идеален и не претендую на звание лучший писатель.
Результатом применения любой унарной операции к суперпозиционному числу, это суперпозиционное число, которое охватывает множество чисел, которые могут быть получены в результате применения унарной операции к любому числу из множества, которое охватывает исходное суперпозиционное число.

Проблема в том, что 0 входит в множество [-1, 1], но операцию 1/0 производить нельзя. Поэтому ваше определение не работает.


(-бесконечность,0)(0, бесконечность)

Угу. А x/x?


Можем ли мы в математическом смысле вычислить выражение TREE(3)*TREE(3) — да можем

… а точно можем?


Да.

Так вот, даже если принять это определение на веру, то это получится очень узкий (и, прямо скажем, не так уж часто применимый сейчас) класс сетей. Ну и какой тогда смысл?

в начале вычисляем y([0, 5]) = ([0, 5])^2 + 1 = [0, 25] + 1 = [1, 26], затем вычислим y([5, 10]) = [5, 10]^2 + 1 = [25, 100] + 1 = [26, 101]. Как мы видим в первой половине значения варьируются от 1 до 26, а во второй от 26 до 101.

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

Вот пример функции, на которой ваш метод не работает: y=4*x^3 — 3*x, нужно найти максимум на участке [-0.9, 0.9].

Следуя вашему методу, делим отрезок пополам, получаем два сегмента: [-0.9, 0] и [0, 0.9]. Вычисляем значения функции на концах. f(-0.9)=-0.21, f(0)=0, f(0.9)=0.21, отсюда делаем ошибочный вывод о том, что функция меняется в пределах [-0.21, 0] на первом отрезке и в пределах [0, 0.21] — на втором. Ваш метод будет искать максимум на правом сегменте [0, 0.9].

Но на самом деле максимум находится на левом сегменте, а выводы относительно пределов изменения функции — ошибочны. Можете построить график и убедиться в этом.
Вы не правильно поняли, функция не рассматривается на концах, программист определяет бинарные и унарные операции, а затем в функцию подставляется x в виде суперпозиционного числа, то есть вычисления будут вот такими:
4*[0, 0.729] — 3 * [0, 0.9] = [0, 2.916] — [0, 2.7] = [-2.7, 2.916]
4*[-0.729, 0] — 3 * [-0.9, 0] = [-2.916, 0] — [-2.7, 0] = [-2.916, 2.7]
Но как видно, результат все равно не верный. Но алгоритм обучения нейронных сетей с помощью плотностных чисел всё ещё может быть пригодным для использования, поскольку в конце когда только один вес становиться плотностным числом, ошибка может в результате оказаться не значительной и алгоритм может подстроиться под ошибку. Но всё нужно смотреть на практике.
есть множество [a, b] и есть некое случайное число x принадлежащее множеству, предположим что если разделить множество на n равных частей, то x имеет некую вероятность принадлежать одной из частей

Похоже на это

Это прям один в один суперпозиционные числа.
Я гуглил «probability density function neural network» на 5-ти первых страницах ничего интересного нету, в основном построение плотности вероятности с помощью нейросетей, а не наоборот. Хотя найдено 59 700 000 раз.
Так а по предложенному мною варианту есть что-то интересное или похожее? Просто я сам нейросетями не увлекаюсь, поэтому и адекватно оценить релевантность результатов не смогу. Другое дело — алгоритмы сжатия изображения/аудио, тут смогу поддержать беседу или даже подкинуть идей) Хотя сам считаю эту тему чересчур избитой, чтобы тратить ресурсы на практическую реализацию.
Так а по предложенному мною варианту есть что-то интересное или похожее?
Нашлось нечто похожее на вариант с «суперпозиционными» числами, но чего то похожего на вариант с «плотностными» числами, не увидел.
Другое дело — алгоритмы сжатия изображения/аудио, тут смогу поддержать беседу или даже подкинуть идей)
Я не то, что сильно такой тематикой интересуюсь, просто размышляя над решением одной задачи, я пришёл к алгоритму с помощью которого можно сжимать данные с потерями и в голову сразу пришла мысль о изображениях, аудио, и видео. В реализации алгоритма нет ни каких сложностей, его можно реализовать хоть сейчас, но реализация и испытания займут от недели до месяца, а я в данный момент занят своим компилятором, как допишу его, на своём языке и реализую этот алгоритм и сравню его с jpeg.
Я согласен с MichaelBorisov, что автором изобретено понятие плотности вероятности.
Если уж говорить о «суперпозиции» — тогда лучше рассматривать разложение функции в ряд Фурье.
Просто иногда беда программистов, занимающихся нейросетями и машинным обучением в том, что они не знают основ матанализа.

У вас в примере написано "sin([-pi, pi]=[-1,1]". А чему будет равно "1/sin([-pi, pi])". Или "1/[-1, 1]"?

(-бесконечность, -1], [1, бесконечность)

Вау! Из отношения целого и "суперпозиционного " числа мы получим два "суперпозиционных" числа. Да ещё и бесконечность есть (хотя бесконечность — это не число). А что тогда будет за число, которое записывается в виде следующего выражения: "1/sin((- бесконечность, бесконечность))"?

Вау! Из отношения целого и «суперпозиционного » числа мы получим два «суперпозиционных» числа
Получаем одно суперпозиционное число, состоящее из 2 промежутков.
хотя бесконечность — это не число
И что? В математике бесконечность встречается сплошь и рядом, а при обучении нейронных сеть, если функция активации подобрана корректно, бесконечность мы никогда и не получим.
«1/sin((- бесконечность, бесконечность))»
(-бесконечность, 0) (0, бесконечность)
  1. Значит ваш вид чисел может состоять не просто из промежутка, а из двух, а то и более промежутков. А как, тогда, простите, определяется какие промежутки к каким числам относятся? Никакого дополнительного символа нет, более того, вы сами в статье пишете "числа как олицетворение вещественного числа, находящегося в неком промежутке, а в результате получаем промежуток, в котором может быть результат действий, производимых над числами". Нигде не говорится, что ваши суперпозиционные числа могут состоять из двух или более промежутков. Более того, если мы просто полставляя такие числа в функцию получаем два числа, то классическое определение функции больше не подходит. И это логично, потому что вы не определили в своей арифметике, что будет, если сложить число, состоящее из двух промежутков, с числом, состоящим из одного промежутка. А может ли ваше число состоять из нуля промежутков?
  2. На счёт вопроса про бесконечность. Помните, как вы ловко складывали промежутки по своим правилам? А теперь сложите промежутки с бесконечностью с каким-нибудь (1,3) промежутком. Боюсь, что этого сделать невозможно, потому что бесконечность является понятием (число, больше любого наперед заданного, как например для плюс бесконечности). И чтобы применить ваши числа в нейронных сетях нужно не просто уметь их складывать и вычитать, нужно уметь находить производную (от такого хитрого аргумента), функции более высокого порядка, проверить это все на "бумаге", и лишь потом приступать к реализации и моделировании в компьютерах.
  3. Удивлён таким способом расчёта. По предыдущему примеру здесь должно было получиться бесконечное число промежутков, но они у вас по какой-то магии слились в два.
Значит ваш вид чисел может состоять не просто из промежутка, а из двух, а то и более промежутков. А как, тогда, простите, определяется какие промежутки к каким числам относятся? Никакого дополнительного символа нет
Так я и не пытаюсь ввести в математику новые числа, эта статья об обучении нейронных сетей. Видимо для того, чтобы абстрагироваться от вычислений, мой мозг придумал некие числа, я мог бы вообще не упоминать эти числа, но поскольку в статье я не только написал об алгоритме, но и о том как я его придумал, то я и написал о числах. Поскольку при обучении нейронных сетей не будет возникать ситуаций, когда одно число состоит из нескольких промежутков, никакого символа придумывать не нужно.
Нигде не говорится, что ваши суперпозиционные числа могут состоять из двух или более промежутков.

Цитата из статьи:
Хотя и в суперпозиционных числах, и в плотностных числах может быть сколь угодно много отрезков возможных чисел (например: суперпозиционное число состоящее из 3 отрезков ([0, 1], [20, 40], [100, 101]) ), поскольку я эти числа использую только в контексте обучения нейронных сетей, то всё что я говорю ниже, относиться к плотностным числам которые состоят из 1 отрезка ограниченного 2-мя вещественными числами.


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

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

Число состоящее из двух промежутков — ([0, 1], [2, 3])
Число состоящее из одного промежутка — [12, 17]
Сумма чисел = [12, 20]
А может ли ваше число состоять из нуля промежутков?
Нет
На счёт вопроса про бесконечность. Помните, как вы ловко складывали промежутки по своим правилам? А теперь сложите промежутки с бесконечностью с каким-нибудь (1,3) промежутком. Боюсь, что этого сделать невозможно

При обучении нейронных сетей это и не нужно.
И чтобы применить ваши числа в нейронных сетях нужно не просто уметь их складывать и вычитать, нужно уметь находить производную
Алгоритм обучения без вычисления производной уже указан в статье.
Удивлён таким способом расчёта. По предыдущему примеру здесь должно было получиться бесконечное число промежутков, но они у вас по какой-то магии слились в два.
Синус может быть вычислен для любого вещественного числа, но результат всегда будет в промежутке от -1 до 1, а результатом выражения 1/x, где x принадлежит множеству [-1, 1] может быть любое число кроме 0.
Я ещё забыл упомянуть про дельта-функцию, это ещё одно ваше переизобретение. В тексте статьи вы ее назвали f1, стремящуюся к бесконечности в окрестности точки.

К сожалению, для нейронных сетей идея применения матаппарата распределений случайных величин неприменима, как бы не ощущался потенциал.
Спасибо за статью.
получится часть, в которых минимальное и максимальное значение функции очень близко к 1, например [pi * 999999 / 2000000, pi / 2],

А как найти границы этой части для [pi * 999999 / 2000000, pi / 2]?

А как найти границы этой части для [pi * 999999 / 2000000, pi / 2]?
Функция y = sin (x) выбрана для того, чтобы наглядно проилюстрировать идею. Для того, чтобы находить на этой функции максимум, не нужно делить график на 2 части, мы и так знаем как ведет себя sin x. А тому как находить такие границы уже при обучении нейронных сетей, посвещенно примерно 40% статьи.
Sign up to leave a comment.

Articles