• Português
  • English
  • Español
  • Autoencoders

    Por: em 15 de fevereiro de 2018

    Autoencoders são um tipo de rede neural. Essa rede é treinada de forma não-supervisionada com o objetivo que a saída x’ seja aproximadamente igual à sua entrada x.

    São colocadas restrições para que a rede não aprenda simplesmente a função identidade. Por exemplo, a representação no centro da rede, representada na figura por z, tipicamente possui dimensão bem menor do que a dimensão da entrada e da saída.

    E, portanto, toda a reconstrução da saída x’ vem dessa representação comprimida z, também chamada de latente. Dessa forma, a rede tende a aprender as características mais relevantes da entrada para conseguir reconstruí-la.

    Um uso comum para isso é a própria redução de dimensionalidade, e também para modelos gerativos, como GANs.

    Abaixo, um exemplo com o dataset MNIST.

    A primeira metade da rede (x -> z) faz o encoding, ie, comprime a entrada para a representação z, enquanto a segunda metade (z -> x’) faz o decoding, recuperando X’.

    De maneira geral, a função loss L para um autoencoder simples tem a seguinte forma:

    Sendo x a entrada original, f a função de encoding, e g a função de decoding. Dessa forma, f(x) equivale a z, e g(f(x))=g(z) equivale à saída x’. A função L é alguma medida de diferença entre a entrada x e a saída x’ = g(f(x)), como por exemplo, mean squared error ou binary crossentropy.

    Autoencoders podem ser treinados com back-propagation, e são facilmente implementados em frameworks modernos de deep learning.

    Uma das possíveis aplicações práticas de autoencoders é a detecção de anomalias. Devido à restrição de informação nas variáveis latentes, o modelo aprende uma representação que explica bem a maior parte dos dados (de forma a minimizar o erro). Dessa forma, observando os exemplos que possuem os maiores erros de reconstrução ao serem passados pelo autoencoder, é possível encontrar os que diferem mais do restante dos dados.

    Essa diferença talvez não poderia ser observada diretamente pelas suas “features” de forma independente (isto é, pixels individualmente dentro da distribuição, ou valor monetário de uma transação parecido com o histórico), mas apenas pela relação entre elas. Essa relação poderia ser capturada ao longo das camadas da rede neural, que é capaz de descrever funções bem mais complexas do que, por exemplo, apenas relações lineares. Um exemplo de caso de uso é a detecção de fraude em sequências de transações (como pagamentos de cartão de crédito), ou detecção de imagens artificialmente adulteradas.

    Além disso, autoencoders podem ser utilizados com o objetivo de redução de dimensionalidade de forma não supervisionada para que as novas “features” encontradas sejam utilizadas em outros problemas já definidos.

    Um exemplo disso seria encontrar variáveis mais descritivas, e ao mesmo tempo esparsas, para novos modelos de crédito, e sem a necessidade de escolher e manipular as entradas de forma manual para melhorar o modelo. Com esse intuito, condições adicionais podem ser colocadas na função objetivo da rede para treiná-la, como uma penalização que favoreça uma representação latente mais esparsa, ou mesmo a utilização de modelos supervisionados que também levem em conta o erro de classificação ou regressão com um target pré-definido (como por exemplo, ocorrência de inadimplência em uma janela temporal ou renda inferida).

    Abaixo, um exemplo simples de rede com apenas uma camada fully connected no encoder e decoder.

    from keras.layers import Input, Dense

    from keras.models import Model

     

    input_dimension=1000

    encoded_dimension = 30

    input_layer = Input(shape=input_dimension)

    encoded_layer = Dense(encoded_dimension, activation = “relu”)(input_layer)

    decoded_layer = Dense(input_dimension, activation = “sigmoid”)(encoded_layer)

    autoencoder = Model(input_layer, decoded_layer)

    autoencoder.compile(optimizer=”adam”, loss=”binary_crossentropy”)

     

    Referências

    [1] https://en.wikipedia.org/wiki/Autoencoder

    [2] http://ufldl.stanford.edu/tutorial/unsupervised/Autoencoders/

    [3] https://arxiv.org/abs/1406.2661

    [4] https://blog.keras.io/building-autoencoders-in-keras.html

    15 de fevereiro de 2018

    Filtre por mês

    Filtre por autor