www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Стратегии глобальной оптимизации

Дата публикации Jun 8, 2019

Локальная и глобальная оптимизация обычно известна и несколько игнорируется, когда мы покидаем исчисление средней школы. Для быстрого обзора возьмите изображение обложки этого блога. Для данной функции есть несколько точек, где имеются провалы в пространстве. Каждый провал - это минимум. Однако вы можете видеть, что только одна точка является самой глубокой, известной как глобальный минимум. Все остальные точки являются локальными минимумами. В первом разделе я перейду к вычислению этого глобального значения для известной функции. Однако, как только мы покидаем сферу этой известной функции математики средней школы, большинство проблем оптимизации касаются только локальной оптимизации. Даже это, я пойду и объясню причины. Быстрое примечание, есть много других стратегий, о которых я не упомянул в этом блоге. Тем не менее, я надеюсь, что это заинтересовало вас, чтобы изучить больше вариантов.

Известная функция

Давайте рассмотрим некоторые основные вычисления средней школы. Сначала рассмотрим эту простую одномерную функцию:

f (x) = 1 / 4x⁴ + 1 / 3x³ - 3x² - 7

Графически мы видим, что глобальный минимум составляет около -3. Однако, давайте попробуем использовать исчисление, поскольку мы знаем функцию этого графика.

Мы видим, чтоF (-3) = - 22,75, наименьшее возможное значение f (x). Мы можем даже выйти за пределы 2D и войти в область многомерного исчисления для решения этой проблемы.

Неизвестная функция

Большую часть времени, когда мы имеем дело с наукой о данных, у нас нет доступа к функции для выполнения каких-либо исчислений. Обычно f (x) - это система, в которой мы можем ввести переменную x и получить некоторую выходную информацию y. Одним из возможных решений является выполнение стохастического градиентного спуска, при котором мы итеративно спускаемся по склону, пока не достигнем минимума.

Стохастический градиентный спуск

Теперь давайте реализуем эту проблему в python, предполагая, что f будет вне функции черного ящика.

#Unknown Function
f = lambda x:(1/4*x**4)+(1/3*x**3)-(3*x**2)-7def next_step(x,f,step_size):
y=f(x)
#Left Point
x_left=x-step_size
y_left=f(x_left)
diff_left=y_left-y
#Right Point
x_right=x+step_size
y_right=f(x_right)
diff_right=y_right-y
#Comparison
if diff_right<diff_left:
return x_right, y_right, diff_right
else:
return x_left, y_left, diff_leftdef gradient_descent(f,start,step_size=0.01,tol=0.1, debug=False):
x=start
diff=9999999
while abs(diff)>tol:
x, y, diff=next_step(x,f,step_size)
if debug:
print("Current Point: (%.2f,%.2f), Change: %.2f"%(x,y,diff))
print("Minimum Point: (%.2f,%.2f)"%(x,y))

Теперь, когда у нас есть наша функция, давайте попробуем выполнить поиск по x = 4.

gradient_descent(f, start=4)#Minimum Point: (2.65,-9.54)

Это дает нам минимум 2,65 балла. Теперь давайте попробуем то же самое для другой отправной точки, х = -4.

gradient_descent(f, start=-4)#Minimum Point: (-3.51,-20.43)

Используя x = -5, мы получаем наш глобальный минимум -3,51. Это когда поиск глобального и локального минимума становится хитрым. Наш конечный результат зависит от отправной точки.

Стохастический градиентный спуск дает разные минимумы в зависимости от начальной точки

Поскольку это неизвестная функция, мы не знаем:

  • Идеальная отправная точка
  • Идеальный размер шага
  • Идеальная область (мы не можем пересечь бесконечно большое пространство x)

Одним из возможных решений является использование имитации отжига, который дает нам разумную вероятность достижения глобального минимума.

Имитация отжига

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

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

В целом алгоритмы имитации отжига работают следующим образом:

  • ПозволятьИксзнак равноИкс0
  • ДляК= 0 черезКМакс (эксклюзив):
    -Tуменьшается на каждом шаге
    - Выберите случайного соседа,Икс_новый ← сосед (Икс)
    - Еслип(Е(Икс),Е(Икс_новый),T) ≥ случайное (0, 1):ИксИкс_новый
  • Выход: конечное состояние х

Вот реализация Python из нашей конкретной функции:

import numpy as np#Unknown Function
f = lambda x:(1/4*x**4)+(1/3*x**3)-(3*x**2)-7def acceptance_probability(E, E_new, T):
return np.exp(-(E-E_new)/T)def random_neighbour(x):
return x += np.random.uniform(-1,1)def simulated_annealing(f, steps):
x = np.random.random()
E = f(x)
print("x=%.2f, fmin=%.2f"%(x, E))
for k in range(steps):
T = T*0.9
x = random_neighbour(x)
E_new = f(x)
P = acceptance_probability(E, E_new, T)
if P > np.random.random():
E = E_new
print("x=%.4f, fmin=%.4f, Prob.=%.4f"%(x,E,P))
return Esimulated_annealing(f,20)

Запустив это уравнение, мы получим следующий вывод:

x=0.62, fmin=-8.04
x=-0.3446, fmin=-7.3664, Prob.=0.4753
x=-0.8717, fmin=-9.3559, Prob.=11.6601
x=-0.8329, fmin=-9.1534, Prob.=0.7575
x=-1.6213, fmin=-14.5791, Prob.=3903.7178
x=-2.3907, fmin=-20.5342, Prob.=23982.6510
x=-1.8220, fmin=-20.5342, Prob.=0.0003
x=-1.1582, fmin=-20.5342, Prob.=0.0000
x=-0.2298, fmin=-20.5342, Prob.=0.0000
x=-0.8731, fmin=-20.5342, Prob.=0.0000
x=-1.8032, fmin=-20.5342, Prob.=0.0000
x=-2.1873, fmin=-20.5342, Prob.=0.0110
x=-1.8673, fmin=-20.5342, Prob.=0.0000
x=-2.7618, fmin=-22.3598, Prob.=1315.6210
x=-2.3266, fmin=-22.3598, Prob.=0.0001
x=-2.5017, fmin=-22.3598, Prob.=0.0036
x=-2.6164, fmin=-22.3598, Prob.=0.0466
x=-1.7016, fmin=-22.3598, Prob.=0.0000
x=-1.7248, fmin=-22.3598, Prob.=0.0000
x=-1.6569, fmin=-22.3598, Prob.=0.0000
x=-1.5051, fmin=-22.3598, Prob.=0.0000

Как видно выше, значение сходится к -22,75. Хотя этот метод не гарантирует глобального оптимума, он достаточно близок, учитывая, что мы не ограничиваем нашу область. Также обратите внимание, что, хотя начальное значение было намного ближе к локальному минимуму, ему все же удалось найти глобальный минимум.

Динамическое программирование

Этот раздел больше связан со сложностью времени, чем с точностью. Динамическое программирование - это в основном оптимизация над обычнымрекурсия, Везде, где мы видим рекурсивное решение с повторяющимися вызовами для одних и тех же входов, мы можем оптимизировать его с помощью динамического программирования. Идея состоит в том, чтобы просто сохранить результаты подзадач, чтобы нам не пришлось пересчитывать их при необходимости позже. Эта простая оптимизация уменьшает сложность времени от экспоненциальной до полиномиальной. Например, если мы напишем простое рекурсивное решение дляЧисла Фибоначчи, мы получаем экспоненциальную сложность времени, и если мы оптимизируем ее путем хранения решений подзадач, сложность времени уменьшается до линейной

Давайте использовать последовательность Фибоначчи в качестве примера:

def f(n):
if n <= 1:
return n
else:
return f(n-1)+f(n-2)

Сложность этой задачи O (2 ^ n). Кажется безумно сложным, если вы спросите меня! Однако, давайте проанализируем проблему немного лучше.

Фибоначчи при n = 6

Если вы посмотрите на дерево рекурсии для n = 6, повторений будет много. Просто посчитайте количество значений для f (3). В динамическом программировании мы будем хранить значение в памяти и не пересчитывать при повторном вызове. Вот версия динамического программирования Фибоначчи:

store = {}
store[0] = 0
store[1] = 1def f(n):
store[n] = f(n-1)+f(n-2)
return store[n]

Используя новый метод, сложность каждого шага составляет O (1). Это позволяет нам исследовать всю область n, чтобы найти оптимальное решение с минимальной временной сложностью.

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map