Por que a reconstrução em auto-codificadores está usando a mesma função de ativação que a ativação direta e não a inversa?

9

Suponha que você tenha uma camada de entrada com n neurônios e a primeira camada oculta possua neurônios, normalmente . Então você calcula a acticação do neurônio na camada oculta pormm<najj

aj=f(i=1..nwi,jxi+bj) , em que é uma função de ativação como ou .ftanhsigmoid

Para treinar a rede, você calcular a reconstrução da entrada, denotado , e minimizar o erro entre e . Agora, o ésimo elemento em é normalmente calculado como:zzxiz

zi=f(j=1..mwj,iaj+bi)

Pergunto-me por que o reconstruída são geralmente calculado com a mesma função de activação em vez de usar a função inversa, e por isso separada e são úteis em vez de usar pesos e desvios atadas? Parece-me muito mais intuitivo calcular o reconstruído com a função de ativação inversa , por exemplo, , da seguinte maneira:zwbf1arctanh

zi=j=1..mf1(aj)bjwj,iT

Observe que aqui são usados ​​pesos vinculados, ou seja, , e os preconceitos da camada oculta são usados, em vez de introduzir um conjunto adicional de preconceitos para a camada de entrada.w=wTbj

E uma pergunta muito relacionada: para visualizar recursos, em vez de computar a reconstrução, normalmente se cria uma matriz de identidade com a dimensão da camada oculta. Então, cada coluna da matriz seria usada como entrada para uma função de reativação, que induz uma saída nos neurônios de entrada. Para a função de reativação, seria melhor usar a mesma função de ativação (resp. ) ou a função inversa (resp. )?zizi

Manfred Eppe
fonte

Respostas:

5

Não acho que sua suposição válida. Ou melhor, não é necessário e, se for feito, não é necessário reverter automaticamente o cálculo para criar os recursos da camada oculta. Não é possível reverter a compressão em geral, passando de n para m menor, diretamente dessa maneira. Se esse era o objetivo, você desejaria uma forma de inversão de matriz, não simples transposição.w=wT

Em vez disso, queremos apenas para a representação de recursos de nível superior compactada e descartamos após a conclusão do codificador automático.wijwij

Você pode definir e amarrar os pesos. Isso pode ajudar na regularização - ajudando o generalizador a generalizar. Mas isso não é necessário.w=wT

Para que o autoencoder funcione, não importa qual a função de ativação usada após a camada que você está treinando, desde que a última camada do autoencoder possa expressar a variedade de entradas possíveis. No entanto, você pode obter resultados de qualidade variados, dependendo do que você usa, normalmente para uma rede neural.

É bastante razoável usar a mesma função de ativação para a qual você está construindo a camada pré-treinada, pois é a escolha mais simples.

O uso de uma função inversa também é possível, mas não é aconselhável para sigmóide ou tanh, porque, por exemplo, arctanh não está definido <-1 ou> 1, portanto, provavelmente não seria numericamente estável.

Neil Slater
fonte
Obrigado! No entanto, o parece ser uma prática comum, pois é usado, por exemplo, no tutorial muito básico para desodificação de auto-codificadores do deeplearning.net: ( deeplearning.net/tutorial/dA.html#daa ) Se você acha que é tão razoável usar a mesma função de ativação para reconstrução, você poderia elaborar isso? É verdade que é a escolha mais simples, mas me parece muito mais natural usar o com o , porque isso produz realmente o inverso matemático da ativação. w=wTziarctanh
Manfred Eppe 13/01
Você pode, se você quiser. Por exemplo, de deeplearning.net/tutorial/dA.html " Opcionalmente , a matriz de pesos do mapeamento reverso pode ser restringida para ser a transposição do mapeamento direto: Isso é chamado de pesos empatados. " (Ênfase minha). O ponto da minha resposta é que, se você fizer isso, não é para fornecer a reversão automática da codificação, é apenas uma restrição que regularizará o treinamento. WW=WT
Neil Slater
Obrigado Neil. Seu comentário sobre o problema me ajudou a generalizar minha pergunta e torná-la mais precisa, então eu a editei de acordo. Na verdade, eu realmente não entendo por que é útil ter separado em tudo, em vez de sempre utilizando a matriz transposta . A resposta pode ser "porque fornece melhores resultados", mas depois me pergunto por que dá melhores resultados. Parece pouco intuitivo para mim. w=wTwwT
Manfred Eppe 14/01
@ManfredEppe: Talvez você devesse pensar cuidadosamente sobre por que acha que a matriz de peso transposta e a função inversa seriam úteis? Não há motivo específico para usá-los - qual é exatamente sua intuição por pensar que eles seriam úteis? Se for para "simetria", dê uma nova olhada na ordem em que são aplicadas - não é uma reversão simétrica da entrada para a camada oculta (se fosse, a função de ativação inversa deve ser a primeira)
Neil Slater