|
|
|
|
Рейтинг 4.80/25:
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||||||||||||||||||||||||||||||
Проблема с обучением простой нейронной сети методом Левенберга-Марквардта04.09.2019, 17:22. Показов 6253. Ответов 69
Метки метод левенберга-марквардта (Все метки)
На простом примере сформулирую свой вопрос. Сеть ниже прекрасно обучается методом Левенберга
Вот процесс обучения https://youtu.be/eL8rE4VMBMA Как видим всего 12 итераций На вход подаю (с шагом 0.05) 17 точек x = 0.1:0.05:0.9, на выходе надо получить параболу: y = (2*x - 1).^2 + 0.1; (синие точки на видео и в программе). Программа написана на матлабе специально в упрощенном виде так, чтобы каждый мог ее легко понять. Кликните здесь для просмотра всего текста
Опишу подробно каждую функцию. Кликните здесь для просмотра всего текста
Формула для матрицы Якоби Матрица ниже есть раскрытие матрицы выше. Многоточие означает дополнительные строки для каждого х. Всего 17 строк. Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Перехожу к моей проблеме. Рассмотрим похожую сеть с двумя выходами Каждый выход должен нарисовать свою параболу. Изменения в функциях ниже Кликните здесь для просмотра всего текста
Проблема моя в том что я не знаю как посчитать матрицу Якоби для "функции" с двумя выходами. Есть вариант считать последовательно для первого выхода J и dE, и обновлять веса, затем для второго выхода J и dE и обновлять веса. Но этот метод работает не так хорошо как функции net в матлабе. В матлабе эта сеть обучается за 10-30 итераций, а этот способ последовательного обновления дает десятки тысяч итераций. Можно минимизировать функцию ошибки сети Но это тоже не работает: https://youtu.be/ekuE5zfobOo Считал я это так: Не по теме:
Кликните здесь для просмотра всего текста
0
|
|||||||||||||||||||||||||||||||
| 04.09.2019, 17:22 | |
|
Ответы с готовыми решениями:
69
Решение системы интегральных уравнений методом Левенберга-Марквардта Проблемы с обучением нейронной сети |
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 05.09.2019, 18:03 [ТС] | |
|
Получилось https://youtu.be/JMWKIj6ydB0 Великолепно работает!
На следующей неделе расскажу как сделал. Это вообще надо кому-то?
0
|
|
|
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
|
||
| 05.09.2019, 21:04 | ||
|
Затем попробуйте прикинуть, что будет в хоть сколько-нибудь реально интересной сейчас задаче. Например, MNIST - 28*28=784 входа, 10 выходов, на скрытом слое MLPшки пусть будет 300 нейронов (размер где-то в районе точки выхода на асимптоту зависимости точности от размера MLP). Посчитайте размеры H и H^(-1), расскажите нам, как собираетесь впихивать такие матрицы в память компа, посчитайте время обращения , умножьте на число эпох обучения (ну, пусть будет пара десятков - если обычному стохастическому обучению хватает полусотни эпох, то Л-М пусть будет сходиться за меньшее число).В итоге получится ответ на Ваш вопрос.
0
|
||
|
699 / 575 / 75
Регистрация: 20.09.2014
Сообщений: 3,741
|
|
| 06.09.2019, 04:45 | |
|
Только академический интерес.
0
|
|
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
||
| 06.09.2019, 13:45 | ||
|
0
|
||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 07.09.2019, 19:03 | |
|
tur9, Вот вы реально мучаетесь зря. Выж видите ребят снова перемкнуло на левый холивар.
Чтобы вам полезно ответили нужен “парад планет”. Шарящий в 1) матлабе, 2)в нейросетях, и 3)именно в этом виде обучения 4) да еще и более того, шарящий намного глубже среднего эксперта который по новым книгам только дергает готовые библиотеки тщательно там рекламируемые на выбор. 5)+ ему должно быть не лень “жевать азы”. Вы просто убиваете время, готовое и работает быстрей и уже есть…Вот реально, будет висеть без ответа.
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||||||||
| 08.09.2019, 16:54 [ТС] | |||||||||
|
Вот работающий код
Кликните здесь для просмотра всего текста
Главное здесь 21 и 22 строки J = [J1; J2]; - совмещение двух матриц Якоби dE = J'*d( : ); - последовательное умножение удлинненной матрицы на все развернутые невязки Если бы все это было бы кому-то интересно, то я бы объяснил все подробней. Добавлено через 19 минут - сложность алгоритма обращения матриц - да, это мне скоро будет актуально, но пока об этом не думал. Сеть должна будет обучаться на предварительном запуске машины. Матлаб использует этот алгоритм Левенберга-Марквардта по умолчанию, т.е. как основной. Судя по тому что я нашел в русско-язычной сети это вовсе не азы, иначе я бы просто взял готовый код и все.
0
|
|||||||||
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
||||||||||||
| 08.09.2019, 17:25 | ||||||||||||
|
matrix.h
0
|
||||||||||||
|
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
|
||
| 08.09.2019, 20:36 | ||
|
В нейросетках под Эл-Эм'ом подразумевается практически всегда вариант с ЯВНЫМ (но, из-за вычислений, аналогичных бэкпропу, быстрым) вычислением ДИАГОНАЛИ матрицы Гессе. Изобретён в самом конце 1980ых под названием "псевдоньютон", потом переменован в стохастически-диагонального левенберга-марквардта, поскольку, как и Л-М, добавляет некоторую мелкую константу к диагональным элементам. Проблем же с обращением у диагональной матрицы - нет вообще, обычное 1/a_ii. Хранить тоже можно только вектор-диагональ, а не исходную и обратную матрицы. Т.е. и при расчёте этих вторых производных, и при их обращении - линейная сложность и линейные затраты памяти. Проверить - легко. Изучите зависимости времени обучения сеток разного размера (задав им одно и то же число итераций) этими дефолтными матлабовскими средствами. Если зависимость времени обучения линейна от размера сети - то Л-М для нейросеток (именно для нейросеток - функции, решающие задачи оптимизации, не берём - там Л-М может быть классическим) в матлабе тот, про который я сказал.
0
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||||
| 08.09.2019, 21:24 [ТС] | |||||
Обучение НС у нас должно быть на этапе калибровки, т.е. когда память и процессор полупустые. Т.е. и скорость и память в данном случае не существенны (допустимы даже минуты). До решения проблемы (в этой теме) с обучением приходилось обучать (сеть и данные к ней которые я еще не представил) градиентным спуском, а это - уж не знаю почему - требовало сотни миллионов итераций, целая ночь работы, и тем не менее не удавалось достичь требуемой точности. Ту же работу малаб через trainlm делает за секунды.
0
|
|||||
|
47 / 15 / 1
Регистрация: 26.08.2017
Сообщений: 162
|
|||
| 08.09.2019, 21:54 | |||
|
0
|
|||
|
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
|
|||
| 08.09.2019, 21:55 | |||
|
А все самопальные кривые поделки - забыть. Либо OpenBLAS. Но MKL в последние годы таки допилили до повышения эффективности работы с мелкими (одна-две-три сотни элементов в строке/столбце) матрицами, а OpenBLAS тут от неё сейчас отстаёт (но всё равно любой наивный самопал уделывает). Я ведь согласен, что нейросетевой диагональный Л-М - вещь хорошая. Просто говорю, что это КАЧЕСТВЕННО ОТЛИЧАЮЩИЙСЯ по схеме/формулам вычислений метод. Т.е. если Вы по оптимизационным учебникам напишите свою прогу - то это вероятнее всего будет не тот алг, который стоит за функцией TRAINLM в матлабе.
0
|
|||
|
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
|
|
| 08.09.2019, 22:42 | |
|
Для иллюстрации неверности того, что наивный код на С/С++ обгонит матлаб, берём очень тупую задачу - перемножение матриц. Это цикл тройной вложенности, никакой сложной алгоритмики.
Вот что было несколько лет назад - пока MKL не допилили (пока она давала околопиковую эффективность только начиная с достаточно больших матриц): Красным самые высокие гигафлопсы на обоих картинках - результаты той либы, которая собственно и дала тогда хорошего пинка интеловцам. После допиливания MKL - она значимо подтянулась на матрицах до пары сотен элементов в строке/столбце, где у неё обнаружилось сильное отставание от потанцевала: Зелёным на первой картинке - Сишный наивный код перемножения матриц. Отставание в гигафлопсах, как видим, в качественные разы. Вы думаете, что в последние несколько лет компиляторы с С/С++ вдруг почему-то качественно улучшились? Аналогичное отставание С/С++ от вручную написанных на ассемблере с заточкой под разнообразные процессоры математических библиотек (у которых из сишного - только заголовочные файлы с объявлением функций, а сама реализация функций сделана на ассемблере, и используется в ассемблерном коде разнообразный "ИИ" типа настройки на размер кэша конкретного процессора, на котором исполняется прога) - будет и на других матричных функциях. Так что пусть верящие в мощь сишного кода и разум компиляторов - продолжают верить. А Вы продолжайте пользоваться матлабом, который опирается именно на MKL (ЕМНИП). И при желании написать отвязанную от матлаба прогу - тоже берите MKL. Увы, но ту либу, которая сейчас пиковая по производительности (и название которой я на картинках затёр) - я рассекречивать буду ТОЛЬКО в других условиях
0
|
|
|
699 / 575 / 75
Регистрация: 20.09.2014
Сообщений: 3,741
|
|
| 09.09.2019, 04:32 | |
|
0
|
|
|
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
|
|
| 09.09.2019, 10:26 | |
|
Не, не угадал
![]() Из Дании библиотека. Но я рад, что народ ан масс верит в мои безграничные возможности Как бы нимб мне не начал жать ![]() Особенно на фоне общего отсутствия знаний у контингента (например, один из участников темы/раздела в другом разделе только что спросил, как из целого числа единицы-десятки-сотни выделить-получить).
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 09.09.2019, 13:09 [ТС] | ||
|
0
|
||
|
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
|
||
| 10.09.2019, 16:32 | ||
|
"Обычный" - берёт только первые производные и матрицу Гессе оценивает с их помощью. Затраты по памяти - линейные и квадратичные (от числа весов в сети) в первом и втором случае соответственно. Вычислительные затраты - линейные и кубические соответственно. Скорость сходимости - ну, ХЗ, сравнимая наверное. Вот только нейросетевой Л-М спокойно обучает (и обучал ещё в прошлом веке) нейронку с 431 ТЫСЯЧЕЙ весов (LeNet5 - первая "референсная" свёрточная нейросетка для задачи MNIST), и на сетке бОльшего размера не спасует тоже.
0
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
||
| 10.09.2019, 17:26 [ТС] | ||
|
Однажды для простой сети я посчитал на бумажке матрицу Гессе. На это ушло пару дней. С тех пор боюсь прикасаться. - Считает способом, аналогичным обратному распространению. Что это за способ, где он описан? Если есть такая автоматизация, то почему только диагональ, а не всю матрицу?
0
|
||
|
2744 / 1670 / 269
Регистрация: 19.02.2010
Сообщений: 4,421
|
||
| 10.09.2019, 19:11 | ||
|
Рабиновичей (если такие были), увы, я не запоминал ![]() Диагональ потому, что вариантом бэкпропа ВСЮ её можно вычислить за время, примерно равное времени вычисления сложной функции. Как и ВЕСЬ вектор градиента при бэкпропе вычисляется за похожее время. Т.е. на ВСЁ требуется только время ~~t(f(w)), где w - множество адаптивных параметров функции f. А не время ~~t(f(w))*|w|, которое потребуется, например, при вычислении производных через конечные разности. И потому диагональ, чтобы ВООБЩЕ не было никаких трудозатрат с обращением матрицы. Ибо (diag)^-1=1/a_ii. Да и последующее матрично-векторное умножение (обратной матрицы Гессе на градиент) в методах Ньютона/Л-М - оно тоже не торт по сравнению с. Ибо в нейросетевом диагональном ЛМ - будет всего лишь покомпонентное произведение двух векторов (вектора обратной диагонали с предварительно добавленной туда мелкой константой - и вектора градиента). Так что с матрицей или с вычислением диагонали иным способом - всё выходит иного порядка величины временнЫх=вычислительных затрат. А качественной пользы нет. Это в классических градиентных методах оптимизации можно/нужно было тратить время на вычисление более хорошего направления спуска - ибо там вектора-матрицы производных долго считались. А если все/многие производные в нейронках считаются влёт - то и в других алгоритмах (имеются в виду алгоритмы вычисления/коррекции направления градиентного спуска), возникающих/использующихся при обучении MLP и его глубоких/рекуррентных вариантов, лучше отказаться от лишних размерностей.
1
|
||
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 11.09.2019, 14:04 [ТС] | |
|
VTsaregorodtsev, спасибо за разъяснения. Вообще говоря, если не возражаете, у меня много вопросов, возможно наивных.
Вот сейчас такой вопрос. Сеть 14 входов + единица, 3 нейрона в единственном слое, выход два сумматора + единица В нейронах обычные сигмойды. Входные данные Х-26х14 максимум Х 0.08. На выходе надо получить черные точки показанные в первом вложении вложении. Результат работы программы во втором вложении. А в третьем вложении получившиеся матрицы весов. Меня смущают цифры в них: по абс величине более 10 и чуть ли не 40. Это вообще нормально? Ведь сигмойд вообще уходит в ноль после +/- 7. Еще один результат в четвертом вложении, там всего 3428 итераций. Их число меня не смущает, т.к. работает все быстро.
0
|
|
| 11.09.2019, 14:04 | |
|
Помогаю со студенческими работами здесь
20
Проблемы с обучением LSTM нейронной сети Как же обучать автокодировщик? Непонятная ситуация с обучением нейронной сети Метод Левенберга - Марквардта Алгоритм Левенберга-Марквардта Применение алгоритма Левенберга-Марквардта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|