Форум программистов, компьютерный форум, киберфорум
ИИ, нейросети, LLM, ML, Data Science, ИИ-агенты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.66/88: Рейтинг темы: голосов - 88, средняя оценка - 4.66
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200

Простейшая нейронная сеть для аппроксимации параболы

08.05.2019, 16:18. Показов 21206. Ответов 229
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пробую написать свою первую нс из двух нейронов. На выходе простой сумматор.
http://images.vfl.ru/ii/155731... 2257_m.png
Задаю значения х = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] и по ним получаю y = (2*x-1)^2 + 0.1 см график ниже
http://images.vfl.ru/ii/155731... 2396_m.png
у - это зеленый точки (соединенные просто для понимания) синими линиями.
y = [0,74 0,46 0,26 0,14 0,1 0,14 0,26 0,46 0,74]. Исходные значения х и y задаю в квадрате 0-1 чтобы избавиться от нужды в нормализации.
Голубая линия - это выход сети (его обозначаю в дальнейшем y1), который получаю так:
сначала задаю случайные веса от -0.5 до 0.5: w = rand(6,1)-0.5; и по ним вычисляю выход сети: y1 = ynet(x, w);
(код на матлабе специально писал предельно просто, развернуто, без матриц)
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function y = ynet(x, w) % ф-ция вычисляет выход сети
for i = 1:numel(x)
  y(i,1) = forward(x(i), w);
end
end
 
function f = forward(x, w)
% y = w5*f(xw1+w3)+w6*f(xw2+w4)
f1 = smd(x*w(1)+w(3));
f2 = smd(x*w(2)+w(4));
f = w(5)*f1 + w(6)*f2;
end
 
function f = smd(x)
f = 1./(1+exp(-x)); % логический сигмойд
end
 
function df = dsm(x)
f = smd(x); df = f.*(1-f); % производная сигмойда
end
Задача ясна: изменить так значения весов w чтобы выходные значения y1 совпали или были близки к истинным y, т.е. минимизировать ф-цию ошибки сети E см ниже
http://images.vfl.ru/ii/155731... 2684_m.png
Пробую это делать тремя способами и ни один не работает и не понимаю почему.

Способ 1.
Нахожу производную от ф-ции ошибки сети по весам (как по формулам приведенным на рис выше) и соответственно ей изменяю веса (w1 = w - a*dE; w = w1)
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function full_x(w, x, y)
a = 0.1;
for i = 1:100
  dE = dE_analytic(w, x, y);
  w1 = w - a*dE;
  er1 = sumerr(x, y, w);
  er2 = sumerr(x, y, w1);
  if er1 < er2
    disp('err')
  else
    w = w1;
  end
end
end
 
function dE = dE_analytic(w, x, y) % ф-ция вычисляет градиент Е по весам w
y1 = ynet(x, w); d = y1 - y;
for i = 1:numel(x)
  de1(i) = d(i)*x(i)*dsm(x(i)*w(1)+w(3));
  de2(i) = d(i)*x(i)*dsm(x(i)*w(2)+w(4));
  de3(i) = d(i)*dsm(x(i)*w(1)+w(3));
  de4(i) = d(i)*dsm(x(i)*w(2)+w(4));
  de5(i) = d(i)*smd(x(i)*w(1)+w(3));
  de6(i) = d(i)*smd(x(i)*w(2)+w(4));
end
dE1 = w(5)*sum(de1);
dE2 = w(6)*sum(de2);
dE3 = w(5)*sum(de3);
dE4 = w(6)*sum(de4);
dE5 = sum(de5);
dE6 = sum(de6);
dE = [dE1 dE2 dE3 dE4 dE5 dE6]';
end
 
function err = sumerr(x, y, w)
temp = [];
for i = 1:numel(x)
  y1 = forward(x(i), w);
  d = y1 - y(i);
  temp = [temp; d*d];
end
err = sum(temp);
end
На выходе получаю (и всегда что-то близкое к этому)
http://images.vfl.ru/ii/155732... 2811_m.png
В чем тут дело? В чем ошибка? Через десяток итераций сеть перестает обучаться.

Способ 2.
Меняю веса по градиенту Е, но вычисленному после каждого x(i) и y(i), но результат такой же, похожий

Способ 3.
Меняю веса через вычисление обратного распространения ошибки
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function backprop(w, x, y)
a = 0.1;
for i = 1:40
  for j = 1:9
    y1 = ynet(x(j), w); d = y1 - y(j);
    d1 = d*w(5); d2 = d*w(6);
    df1 = dsm(x(j)*w(1)+w(3));
    df2 = dsm(x(j)*w(2)+w(4));
    w(1) = w(1)+d1*df1*x(j)*a;
    w(2) = w(2)+d2*df2*x(j)*a;
    w(3) = w(3)+d1*df1*a;
    w(4) = w(4)+d2*df2*a;
    f1 = smd(x(j)*w(1)+w(3));
    w(5) = w(5)+d1*f1*a;
    f2 = smd(x(j)*w(2)+w(4));
    w(6) = w(6)+d2*f2*a;
  end
end
end
Миниатюры
Простейшая нейронная сеть для аппроксимации параболы   Простейшая нейронная сеть для аппроксимации параболы   Простейшая нейронная сеть для аппроксимации параболы  

Простейшая нейронная сеть для аппроксимации параболы  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2019, 16:18
Ответы с готовыми решениями:

Нейронная сеть для аппроксимации
Написал скрипт, для нейронной сети, но при запуске ничего не происходит. clear all N=80; x=rand(1,N); y=(rand(1,N)-0.5)*4; ...

Нейронная сеть для функции
Как написать нейронную сеть для решения такой задачи: У меня есть нейронная сеть. Я хочу ее обучить, например возводить числа в куб. ...

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

229
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
12.05.2019, 10:22  [ТС]
Студворк — интернет-сервис помощи студентам
Я не могу привести именно те веса, т.к. они инициализируются каждый раз случайно w = rand(6,1)-0.5
ниже приведена новая инициализация
белая точка - это первый слева столбец (инициализированные веса), красная точка - это пятый столбец, коричневая - 10-тый столбец
Интересен график err (это суммарная ошибка как накопление er2: err = [err; er2]) - то что он растет. С чего бы это?
Цитата Сообщение от Excalibur921 Посмотреть сообщение
где точность 0.87 и 0.81 0.73
Странная у вас просьба, т.к. я же сказал что это вовсе не точность, а точечная ошибка, т.е. вовсе не ошибка всей сети
Миниатюры
Простейшая нейронная сеть для аппроксимации параболы  
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.05.2019, 14:28
Цитата Сообщение от tur9 Посмотреть сообщение
суммарная ошибка
Цитата Сообщение от tur9 Посмотреть сообщение
точечная ошибка
Понятно. Плохая идея делать свои функции оценки. Они непонятны всем остальным.

В моем понимании нужно так:
По Y графика точность ответа нейросети от 0 до 1 после N итераций, считается например как сумма квадратов разностей между f(x) параболы и f(x) ответ нейросети из например 30 значений по X.
По X графика номер итерации.


Инициализируем рандом веса, считаем точность. Ставим первую точку графика.
Делаем 10 итераций обучения, считаем точность, наносим на график т.д. например всего пусть 100 итераций. Сделайте такой график.
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
12.05.2019, 14:40  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Инициализируем рандом веса, считаем точность. Ставим первую точку графика.
Делаем 10 итераций обучения, считаем точность, наносим на график т.д. например всего пусть 100 итераций. Сделайте такой график.
Такой график приведен в последнем сообщении (нижний график) и он почему то иногда растет.
Это ф-ция sumerr
Matlab M
1
2
3
4
5
function err = sumerr(x, y, w)
y1 = ynet(x, w);
d = y1 - y; 
err = sum(d.*d);
end
только не 10 итераций, а 9
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Они непонятны всем остальным.
Что непонятного? Спросите.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.05.2019, 14:50
Цитата Сообщение от tur9 Посмотреть сообщение
нижний график
Может это верхний dd? Почему он заканчивается на Y 0.7?
Откуда волны, график должен быть ломанная. Может это ваш мат пакет сглаживает ломанную? Точки по X каждые 9 итераций? Там промежуточные значения откуда?
Волны похоже как периодически снова делаете рандом веса примерно каждые 10 итераций.
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
12.05.2019, 15:55  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Инициализируем рандом веса, считаем точность. Ставим первую точку графика.
Делаем 10 итераций обучения, считаем точность, наносим на график т.д. например всего пусть 100 итераций. Сделайте такой график.
Исправил одну ошибку (см ниже в коде) и написал как вы сказали:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
function targ_forforum2
x = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]';
y = (2*x - 1).^2 + 0.1;
pot(x,y); % график целевой ф-ции (синяя линия параболы)
w = rand(6,1)-0.5; % инициализация весов
y1 = ynet(x, w); % значения ф-ции для этих весов
plot(x,y1,'-c') % график полученных значений ф-ции для инициализированных весов w (голубая линия)
w = backprop(w, x, y); % после обучения получаю новые веса w
y1 = ynet(x, w); plot(x,y1,'-g') % график  ф-ции y1, которая должна аппроксимировать y (зеленая линия)
end
 
function w = backprop(w, x, y)
a = 0.1;
err = sumerr(x, y, w); % ошибка сети по всем точкам х до начала тренировки сети
for i = 1:100
  for j = 1:9
    y1 = ynet(x(j), w);
    [f1 df1] = sigmoid(x(j)*w(1)+w(3));
    [f2 df2] = sigmoid(x(j)*w(2)+w(4));
 
    d = y(j) - y1; % ошибка сети для точки x(j)
    d1 = d*w(5); d2 = d*w(6); % ошибки для 1-го и 2-го нейронов
    
    w(1) = w(1)+d1*df1*x(j)*a;
    w(2) = w(2)+d2*df2*x(j)*a;
    w(3) = w(3)+d1*df1*a;
    w(4) = w(4)+d2*df2*a;
    w(5) = w(5)+d*f1*a; % здесь была ошибка, было так: w(5) = w(5)+d1*f1*a;
    w(6) = w(6)+d*f2*a; % здесь была ошибка, было так: w(6) = w(6)+d2*f2*a;
  end
  temp = sumerr(x, y, w); % ошибка сети по всем точкам после обновления весов
  err = [err; temp];
end
pot(err,'err');
end
 
function y = ynet(x, w)
for i = 1:numel(x)
  y(i,1) = forward(x(i), w);
end
end
function f = forward(x, w)
% y = w5*f(xw1+w3)+w6*f(xw2+w4)
f1 = smd(x*w(1)+w(3));
f2 = smd(x*w(2)+w(4));
f = w(5)*f1 + w(6)*f2;
end
function f = smd(x)
f = 1./(1+exp(-x));
end
 
function err = sumerr(x, y, w)
y1 = ynet(x, w);
d = y1 - y; 
err = sum(d.*d);
end
 
function [f df] = sigmoid(x)
f = smd(x); df = f.*(1-f);
end

на нижнем графике показано изменение ошибки сети. Ошибка не меняется при достижении примерно 0.5 что согласуется с положением зеленой линии, на верхнем графике. Т.е. сеть почти не обучается.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.05.2019, 16:52
Цитата Сообщение от tur9 Посмотреть сообщение
график полученных значений ф-ции для инициализированных весов w (голубая линия)
Когда искал вручную 0.5 веса это очень мало. Хз почему их берут. Может попробовать рандом между -20 20?

Почему в видео скорость обучения берут константа 0.1? ИМХО логичней сделать это обратно пропорциональной зависимостью от точности ответа НС. Больше точность НС меньше скорость обучения.

Может нейросеть падает в ближайший локальный минимум? Начать обучения с больших значений например a=0.5 или даже 1.
Вроде скорость обучения это вообще гиперпараметр (то что подбирают экспериментом), построить графики разного цвета точности НС от итераций для разных скоростей 0.1, 0.3 до 1.

Добавлено через 35 минут
Тут два вида ошибок:
1) ошибка между f(x) НС и f(x) параболы одно значение то что для обучения.
2) сумма из 10 значений X для f(x) НС и f(x) параболы то что идет на графики.
Может берете сумму 10 ошибок где обучение НС? Поэтому она теряется.

Похоже это ваши графики ошибка 2 это dd, 1 это err.
Странно зачем надо вообще показывать err и почему тогда по X не такое количество итераций как для dd...
Странно почему для err по Y какие-то 1.25..1.7 что это хз.
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
12.05.2019, 16:58  [ТС]
Сделал так w = 20*rand(6,1)-10; Вот лучшее что получил:

Но ясно что это не решение и ясно также что дело не в скорости обучения, не в а = 0.1 или а = 0.001. Тут что то глубже в самом методе обучения, похоже что сделали нож из фольги и пытаемся им разрезать гвоздь.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
12.05.2019, 17:29
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Y какие-то 1.25..1.7 что это
Кто такой err и зачем?
Цитата Сообщение от tur9 Посмотреть сообщение
а = 0.1 или а = 0.001.
Цитата Сообщение от Excalibur921 Посмотреть сообщение
построить графики разного цвета точности НС от итераций для разных скоростей 0.1, 0.3 до 1.
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
12.05.2019, 17:55  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Кто такой err и зачем?
Я же пишу в коде err - это суммарная ошибка сети, см ф-цию sumerr
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function w = backprop(w, x, y)
a = 0.1;
err = sumerr(x, y, w); % ошибка сети по всем точкам до обновления весов
for i = 1:400
  for j = 1:9
    y1 = ynet(x(j), w);
    [f1 df1] = sigmoid(x(j)*w(1)+w(3));
    [f2 df2] = sigmoid(x(j)*w(2)+w(4));
 
    d = y(j) - y1; % ошибка сети для точки x(j)
    d1 = d*w(5); d2 = d*w(6); % ошибки для 1-го и 2-го нейронов
    
    w(1) = w(1)+d1*df1*x(j)*a;
    w(2) = w(2)+d2*df2*x(j)*a;
    w(3) = w(3)+d1*df1*a;
    w(4) = w(4)+d2*df2*a;
    w(5) = w(5)+d*f1*a;
    w(6) = w(6)+d*f2*a;
  end
  temp = sumerr(x, y, w); % ошибка сети по всем точкам после одноразового обновления весов
  err = [err; temp];
end
pot(err(20:end),'err'); % график суммарной ошибки сети от циклов ее обучения
% первые 20 значений из err выбросил, т.к. они почти всегда велики
end
function err = sumerr(x, y, w)
y1 = ynet(x, w);
d = y1 - y; 
err = sum(d.*d);
end
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Тут два вида ошибок:
1) ошибка между f(x) НС и f(x) параболы одно значение то что для обучения.
2) сумма из 10 значений X для f(x) НС и f(x) параболы то что идет на графики.
Может берете сумму 10 ошибок где обучение НС? Поэтому она теряется.
Похоже это ваши графики ошибка 2 это dd, 1 это err.
Да, так и есть.
Я пишу в комментариях:
Цитата Сообщение от tur9 Посмотреть сообщение
err = sumerr(x, y, w); % ошибка сети по всем точкам х до начала тренировки сети
и после всего цикла for j = 1:9 ... end
Цитата Сообщение от tur9 Посмотреть сообщение
temp = sumerr(x, y, w); % ошибка сети по всем точкам после одноразового обновления весов
err = [err; temp];
Можно учесть ошибку в точке (dd) после каждого изменения весов и общую ошибку (err) после предъявления одной точки. Поначалу я так и сделал. Excalibur921, присмотритесь к коду, который я выкладываю. Он очень простой и ясный. Есть у вас матлаб на компе?
Можно учесть ошибку в точке (dd) после каждого изменения весов и общую ошибку (err) после предъявления одной точки. Тогда это выглядеть так:
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
12.05.2019, 18:46  [ТС]
Мне удалось случайным образом и с помощью этой программы найти серии удачных весов
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function w = set_w
w = [-6.99726765214874;
    6.15378604620148;
    -0.706020764786656;
    -6.94667658999838;
    3.82547246074093;
    3.74796757802260];
% w = [-7.16783748613252;
%     5.57357262994007;
%     -0.736715986578244;
%     -6.45552180852616;
%     3.95475980102287;
%     3.74692447355159];
% w = [-5.39884648397204;
%     1.92842534261234;
%     -1.29739500762928;
%     -3.71570108496981;
%     3.60754619348936;
%     3.92327065385747];
end
и вот что получилось:

здесь белая линия это от ини-w, красная - после обучения на 10000х9 итерациях. Ошибка как видим порядка тысячных. Конечно это не решение, но хоть что то отличное от нуля.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.05.2019, 00:12
Цитата Сообщение от tur9 Посмотреть сообщение
белая линия это от ини-w,
Это локальный минимум чудовищными усилиями при шикарном подгоне ини w…

Пытался набыдлокодить в Mathematica 8...не сходиться никак.
Может все формулы баян?

Пробуйте вкурить "Создаем нейронную сеть" Тарик Рашид и код по нему…с нуля.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.05.2019, 10:05
Нужен тест обучения.
НС из одного нейрона, поиск одного веса.

Одна НС1 из 1 нейрона которая строит функцию.
Другая НС2 из 1 нейрона которой ищем один вес обучая.

Задаем слайдером НС1 вес такой, чтобы при небольшом изменении веса функция НС1 плавно изменяла форму. Запоминаем пределы весов в которых это изменение (локализация корня). Все теперь есть веса wMin wMax если алгоритм задает веса НС2 больше во время обучения значит ошибка алгоритма.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.05.2019, 11:51
Промоделировал в GeoGebra 1 нейрон, обучение по этим формулам не работает правильно. Зеленая точка рандом задания веса, ответ сети f(x), старт.
Черные точки итерации, должны двигаться к красной. Скорость обучения должна задавать скорость приближения точек.
20 итераций всего, черная кривая f(x) нейрона.
Скорость 0.01 почти не работает.

Скорость 5.
Возле 0 почти не работает, начинает сходиться при приближении к границам -1 и 1 там где и какраз нет функции которую аппроксимируем
Название: ScreenShot00789.jpg
Просмотров: 38

Размер: 6.8 Кб

Название: ScreenShot00791.jpg
Просмотров: 37

Размер: 6.6 Кб
1
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
13.05.2019, 12:44  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
обучение по этим формулам не работает правильно
Отлично! Вот и скажите по каким формулам следует считать
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Одна НС1 из 1 нейрона которая строит функцию.
Какую ф-цию? Линейную? Даже два нейрона при сигмойде не любую параболу потянут, а один точно не потянет. Тогда линейная зачем?
Другая НС2 из 1 нейрона которой ищем один вес обучая.
Задаем слайдером НС1 вес такой, чтобы при небольшом изменении веса функция НС1 плавно изменяла форму.
Как это меняла форму?
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.05.2019, 13:32
Цитата Сообщение от tur9 Посмотреть сообщение
Тогда линейная зачем?
Задали w0,x0
f(x0*w0) эталон НС
f(x0*w1) обучаемая НС
Найти w1.
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.05.2019, 14:39
tur9,Дальше что? Будете искать очередной урок в инете или шерстить по куче книг выискивая неполные описания алгоритма? Вкуривать тягомотину и обилие воды Тарика Рашида? Читать его тот еще подвиг…я немогу =)).

Наверно в 2019 писать с нуля такое это как писать вычисление косинуса на ассемблере с нуля. Пару лет назад вычислял больше миллиона косинусов в день в своей проге которая интерактивно рисовала математическую абстракцию по моим уравнениям. Понятия не имею через какие ряды там аппроксимируют косинус и на кой черт это практически сдалось знать? Рулили этими косинусами тысячами =)).
В некоторых книгах так и пишут кстати:
Франсуа Шолле - Глубокое обучение на Python 2018
Стр78.
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
13.05.2019, 18:22  [ТС]
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Понятия не имею через какие ряды там аппроксимируют косинус и на кой черт это практически сдалось знать?
Все дело в радости понимания
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Шолле - Глубокое обучение на Python 2018
"Все что вам нужно - это хорошее понимание принципа работы оптимизации на основе градиента" - у вас есть это понимание?
Цитата Сообщение от Excalibur921 Посмотреть сообщение
Дальше что?
Следуя вашему совету написал программку:

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function targ_one_neuron
% аппроксимация линии сигмойдом
% одним нейроном y1 = f(x*w1+w2);
x = [0.1 0.5 0.9]';
y = 0.5*x + 0.2; pot(x,y);
set(gcf,'position',[1680 950 560 420])
axis([0 1 0 1]); a = 1; dd = [];
w = 5*rand(1,2)-2.5; ww = w;
y1 = smd(x*w(1)+w(2));
h = plot(x,y1,'-w');
for i = 1:200
  d = sumerr1(x, y, w); dd = [dd; d];
  [e1 e2] = dif_E(x, y, w);
  w(1) = w(1) - e1*a;
  w(2) = w(2) - e2*a;
  ww = [ww; w];
  y1 = smd(x*w(1)+w(2));
  delete(h); h = plot(x,y1,'-w');
end
y1 = smd(x*w(1)+w(2)); plot(x,y1,'-r')
disp(dd(end))
pot; plot(ww(:,1)); plot(ww(:,2),'-c');
end
function [e1 e2] = dif_E(x, y, w)
y1 = smd(x*w(1)+w(2));
e1 = (y1(1)-y(1))*x(1) + (y1(2)-y(2))*x(2);
e2 = y1(1)-y(1) + y1(2)-y(2);
end
function err = sumerr1(x, y, w)
y1 = smd(x*w(1)+w(2));
d = y1 - y; err = sum(d.*d);
end
и приложил видео файл ее работы см в приложенных 1.avi (пока не знаю как его сюда загрузить)
А работает это так

Теперь надо тоже самое сделать для параболы. Теперь сделаете?
0
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
13.05.2019, 18:33  [ТС]

вместо видео
даже нелинейный сигмойд сумел аппроксимировать прямую
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.05.2019, 19:05
Цитата Сообщение от tur9 Посмотреть сообщение
вместо видео
Видео и ненужно. Нужно было-стало.

ИМХО НС довольно дурацкий аппроксиматор. Кто не верит пусть попробует потаскать веса нейросети хотя бы из жалких 9 весов вручную. Видимо тот кто придумал идею НС просто не пробовал вручную таскать слайдеры весов чтобы прикинуть линейность поведения выдуманной модели. Каждый вес это нелинейное влияние по амплитуде и типу на функцию НС: это сдвиг, поворот, масштаб + их комбинация веса которой меняются от изменения любого из других весов. Иногда поведение функции от смены всего 1 веса похоже на сканирование поверхности мятой ткани т.е. целая куча нелинейностей.
Другими словами НС как аппроксиматор довольно бестолкова.
Почему это работает? Потому, что с “хорошим мотором и забор полетит” т.е. компы перемалывают огромное кол- во вычислений и да…сходиться с бубном и магией.

Вот и ваша парабола…как красиво ее нагибает оптимизация по Y даже жалкой ломанной из 10 точек
Также мне непонятно каким боком производная функций активации помогает найти градиент целевой функции это странно.
Цитата Сообщение от tur9 Посмотреть сообщение
даже нелинейный сигмойд сумел аппроксимировать прямую
Что тут оптимизировать одна неизвестная.
Цитата Сообщение от tur9 Посмотреть сообщение
Теперь надо тоже самое сделать для параболы.
Уже лень ковырять дальше. А параболу так и не получается?
0
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
13.05.2019, 19:30
Вот и снова всплытие бестолковости НС как модели.
Изменяя веса например кривой Безье 2 степени можно решить это задачу на тех же 6 переменных. И кривая Безье будет вести себя намного адекватней чем прибаханная НС с ее дичайшей нелинейностью. При изменении одного из весов кривой Безье будет деформация кривой а не лютые зигзаги как в НС непредсказуемым способом. Изменение веса не влияет на влияние других весов на Безье…но не в НС… НС просто мрак =)).

Эксперименты для забавы. 9 параметрическая нелинейная функция где веса нелинейно влияют на поведение функции решена вручную!
9 весов…
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2019, 19:30

Нейронная сеть для распознавания лиц
Всем привет!) Хочу посоветоватся с людьми которые знакомы с нейронными сетями. Суть дела такова, мне необходимо запрограмировать систему...

Нейронная сеть для распознавания образов
Нужно сделать нейронную сеть для распознавания образов. Кто делал такое? Где проще это делать? Где есть нормальные гайды? Думаю между...

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

Нейронная сеть для распознавания чисел
Народ, дано вот такое задание: Создать нейронную сеть для распознавания десяти чисел, по одному из следующих методов: 1) Трехслойная...

Нейронная сеть для сайта Asp.net
Подскажите, надо для учебы разместить нейронную сеть(любую) на сайте. Можете подкинуть какую-нибудь литекратуру для этого. Сайт обычный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru