Лингвофорум

Общий раздел => Наука и техника => Математика => Тема начата: Yougi от августа 20, 2021, 14:00

Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 20, 2021, 14:00
 вот есть такая функция сигмоид, по русски S-образная кривая, или y(t)=1/(1+e^-t)
Как-то для упрощения вычислений её можно привести к виду, когда не надо е возводить в степень?
Хотя бы на промежутке t от 0 до 10?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Bhudh от августа 20, 2021, 17:22
Для упрощения ReLU берут.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Toman от августа 21, 2021, 00:33
Цитата: Yougi от августа 20, 2021, 14:00
Как-то для упрощения вычислений её можно привести к виду, когда не надо е возводить в степень?
Возведение некого фиксированного основания в степень вроде не шибко сложно. Можно делать хоть табличным способом - по разрядам или группам разрядов, если непосредственно аппаратно не поддерживается или невыгодно.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 21, 2021, 12:26
 
ЦитироватьМожно делать хоть табличным способом
не, это понятно... Мне как-то один грамотный мужик ( он доктор наук был, правда ) упрощал эту формулу до бесстепенной формы, но это было 20 лет назад и я уже не помню, как он это делал.
ЦитироватьДля упрощения ReLU берут.
Где дают, то, что берут? Ничего не ясно...
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: kemerover от августа 21, 2021, 13:15
Логистическая функция это примитивная трансформация гиперболического тангенса. Но навряд ли это будет упрощением.

Можно в ряд Тейлора разложить, только надо точность посмотреть.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 21, 2021, 18:58
ЦитироватьДля упрощения ReLU берут.
А, теперь понял. Не, я не активирую нейросети, я моторы разгоняю по сигмоиде.
ЦитироватьМожно в ряд Тейлора разложить,
что-то не нашёл в интернете готового решения, а Бронштейн с примкнувшим к нему Семендяевым тоже так хорошо спрятались на книжной полке, что не попадаются на глаза.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: yurifromspb от августа 21, 2021, 22:13
Если гиперболический тангенс поддерживается аппаратно, то можно и ускорить, но не на порядок.
Sigma(x) = (tanh(x*0.5)+1.0)*0.5
А так, только заменять на что-то похожее, но быстрее.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: yurifromspb от августа 21, 2021, 23:50
Можно использовать разложение в непрерывную дробь, экспериментально подобрать достаточное число членов, оптимизировать конечную формулу.
http://bitman.name/math/article/1910/488/
[tex]\tanh x = {{e^{2x} -1} \over {e^{2x} + 1}} = {x \over {1 + {x^2 \over {3+{x^2 \over 5+...}}}}}[/tex]
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: kemerover от августа 22, 2021, 00:10
Цитата: 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)
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: yurifromspb от августа 22, 2021, 00:59
Цитата: yurifromspb от августа 21, 2021, 23:50
Можно использовать разложение в непрерывную дробь, экспериментально подобрать достаточное число членов, оптимизировать конечную формулу.
http://bitman.name/math/article/1910/488/
[tex]\tanh x = {{e^{2x} -1} \over {e^{2x} + 1}} = {x \over {1 + {x^2 \over {3+{x^2 \over 5+...}}}}}[/tex]
А нет, эта штука расходится при |x|>1. Зато при |x|<=1 быстро сходится.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 22, 2021, 09:54
Я так и не понял: разложение ех в степенной ряд устроит?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 22, 2021, 10:48
А если так:
еn≈(1+n/1024)1024

Для n=10  получаем 20983, а должно быть 22026
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: maratique от августа 22, 2021, 17:33
Интерполяция многочленом Лагранжа по Чебышёвским узлам.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 23, 2021, 11:04
ЦитироватьКак там может потребоваться ускорение вычисления сигмоиды?
да очень просто. Есть задатчик скорости, неважно какой, скорость меняется от s1 до s2; можно её менять по линейной рампе с постоянным ускорением, можно по сигмоиде, что лучше для регулятора скорости.
В малобюджетных контроллерах и ПЛК никакой аппаратной математики обычно нет, и вычисления с плавучкой жрут немеряно ресурсов. Поэтому обычно сигмоиду аппроксимируют тремя отрезками; занятый изобретением собственного драйвера BDLC мотора решил я попробовать другой путь - но, судя по тоннам статей в IEEE Transactions не такое это простое дело - быстренько посчитать энту логистическую кривую...
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 12:04
А с каким шагом будет изменяться показатель степени на интервале от 1 до 10?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 23, 2021, 12:11
 А это от заданного ускорения зависит.
Если у нас ускорение высеченно в камне, тогда проще табличку сделать.
А если меняется - тогда пересчитывать надо.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 12:15
Хотя бы минимальный шаг известен?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: maratique от августа 23, 2021, 12:39
Если нельзя табличку, то, может, можно рекуррентное  соотношение? У логистической кривой довольно классное дифференциальное уравнение:
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). Можно другим методом уменьшить погрешность, но и сложность возрастет.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 12:45
Если t будет изменяться на интервале от 1 до 10 с шагом 0,01, то для расчёта еt с помощью двух операций умножения понадобится запомнить 30 чисел.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Hellerick от августа 23, 2021, 12:59
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?

А вам какая точность нужна?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: 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?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: yurifromspb от августа 23, 2021, 13:23
Цитата: Yougi от августа 23, 2021, 11:04
ЦитироватьКак там может потребоваться ускорение вычисления сигмоиды?
да очень просто. Есть задатчик скорости, неважно какой, скорость меняется от s1 до s2; можно её менять по линейной рампе с постоянным ускорением, можно по сигмоиде, что лучше для регулятора скорости.
В малобюджетных контроллерах и ПЛК никакой аппаратной математики обычно нет, и вычисления с плавучкой жрут немеряно ресурсов. Поэтому обычно сигмоиду аппроксимируют тремя отрезками; занятый изобретением собственного драйвера BDLC мотора решил я попробовать другой путь - но, судя по тоннам статей в IEEE Transactions не такое это простое дело - быстренько посчитать энту логистическую кривую...
Тогда зачем именно логистическая функция? Пойдёт любая сигмоида, типа x/sqrt(1+x*x).
Или, не знаю, если там только целые числа, можно взять бином Ньютона и аккумулирвать и масштабировать. Будет табличка. Или я не понял, в чём проблема.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: 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.

Метод святого подгона.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 14:12
Цитата: 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   ???
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: maratique от августа 23, 2021, 14:17
ЦитироватьLa metodo de la ajusta santa.

Метод святого подгона.
Минимизацией   [tex]\int\limits_a^b(e^x - P(x))^2dx[/tex]   что ли?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: 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
Минимизацией   [tex]\int\limits_a^b(e^x - P(x))^2dx[/tex]   что ли?

Me ia minimi la cuadro masima de difere de logaritmos.

Я минимизировал максимальный квадрат разностей логарифмов.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: maratique от августа 23, 2021, 15:02
Не многовато ли 6 умножений для такой точности?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 15:33
Цитата: 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
Минимизацией   [tex]\int\limits_a^b(e^x - P(x))^2dx[/tex]   что ли?

Me ia minimi la cuadro masima de difere de logaritmos.

Я минимизировал максимальный квадрат разностей логарифмов.

Я же просил е10.

А с достаточной ли точностью посчитана вся функция?
  Пока афтар не раскроет, чего хочет - непонятно.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 23, 2021, 20:12
ЦитироватьПока афтар не раскроет, чего хочет - непонятно.
Чего же тут непонятного - избавиться от возведения е в степень. В идеале - ещё и целочисленную математику.  А если таблицу делать - то без разницы, будет это степень е или уже посчитанное значение функции.
Посмотрел, что в интернетах пишут - проще использовать функцию y=x2*(3-2x) при x от 0 до 1.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 20:23
Так шаг показателя степени  0,01 в интервале от 0 до 9.99 устроит?
Можно использовать целые числа в таблице для нахождения еt.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 23, 2021, 21:25
ЦитироватьТак шаг показателя степени  0,01 в интервале от 0 до 9.99 устроит?
Вполне. Хватит, наверное и 0.05.
ЦитироватьМожно использовать целые числа в таблице для нахождения еt.
А вот тут не очень понятно. Имеется в виду индекс таблицы? Или целочисленные значения e^-t?
ЦитироватьПосмотрел, что в интернетах пишут - проще использовать функцию y=x2*(3-2x) при x от 0 до 1.
Посчитал, построил график... Не, сигмоида лучше...
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 21:49
Цитата: Yougi от августа 23, 2021, 21:25
ЦитироватьТак шаг показателя степени  0,01 в интервале от 0 до 9.99 устроит?
Вполне. Хватит, наверное и 0.05.
ЦитироватьМожно использовать целые числа в таблице для нахождения еt.
А вот тут не очень понятно. Имеется в виду индекс таблицы? Или целочисленные значения e^-t?
ЦитироватьПосмотрел, что в интернетах пишут - проще использовать функцию y=x2*(3-2x) при x от 0 до 1.
Посчитал, построил график... Не, сигмоида лучше...

Если вычислять еt, то можно использовать целые числа в таблице, и тогда результат умножения трёх целых чисел, тоже будет целым числом, в котором после вычислений надо будет поставить запятую.
С функцией е-t, наверно, будет аналогично.

А вот про саму сигмоиду - наверно нет, но думать не хочется.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 23, 2021, 22:03
Хотя, наверно тоже можно.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Hellerick от августа 24, 2021, 09:01
p(t) = t^7/6702+t^5/257+t^3/12+t/2
y(p) = 1/(sqrt(4*p^2+1)-2*p+1)


ExactApprox
-100,000050,00013
-90,000120,00025
-80,000340,00051
-70,000910,00113
-60,002470,00268
-50,006690,00676
-40,017990,01784
-30,047430,04731
-20,119200,11938
-10,268940,26900
00,500000,50000
10,731060,73100
20,880800,88062
30,952570,95269
40,982010,98216
50,993310,99324
60,997530,99732
70,999090,99887
80,999660,99949
90,999880,99975
100,999950,99987

On pote usa simple p = t^3/12+t/2, lo ance dona resultas bastante prosima.

Можно использовать просто p = t^3/12+t/2, тоже получается довольно точно.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 24, 2021, 09:57
ЦитироватьМожно использовать просто p = t^3/12+t/2, тоже получается довольно точно.
Только получается не совсем сигмоида. Вернее, совсем не сигмоида.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 24, 2021, 10:19
Пример:

е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
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 24, 2021, 10:25
ЦитироватьПример:
Понятно, спасибо.
Только вот математика даже в 32 бита не укладывается.
Похоже, придётся всё-таки аппроксимацию отрезками колхозить.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Волод от августа 24, 2021, 10:37
Я ж для наглядности,  можно усложнив алгоритм, укоротить числа.
Можно добавив чисел в таблицу, вместо двух умножений, сделать одно.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Hellerick от августа 24, 2021, 14:15
Цитата: Yougi от августа 24, 2021, 09:57
Только получается не совсем сигмоида. Вернее, совсем не сигмоида.

E cual es nonsigmoidal sur lo?

А что в ней несигмоидного?
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Toman от августа 24, 2021, 14:26
Цитата: Yougi от августа 24, 2021, 09:57
Только получается не совсем сигмоида. Вернее, совсем не сигмоида.
А чем плох, например, тупой вариант из трёх частей: начальный параболический, потом прямой отрезок, и завершающий параболический? Эти ваши "настоящие" сигмоиды имеют ту неприятную особенность, что у них бесконечно длинные "хвосты", а значит, по красивой сигмоиде проблематично оперативно среагировать на внезапно приходящий входной сигнал. А вот такие варианты как парабола-прямая-парабола, а то и вообще синусоида (если не пугает бо́льшая временная растянутость перехода либо большее пиковое значение ускорения) - строго ограничены по длине, и потому позволяют предельно оперативно среагировать.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: maratique от августа 24, 2021, 14:41
Так ведь вообще есть точное рекуррентное уравнение:
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).

То есть два умножения на шаге и абсолютная почти точность.
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Yougi от августа 24, 2021, 15:57
ЦитироватьА что в ней несигмоидного?
на 180 градусов повёрнута от того, что мне нужно.
Цитироватьа то и вообще синусоида
А вот, кстати, интересная идейка. Таблица синуса у меня уже есть в программе, но для других целей.
Можно по куску -pi/2 - pi/2 разгоняться.
ЦитироватьТак ведь вообще есть точное рекуррентное уравнение:
Э-э-э... Коллеги, не забывайте - я ведь не настоящий математик, я пятитомник Смирнова в макулатуре нашёл...
Название: Упрощённый алгоритм расчёта функции sigmoid
Отправлено: Hellerick от августа 24, 2021, 16:40
Цитата: Yougi от августа 24, 2021, 15:57
ЦитироватьА что в ней несигмоидного?
на 180 градусов повёрнута от того, что мне нужно.
:what: