градиентный спуск

 

подскажите где можно найти инфу про алгоритм градиентного спуска?  нужно оптимизировать перебор параметров, а раньше вообще с данной проблемой не сталкивался. помогите плиз советом

 
 

что то там не очень подробно расписано.

столкнулся с проблемой определения точки минимума - нашел градиент, а вот как шаг найти непойму:

min := func( Q.x - step*dFdx(Q.x,Q.y), Q.y - step*dFdy(Q.x,Q.y) ); где Q - исходная точка, dFdx и dFdy производные функции, step - шаг

на одних функциях нормально все находится, а на других не понятно как находить шаг...

 
гдрадиент хорошо работает если функция унимодальна
 
anubis >>:

что то там не очень подробно расписано.

столкнулся с проблемой определения точки минимума - нашел градиент, а вот как шаг найти непойму:

min := func( Q.x - step*dFdx(Q.x,Q.y), Q.y - step*dFdy(Q.x,Q.y) ); где Q - исходная точка, dFdx и dFdy производные функции, step - шаг

на одних функциях нормально все находится, а на других не понятно как находить шаг...

Хмм, а на каких функциях шаг нормально находится?

 

что значит унимодальна?

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

 
унимодальна - имеет только 1 максимум или минимум. И если я не ошибаюсь в оптимальной процедуре величина шага должа зависить от скорости
 

я для начала просчитал простенькую функцию f = x^2+ y^2 -xy, брал шаг ~0.5 - нашлось быстро.

потом взял функцию минимума квадратов авторегрессии SSE = [y(t)-(b0+b1*yt-1+b2*yt-2)]^2 с данным без нормализации и нефига не получилось - градиент нереально стал расти, нужно оптимизировать шаг.

потом взял туже функцию но массив yt пронормализовал, с шагом 0.5 неполучилось, а с 0.2 норм, и пришел к выводу что есть параметры по которым надо задавать/находить шаг, а не просто перебирать  -)

ps на листочке все считал ))

 
anubis писал(а) >>
что значит унимодальна?

1. гладкая

2. имеет один локальный экстремум

ЗЫ. Экстремум - это минимум или максимум

ЗЗЫ. Минимум - это минимальное значение функции

ЗЗЗЫ. Максимум - это максимальное значение функции

ЗЗЗЗЫ Функция - это... фу... ищите сами...

 
KimIV >>:

1. гладкая

2. имеет один локальный экстремум

ЗЫ. Экстремум - это минимум или максимум

ЗЗЫ. Минимум - это минимальное значение функции

ЗЗЗЫ. Максимум - это максимальное значение функции

ЗЗЗЗЫ Функция - это... фу... ищите сами...


anubis >>:

я для начала просчитал простенькую функцию f = x^2+ y^2 -xy, брал шаг ~0.5 - нашлось быстро.

потом взял функцию минимума квадратов авторегрессии SSE = [y(t)-(b0+b1*yt-1+b2*yt-2)]^2 с данным без нормализации и нефига не получилось - градиент нереально стал расти, нужно оптимизировать шаг.

потом взял туже функцию но массив yt пронормализовал, с шагом 0.5 неполучилось, а с 0.2 норм, и пришел к выводу что есть параметры по которым надо задавать/находить шаг, а не просто перебирать -)

ps на листочке все считал ))

Берите шаг не больше, чем 1/(кол-во точек), ну и нормализация, да.

Есть способ найти оптимальное значение шага оптимизации (даже звучит и то страшно) но он далеко не простой....


<added> Подумал еще... Честно говоря, не уверен, что способ существует. У себя в нейронках использую адаптивный шаг,

ну а в общем случае... наверное сильно зависит от вида оптимизируемой функции.

 
TheXpert >>:


Берите шаг не больше, чем 1/(кол-во точек), ну и нормализация, да.

Есть способ найти оптимальное значение шага оптимизации (даже звучит и то страшно) но он далеко не простой....


попробую!