Должен ли я выйти из цикла градиентного спуска, как только стоимость увеличится?

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

Вот эксперимент, который стоит попробовать: вместо выхода с большой частотой ошибок восстановите значения параметров из предыдущей итерации и повторите попытку с уменьшенной скоростью обучения.

James Phillips 30.05.2019 18:33

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

ldog 01.06.2019 08:01
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Оптимизация производительности модели: Руководство по настройке гиперпараметров в Python с Keras
Настройка гиперпараметров - это процесс выбора наилучшего набора гиперпараметров для модели машинного обучения с целью оптимизации ее...
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
Определение пород собак с помощью конволюционных нейронных сетей (CNN)
В рамках финального проекта Udacity Data Scietist Nanodegree я разработал алгоритм с использованием конволюционных нейронных сетей (CNN) для...
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
2
389
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В этом примере ниже мы будем варьировать скорость обучения eta = 10^k с k = {-6,-5,-4,...0}

def f(x):
  return 100 * (x[ 0] *x[0] - x[ 1]) **2 + (x[ 0] -1) **2

def df(x):
  a = x[ 0] *x[0] - x[ 1]
  ret = np.zeros(2)
  ret[ 0] = 400 * a * x[0] + 2 * (x[0] - 1)
  ret[ 1] = -200 * a
  return ret

for k in range(-6, 0):
  eta = math.pow(10.0, k)
  print("eta: " + str(eta))
  x = -np.ones(2)
  for iter in range(1000000):
    fx = f(x)
    if fx < 1e-10:
      print(" solved after " + str(iter) + " iterations; f(x) = " + str(f(x)))
      break
    if fx > 1e10:
      print(" divergence detected after " + str(iter) + " iterations; f(x) = " +  
        str(f(x)))
      break
  g = df(x)
  x -= eta * g
  if iter == 999999:
    print(" not solved; f(x) = " + str(f(x)))

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

Ах, спасибо. Я подумал, что, вероятно, слишком упрощаю процесс.

Cody Mayers 30.05.2019 18:32

Другие вопросы по теме