Mam generatywne sieci przeciwników, w których dyskryminator zostaje zminimalizowany za pomocą MSE, a generator powinien zostać zmaksymalizowany. Ponieważ obaj są przeciwnikami, którzy dążą do przeciwnego celu.
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)
Co muszę dostosować, aby uzyskać model generatora, który czerpie korzyści z wysokiej wartości MSE?
Odpowiedzi:
AKTUALIZACJA:
Oryginalna implementacja MSE wygląda następująco:
Myślę, że poprawna funkcja utraty maksymalizatora:
W ten sposób otrzymujemy zawsze dodatnią wartość straty, jak w przypadku funkcji MSE, ale z odwróconym efektem.
UPDATE 2: Początkowo napisałem, że intuicyjne pierwsza myśl po prostu neguje strata będzie nie dać wynik, czego oczekiwaliśmy z powodu podstawowego pojęcia metod optymalizacyjnych (można przeczytać ciekawą dyskusję tutaj ). Po dwukrotnym sprawdzeniu obu metod łeb w łeb wynik w konkretnym zadaniu uczenia się (uwaga: nie zrobiłem testu całościowego) było to, że obie metody dały maksymalizację strat, chociaż
-loss
podejście zbiegło się nieco szybciej. Nie jestem pewien, czy zawsze daje najlepsze rozwiązanie, czy jakiekolwiek rozwiązanie z powodu opisanego tutaj możliwego problemu . Jeśli ktoś ma inne doświadczenie, daj mi znać.Więc jeśli ktoś też chce spróbować
-loss
:Dodatkowe Szczegóły:
OP napisał:
Z linku dostarczonego przez Ibragil:
Jest to źle postawiony problem:
W GAN naszym ostatecznym celem jest wyszkolenie naszych dwóch przeciwników, dyskryminatora i generatora, aby działali jak najlepiej przeciwko sobie. Oznacza to, że dwa podstawowe algorytmy uczenia się mają różne zadania, ale funkcja straty, dzięki której mogą osiągnąć optymalne rozwiązanie, jest taka sama, tzn.
binary_crossentropy
Więc zadania modeli mają zminimalizować tę utratę.Dyskryminator modelu jest metoda kompilacji:
Generator modelu jest metoda kompilacji:
To tak samo, jak celem dwóch biegaczy jest zminimalizowanie czasu dotarcia do mety, nawet jeśli są zawodnikami w tym zadaniu.
Zatem „przeciwny cel” nie oznacza zadania przeciwnego, tj. Minimalizacji straty (tj. Minimalizacji czasu w przykładzie biegacza).
Mam nadzieję, że to pomoże.
źródło
Pytanie nie jest dla mnie bardzo jasne. Podejrzewam, że chcesz maksymalizować zamiast minimalizować, stosując kryterium MSE.
Możesz zaimplementować własną niestandardową funkcję utraty, która oblicza -MSE; odwrócenie znaku utraty, a tym samym osiągnięcie odwrócenia w kierunku opadania gradientu.
Inną opcją jest po prostu podanie negatywnego etapu uczenia się - ale nie jestem pewien, czy Keras pozwala ci to zrobić. Warte spróbowania.
źródło