Minimalizacja funkcji jest jak próbuje znaleźć najniższy punkt na powierzchnia. Pomyśl o sobie chodząc po pagórkowatej powierzchni i próbując dotrzeć do najniższego punktu. Odnajdziesz kierunek, który zjeżdża z górki i idziesz, dopóki nie zjedziesz już w dół. Wtedy wybrałbyś nowy kierunek, który idzie w dół i idzie w tym kierunku, dopóki nie zejdzie już w dół, i tak dalej. Ostatecznie (miejmy nadzieję) dotrzesz do punktu, w którym żaden kierunek nie zejdzie w dół. Będziesz wtedy w (lokalnym) minimum.
Algorytm LM i wiele innych algorytmów minimalizacji korzysta z tego schematu.
Załóżmy, że minimalizowana funkcja to F, a my znajdujemy się w punkcie x (n) w naszej iteracji. Chcemy znaleźć następne iteracyjne x (n + 1) takie, że F (x (n + 1)) < F (x (n)), tj. Wartość funkcji jest mniejsza. Aby wybrać x (n + 1), potrzebujemy dwóch rzeczy, kierunku od x (n) i wielkości kroku (jak daleko w tym kierunku). Algorytm LM określa następujące wartości -
Najpierw należy obliczyć aproksymację liniową do F w punkcie x (n). Łatwo jest ustalić kierunek zjazdu funkcji liniowej, więc wykorzystujemy funkcję przybliżania liniowego do wyznaczania kierunku zjazdu. Następnie musimy wiedzieć, jak daleko możemy się posunąć w tym wybranym kierunku. Jeśli nasza aproksymująca funkcja liniowa jest dobrym przybliżeniem F dla dużego obszaru wokół x (n), wówczas możemy wykonać dość duży krok. Jeśli jest to dobre przybliżenie tylko bardzo zbliżone do x (n), możemy zrobić tylko bardzo mały krok.
To właśnie robi LM - oblicza liniową aproksymację do F w punkcie x (n), dając w ten sposób kierunek zjazdu, następnie oblicza, jak duży krok należy podjąć w zależności od tego, jak dobrze funkcja liniowa jest zbliżona do F w punkcie x (n). LM wylicza, jak dobrze jest funkcja aproksymująca, w zasadzie robiąc krok w tak wyznaczonym kierunku i porównując, jak bardzo liniowe przybliżenie do F zmniejszyło się do tego, jak bardzo zmniejszyła się faktyczna funkcja F. Jeśli są blisko, przybliżona funkcja jest dobra i możemy zrobić nieco większy krok. Jeśli nie są blisko, to funkcja aproksymacji nie jest dobra i powinniśmy wycofać się i zrobić mniejszy krok.
Czy udało Ci się wdrożyć ten algorytm w OpenCL? Byłbym również bardzo zainteresowany. – Dan
Właśnie skończyłem pisać o tym w miejmy nadzieję zrozumiały sposób. Poniższy link zawiera całą linię ewolucyjną 5 algorytmów optymalizacyjnych kończących się na LAM. Użyłem pewnych analogii ze sportów narciarskich, aby było to bardziej zrozumiałe. http://stackoverflow.com/a/22394465/457687 – Vlad