Форум программистов, компьютерный форум, киберфорум
Методы оптимизации
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2

Наискорейший градиентный спуск с вычислением величины шага методом Дихотомии

14.03.2015, 19:52. Показов 6412. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Пишу программу для нахождения локального минимума функции методом наискорейшего градиентного спуска.
Не могу сообразить по какой функции производить расчет шага. В книге есть два метода расчета, один из них отдан на откуп численным методам... Я выбрал дихотомию. Всё отладил, пришло время подключать к программе... и столкнулся с проблемой - я не знаю по какой функции считать...
Для примера выбрал уравнение учебника -
https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)={{2x}_{1}}^{2}+{x}_{1}{x}_{2}+{{2x}_{2}}^{2}
При решении примера в учебнике не используется какой-либо численный метод.
Помогите пожалуйста!
Книга Пантелеев 2005г. "Методы оптимизации в примерах". На 187 странице начинается пример.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2015, 19:52
Ответы с готовыми решениями:

Наискорейший градиентный спуск
Не могу разобраться в коде. Скажите пожалуйста в какой среде его реализовать? program MNS; {$APPTYPE CONSOLE} uses ...

Одномерная минимизация функции методом золотого сечения,метода линейного программирования, градиентный спуск
Всем здравствуйте, уважаемые пользователи данного ресурса, нужно помочь с одномерной минимизацией функции методом золотого сечения,...

Наискорейший спуск
Здравствуйте! Подскажите, пожалуйста, как здесь определить значение величины шага g (здесь она постоянная g=0.01). Программа должна...

16
477 / 280 / 90
Регистрация: 15.11.2013
Сообщений: 530
21.03.2015, 19:17
Берёте функцию, вычисляете градиент, после этого вам нужно найти экстремум функции вдоль прямой в направлении градиента. То есть многомерную оптимизацию вы сводите к одномерной.

Вот и ищете. Сначала крупными шажками, потом шажки уменьшаете. В чём вопрос-то?
1
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2
21.03.2015, 22:39  [ТС]
Цитата Сообщение от AdmiralHood Посмотреть сообщение
найти экстремум функции вдоль прямой в направлении градиента
Предположим что я немного чайник. Если Вас не затруднит, поделитесь ссылкой где это разжевано...
Или может быть покажите на примере... Спасибо!

Окей. Какой мать её функции????
Цитата Сообщение от AdmiralHood Посмотреть сообщение
экстремум функции
Вот этой??
https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)={{2x}_{1}}^{2}+{x}_{1}{x}_{2}+{{2x}_{2}}^{2}
Мне брать х1 и х2? Так получается что я работаю и с x1 и с x2... Я тупо запнулся об этот камень, и не могу обойти его. -_-
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
25.03.2015, 20:07
Лучший ответ Сообщение было отмечено _include как решение

Решение

Цитата Сообщение от _include Посмотреть сообщение
Вот этой??
6 пункт в книге смотрите.Только в отличии от книги,у себя вы будете искать минимум \varphi({t}_{k} ) численно.Т.е. ваша исходная функция будет вычисляться с известными https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}_{1},{x}_{2} зависящими от неизвестной https://www.cyberforum.ru/cgi-bin/latex.cgi?{t}_{k}.
В своей программе зададите диапазон поиска оптимального шага в котором ищете минимум своей функции методом дихотомии.
1
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2
27.03.2015, 15:13  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
Т.е. ваша исходная функция будет вычисляться с известными зависящими от неизвестной .
Перечитываю этот пункт 10й раз. Не совсем понимаю откуда я буду знать x1,x2..

Если я правильно понял, формула по которой я буду считать находится на 188 странице, где х1 и х2 предыдущая и последующая точка?
0
477 / 280 / 90
Регистрация: 15.11.2013
Сообщений: 530
27.03.2015, 15:32
Находите производные dy/dx1 и dy/dx2 в этой точке.
dy/dx1=4x1+x2
dy/dx2=x1+4x2
Берёте какую-нибудь начальную точку, например, x1=1, x2=2. Т.е. А0=(1,2).
Значение функции в этой точке 12, градиент в этой точке (6,9).
Делаете шажок из начальной точки в направлении градиента: A1= (1,2)+k*(6,9).
Берём, например, для начала k=-0.1.
A1= (1,2)-0.1*(6,9)=(0.4;1.1). Вычисляете функцию в новой точке, смотрите, уменьшилась она или увеличилась...
1
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2
27.03.2015, 16:06  [ТС]
Цитата Сообщение от AdmiralHood Посмотреть сообщение
Делаете шажок из начальной точки в направлении градиента: A1= (1,2)+k*(6,9).
Берём, например, для начала k=-0.1.
A1= (1,2)-0.1*(6,9)=(0.4;1.1). Вычисляете функцию в новой точке, смотрите, уменьшилась она или увеличилась...
Спасибо!) Собственно, до этого момента мне все понятно.
А вот что делать после этого...
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
27.03.2015, 16:42
Цитата Сообщение от _include Посмотреть сообщение
А вот что делать после этого...
После этого делаете следующую итерацию и так до тех пор,пока выбранный метод не найдет оптимальный шаг t
1
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2
27.03.2015, 17:19  [ТС]
S_el, AdmiralHood, Меня посетило сомнение - я реализовал метод дихотомии для простого уравнения типа x^3-6x^2+9x = 0.
Из написанного выше, я понял что такое х1 и х2. Как мне выбрать интервал [a;b]? В него должна входить точка x1 и точка х2? Или я отдельно считаю минимум для x1 и отдельно для х2? И мне все равно не понятно какую функцию использовать для счета =_=
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
27.03.2015, 17:24
Цитата Сообщение от _include Посмотреть сообщение
Как мне выбрать интервал [a;b]?
Например методом Свенна или оценить по графику(если он есть)
1
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2
27.03.2015, 17:32  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
методом Свенна
Ну, будем знакомиться
Какую функцию я использую в нем?
Эту ? - https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x)={{2x}_{1}}^{2}+{x}_{1}{x}_{2}+{{2x}_{2}}^{2}
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
27.03.2015, 17:38
Цитата Сообщение от _include Посмотреть сообщение
Какую функцию я использую в нем?
Насколько мне известно его используют при одномерной оптимизации.
Если вам она нужна для поиска оптимального шага в двумерной,тогда за интервал можете взять...например,от 0 до 2.Надо будет поискать в учебниках рекомендации по выбору этого интервала.
1
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2
27.03.2015, 18:19  [ТС]
Что-то я совсем запутался. Спрашивал у преподавателя - говорит не знает как сделать с дихотомией, мол у него нет времени даже на консультациях... - Думай сам.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
27.03.2015, 18:29
Цитата Сообщение от _include Посмотреть сообщение
Спрашивал у преподавателя - говорит не знает как сделать с дихотомией, мол у него нет времени даже на консультациях...
Мдаа.Значит не заморачивайтесь с диапазоном подбора шага,а возьмите какой нравится.Я пока не смог найти советов по его подбору.
1
477 / 280 / 90
Регистрация: 15.11.2013
Сообщений: 530
29.03.2015, 18:13
Представьте себе, что вы оператор радиоуправляемого робота, и вам нужно этого робота вывести на вершину холма, чтобы он воткнул там флаг России.

Вот эта аллегория — один к одному то, что вам нужно сделать. Потому что функция двух переменных - это некий трёхмерный рельеф, топографическая карта. X1 и X2 - это широта и долгота, а значение функции — высота над уровнем моря.

И вот ваш робот стоит в некой точке (X1;X2) и вычисляет градиент. Не важно, каким образом, важно, что градиент — это направление, вдоль которого функция возрстает быстрее всего. То есть можно надеяться, что это ближайший путь к вершине.

Проблема в том, что градиент всегда указывает точно на вершину только для осесимметричных рельефов. На реальной горке вы по градиенту пройдёте мимо вершины. Градиент - штука локальная. В других точках на склоне его направление может быть другим.

Беллетристику на эту тему можно почитать здесь: http://vladfotki.narod.ru/__hb... irabok.djv. Начиная со стр. 17. В принципе можно просто прочитать подписи под картинками и всё будет ясно.

Так вот, вы задаёте роботу направление и он идёт по нему, через каждые 100 метров измеряя высоту рельефа: 140, 160, 175, 180, 174... Очевидно, что между двумя последними замерами вы проскочили точку максимума. Конечно, это не глобальный максимум, это всего лишь максимум вдоль выбранного направления, но вам нужно его найти, чтобы сделать его отправной точкой для дальнейшего поиска.

Поэтому вы уменьшаете шаг двое (лично я бы уменьшил в 4 раза, но раз такое задание, пусть будет в 2 раза), до 50 метров, и возвращаетесь на 50 метров назад. В этой точке высота 182.

Тут возникает некий дуализм (именно поэтому я не рекомендую уменьшать шаг вдвое). Непонятно, где теперь находится максимум — между точками 180 и 182 или между 182 и 174. В наихудшем случае придётся проверить обе. Уменшаем шаг до 25 метров и идём в точку посередине между 182 и 174. Там высота 186. Угадали. Снова оказываемся в ситуации дуализма. Уменьшаем шаг до 12,5 м и делаем то же самое, что на предыдущем шаге.

В конце концов находим максимум вдоль выбранного направления. Эту точку берём в качестве новой отправной точки и далее см. самое начало текста.

Добавлено через 28 минут
Когда вы ищете оптимум локально (то есть, грубо говоря, ваш робот находится в темноте или густом тумане и знает только то, что делается непосредственно под его членистыми лапами), то есть две проблемы.

Самая главная пробема — понять, что вы ищете, минимум или максимум. По направлению градиента функция увеличивается, но это только в географии у каждой горки есть вершины. В абстрактной задаче оптимизации максимума может не быть, функция может возрастать до бесконечности.

Поэтому сначала идём по градиенту и пытаемся выяснить, нет ли максимума. Если нет, идём в другую сторону и проверяем, нет ли минимума.

Тут возникает вторая проблема — как долго идти? Скажем, максимум находится на расстоянии 1000 км (априориы это неизвестно, конечно), а вы идёте к нему 10-метровыми шажками. До-олго будете идти.

Тут поможет только адаптивный шаг. Если за некоторое количество шагов (скажем, за 4 шага) признаков экстемума не обнаружено, увеличиваете шаг вдвое и снова делаете определённое количество шагов. Если же область экстремума нашлась, начинаете уменьшать шаг, локализуете экстремум.
1
Студент
 Аватар для _include
56 / 56 / 38
Регистрация: 17.09.2012
Сообщений: 292
Записей в блоге: 2
05.05.2015, 16:20  [ТС]
AdmiralHood, S_el, я понял!!! Спасибо огромное!!! Благодарю вас за помощь, господа!
0
0 / 0 / 0
Регистрация: 16.12.2019
Сообщений: 7
22.12.2019, 15:13
Цитата Сообщение от AdmiralHood Посмотреть сообщение
Находите производные dy/dx1 и dy/dx2 в этой точке.
dy/dx1=4x1+x2
dy/dx2=x1+4x2
Берёте какую-нибудь начальную точку, например, x1=1, x2=2. Т.е. А0=(1,2).
Значение функции в этой точке 12, градиент в этой точке (6,9).
Делаете шажок из начальной точки в направлении градиента: A1= (1,2)+k*(6,9).
Берём, например, для начала k=-0.1.
A1= (1,2)-0.1*(6,9)=(0.4;1.1). Вычисляете функцию в новой точке, смотрите, уменьшилась она или увеличилась...
Добавлено через 1 минуту
Извиняюсь (всем привет), может кто-нибудь объяснить, у меня просто такое же задание - реально я что-то не понимаю,
градиент же по-другому находится grad = частная производная(x1)^2 + частная производная (x2)^2 и всё это под корнем ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2019, 15:13
Помогаю со студенческими работами здесь

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

Градиентный спуск
Хотел написать код градиентного спуска для функции sin(x1)+sin(x2): import numpy as np import pandas as pd import scipy from...

Ускоренный градиентный спуск
народ спасайте не могу понять почему не пашет и еще бы график сюда прикрутить чтоб видны были итеррации, ну как спуск происходит там...

Градиентный спуск с постоянным шагом
Добрый день, уважаемые пользователи форума! Не могли бы вы мне помощь с решение данной задачи,пожалуйста.. Задача: Решить: f(x) =...

Полиномиальная регрессия используя Градиентный Спуск и Матричный Способ
Здравствуйте! Мне нужно было применить линейную и полиномиальную регрессии (без использования Scikit-Learn и специальных функций, например...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru