Гиперпараметрическая настройка и перенаправление с нейронной сетью с прямой связью - мини-периодическая эпоха и перекрестная проверка - PullRequest
0 голосов
/ 25 марта 2020

Я рассматриваю реализацию метода настройки гиперпараметров для нейронной сети с прямой связью (FNN), реализованной с использованием PyTorch. Моя оригинальная FNN, модель с именем net, была реализована с использованием подхода мини-пакетного обучения с эпохами:

#Parameters
batch_size = 50 #larger batch size leads to over fitting
num_epochs = 1000 
learning_rate = 0.01 #was .01-AKA step size - The amount that the weights are updated during training
batch_no = len(x_train) // batch_size 

criterion = nn.CrossEntropyLoss()  #performance of a classification model whose output is a probability value between 0 and 1
optimizer = torch.optim.Adam(net.parameters(), lr=learning_rate)

for epoch in range(num_epochs):
    if epoch % 20 == 0:
        print('Epoch {}'.format(epoch+1))
    x_train, y_train = shuffle(x_train, y_train)
    # Mini batch learning - mini batch since batch size < n(batch gradient descent), but > 1 (stochastic gradient descent)
    for i in range(batch_no):
        start = i * batch_size
        end = start + batch_size
        x_var = Variable(torch.FloatTensor(x_train[start:end]))
        y_var = Variable(torch.LongTensor(y_train[start:end]))
        # Forward + Backward + Optimize
        optimizer.zero_grad()
        ypred_var = net(x_var)
        loss =criterion(ypred_var, y_var)
        loss.backward()
        optimizer.step()

Наконец, я тестирую свою модель на отдельном наборе тестов.

Я столкнулся с подходом, использующим рандомизированный поиск для настройки гиперпараметров, а также реализацию перекрестной проверки в K-кратном порядке (RandomizedSearchCV).

Мой вопрос двоякий (не каламбур!) И, во-первых, теоретический: необходима ли k-кратная проверка или может ли быть какая-либо польза для мини-пакетной нейронной сети с прямой связью? Из того, что я вижу, мини-пакетный подход должен выполнять примерно ту же работу, останавливая переоснащение.

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

Во-вторых, если k-сгиб не нужен, есть ли другая функция настройки гиперпараметров для PyTorch, чтобы избежать ее создания вручную?

1 Ответ

0 голосов
/ 26 марта 2020
  • k-кратная перекрестная проверка обычно полезна, когда у вас очень маленький набор данных. Таким образом, если вы тренируетесь на наборе данных, таком как CIFAR10 (который является большим, 60000 изображений), то вам не требуется перекрестная проверка в k-кратном размере.
  • Идея k-кратной перекрестной проверки состоит в том, чтобы увидеть, как изменяется производительность модели (обобщение), когда различные подмножества данных используются для обучения и тестирования. Это становится важным, когда у вас очень мало данных. Однако для больших наборов данных результатов metri c в наборе тестовых данных достаточно, чтобы проверить обобщение модели.
  • Таким образом, требуется ли перекрестная проверка в k-кратном размере, зависит от размера вашего набора данных. Это не зависит от того, какую модель вы используете.
  • Если вы посмотрите на эту главу книги глубокого обучения (на нее впервые ссылалась эта ссылка ):

Небольшие партии могут вызвать эффект регуляризации (Wilson and Martinez, 2003), возможно, из-за шума, который они добавляют к процессу обучения. Ошибка обобщения часто лучше всего подходит для размера партии 1. Для обучения с таким небольшим размером партии может потребоваться небольшая скорость обучения для поддержания стабильности из-за высокой дисперсии в оценке градиента. Общее время выполнения может быть очень высоким из-за необходимости делать больше шагов, как из-за уменьшенной скорости обучения, так и из-за того, что требуется больше шагов для наблюдения всего учебного набора.

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