вот есть такая функция сигмоид, по русски S-образная кривая, или y(t)=1/(1+e^-t)
Как-то для упрощения вычислений её можно привести к виду, когда не надо е возводить в степень?
Хотя бы на промежутке t от 0 до 10?
Для упрощения ReLU берут.
Цитата: Yougi от августа 20, 2021, 14:00
Как-то для упрощения вычислений её можно привести к виду, когда не надо е возводить в степень?
Возведение некого фиксированного основания в степень вроде не шибко сложно. Можно делать хоть табличным способом - по разрядам или группам разрядов, если непосредственно аппаратно не поддерживается или невыгодно.
ЦитироватьМожно делать хоть табличным способом
не, это понятно... Мне как-то один грамотный мужик ( он доктор наук был, правда ) упрощал эту формулу до бесстепенной формы, но это было 20 лет назад и я уже не помню, как он это делал.
ЦитироватьДля упрощения ReLU берут.
Где дают, то, что берут? Ничего не ясно...
Логистическая функция это примитивная трансформация гиперболического тангенса. Но навряд ли это будет упрощением.
Можно в ряд Тейлора разложить, только надо точность посмотреть.
ЦитироватьДля упрощения ReLU берут.
А, теперь понял. Не, я не активирую нейросети, я моторы разгоняю по сигмоиде.
ЦитироватьМожно в ряд Тейлора разложить,
что-то не нашёл в интернете готового решения, а Бронштейн с примкнувшим к нему Семендяевым тоже так хорошо спрятались на книжной полке, что не попадаются на глаза.
Если гиперболический тангенс поддерживается аппаратно, то можно и ускорить, но не на порядок.
Sigma(x) = (tanh(x*0.5)+1.0)*0.5
А так, только заменять на что-то похожее, но быстрее.
Можно использовать разложение в непрерывную дробь, экспериментально подобрать достаточное число членов, оптимизировать конечную формулу.
http://bitman.name/math/article/1910/488/
Цитата: Yougi от августа 21, 2021, 18:58
А, теперь понял. Не, я не активирую нейросети, я моторы разгоняю по сигмоиде.
Вручную что ли? Как там может потребоваться ускорение вычисления сигмоиды?
Цитата: Yougi от августа 21, 2021, 18:58
что-то не нашёл в интернете готового решения, а Бронштейн с примкнувшим к нему Семендяевым тоже так хорошо спрятались на книжной полке, что не попадаются на глаза.
https://www.wolframalpha.com/input/?i=Taylor series of sigmoid around 5 (https://www.wolframalpha.com/input/?i=Taylor+series+of+sigmoid+around+5)
Цитата: yurifromspb от августа 21, 2021, 23:50
Можно использовать разложение в непрерывную дробь, экспериментально подобрать достаточное число членов, оптимизировать конечную формулу.
http://bitman.name/math/article/1910/488/
![\tanh x = {{e^{2x} -1} \over {e^{2x} + 1}} = {x \over {1 + {x^2 \over {3+{x^2 \over 5+...}}}}} [tex]\tanh x = {{e^{2x} -1} \over {e^{2x} + 1}} = {x \over {1 + {x^2 \over {3+{x^2 \over 5+...}}}}}[/tex]](https://latex.codecogs.com/png.latex?\tanh x = {{e^{2x} -1} \over {e^{2x} + 1}} = {x \over {1 + {x^2 \over {3+{x^2 \over 5+...}}}}})
А нет, эта штука расходится при |x|>1. Зато при |x|<=1 быстро сходится.
Я так и не понял: разложение ех в степенной ряд устроит?
А если так:
еn≈(1+n/1024)1024
Для n=10 получаем 20983, а должно быть 22026
Интерполяция многочленом Лагранжа по Чебышёвским узлам.
ЦитироватьКак там может потребоваться ускорение вычисления сигмоиды?
да очень просто. Есть задатчик скорости, неважно какой, скорость меняется от s1 до s2; можно её менять по линейной рампе с постоянным ускорением, можно по сигмоиде, что лучше для регулятора скорости.
В малобюджетных контроллерах и ПЛК никакой аппаратной математики обычно нет, и вычисления с плавучкой жрут немеряно ресурсов. Поэтому обычно сигмоиду аппроксимируют тремя отрезками; занятый изобретением собственного драйвера BDLC мотора решил я попробовать другой путь - но, судя по тоннам статей в IEEE Transactions не такое это простое дело - быстренько посчитать энту логистическую кривую...
А с каким шагом будет изменяться показатель степени на интервале от 1 до 10?
А это от заданного ускорения зависит.
Если у нас ускорение высеченно в камне, тогда проще табличку сделать.
А если меняется - тогда пересчитывать надо.
Хотя бы минимальный шаг известен?
Если нельзя табличку, то, может, можно рекуррентное соотношение? У логистической кривой довольно классное дифференциальное уравнение:
y' = y(1 - y),
y(0)=0.5
То есть примерно y(x+h)=y(1+h(1-y))
Например, для h=1:
y —> y(2-y)
y1~0.75, тогда как на самом деле у(1)= 0.731
y2~0.9375, а у(2)= 0.88
y3~0.996, а у(3)= 0.953
Погрешность метода Эйлера — О(h). Можно другим методом уменьшить погрешность, но и сложность возрастет.
Если t будет изменяться на интервале от 1 до 10 с шагом 0,01, то для расчёта еt с помощью двух операций умножения понадобится запомнить 30 чисел.
y(t) ≈ (0,00506*t^5+0,4399*t^4-1,96*t^3+4,196*t^2-0,964*t+1)/(0,00506*t^5+0,4399*t^4-1,96*t^3+4,196*t^2-0,964*t+2)
E cual esatia tu nesesa?
А вам какая точность нужна?
А откуда это еt ~ 0,00506*t^5+0,4399*t^4-1,96*t^3+4,196*t^2-0,964*t+1?
Цитата: Yougi от августа 23, 2021, 11:04
ЦитироватьКак там может потребоваться ускорение вычисления сигмоиды?
да очень просто. Есть задатчик скорости, неважно какой, скорость меняется от s1 до s2; можно её менять по линейной рампе с постоянным ускорением, можно по сигмоиде, что лучше для регулятора скорости.
В малобюджетных контроллерах и ПЛК никакой аппаратной математики обычно нет, и вычисления с плавучкой жрут немеряно ресурсов. Поэтому обычно сигмоиду аппроксимируют тремя отрезками; занятый изобретением собственного драйвера BDLC мотора решил я попробовать другой путь - но, судя по тоннам статей в IEEE Transactions не такое это простое дело - быстренько посчитать энту логистическую кривую...
Тогда зачем именно логистическая функция? Пойдёт любая сигмоида, типа x/sqrt(1+x*x).
Или, не знаю, если там только целые числа, можно взять бином Ньютона и аккумулирвать и масштабировать. Будет табличка. Или я не понял, в чём проблема.
Цитата: maratique от августа 23, 2021, 13:09
А откуда это еt ~ 0,00506*t^5+0,4399*t^4-1,96*t^3+4,196*t^2-0,964*t+1?
La metodo de la ajusta santa.
Метод святого подгона.
Цитата: Hellerick от августа 23, 2021, 13:53
Цитата: maratique от августа 23, 2021, 13:09
А откуда это еt ~ 0,00506*t^5+0,4399*t^4-1,96*t^3+4,196*t^2-0,964*t+1?
La metodo de la ajusta santa.
Метод святого подгона.
Скоко будет по этой формуле
е10 ???
ЦитироватьLa metodo de la ajusta santa.
Метод святого подгона.
Минимизацией
![\int\limits_a^b(e^x - P(x))^2dx [tex]\int\limits_a^b(e^x - P(x))^2dx[/tex]](https://latex.codecogs.com/png.latex?\int\limits_a^b(e^x - P(x))^2dx)
что ли?
Цитата: Волод от августа 23, 2021, 14:12
Скоко будет по этой формуле е10 ???
Exact Approx.
0 0.50000 0.50000
1 0.73106 0.73096
2 0.88080 0.88062
3 0.95257 0.95195
4 0.98201 0.98265
5 0.99331 0.99324
6 0.99753 0.99700
7 0.99909 0.99851
8 0.99966 0.99918
9 0.99988 0.99952
10 0.99995 0.99970
Цитата: maratique от августа 23, 2021, 14:17
Минимизацией
что ли?
Me ia minimi la cuadro masima de difere de logaritmos.
Я минимизировал максимальный квадрат разностей логарифмов.
Не многовато ли 6 умножений для такой точности?
Цитата: Hellerick от августа 23, 2021, 14:41
Цитата: Волод от августа 23, 2021, 14:12
Скоко будет по этой формуле е10 ???
Exact Approx.
0 0.50000 0.50000
1 0.73106 0.73096
2 0.88080 0.88062
3 0.95257 0.95195
4 0.98201 0.98265
5 0.99331 0.99324
6 0.99753 0.99700
7 0.99909 0.99851
8 0.99966 0.99918
9 0.99988 0.99952
10 0.99995 0.99970
Цитата: maratique от августа 23, 2021, 14:17
Минимизацией
что ли?
Me ia minimi la cuadro masima de difere de logaritmos.
Я минимизировал максимальный квадрат разностей логарифмов.
Я же просил е
10.
А с достаточной ли точностью посчитана вся функция?
Пока афтар не раскроет, чего хочет - непонятно.
ЦитироватьПока афтар не раскроет, чего хочет - непонятно.
Чего же тут непонятного - избавиться от возведения е в степень. В идеале - ещё и целочисленную математику. А если таблицу делать - то без разницы, будет это степень е или уже посчитанное значение функции.
Посмотрел, что в интернетах пишут - проще использовать функцию y=x2*(3-2x) при x от 0 до 1.
Так шаг показателя степени 0,01 в интервале от 0 до 9.99 устроит?
Можно использовать целые числа в таблице для нахождения еt.
ЦитироватьТак шаг показателя степени 0,01 в интервале от 0 до 9.99 устроит?
Вполне. Хватит, наверное и 0.05.
ЦитироватьМожно использовать целые числа в таблице для нахождения еt.
А вот тут не очень понятно. Имеется в виду индекс таблицы? Или целочисленные значения e^-t?
ЦитироватьПосмотрел, что в интернетах пишут - проще использовать функцию y=x2*(3-2x) при x от 0 до 1.
Посчитал, построил график... Не, сигмоида лучше...
Цитата: Yougi от августа 23, 2021, 21:25
ЦитироватьТак шаг показателя степени 0,01 в интервале от 0 до 9.99 устроит?
Вполне. Хватит, наверное и 0.05.
ЦитироватьМожно использовать целые числа в таблице для нахождения еt.
А вот тут не очень понятно. Имеется в виду индекс таблицы? Или целочисленные значения e^-t?
ЦитироватьПосмотрел, что в интернетах пишут - проще использовать функцию y=x2*(3-2x) при x от 0 до 1.
Посчитал, построил график... Не, сигмоида лучше...
Если вычислять е
t, то можно использовать целые числа в таблице, и тогда результат умножения трёх целых чисел, тоже будет целым числом, в котором после вычислений надо будет поставить запятую.
С функцией е
-t, наверно, будет аналогично.
А вот про саму сигмоиду - наверно нет, но думать не хочется.
Хотя, наверно тоже можно.
p(t) = t^7/6702+t^5/257+t^3/12+t/2
y(p) = 1/(sqrt(4*p^2+1)-2*p+1)
| Exact | Approx |
-10 | 0,00005 | 0,00013 |
-9 | 0,00012 | 0,00025 |
-8 | 0,00034 | 0,00051 |
-7 | 0,00091 | 0,00113 |
-6 | 0,00247 | 0,00268 |
-5 | 0,00669 | 0,00676 |
-4 | 0,01799 | 0,01784 |
-3 | 0,04743 | 0,04731 |
-2 | 0,11920 | 0,11938 |
-1 | 0,26894 | 0,26900 |
0 | 0,50000 | 0,50000 |
1 | 0,73106 | 0,73100 |
2 | 0,88080 | 0,88062 |
3 | 0,95257 | 0,95269 |
4 | 0,98201 | 0,98216 |
5 | 0,99331 | 0,99324 |
6 | 0,99753 | 0,99732 |
7 | 0,99909 | 0,99887 |
8 | 0,99966 | 0,99949 |
9 | 0,99988 | 0,99975 |
10 | 0,99995 | 0,99987 |
On pote usa simple
p = t^3/12+t/2, lo ance dona resultas bastante prosima.
Можно использовать просто
p = t^3/12+t/2, тоже получается довольно точно.
ЦитироватьМожно использовать просто p = t^3/12+t/2, тоже получается довольно точно.
Только получается не совсем сигмоида. Вернее, совсем не сигмоида.
Пример:
е3,15=е(3+0,1+0,05) = е3хе0.1хе0.05 --- 2008554х110517х105127=23336024432917086
Из таблицы:
е0,05=1,05127 ---105127
е0,1=1,10517-----110517
...................................
е3=20,08554 -----2008554
f=23336024432917086/(23336024432917086+1 000 000 000 000 000)≈0,95891
ЦитироватьПример:
Понятно, спасибо.
Только вот математика даже в 32 бита не укладывается.
Похоже, придётся всё-таки аппроксимацию отрезками колхозить.
Я ж для наглядности, можно усложнив алгоритм, укоротить числа.
Можно добавив чисел в таблицу, вместо двух умножений, сделать одно.
Цитата: Yougi от августа 24, 2021, 09:57
Только получается не совсем сигмоида. Вернее, совсем не сигмоида.
E cual es nonsigmoidal sur lo?
А что в ней несигмоидного?
Цитата: Yougi от августа 24, 2021, 09:57
Только получается не совсем сигмоида. Вернее, совсем не сигмоида.
А чем плох, например, тупой вариант из трёх частей: начальный параболический, потом прямой отрезок, и завершающий параболический? Эти ваши "настоящие" сигмоиды имеют ту неприятную особенность, что у них бесконечно длинные "хвосты", а значит, по красивой сигмоиде проблематично оперативно среагировать на внезапно приходящий входной сигнал. А вот такие варианты как парабола-прямая-парабола, а то и вообще синусоида (если не пугает бо́льшая временная растянутость перехода либо большее пиковое значение ускорения) - строго ограничены по длине, и потому позволяют предельно оперативно среагировать.
Так ведь вообще есть точное рекуррентное уравнение:
f(x+y) = f(x)f(y) / ( 1- f(x) - f(y) + 2f(x)f(y) )
А можно просто вычислять экспоненту по формуле f(x+h) = f(x)f(h), а потом находить 1/(1+f).
То есть два умножения на шаге и абсолютная почти точность.
ЦитироватьА что в ней несигмоидного?
на 180 градусов повёрнута от того, что мне нужно.
Цитироватьа то и вообще синусоида
А вот, кстати, интересная идейка. Таблица синуса у меня уже есть в программе, но для других целей.
Можно по куску -pi/2 - pi/2 разгоняться.
ЦитироватьТак ведь вообще есть точное рекуррентное уравнение:
Э-э-э... Коллеги, не забывайте - я ведь не настоящий математик, я пятитомник Смирнова в макулатуре нашёл...
Цитата: Yougi от августа 24, 2021, 15:57
ЦитироватьА что в ней несигмоидного?
на 180 градусов повёрнута от того, что мне нужно.
:what: