У меня есть генеративные состязательные сети, где дискриминатор сводится к минимуму с помощью MSE, а генератор должен максимизироваться. Потому что оба являются противниками, преследующими противоположную цель.
generator = Sequential()
generator.add(Dense(units=50, activation='sigmoid', input_shape=(15,)))
generator.add(Dense(units=1, activation='sigmoid'))
generator.compile(loss='mse', optimizer='adam')
generator.train_on_batch(x_data, y_data)
Что я должен адаптировать, чтобы получить модель генератора, которая получает выгоду от высокой стоимости MSE?
Ответы:
ОБНОВИТЬ:
Исходная реализация MSE выглядит следующим образом:
Я думаю, что правильная функция потери максимума:
Таким образом, мы всегда получаем положительное значение потерь, как в случае функции MSE, но с обратным эффектом.
ОБНОВЛЕНИЕ 2: Первоначально я писал, что интуитивная первая мысль просто свести на нет потери не даст результата, который мы ожидали из-за базовой концепции методов оптимизации (вы можете прочитать интересное обсуждение здесь ). После того, как я дважды проверил оба метода один на один, результат в конкретной задаче обучения (примечание: я не проводил тотальный тест) заключался в том, что оба метода дали максимизацию потерь, хотя
-loss
подход сходился немного быстрее. Я не уверен, всегда ли это дает лучшее решение или какое-либо решение из-за возможной проблемы, описанной здесь . Если у кого-то есть другой опыт, пожалуйста, дайте мне знать.Так что, если кто-то хочет попробовать
-loss
тоже:Дополнительные детали:
ОП написал:
По ссылке, предоставленной Ибрагилом:
Так что это некорректная проблема:
В GAN наша конечная цель - научить наших двух контрагентов дискриминатора и генератора работать как можно лучше друг против друга. Это означает, что два базовых алгоритма обучения имеют разные задачи, но функция потерь, с которой они могут достичь оптимального решения, одинакова, т.е.
binary_crossentropy
, поэтому задачи на основе имеющихся моделей являются минимизация этого утраченным.Дискриминатор модели метод компиляции:
Генератор модели метод компиляции:
Это то же самое, что и цель двух бегунов - минимизировать время достижения финиша, даже если они являются конкурентами в этой задаче.
Таким образом, «противоположная цель» не означает противоположную задачу, то есть минимизацию потерь (т.е. минимизацию времени в примере бегуна).
Я надеюсь, что это помогает.
источник
Вопрос не очень понятен для меня. Я полагаю, вы хотите максимизировать, а не минимизировать, используя критерий MSE.
Вы можете реализовать свою собственную функцию потерь, которая вычисляет -MSE; переворачивание знака потери и, таким образом, достижение переворота в направлении градиентного спуска.
Другой вариант - просто указать отрицательный шаг обучения, но я не уверен, что Keras позволяет вам это делать. Стоит попробовать.
источник