2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

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

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Метод градиентного спуска
Сообщение02.07.2008, 17:35 


02/07/08
6
Доброе время суток!
Возможно, обращаюсь не по адресу, но как мне сказали сабжевый метод используется в вычислительной математике, я уже пару учебников проштудировал, но мало что понял.
Собственно, вопрос:
Пишу задание по летней практике, сам программист. Выдали тему "Сравнение методов поиска" и мне подтему "Градиентный спуск".
После прочтения доступной литературы я был удивлен многообразием различных применений данного метода и теперь теряюсь в догадках, что же именно мне в программе реализовать.
Используется и для определения координат точки, и для решения систем уравнений, в общем я в панике.
Просьба к знающим людям, вкратце объясните доступно в чем заключается данный метод (а то от общих рассуждений голова уже пухнет) и, если таковые имеются, алгоритмы, на псевдокоде хотя бы или примеры.
Спасибо заранее.

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:15 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Да ничего тут нет экстраординарного. Этот метод может использоваться в задачах, в которых требуется максимизировать (или минимизировать) некоторую функцию, при условии что аргументы меняются непрерывно и функция дифференцируемая. При этом градиент показывает направление, в котором функция возрастает быстрее всего. Таким образом, если нужно максимизировать, то движемся в направлении градиента, если минимизировать - то в противоположном.

Разумеется, есть ряд тонких моментов, которые приходится обходить или учитывать.

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:23 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
Alcohol_frei писал(а):
Пишу задание по летней практике, сам программист. Выдали тему "Сравнение методов поиска" и мне подтему "Градиентный спуск".
После прочтения доступной литературы я был удивлен многообразием различных применений данного метода и теперь теряюсь в догадках, что же именно мне в программе реализовать.
Я бы сходил к руководителю практики и уточнил, какой имено алгоритм требуется реализовать. Мы-то про конкретику Вашей задачи знаем еще меньше Вашего :(

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:24 
Заслуженный участник


11/05/08
32166
Идея метода довольно банальна и основана на том известном соображении, что функция быстрее всего убывает в направлении антиградиента (т.е. противоположном градиенту). Почему этот метод часто и называют "методом наискорейшего спуска".

Непосредственная цель метода -- научиться находить минимум функции $F(\vec x)\equiv F(x_1,x_2,\dots,x_n)$ функции нескольких переменных. Берём некоторую точку $\vec x_0\equiv(x_{01},x_{02},\dots,x_{0n})$ в качестве начального приближения. И рассматриваем вспомогательную функцию одного переменного $\Phi(t)\equiv F(\vec x_0-t\cdot\vec\nabla F(\vec x_0))$ (здесь $\vec\nabla F(\vec x)$ -- это именно градиент, т.е. с ростом $t$ именно против него и сдвигаемся). И подбираем $t\equiv t_0$ так, чтобы эта самая $\Phi(t)$ приняла минимальное значение, после чего берём $x_1\equiv \vec x_0-t\cdot\vec\nabla F(\vec x_0)$. А потом зацикливаем: на каждом шаге $t\equiv t_k$ -- точка минимума и $x_{k+1}\equiv \vec x_k-t\cdot\vec\nabla F(\vec x_k)$.

Метод хорош своей надёжностью: на каждом шагу мы хоть чуть-чуть, да опускаемся, и при довольно широких условиях достижение минимума в пределе гарантировано. А плох своей трудоёмкостью. Мало того, что сходится со скоростью лишь геометрической прогрессии (тут уж ничего не поделаешь -- если с этим бороться, то потеряется универсальность). Но и даже поиск одномерного экстремума -- тоже, в общем, морока. Поэтому обычно метод модифицируют, добиваясь на каждом шаге не точной, а хоть какой-нибудь минимизации (общая скорость сходимости от этого не шибко страдает).

Ну и отдельная песня -- овражистые функции, там этот метод практически отказывает; но там откажут и вообще любые (неспециализированные) методы.

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:29 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
ewert писал(а):
А потом зацикливаем...
Разве в алгоритмах не оговаривают условие остановки вычислений?

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:33 
Заслуженный участник


11/05/08
32166
Brukvalub писал(а):
ewert писал(а):
А потом зацикливаем...
Разве в алгоритмах не оговаривают условие остановки вычислений?

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

Пусть иногда и напрасно.

А вот только сейчас припомнил: настолько не принято, что выжать из студента хоть какое-нибудь хоть сколько-то правдоподобное условие -- зачастую проблема...

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:39 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
ewert писал(а):
А вот только сейчас припомнил: настолько не принято, что выжать из студента хоть какое-нибудь хоть сколько-то правдоподобное условие -- зачастую проблема...
Так сейчас мы получаем наглядный пример того, что не только студенты эти условия не пишут....

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:41 
Заслуженный участник


11/05/08
32166
а Вы попробуйте выписать практически универсальное условие, а потом ехидничайте

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:44 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
ewert писал(а):
а Вы попробуйте выписать практически универсальное условие, а потом ехидничайте
И не буду пытаться. Я попробовал дать более разумный совет:
Brukvalub писал(а):
Я бы сходил к руководителю практики и уточнил, какой имено алгоритм требуется реализовать. Мы-то про конкретику Вашей задачи знаем еще меньше Вашего

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:48 
Заслуженный участник


11/05/08
32166
А руководитель заранее уточнил, и вполне конкретно: "дать обзор".

 Профиль  
                  
 
 
Сообщение02.07.2008, 18:52 


02/07/08
6
Спасибо большое за развернутые ответы. Кажется, задача немного прояснилась.
К руководителю и так завтра собирался ехать, впопыхах когда брал задание ничего не спросил.
Посмотрим что он скажет.

Цитата:
А руководитель заранее уточнил, и вполне конкретно: "дать обзор".

Дело в том что "дать обзор" применительно к программе как-то ни к селу ни к городу. :D

 Профиль  
                  
 
 
Сообщение02.07.2008, 19:05 
Заслуженный участник


11/05/08
32166
Alcohol_frei писал(а):
Спасибо большое за развернутые ответы. Кажется, задача немного прояснилась.
К руководителю и так завтра собирался ехать, впопыхах когда брал задание ничего не спросил.
Посмотрим что он скажет.

Цитата:
А руководитель заранее уточнил, и вполне конкретно: "дать обзор".

Дело в том что "дать обзор" применительно к программе как-то ни к селу ни к городу. :D

Не совсем. Можно взять какую-нибудь задачку от балды, запрограммировать на ней разные методы и сравнить результаты (например, по к-ву итераций, требуемых для достижения одной и той же точности).

Подход сугубо эмпирический, но -- вполне содержателен.

 Профиль  
                  
 
 
Сообщение09.09.2008, 12:21 


02/07/08
6
Спасибо всем ответившим, хочу уточнить последний раз.
(задание узнал, оно стандартно - найти минимум и максимум функции)
Функция n переменных.
1. Берем любую точку X0 с n координатами и вычисляем в ней значение функции.
2. Находим частные производные функции (градиент в общем виде)
3. Подставляем в градиент значения X0.
4. Вычисляем новые координаты точки (разность между начальным значением и значением соотв. координаты в векторе градиента)
5. Вычисляем значение функции в полученной точке.
6. Сравниваем предыдущее и полученное значение, учитывая погрешность. Если разница меньше погрешности, останавливаемся. Если нет, то переходим к п. 3
Так?
Если все верно, единственная проблема - запрограммировать нахождение производных.

 Профиль  
                  
 
 
Сообщение09.09.2008, 17:06 
Заслуженный участник
Аватара пользователя


22/11/06
1096
Одесса, ОНУ ИМЭМ
ewert в сообщении #130687 писал(а):
а Вы попробуйте выписать практически универсальное условие, а потом ехидничайте

Нам на парах давали что-то в духе $\max\{ |x_n-x_{n-1}|, |f(x_n)-f(x_{n-1})|, |\grad f(x_n)|\}<\varepsilon$.

Добавлено спустя 10 минут 45 секунд:

Alcohol_frei в сообщении #143262 писал(а):
2. Находим частные производные функции (градиент в общем виде)

3. Подставляем в градиент значения X0.

На практике, когда исходная функция не задана в аналитической форме, - это единый шаг: численное нахождение производной в точке. ИМХО в учебной задаче так делать "честнее".
Alcohol_frei в сообщении #143262 писал(а):
4. Вычисляем новые координаты точки (разность между начальным значением и значением соотв. координаты в векторе градиента)

Нет, не так. Следующая точка находится как экстремум функции $f$ на прямой, проходящей через предыдущую точку и параллельной градиенту. Для этого пишется отдельная подпрограмма одномерной оптимизации. Впрочем, вам про это уже сказали выше. Там свои методы, можете ознакомиться в любом учебнике или в Википедии.[quote="Alcohol_frei
сообщении #143262"]Сравниваем предыдущее и полученное значение, учитывая погрешность.[/quote]
Проверять $|x_n-x_{n-1}|<\varepsilon$ недостаточно для хорошего результата алгоритма. Дело в том, что если у вас на некотором шаге перемещение было малым, на следующем оно может быть снова очень и очень большим. ИМХО лучше делать, как я писал выше.

 Профиль  
                  
 
 
Сообщение10.09.2008, 14:53 
Заслуженный участник


11/05/08
32166
Бодигрим писал(а):
ewert в сообщении #130687 писал(а):
а Вы попробуйте выписать практически универсальное условие, а потом ехидничайте

Нам на парах давали что-то в духе $\max\{ |x_n-x_{n-1}|, |f(x_n)-f(x_{n-1})|, |\grad f(x_n)|\}<\varepsilon$.

. . . . . . . . . . . . . . . . .

[quote="Alcohol_frei
сообщении #143262"]Сравниваем предыдущее и полученное значение, учитывая погрешность.

Проверять $|x_n-x_{n-1}|<\varepsilon$ недостаточно для хорошего результата алгоритма. Дело в том, что если у вас на некотором шаге перемещение было малым, на следующем оно может быть снова очень и очень большим. ИМХО лучше делать, как я писал выше.[/quote]
Так Ваш вышний рецепт как раз именно от этой-то проблемы и не спасает ( не говоря уж о том, что и выглядит странно -- совсем разного типа величины почему-то сравниваются с одной и той же; впрочем, это, видимо, из-за "что-то в духе").

Фактически достаточно отслеживать только $|x_n-x_{n-1}|$, но -- обязательно беря максимум по некоторой группе последних приближений. Например, по $n$ последним, где $n$ -- размерность задачи (после каждых $n$ шагов условия сходимости более-менее повторяются).

Но и это ещё не всё. Метод градиентного сходится спуска (усреднённо) со скоростью геометрической прогрессии, т.е. усреднённые разности соседних приближений убывают примерно как $q^n$. Беда в том, что $q$ запросто может оказаться очень близкой к единице (величина $(1-q)$ оценивается через отношение минимального и максимального собственных чисел матрицы вторых производных в окрестности экстремума). Поэтому сравнивать надо не просто с $\varepsilon$, а с $\varepsilon\cdot(1-q)$, т.е. с некоторым запасом. Причём на практике величина $q$ тоже неизвестна, и её нужно оценивать по мере вычислений через усреднённые отношения усреднённых же приращений.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group