Конференция "Прочее" » Метод покоординатного спуска
 
  • Larin © (14.01.18 06:33) [0]
    Ребят, кто-нибудь может доступно и на пальцах объяснить сабж? Или с какими-нибудь примерами из жизни?
  • Larin © (14.01.18 06:33) [1]
    Заранее благодарю
  • Внук © (14.01.18 21:42) [2]
    На пальцах:
    метод применяется для поиска локального экстремума функции нескольких переменных. Хотя, что там особо говорить, все эти "методы" есть только умные слова вокруг довольно простых и наглядных идей.

    Выбираем начальную точку многомерной области определения.
    В этой точке фиксируем все координаты, кроме первой, получаем функцию одной переменной, ищем ее локальный экстремум (как угодно). В полученной точке фиксируем все координаты, кроме второй, получаем функцию одной переменной, ищем ее локальный экстремум... И так по кругу, пока не надоест, то есть пока не будет получена требуемая точность.

    P.S. Не гарантируется, что полученный результат будет хоть примерно соответствовать истинному положению локального экстремума. Зато согреешься.
  • Внук © (14.01.18 21:53) [3]
    Иллюстрация: представь, что имеется прямая дорога, идущая ровно по краю оврага. При этом тебе надо спуститься в низшую точку этого оврага, но двигаться ты можешь только либо параллельно дороге, либо перпендикулярно. Причем, выбрав направление (перпендикулярно или параллельно), имеет смысл двигаться в этом направлении до тех пор, пока это нас устраивает (высота уменьшается), а как только высота перестала уменьшаться, меняем направление (перпендикулярное на параллельное или наоборот). Так победим!
  • KilkennyCat © (14.01.18 23:05) [4]

    > Внук ©   (14.01.18 21:53) [3]

    можно умудрится всегда делать два лишних поворота ))
  • Larin © (16.01.18 11:39) [5]

    > Внук ©   (14.01.18 21:42) [2]


    Спасибо!
    Мне нужно разом менять все переменные функции, чтобы минимизировать другую функцию, которая зависит от первой.

    Допустим, я выбрал дельту для каждой новой итерации. Как лучше сделать: половину переменных уменьшить на эту дельту, а половину увеличить? И если вторая функция минимизировалась, то продолжить в таком же духе?

    И как избежать повторения?
  • Styx © (16.01.18 18:00) [6]
    Дык в том и суть метода, что на каждой итерации Вы меняете только одну переменную. Метод прост и туп :). А чтобы делать, как Вы хотите - нужно вначале оценить матрицу Якоби, и из нее уже решать, куда двигаться - сразу по всем переменным. Если у Вас функции заданы в явном виде, лучше якобиан выписать аналитически - тогда вычислений понадобится гораздо меньше...
  • Larin © (16.01.18 22:39) [7]
    Styx, вот у меня 50 переменных. В каждой итерации менять их друг за другом или менять первую, пока не будет достигнут оптимум?
  • Styx © (17.01.18 01:35) [8]
    Меняешь первую, пока не дойдёшь до минимума функции. Потом также вторую, третью и далее... После пятидесятой - снова первую, вторую, третью... И так - до тех пор, пока не получится, что за весь круг из 50 переменных не окажется, что двигаться больше некуда.
  • Larin © (17.01.18 08:29) [9]

    > Styx ©   (17.01.18 01:35) [8]
    > Меняешь первую, пока не дойдёшь до минимума функции. Потом
    > также вторую, третью и далее...


    А не получится ли так, что мы, оптимизировав функцию при первой переменной, начнем ее ухудшать при второй и лучше было бы частично оптимизировать первую переменную и улучшать второй?
  • Styx © (17.01.18 12:56) [10]
    Как мы можем ее ухудшить, если мы всегда идем вниз? На то он и спуск. Но да, путь спуска может быть совсем неоптимальным, и для некоторых (правда, весьма специфических) случаев этот способ не сработает вообще. Есть множество способов, позволяющих найти минимум быстрее - но для них требуется знание Якобиана, как я уже говорил. И имейте в виду, что никакой способ не гарантирует нахождение глобального минимума, речь идёт только о локальной оптимизации. Глобальный минимум можно найти только для линейной функции, для нелинейных - можно только попытаться проверить, что рядом нет более глубоких минимумов, начиная оптимизацию с разных начальных значений.
  • Лодочник © (17.01.18 14:55) [11]
    Сессия. Однако.
  • Mystic © (17.01.18 19:50) [12]
  • Larin © (18.01.18 07:32) [13]

    > Mystic ©   (17.01.18 19:50) [12]


    Я ничего не понял из вашей картинки
  • Styx © (18.01.18 11:24) [14]

    > Larin ©   (18.01.18 07:32) [13]
    >
    > > Mystic ©   (17.01.18 19:50) [12]
    >
    >
    > Я ничего не понял из вашей картинки

    Это плохо, что не поняли. На картинке изображено всё, что нужно знать про метод.
  • картман © (31.01.18 15:19) [15]

    > Внук ©   (14.01.18 21:42) [2]
    >
    > На пальцах:
    > метод применяется для поиска локального экстремума функции
    > нескольких переменных.

    а как найти глобальный экстремум?
  • DayGaykin © (31.01.18 15:32) [16]

    > а как найти глобальный экстремум?

    С помощью анализа, нет?
    Находим все x: f'(x)=0, ну, а дальше понятно
  • картман © (31.01.18 15:40) [17]

    > С помощью анализа, нет?

    у меня не переменные - ряды(значения)

    в общем, проблема в том, что падаю в локальный минимум. В машобучении в такой ситуации "встряхивают" сеть, сильно меняя веса. Вот только у меня не веса, а смещения рядов друг относительно друга. Пока данных мало - имею возможность перебрать все варианты. Но как конечное решение это не вариант. Нужно как-то уменьшить кол-во переборов.
  • Внук © (31.01.18 17:07) [18]
    >>картман ©   (31.01.18 15:19) [15]
    В общем случае никак. Если неизвестно его хотя бы примерное расположение. А если известно, то так же, как локальный :)))

    Численные методы вообще не работают без какого-то априорного знания о свойствах исследуемого объекта. Даже чтобы применить банальный метод деления отрезка пополам, надо иметь уверенность хотя бы в непрерывности функции.
  • картман © (31.01.18 18:16) [19]

    > Численные методы вообще не работают без какого-то априорного
    > знания о свойствах исследуемого объекта.

    Спасибо.
    А где найти пару авторитетных строк, утверждающих это(не мне - начальству который месяц не могу донести данный факт)?
  • Лодочник © (07.02.18 15:28) [20]

    > А где найти пару авторитетных строк, утверждающих это

    Учебник анализа.
  • Mystic © (07.02.18 18:51) [21]

    > А где найти пару авторитетных строк, утверждающих это(не
    > мне - начальству который месяц не могу донести данный факт)?


    В общем случае SHA2-256 это функция целочисленного аргумента. Которую можно легко непрерывно продолжить на случай непрерывного аргумента. Скажем, умножая на какой-нить 2 + cos(-k*x) с целочисленным периодом так, чтобы в целых точках косинус был равен единице, в половинках троечке. Если ты найдёшь метод поиска глобального экстремума для её квадрата, или хотя бы значения, близкого к глобальному, хоть немного эффективнее тупого перебора, то можешь смело уходить в отпуск, быстро намайнить/продать разных коинов и вернуться на работу.
  • картман © (08.02.18 17:17) [22]

    > чтобы в целых точках косинус был равен единице, в половинках
    > троечке.

    если я найду такой косинус, чтоб в половинке он был равен троечке - отпуск до конца дней будет))
  • Mystic © (08.02.18 19:54) [23]

    > если я найду такой косинус, чтоб в половинке он был равен
    > троечке - отпуск до конца дней будет))


    Попробуй
    1.762747174039086050465218649959584618056320656523270821506... i
  • картман © (09.02.18 11:16) [24]

    > Mystic ©   (08.02.18 19:54) [23]

    шикарно!
 
Конференция "Прочее" » Метод покоординатного спуска
Есть новые Нет новых   [134427   +38][b:0.001][p:0.001]