В проекте, над которым я работаю, есть этап обучения с подкреплением с использованием REINFORCE. Используемая модель имеет последний слой активации softmax, и из-за этого отрицательная скорость обучения используется как замена отрицательным вознаграждениям. У меня есть некоторые сомнения по поводу этого процесса, и я не могу найти много литературы по использованию отрицательной скорости обучения.
Работает ли обучение по переподготовке с переключением скорости обучения с положительной на отрицательную? а если нет, что было бы лучше, избавиться от softmax или есть keras хороший вариант для этого?
Функция потерь:
def log_loss(y_true, y_pred):
'''
Keras 'loss' function for the REINFORCE algorithm,
where y_true is the action that was taken, and updates
with the negative gradient will make that action more likely.
We use the negative gradient because keras expects training data
to minimize a loss function.
'''
return -y_true * K.log(K.clip(y_pred, K.epsilon(), 1.0 - K.epsilon()))
Переключение скорости обучения:
K.set_value(optimizer.lr, lr * (+1 if won else -1))
learner_net.train_on_batch(np.concatenate(st_tensor, axis=0),
np.concatenate(mv_tensor, axis=0))
Обновление, результаты тестирования
Я провел тест только с положительными образцами подкрепления, исключив все отрицательные примеры и, следовательно, отрицательную скорость обучения. Показатель успешности растет, он улучшается, и я могу с уверенностью предположить, что использование отрицательной скорости обучения неверно.
у кого-нибудь есть какие-либо мысли о том, как мы должны это реализовать?
Обновление, описание модели
Мы пытаемся воссоздать AlphaGo, как описано DeepMind, медленную политику сеть:
На первом этапе процесса обучения мы опираемся на предыдущую работу по прогнозированию действий экспертов в игре го с использованием контролируемого обучения13,21–24. Сеть политики SL pσ (a | s) чередуется между сверточными слоями с весами σ и нелинейностями выпрямителя. Последний слой softmax выводит распределение вероятностей по всем допустимым ходам a.