Recentemente, tenho lido sobre aprendizagem profunda e estou confuso sobre os termos (ou digamos, tecnologias). Qual é a diferença entre
- Redes neurais convolucionais (CNN),
- Máquinas Boltzmann restritas (RBM) e
- Codificadores automáticos?
Recentemente, tenho lido sobre aprendizagem profunda e estou confuso sobre os termos (ou digamos, tecnologias). Qual é a diferença entre
Respostas:
O autoencoder é uma rede neural simples de três camadas, na qual as unidades de saída são conectadas diretamente de volta às unidades de entrada . Por exemplo, em uma rede como esta:
output[i]
tem vantagem input[i]
para todos i
. Normalmente, o número de unidades ocultas é muito menor que o número de unidades visíveis (entrada / saída). Como resultado, quando você passa dados por uma rede, ela primeiro comprime (codifica) o vetor de entrada para "caber" em uma representação menor e, em seguida, tenta reconstruí-la (decodificar) novamente. A tarefa do treinamento é minimizar um erro ou reconstrução, ou seja, encontrar a representação compacta (codificação) mais eficiente para os dados de entrada.
O RBM compartilha idéias semelhantes, mas usa uma abordagem estocástica. Em vez de determinista (por exemplo, logística ou ReLU), utiliza unidades estocásticas com distribuição específica (geralmente binária de Gaussiana). O procedimento de aprendizagem consiste em várias etapas da amostragem de Gibbs (propagação: amostra de hiddens dados visíveis; reconstrução: amostra de visíveis dados hiddens; repetição) e ajuste dos pesos para minimizar o erro de reconstrução.
A intuição por trás das RBMs é que existem algumas variáveis aleatórias visíveis (por exemplo, críticas de filmes de diferentes usuários) e algumas variáveis ocultas (como gêneros de filmes ou outros recursos internos), e a tarefa do treinamento é descobrir como esses dois conjuntos de variáveis são realmente conectados um ao outro (mais sobre este exemplo pode ser encontrado aqui ).
As redes neurais convolucionais são um pouco semelhantes a essas duas, mas, em vez de aprender uma matriz de peso global única entre duas camadas, elas pretendem encontrar um conjunto de neurônios conectados localmente. As CNNs são usadas principalmente no reconhecimento de imagens. Seu nome vem do operador "convolução" ou simplesmente "filtro". Em resumo, os filtros são uma maneira fácil de executar operações complexas por meio da simples alteração de um kernel de convolução. Aplique o kernel Gaussiano de desfoque e você o suavizará. Aplique o kernel Canny e você verá todas as bordas. Aplique o kernel do Gabor para obter recursos de gradiente.
(imagem daqui )
O objetivo das redes neurais convolucionais não é usar um dos kernels predefinidos, mas sim aprender kernels específicos de dados . A idéia é a mesma que com autoencoders ou RBMs - traduza muitos recursos de baixo nível (por exemplo, comentários de usuários ou pixels de imagem) para a representação de alto nível compactada (por exemplo, gêneros ou bordas de filmes) - mas agora os pesos são aprendidos apenas com neurônios que são espacialmente próximos um do outro.
Todos os três modelos têm seus casos de uso, prós e contras, mas provavelmente as propriedades mais importantes são:
UPD.
Redução de dimensionalidade
os componentes mais importantes são usados como nova base. Cada um desses componentes pode ser considerado um recurso de alto nível, descrevendo os vetores de dados melhor que os eixos originais.
Arquiteturas profundas
Mas você não apenas adiciona novas camadas. Em cada camada, você tenta aprender a melhor representação possível para os dados da anterior:
Na imagem acima, há um exemplo de uma rede tão profunda. Começamos com pixels comuns, prosseguimos com filtros simples, depois com elementos de face e, finalmente, terminamos com faces inteiras! Essa é a essência do aprendizado profundo .
Agora observe que, neste exemplo, trabalhamos com dados de imagem e sequenciamos áreas cada vez maiores de pixels espacialmente próximos. Não parece semelhante? Sim, porque é um exemplo de rede convolucional profunda . Seja com base em autoencoders ou RBMs, usa convolução para enfatizar a importância da localidade. É por isso que as CNNs são um pouco distintas dos autoencoders e RBMs.
Classificação
Nenhum dos modelos mencionados aqui funciona como algoritmos de classificação per se. Em vez disso, eles são usados para pré - treinamento - aprendendo transformações de representação de baixo nível e difícil de consumir (como pixels) para uma de alto nível. Uma vez que a rede profunda (ou talvez não tão profunda) seja pré-treinada, os vetores de entrada são transformados para uma melhor representação e os vetores resultantes são finalmente passados para o classificador real (como SVM ou regressão logística). Na imagem acima, isso significa que, no fundo, há mais um componente que realmente faz a classificação.
Todas essas arquiteturas podem ser interpretadas como uma rede neural. A principal diferença entre o AutoEncoder e a Rede Convolucional é o nível de cabeamento da rede. As redes convolucionais são praticamente conectadas. A operação de convolução é praticamente local no domínio da imagem, o que significa muito mais esparsidade no número de conexões na exibição de rede neural. A operação de agrupamento (subamostragem) no domínio da imagem também é um conjunto fixo de conexões neurais no domínio neural. Tais restrições topológicas na estrutura da rede. Dadas essas restrições, o treinamento da CNN aprende os melhores pesos para esta operação de convolução (na prática, existem vários filtros). As CNNs geralmente são usadas para tarefas de imagem e fala, onde as restrições convolucionais são uma boa suposição.
Por outro lado, os codificadores automáticos quase não especificam nada sobre a topologia da rede. Eles são muito mais gerais. A idéia é encontrar uma boa transformação neural para reconstruir a entrada. Eles são compostos de codificador (projeta a entrada na camada oculta) e decodificador (reprojeta a camada oculta na saída). A camada oculta aprende um conjunto de recursos latentes ou fatores latentes. Os autoencoders lineares abrangem o mesmo subespaço com o PCA. Dado um conjunto de dados, eles aprendem o número de bases para explicar o padrão subjacente dos dados.
RBMs também são uma rede neural. Mas a interpretação da rede é totalmente diferente. Os RBMs interpretam a rede como não um feedforward, mas um gráfico bipartido onde a idéia é aprender a distribuição de probabilidade conjunta de variáveis ocultas e de entrada. Eles são vistos como um modelo gráfico. Lembre-se de que o AutoEncoder e a CNN aprendem uma função determinística. RBMs, por outro lado, é modelo generativo. Pode gerar amostras a partir de representações ocultas aprendidas. Existem algoritmos diferentes para treinar RBMs. No entanto, no final do dia, depois de aprender RBMs, você pode usar seus pesos de rede para interpretá-lo como uma rede de feedforward.
Os RBMs podem ser vistos como algum tipo de codificador automático probabilístico. Na verdade, foi demonstrado que, sob certas condições, eles se tornam equivalentes.
No entanto, é muito mais difícil mostrar essa equivalência do que apenas acreditar que são bestas diferentes. Na verdade, acho difícil encontrar muitas semelhanças entre os três, assim que começo a olhar atentamente.
Por exemplo, se você escrever as funções implementadas por um codificador automático, um RBM e uma CNN, obterá três expressões matemáticas completamente diferentes.
Não posso falar muito sobre RBMs, mas os autoencoders e CNNs são dois tipos diferentes de coisas. Um autoencoder é uma rede neural treinada de maneira não supervisionada. O objetivo de um autoencodificador é encontrar uma representação mais compacta dos dados, aprendendo um codificador, que transforma os dados em sua representação compacta correspondente, e um decodificador, que reconstrói os dados originais. A parte do codificador dos autoencoders (e originalmente RBMs) foi usada para aprender bons pesos iniciais de uma arquitetura mais profunda, mas existem outras aplicações. Essencialmente, um autoencoder aprende um agrupamento de dados. Por outro lado, o termo CNN refere-se a um tipo de rede neural que usa o operador de convolução (geralmente a convolução 2D quando é usada para tarefas de processamento de imagens) para extrair recursos dos dados. No processamento de imagens, filtros, que são complicadas com imagens, são aprendidas automaticamente para resolver a tarefa em questão, por exemplo, uma tarefa de classificação. Se o critério de treinamento é uma regressão / classificação (supervisionada) ou uma reconstrução (não supervisionada) não tem relação com a ideia de convoluções como uma alternativa às transformações afins. Você também pode ter um CNN-autoencoder.