Необходима ли настройка размера пакета или эпох для линейной регрессии с помощью TensorFlow?

Я работаю над статьей, в которой сосредоточусь на простой проблеме — линейной регрессии на большом наборе данных при наличии стандартного нормального или равномерного шума. В качестве среды моделирования я выбрал Estimator API от TensorFlow.

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

Есть ли документ/статья с формальным доказательством этого?


person Tirtha    schedule 05.11.2017    source источник


Ответы (1)


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

Вкратце, идея такова: мини-пакетная оптимизация по (x1,..., xn) эквивалентна последовательным шагам оптимизации по x1, ..., xn входам, потому что градиент является линейным оператором. Это означает, что мини-пакетное обновление равно сумме его отдельных обновлений. Важное замечание: я предполагаю, что NN не применяет пакетную норму или любой другой уровень, который добавляет явное изменение в модель вывода (в этом случае математика немного сложнее).

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

person Maxim    schedule 05.11.2017
comment
Спасибо за отличный ответ. Единственная проблема заключается в том, что tf.estimator.LinearRegressor() даже не имеет скорости обучения в качестве гиперпараметра. Единственные гиперпараметры со стороны входной функции: размер пакета и количество эпох. Я не использую традиционный tf.train.GradientDescentOptimizer, для которого скорость обучения была бы явным параметром, который я мог бы ввести. - person Tirtha; 06.11.2017
comment
@Tirtha Я согласен, высокоуровневый TF API сложен, потому что скрывает много деталей. На самом деле вы можете установить скорость обучения, создав и передав оптимизатор следующим образом: ftrl.FtrlOptimizer(learning_rate=learning_rate) - person Maxim; 06.11.2017