|
|
|
|
Рейтинг 4.66/88:
|
|
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); (код на матлабе специально писал предельно просто, развернуто, без матриц)
http://images.vfl.ru/ii/155731... 2684_m.png Пробую это делать тремя способами и ни один не работает и не понимаю почему. Способ 1. Нахожу производную от ф-ции ошибки сети по весам (как по формулам приведенным на рис выше) и соответственно ей изменяю веса (w1 = w - a*dE; w = w1)
http://images.vfl.ru/ii/155732... 2811_m.png В чем тут дело? В чем ошибка? Через десяток итераций сеть перестает обучаться. Способ 2. Меняю веса по градиенту Е, но вычисленному после каждого x(i) и y(i), но результат такой же, похожий Способ 3. Меняю веса через вычисление обратного распространения ошибки
0
|
||||||||||||||||
| 08.05.2019, 16:18 | |
|
Ответы с готовыми решениями:
229
Нейронная сеть для аппроксимации Нейронная сеть для функции Не работающая нейронная сеть для xor |
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||
| 12.05.2019, 14:28 | |||
|
В моем понимании нужно так: По 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 [ТС] | ||||||||
|
Это ф-ция sumerr
0
|
||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 12.05.2019, 14:50 | ||
|
Откуда волны, график должен быть ломанная. Может это ваш мат пакет сглаживает ломанную? Точки по X каждые 9 итераций? Там промежуточные значения откуда? Волны похоже как периодически снова делаете рандом веса примерно каждые 10 итераций.
0
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||||||
| 12.05.2019, 15:55 [ТС] | |||||||
на нижнем графике показано изменение ошибки сети. Ошибка не меняется при достижении примерно 0.5 что согласуется с положением зеленой линии, на верхнем графике. Т.е. сеть почти не обучается.
0
|
|||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 12.05.2019, 16:52 | ||
|
Почему в видео скорость обучения берут константа 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 | |
|
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||||||
| 12.05.2019, 17:55 [ТС] | ||||||||||
Я пишу в комментариях: Можно учесть ошибку в точке (dd) после каждого изменения весов и общую ошибку (err) после предъявления одной точки. Тогда это выглядеть так:
0
|
||||||||||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||||
| 12.05.2019, 18:46 [ТС] | ||||||
|
Мне удалось случайным образом и с помощью этой программы найти серии удачных весов
здесь белая линия это от ини-w, красная - после обучения на 10000х9 итерациях. Ошибка как видим порядка тысячных. Конечно это не решение, но хоть что то отличное от нуля.
0
|
||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
||
| 13.05.2019, 00:12 | ||
|
Пытался набыдлокодить в 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 там где и какраз нет функции которую аппроксимируем ![]()
1
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||||
| 13.05.2019, 12:44 [ТС] | ||||
0
|
||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 13.05.2019, 13:32 | |
|
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 [ТС] | |||||||||
А работает это так Теперь надо тоже самое сделать для параболы. Теперь сделаете?
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 | ||||
|
ИМХО НС довольно дурацкий аппроксиматор. Кто не верит пусть попробует потаскать веса нейросети хотя бы из жалких 9 весов вручную. Видимо тот кто придумал идею НС просто не пробовал вручную таскать слайдеры весов чтобы прикинуть линейность поведения выдуманной модели. Каждый вес это нелинейное влияние по амплитуде и типу на функцию НС: это сдвиг, поворот, масштаб + их комбинация веса которой меняются от изменения любого из других весов. Иногда поведение функции от смены всего 1 веса похоже на сканирование поверхности мятой ткани т.е. целая куча нелинейностей. Другими словами НС как аппроксиматор довольно бестолкова. Почему это работает? Потому, что с “хорошим мотором и забор полетит” т.е. компы перемалывают огромное кол- во вычислений и да…сходиться с бубном и магией. Вот и ваша парабола…как красиво ее нагибает оптимизация по Y даже жалкой ломанной из 10 точек ![]() Также мне непонятно каким боком производная функций активации помогает найти градиент целевой функции это странно.
0
|
||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 13.05.2019, 19:30 | |
|
Вот и снова всплытие бестолковости НС как модели.
Изменяя веса например кривой Безье 2 степени можно решить это задачу на тех же 6 переменных. И кривая Безье будет вести себя намного адекватней чем прибаханная НС с ее дичайшей нелинейностью. При изменении одного из весов кривой Безье будет деформация кривой а не лютые зигзаги как в НС непредсказуемым способом. Изменение веса не влияет на влияние других весов на Безье…но не в НС… НС просто мрак =)). Эксперименты для забавы. 9 параметрическая нелинейная функция где веса нелинейно влияют на поведение функции решена вручную! ![]() 9 весов…
0
|
|
| 13.05.2019, 19:30 | |
|
Нейронная сеть для распознавания лиц
Нейронная сеть для распознавания чисел Нейронная сеть для сайта Asp.net Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера 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С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|