O que a camada oculta em uma rede neural calcula?


187

Tenho certeza de que muitas pessoas responderão com links para 'deixe-me pesquisar no google por você', então quero dizer que tentei descobrir isso, por favor, perdoe minha falta de compreensão aqui, mas não consigo descobrir como o implementação prática de uma rede neural realmente funciona.

Entendo a camada de entrada e como normalizar os dados, também entendo a unidade de polarização, mas quando se trata da camada oculta, qual é a computação real nessa camada e como ela é mapeada para a saída é um pouco nebulosa. Vi diagramas com pontos de interrogação na camada oculta, funções booleanas como AND / OR / XOR, funções de ativação e nós de entrada que são mapeados para todas as unidades ocultas e nós de entrada que são mapeados para apenas algumas unidades ocultas. Eu só tenho algumas perguntas sobre o aspecto prático. Obviamente, uma explicação simples de todo o processo da rede neural, como você explicaria a uma criança, seria incrível.

Quais cálculos são feitos na camada oculta?

Como esses cálculos são mapeados para a camada de saída?

Como a camada de saída funciona? Desnormalizando os dados da camada oculta?

Por que algumas camadas da camada de entrada estão conectadas à camada oculta e outras não?


13
As pessoas por aqui são legais, nunca vi uma resposta "deixe-me procurar no google para você", mas muitas respostas surpreendentemente completas e perspicazes ao que pareciam, a princípio, perguntas básicas. Infelizmente, não posso ajudá-lo com o seu, mas parece bastante relevante, por isso estou feliz em votar.
Gala

4
Obrigado pelo comentário e pelo voto Gael, provavelmente estou um pouco cansado pela comunidade SO, pois todos sabemos como essas pessoas podem ficar :) Fico feliz em ver mais um espírito de colaboração por aqui, em vez de tentar ganhar distintivos e pontos editando / fechando perguntas.
FAtBalloon

11
Não sou especialista em redes neurais especificamente, embora me envolva em suas aplicações e métodos. Minha resposta talvez não tão útil seria que os cálculos específicos no oculto dependem da "função de custo" que você está impondo à sua saída, ou seja, o que você tenta alcançar. Por exemplo, se você deseja agrupar os elementos de entrada em conjuntos em cluster, calculará as distâncias entre os elementos na camada oculta. Isso pode passar por várias iterações e ciclos de otimização dentro dessa camada, até que você atenda a um critério de erro que permita que o processo "saia" dessa camada.
Lucozade

Respostas:


230

Versão de três frases:

  • Cada camada pode aplicar qualquer função que você deseja à camada anterior (geralmente uma transformação linear seguida por uma não linearidade esmagadora).

  • O trabalho das camadas ocultas é transformar as entradas em algo que a camada de saída possa usar.

  • A camada de saída transforma as ativações da camada oculta em qualquer escala em que você deseja que sua saída esteja.

Como se você tivesse 5 anos:

Se você deseja que um computador diga se há um ônibus em uma imagem, o computador poderá ter mais facilidade se tiver as ferramentas certas.

Portanto, o seu detector de ônibus pode ser feito de um detector de rodas (para ajudá-lo a dizer que é um veículo) e um detector de caixa (já que o ônibus tem a forma de uma caixa grande) e um detector de tamanho (para dizer que é muito grande para ser um carro) ) Estes são os três elementos da sua camada oculta: eles não fazem parte da imagem não processada, são ferramentas que você projetou para ajudá-lo a identificar os ônibus.

Se todos os três detectores ligarem (ou talvez estejam especialmente ativos), há uma boa chance de você ter um ônibus à sua frente.

As redes neurais são úteis porque existem boas ferramentas (como retropropagação) para construir muitos detectores e montá-los.


Como se você fosse um adulto

Uma rede neural feed-forward aplica uma série de funções aos dados. As funções exatas dependerão da rede neural que você está usando: mais frequentemente, essas funções calculam uma transformação linear da camada anterior, seguida por uma não linearidade esmagadora. Às vezes, as funções fazem outra coisa (como calcular funções lógicas em seus exemplos ou calcular a média dos pixels adjacentes em uma imagem). Portanto, os papéis das diferentes camadas podem depender de quais funções estão sendo computadas, mas tentarei ser muito geral.

Vamos chamar o vetor de entrada , as ativações da camada oculta a ativação da saída . Você tem alguma função que mapeia de para outra função que mapeia de para . h y f x h g h yxhyfxhghy

Portanto, a ativação da camada oculta é e a saída da rede é .g ( f ( x ) )f(x)g(f(x))

Por que tem duas funções ( e ) em vez de apenas um?gfg

Se o nível de complexidade por função é limitado, então pode calcular coisas que e não podem fazer individualmente. f gg(f(x))fg


Um exemplo com funções lógicas:

Por exemplo, se permitirmos que e sejam operadores lógicos simples como "AND", "OR" e "NAND", não será possível calcular outras funções como "XOR" com apenas uma delas. Por outro lado, poderíamos calcular o "XOR" se estivéssemos dispostos a colocar essas funções umas sobre as outras:gfg

Funções da primeira camada:

  • Verifique se pelo menos um elemento é "TRUE" (using OR)
  • Verifique se eles não são todos "TRUE" (usando NAND)

Função da segunda camada:

  • Verifique se os dois critérios da primeira camada foram atendidos (usando AND)

A saída da rede é apenas o resultado dessa segunda função. A primeira camada transforma as entradas em algo que a segunda camada pode usar para que toda a rede possa executar o XOR.


Um exemplo com imagens:

O slide 61 desta palestra - também disponível aqui como uma única imagem - mostra (uma maneira de visualizar) o que as diferentes camadas ocultas em uma rede neural específica estão procurando.

A primeira camada procura por pequenos pedaços de bordas na imagem: são muito fáceis de encontrar a partir de dados brutos de pixels, mas não são muito úteis para dizer se você está olhando para um rosto, um ônibus ou um elefante .

A próxima camada compõe as bordas: se as bordas da camada oculta inferior se encaixarem de uma certa maneira, um dos detectores de olhos no meio da coluna mais à esquerda poderá ser ativado. Seria difícil criar uma única camada que fosse tão boa em encontrar algo tão específico a partir dos pixels brutos: os detectores de olhos são muito mais fáceis de construir detectores fora da borda do que nos pixels brutos.

A próxima camada compõe os detectores de olhos e de nariz em rostos. Em outras palavras, elas acenderão quando os detectores de olho e nariz da camada anterior forem ativados com os padrões corretos. Eles são muito bons para procurar tipos específicos de rostos: se um ou mais deles acenderem, sua camada de saída deverá informar que um rosto está presente.

Isso é útil porque os detectores de rosto são fáceis de criar a partir de detectores oculares e de nariz, mas realmente difíceis de criar a partir das intensidades de pixel.

Assim, cada camada leva você cada vez mais longe dos pixels brutos e mais perto do seu objetivo final (por exemplo, detecção de rosto ou detecção de barramento).


Respostas para outras perguntas variadas

"Por que algumas camadas da camada de entrada estão conectadas à camada oculta e outras não?"

Os nós desconectados na rede são chamados de nós "tendenciosos". Há uma explicação muito boa aqui . A resposta curta é que eles são como termos de interceptação em regressão.

"De onde vêm as imagens do" detector de olhos "no exemplo da imagem?"

Não verifiquei as imagens específicas às quais vinculei, mas, em geral, essas visualizações mostram o conjunto de pixels na camada de entrada que maximiza a atividade do neurônio correspondente. Portanto, se pensarmos no neurônio como um detector de olhos, essa é a imagem que o neurônio considera mais parecida com os olhos. As pessoas geralmente encontram esses conjuntos de pixels com um procedimento de otimização (escalada).

No presente trabalho por algumas pessoas do Google com uma das maiores redes neurais do mundo, eles mostram um neurônio "detector face" e um neurônio "detector gato" Desta forma, bem como uma segunda maneira: Eles também mostram as imagens reais que ativam o neurônio mais fortemente (figura 3, figura 16). A segunda abordagem é boa porque mostra o quão flexível e não linear é a rede - esses "detectores" de alto nível são sensíveis a todas essas imagens, mesmo que não pareçam particularmente semelhantes no nível de pixels.


Deixe-me saber se algo aqui não está claro ou se você tiver mais alguma dúvida.


2
Portanto, existe apenas um algoritmo definido para cada nó em uma determinada camada e os pesos são o que torna as saídas diferentes? Ou você pode programar todos os nós da camada para serem diferentes?
FAtBalloon

3
@GeorgeMcDowd, esse é o principal problema: é difícil olhar para pixels e identificar ônibus, como você sugeriu. Felizmente, é fácil olhar para pixels e encontrar arestas - é tudo o que a primeira camada oculta tenta fazer. A próxima camada tenta fazer inferências baseadas em arestas, o que é muito mais fácil do que tentar fazer isso com base em pixels.
David J. Harris

4
O SO deve dar-lhe outra recompensa (além de pontos) pelo tempo e esforço que você coloca nessa resposta!
samsamara

11
@ Joshuauafield Eu acho que a lógica nos anos 80 era uma combinação de como as pessoas pensavam que o cérebro funcionava, que era diferenciável em todos os lugares e que os valores eram limitados como você mencionou. Desde então, as pessoas descobriram que f(x) = max(x, 0)(a "unidade linear retificada") geralmente funciona melhor, embora não tenha muitas dessas propriedades.
David J. Harris

2
O exemplo do barramento e a cadeia de funções apenas o acertaram. Não entenda por que os livros didáticos não podem ser tão descritivos.
drecute 30/08/19

12

Vou tentar adicionar à descrição operacional intuitiva ...

Uma boa maneira intuitiva de pensar em uma rede neural é pensar no que um modelo de regressão linear tenta fazer. Uma regressão linear terá algumas entradas e criará um modelo linear que utiliza cada valor de entrada vezes alguns coeficientes de ponderação ótimos do modelo e tenta mapear a soma desses resultados para uma resposta de saída que corresponda à saída real. Os coeficientes são determinados localizando os valores que minimizarão alguma métrica de erro entre o valor de saída desejado e o valor aprendido pelo modelo. Outra maneira de dizer isso é que o modelo linear tentará criar multiplicadores de coeficientes para cada entrada e somará todos eles para tentar determinar a relação entre os valores (múltiplos) de entrada e (normalmente únicos) de saída. Esse mesmo modelo pode quase ser pensado como o alicerce básico de uma rede neural;

Mas a única unidade perceptron possui mais uma peça que processará a soma dos dados ponderados de maneira não linear. Ele normalmente usa uma função de esmagamento (sigmóide ou tanh) para fazer isso. Portanto, você tem a unidade básica da camada oculta, que é um bloco que somará um conjunto de entradas ponderadas - e depois passa a resposta somada para uma função não linear para criar uma resposta do nó de saída (camada oculta). A unidade de polarização é igual à regressão linear, um deslocamento constante que é adicionado a cada nó a ser processado. Devido ao bloco de processamento não linear, você não está mais limitado às respostas lineares (como no modelo de regressão linear).

Ok, mas quando você tem muitas unidades únicas de perceptrons trabalhando juntas, cada uma pode ter multiplicadores de peso de entrada diferentes e respostas diferentes (mesmo que ALL processe o mesmo conjunto de entradas com o mesmo bloco não linear descrito anteriormente). O que diferencia as respostas é que cada uma delas tem pesos diferentes de coeficiente que são aprendidos pela rede neural por meio de treinamento (algumas formas incluem descida em gradiente). O resultado de todos os perceptrons é então processado novamente e passado para uma camada de saída, assim como os blocos individuais foram processados. A questão então é como são determinados os pesos corretos para todos os blocos?

Uma maneira comum de aprender os pesos corretos é começar com pesos aleatórios e medir a resposta de erro entre a saída real verdadeira e a saída do modelo aprendido. Normalmente, o erro é repassado pela rede e o algoritmo de feedback aumenta ou diminui individualmente esses pesos em alguma proporção do erro. A rede iterará repetidamente passando adiante, medindo a resposta de saída e atualizando (passando ajustes de peso para trás) e corrigindo os pesos até que algum nível de erro satisfatório seja alcançado. Nesse ponto, você tem um modelo de regressão que pode ser mais flexível que um modelo de regressão linear; é o que é comumente chamado de aproximador de função universal.

Uma das maneiras que realmente me ajudou a aprender como uma rede neural realmente funciona é estudar o código de uma implementação de rede neural e construí-lo. Uma das melhores explicações básicas de código pode ser encontrada no capítulo da rede neural (disponível gratuitamente) 'O guia do cientista e do engenheiro para o DSP' Ch. 26. É principalmente escrito em linguagem muito básica (acho que foi fortran) que realmente ajuda você a ver o que está acontecendo.


12

Vou descrever minha visão disso em duas etapas: a etapa de entrada para oculta e a etapa de oculta para saída. Eu darei o passo oculto para a saída primeiro porque parece menos interessante (para mim).

Oculto para Saída

A saída da camada oculta pode ser diferente, mas por enquanto vamos supor que elas saiam das funções de ativação sigmoidal . Portanto, são valores entre 0 e 1 e, para muitas entradas, podem ser apenas 0 e 1.

Gosto de pensar na transformação entre as saídas desses neurônios ocultos e a camada de saída como apenas uma tradução (no sentido linguístico, não no sentido geométrico). Isso certamente é verdade se a transformação for invertível e, se não, algo se perdeu na tradução. Mas você basicamente tem apenas as saídas dos neurônios ocultos vistas de uma perspectiva diferente.

Entrada para oculto

Digamos que você tenha 3 neurônios de entrada (apenas para que eu possa escrever facilmente algumas equações aqui) e alguns neurônios ocultos. Cada neurônio oculto recebe como entrada uma soma ponderada de entradas, portanto, por exemplo, talvez

hidden_1 = 10 * (input_1) + 0 * (input_2) + 2 * (input_3)

Isso significa que o valor de hidden_1é muito sensível ao valor de input_1, nem um pouco sensível a ele input_2e apenas um pouco sensível a ele input_3.

Então, você poderia dizer que hidden_1está capturando um aspecto específico da entrada, que você pode chamar de input_1aspecto " é importante".

A saída de hidden_1geralmente é formada passando a entrada por alguma função, então digamos que você esteja usando uma função sigmóide . Esta função assume valores entre 0 e 1; então pense nisso como uma opção que diz que input_1é importante ou não.

Então é isso que a camada oculta faz! Extrai aspectos ou recursos do espaço de entrada.

Agora, os pesos também podem ser negativos! O que significa que você pode obter aspectos como " input_1é importante, mas também input_2tira essa importância":

hidden_2 = 10 * (input_1) - 10 * (input_2 ) + 0 * (input_3)

ou input_1e input_3têm importância "compartilhada":

hidden_3 = 5 * (input_1) + 0 * (input_2) + 5 * (input_3)

Mais geometria

Se você conhece alguma álgebra linear, pode pensar geometricamente em termos de projeção em determinadas direções. No exemplo acima, projetei ao longo da input_1direção.

Vamos olhar hidden_1novamente, de cima. Quando o valor em input_1for grande o suficiente, a saída da função de ativação sigmóide permanecerá em 1, não ficará maior . Em outras palavras, mais e mais input_1não farão diferença para a saída. Da mesma forma, se ele se mover na direção oposta (ou seja, negativa), após um ponto, a saída não será afetada.

Ok, tudo bem. Mas suponha que não desejamos sensibilidade na direção do infinito em uma determinada direção, e queremos que ela seja ativada apenas para um determinado intervalo em uma linha. Significado para valores muito negativos, não há efeito, e para valores muito positivos, não há efeito, mas para valores entre, digamos, 5 e 16, você deseja que ele acorde. É aqui que você usaria uma função de base radial para sua função de ativação.

Sumário

A camada oculta extrai recursos do espaço de entrada e a camada de saída os converte no contexto desejado. Pode haver muito mais do que isso, o que acontece com redes de várias camadas e outras coisas, mas é isso que eu entendo até agora.

EDIT: Esta página com seus maravilhosos gráficos interativos faz um trabalho melhor do que minha resposta longa e complicada acima poderia fazer: http://neuralnetworksanddeeplearning.com/chap4.html


11
Como o OP, estou um pouco confuso sobre a camada oculta nas redes neurais. No seu exemplo, como o algoritmo NN encontra os pesos para os neurônios hidden_1, hidden_2 e hidden_3? E como hidden_1, hidden_2 e hidden_3 são derivados das mesmas variáveis ​​de entrada, os pesos não convergiriam para a mesma solução?
robertf

5

Vamos considerar o caso da classificação. O que a camada de saída está tentando fazer é estimar a probabilidade condicional de que sua amostra pertence a uma determinada classe, ou seja, qual a probabilidade dessa amostra pertencer a uma determinada classe. Em termos geométricos, a combinação de camadas de maneira não linear via funções de limite permite que as redes neurais resolvam problemas não convexos (reconhecimento de fala, reconhecimento de objetos etc.), que são os mais interessantes. Em outras palavras, as unidades de saída são capazes de gerar funções de decisão não convexas, como as descritas aqui .

Pode-se visualizar as unidades em camadas ocultas como aprendendo recursos complexos a partir de dados que permitem que a camada de saída possa discernir melhor uma classe da outra, para gerar limites de decisão mais precisos. Por exemplo, no caso do reconhecimento de rosto, as unidades nas primeiras camadas aprendem recursos semelhantes a arestas (detecta arestas em determinadas orientações e posições) e a camada superior aprende a combiná-los para se tornarem detectores de recursos faciais como nariz, boca ou olhos. Os pesos de cada unidade oculta representam esses recursos, e sua saída (assumindo que seja um sigmóide) representa a probabilidade de que esse recurso esteja presente em sua amostra.

Em geral, o significado das saídas e das camadas ocultas depende do problema que você está tentando resolver (regressão, classificação) e da função de perda que você emprega (entropia cruzada, erros mínimos ao quadrado, ...)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.