- A "profundidade" das redes profundas é apenas parte do seu sucesso.
- O excelente desempenho em algumas tarefas se deve a outras duas características:
- Autoencoders
- Transferência de aprendizado
h=Rm→Rk
- Função de reconstrução (decoder) mapeia a representação produzida por h de volta para o espaço original.
- Mapeia o espaço de dimensão k de volta para o espaço de dimensão m
r=Rk→Rm
-
Um autoencoder é treinado para reproduzir na sua saída a própria entrada.
-
O objetivo do treinamento é definir parâmetros em h e r tal que o erro de reconstrução seja minimizado.
-
Pode ser treinada usando backpropagation com gradiente descendente, com o cuidado de substituir os valores-alvo desejados pela própria entrada
-
Possibilidade: pesos atados (tied weights)
-
Há pares de matrizes de pesos em posições simétricas na rede, uma é a transposta da outra!
- menos parâmetros para otimizar;
- previne soluções degeneradas.
-
Se a representação latente em uma autocodificadora tem dimensão K:
- k<m: undercomplete autoencoder;
- k>m: overcomplete autoencoder.
-
A escolha de K determina a quantidade de unidades da camada intermediária central, que tipo de informação o autoencoder pode aprender acerca da distribuição de entrada.
- Objetivo: encontrar características da entrada para posteriormente serem apresentadas a um classificador linear (SVM, k-NN, etc).
- Problema potencial no treinamento: autocodificadora apenas copia os m bits da entrada para m unidades na camada central.
- aprende a função identidade, i.e. f(x)=x, deixando de usar k−m unidades nessa camada.
- Ideia básica: fazer com que a representação aprendida seja robusta a ruídos nos dados.
- Aplicar alterações aleatórias em cada exemplo de treinamento antes de apresentá-lo à rede.
- Alternativas:
- com probabilidade p, atribuir zero a um atributo do exemplo.
- perturbar cada componente de x por meio de um ruído gaussiano aditivo.
- Ideia básica: Ideia básica: adicionar uma penalização à função de perda para penalizar representações indesejadas.
- similar a regularização
J(θ)=2m1i=i∑m(hθ(xi)−xi)2+λ∥∂x∂hθ(x)∥
- Objetivo: fazer com que apenas uma pequena quantidade de unidades da camada oculta seja ativada para cada padrão de entrada.
- A esparsidade pode ser obtida por meio de "dropout": mantendo apenas as k unidades mais ativas e tornando todas as demais unidades iguais a zero.
Redução da dimensionalidade
PCA
Autoencoder
- Geração de conceitos
- 10M vídeos do YouTube, 1 frame por vídeo (200x200)
- A rede aprendeu os conceitos de face humana e de face de gatos.
- Em redes profundas, as primeiras camadas de uma rede neural são as mais difícies (demoradas) de treinar
- Normalmente requerem muitos exemplos
- Entretanto, elas são geralmente responsáveis por aprender características simples.
- primeira camada de uma convnet para classificação de imagens
-
Camadas mais profundas devem capturar características que são mais particulares ao problema específico
-
Essas camadas são mais simples (rápidas) de treinar, uma vez que ajustar o peso delas tem um impacto maior no resultado final
- Configuraçẽos famosas e vencedoras de competições são difíceis de treinar do zero
- Datasets grandes
- Muitas iterações
- Necessitam de alto poder computacional
- E experimentação para ajustar os parâmetros
-
Entretanto, os atributos básicos (linhas, formas) aprendidas em estágios anteriores podem ser úteis em outros contextos
-
O resultado do treinamento são as matrizes de pesos (números) que são facilmente armazenados
-
Ideia: armazenar o peso de redes pré-treinadas, e re-treinar apenas as camadas específicas para a aplicação
-
Isso é chamado de transferência de aprendizado
- A adição de camadas pré-treinadas em um data set específico também é chamada de "ajuste-fino" (fine-tunning).
- Existem várias opções em "quanto" e "até que camada" fazer o ajuste fino.
- Devemos treinar só a última camada?
- Mais de uma?
- Ajustar os pesos da rede inteira ou só das camadas retreinadas?
- Apesar de não existir um regra única, existem alguns guidelines:
- Quanto mais similir os novos dados são do problema, menos ajuste fino é necessário.
- Usar uma parte de uma rede treinada no ImageNet para classificar entre pessoas e gatos pode requerer pouco ajuste, uma vez que o features relevantes já teriam sido aprendidas
- Quanto mais dados houver sobre o problema específico, mais a rede se benificiará de um ajuste mais longo e profundo.
- Se você tiver somente 100 gatos e 100 pessoas nos dados específicos, você provavelemente faria um peque ajusto. Se tivermos 10.000 de cada, um maior ajuste poderia ser utilizado.