Eu tenho redes adversárias generativas, onde o discriminador é minimizado com o MSE e o gerador deve ser maximizado. Porque ambos são oponentes que buscam o objetivo oposto.
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)
O que preciso adaptar para obter um modelo de gerador que lucre com um alto valor de MSE?
Respostas:
ATUALIZAR:
A implementação original do MSE tem a seguinte aparência:
Eu acho que a função correta de perda de maximizador:
Dessa forma, obtemos sempre um valor de perda positivo, como no caso da função MSE, mas com efeito reverso.
ATUALIZAÇÃO 2: Inicialmente, escrevi que o primeiro pensamento intuitivo de simplesmente negar a perda NÃO dará ao resultado o que esperávamos, devido ao conceito básico dos métodos de otimização (você pode ler uma discussão interessante aqui ). Depois que verifiquei os dois métodos duas vezes, para obter o resultado em uma tarefa de aprendizado específica (Nota: não fiz um teste completo), o método deu a maximização da perda, embora a
-loss
abordagem tenha convergido um pouco mais rápido. Não tenho certeza se ela sempre oferece a melhor solução ou qualquer solução devido ao possível problema descrito aqui . Se alguém tiver outra experiência, entre em contato.Portanto, se alguém quiser tentar
-loss
também:Detalhes adicionais:
OP escreveu:
No link fornecido pela Ibragil:
Portanto, este é um problema incorreto:
Na GAN, nosso objetivo final é treinar nossas duas contrapartes, o discriminador e o gerador, para que tenham o melhor desempenho possível entre si. Isso significa que o algoritmo de aprendizado de duas bases tem tarefas diferentes, mas a função de perda com a qual eles podem alcançar a solução ideal é a mesma
binary_crossentropy
, ou seja , portanto, as tarefas dos modelos são minimizar esse desperdício.O método de compilação de um modelo discriminador :
O método de compilação de um modelo de gerador :
É o mesmo objetivo de dois corredores para minimizar o tempo de chegar à final, mesmo assim eles são concorrentes nessa tarefa.
Portanto, o "objetivo oposto" não significa tarefa oposta, ou seja, minimizar a perda (ou seja, minimizar o tempo no exemplo do corredor).
Espero que ajude.
fonte
A questão não está muito clara para mim. Suponho que você deseja maximizar em vez de minimizar, enquanto usa o critério do MSE.
Você pode implementar sua própria função de perda customizada, que calcula o -MSE; inverter o sinal da perda e, assim, conseguir um giro na direção da descida do gradiente.
Outra opção é simplesmente fornecer uma etapa negativa de aprendizado - mas não tenho certeza de que o Keras permita que você faça isso. Vale a pena tentar.
fonte