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

Eu 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 mapeia para o a saída está um pouco nebulosa. Eu 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 mapeiam para todas as unidades ocultas e nós de entrada que mapeiam para apenas algumas unidades ocultas cada e assim Tenho apenas algumas perguntas sobre o aspecto prático. Claro, 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 funciona a camada de saída? Desnormalizando os dados da camada oculta?

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

Comentários

  • As pessoas por aqui são legais, eu nunca vi uma resposta do tipo “deixe-me pesquisar isso no Google”, mas com muitas respostas surpreendentemente completas e esclarecedoras para o que a princípio parecia ser perguntas básicas. Infelizmente, não posso ‘ não ajudar você a com o seu, mas parece bastante relevante, por isso estou feliz em votar.
  • Obrigado pelo comentário e pelo voto Gael, eu ‘ provavelmente estou um pouco cansado de a comunidade SO, como todos nós sabemos, como essas pessoas podem ficar 🙂 Fico feliz em ver mais espírito de colaboração aqui em vez de tentar ganhar distintivos e pontos editando / encerrando perguntas.
  • Não estou especialista em redes neurais especificamente, embora eu 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ê é impondo sobre sua produção, ou seja, o que você tenta alcançar. Por exemplo, se quiser agrupar os elementos de entrada em conjuntos agrupados, você calculará as distâncias entre os elementos na camada oculta. Isso pode passar por várias iterações e ciclos de otimização dentro desta camada, até que você encontre um critério de erro que permite ao processo `deixar ‘ esta camada.

Resposta

Versão de três frases:

  • Cada camada pode aplicar qualquer função desejada à camada anterior (geralmente uma transformação linear seguida por uma não linearidade de esmagamento).

  • 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 você “re 5:

Se você quiser que um computador informe se há um barramento em uma imagem, o computador terá mais facilidade se tiver as ferramentas certas.

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

Se todos os três detectores ligarem (ou talvez se eles estiverem especialmente ativos), então há uma boa chance de você ter um ônibus na sua frente.

Redes neurais são úteis l porque existem boas ferramentas (como retropropagação) para construir muitos detectores e colocá-los juntos.


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: na maioria das vezes, cada uma dessas funções calcula uma transformação linear da camada anterior, seguida por uma não linearidade esmagadora. Às vezes, as funções farão outra coisa (como computar funções lógicas em seus exemplos ou calculando a média dos pixels adjacentes em uma imagem). Portanto, as funções das diferentes camadas podem depender de quais funções estão sendo calculadas, mas tentarei ser muito geral.

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

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

Por que ter duas funções ($ f $ e $ g $) em vez de apenas uma?

Se o nível de complexidade por função for limitado, $ g (f (x)) $ pode computar coisas que $ f $ e $ g $ não podem fazer individualmente.


Um exemplo com funções lógicas:

Por exemplo, se permitirmos apenas $ f $ e $ g $ para serem operadores lógicos simples como “AND”, “OR” e “NAND”, então você não pode “computar outras funções como” XOR “com apenas um deles. Por outro lado, poderíamos calcular “XOR” se estivéssemos dispostos a sobrepor essas funções umas às outras:

Funções de primeira camada:

  • Certifique-se de que pelo menos um elemento seja “VERDADEIRO” (usando OR)
  • Certifique-se de que nem todos sejam “VERDADEIROS” (usando NAND)

Função da segunda camada:

  • Certifique-se de que ambos os critérios da primeira camada sejam satisfeitos (usando AND)

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


Um exemplo com imagens:

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 pedaços curtos de arestas na imagem: eles são muito fáceis de encontrar a partir de dados de pixel brutos, mas eles não são muito úteis por si só 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 encaixam de uma certa maneira, um dos detectores de olho no meio da coluna mais à esquerda pode ligar . Seria difícil fazer uma única camada que fosse tão boa em encontrar algo tão específico a partir dos pixels brutos: os detectores oculares são muito mais fáceis de construir com detectores de borda do que com pixels brutos.

A próxima camada up compõe os detectores de olho e os detectores de nariz em rostos. Em outras palavras, eles se acenderão quando os detectores de olho e detectores de 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 acender, sua camada de saída deve relatar que um rosto está presente.

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

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


Respostas para várias outras perguntas

“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 “polarizados”. Há uma “explicação muito boa aqui . A resposta curta é que eles” são como termos de interceptação na regressão.

“Onde as imagens do “detector de olhos” no exemplo de imagem vêm? “

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

Em neste artigo de alguns funcionários do Google com uma das maiores redes neurais do mundo, eles mostram um neurônio “detector de rosto” e um neurônio “detector de gato” desta forma, bem como uma segunda forma: eles também mostram as imagens reais que ativam o neurônio mais fortemente (figura 3, figura 16). A segunda abordagem é boa porque mostra como a rede é flexível e não linear – esses “detectores” de alto nível são sensíveis a todas essas imagens, embora não pareçam particularmente semelhantes no nível de pixel.


Avise-me se algo não estiver claro ou se você tiver mais perguntas.

Comentários

  • Então, há apenas um definido algoritmo para cada nó em uma determinada camada e os pesos são o que torna os resultados diferentes? Ou você pode programar cada nó na camada para ser diferente?
  • @GeorgeMcDowd isso chega ao problema principal: olhar para pixels e identificar barramentos é difícil, como você sugeriu. Felizmente, olhar para pixels e encontrar bordas é fácil – isso ‘ é tudo o que a primeira camada oculta tenta fazer. A próxima camada tenta fazer inferências com base em arestas, o que é muito mais fácil do que tentar fazer com base em pixels.
  • O SO deve dar a você alguma outra recompensa (além de apenas pontos) pelo tempo e esforço que você dedicou a esta resposta!
  • @JoshuaEnfield Acho que a lógica na década de 1980 ‘ s era uma combinação de ser semelhante a 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 “) frequentemente funciona melhor, embora não ‘ tenha muitas dessas propriedades.
  • O exemplo do barramento e a cadeia de funções simplesmente acertaram em cheio. Não ‘ não entenda por que os livros didáticos não podem ‘ ser tão descritivos.

Resposta

Vou tentar adicionar à descrição operacional intuitiva …

Uma boa maneira intuitiva de pensar sobre uma rede neural é pensar sobre o que um modelo de regressão linear tenta fazer. Uma regressão linear pegará algumas entradas e produzirá um modelo linear que leva cada valor de entrada vezes alguns coeficientes de ponderação ideais do modelo e tenta mapear a soma desses resultados para uma resposta de saída que de perto corresponde ao resultado verdadeiro. Os coeficientes são determinados encontrando os valores que irão minimizar alguma métrica de erro entre o valor de saída desejado e o valor que é aprendido pelo modelo. Outra maneira de dizer é que o modelo linear tentará criar multiplicadores de coeficiente para cada entrada e somar todos eles para tentar determinar a relação entre a entrada (múltipla) e a (normalmente única) saída val ues. Esse mesmo modelo quase pode ser considerado o bloco de construção básico de uma rede neural; um perceptron de unidade única.

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

Ok, mas quando você tem muitas das unidades perceptron trabalhando juntas, cada uma pode ter diferentes multiplicadores de peso de entrada e diferentes respostas (mesmo que TODOS processem o mesmo conjunto de entradas com o mesmo bloco não linear descrito anteriormente). O que torna as respostas diferentes é que cada uma tem pesos de coeficientes diferentes que são aprendidos pela rede neural por meio do treinamento (algumas formas incluem gradiente descendente). 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 os pesos corretos são determinados para todos os blocos?

Uma maneira comum de aprender os pesos corretos é começando com pesos aleatórios e medindo a resposta de erro entre a saída real verdadeira e o aprendido saída do modelo. O erro normalmente será repassado pela rede e o algoritmo de feedback aumentará ou diminuirá individualmente esses pesos em alguma proporção em relação ao erro. A rede irá iterar repetidamente, passando para frente, medindo a resposta de saída e, em seguida, atualizando (passando para trás os ajustes de peso) 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 do que um modelo de regressão linear, é o que é comumente chamado de aproximador de função universal.

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

Resposta

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

Oculto para a saída

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

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 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.

Input-to-Hidden

Digamos que você tenha 3 neurônios de entrada (apenas para que eu possa facilmente escreva algumas equações aqui) e alguns neurônios ocultos. Cada neurônio oculto obtém como entrada uma soma ponderada de entradas, então, 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, nada sensível a input_2 e apenas ligeiramente sensível a input_3.

Então, você poderia dizer que hidden_1 está capturando um aspecto específico da entrada, que você pode chamar de “input_1 é um aspecto importante “.

A saída de hidden_1 é normalmente formada passando a entrada por alguma função, então digamos que você esteja usando uma função sigmoid . 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! Ele 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_2 tira essa importância”:

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

ou input_1 e input_3 têm importância “compartilhada”:

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

Mais geometria

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

Vejamos hidden_1 novamente, de acima. Assim que o valor em input_1 for 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_1 não farão diferença para a saída. Da mesma forma, se ele se mover na direção oposta (ou seja, negativa), depois de um ponto, a saída não será afetada.

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

Resumo

A camada oculta extrai recursos do espaço de entrada e a camada de saída os traduz para o contexto desejado. Pode haver muito mais do que isso, com redes multicamadas e tal, mas é isso que eu entendi até agora.

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

Comentários

  • Como o OP, eu ‘ estou um pouco confuso sobre a camada oculta em redes neurais. Em 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 convergiriam para a mesma solução?

Resposta

Tomemos o caso da classificação. O que a camada de saída está tentando fazer é estimar a probabilidade condicional de que sua amostra pertença 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 forma não linear por meio das funções de limiar permite que as redes neurais resolvam problemas não convexos (reconhecimento de voz, reconhecimento de objeto e assim por diante), 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 aquelas descritas aqui .

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

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *