Como a rede neural reconhece imagens?

25

Estou tentando aprender como a Rede Neural funciona no reconhecimento de imagens. Eu já vi alguns exemplos e fiquei ainda mais confuso. No exemplo do reconhecimento de letras de uma imagem de 20x20, os valores de cada pixel se tornam a camada de entrada. Então 400 neurônios. Em seguida, uma camada oculta de neurônios e 26 neurônios de saída. Em seguida, treine a rede e funcionará, não perfeita.

O que me confundiu sobre a Rede Neural é como ela aprende sobre o que está em uma imagem. Você não precisa fazer limiar, segmentação ou medição, de alguma forma a rede aprende a comparar imagens e reconhecer. É como mágica para mim agora. Por onde começar a aprender rede neural?

user1731927
fonte
11
Se bem entendi, uma rede neural é apenas uma superfície multidimensional em algum espaço abstrato, cujos extremos locais levam a possíveis escolhas. Ensinar uma rede neural é apenas ajustar essa superfície abstrata à sua tarefa. É o meu entendimento noobish.
Então você quer explicações OU recursos para começar a trabalhar com NNs? Seria bom esclarecer.
2
Atualmente, existe um bom curso gratuito sobre coursera dedicado à sua pergunta. coursera.org/course/neuralnets
pat
Parece que a classe Coursera NN será avançada, não tão boa quanto uma introdução. Andrew Ng tem algumas apresentações mais suaves que você pode encontrar, por exemplo, no Youtube.
Douglas Zare
Na verdade, o curso Coursera é avançado, mas definitivamente se desenvolve e responderia muito bem à pergunta do OP. Também possui muitos exemplos no reconhecimento de dígitos.
Chris A.

Respostas:

24

Uma grande compreensão de como uma rede neural pode aprender a classificar algo tão complexo quanto os dados de imagem, dados apenas exemplos e respostas corretas, veio a mim enquanto estudava o trabalho do professor Kunihiko Fukushima sobre o neocognition nos anos 80. Em vez de apenas mostrar à sua rede várias imagens e usar a propagação traseira para permitir que ela decida por si própria, ele adotou uma abordagem diferente e treinou sua rede camada por camada e até nó por nó. Ele analisou o desempenho e a operação de cada nó individual da rede e intencionalmente modificou essas partes para fazê-las responder da maneira pretendida.

Por exemplo, ele sabia que queria que a rede fosse capaz de reconhecer linhas, e treinou camadas e nós específicos para reconhecer três linhas horizontais de pixel, três linhas verticais de pixel e variações específicas de linhas diagonais em todos os ângulos. Ao fazer isso, ele sabia exatamente quais partes da rede poderiam ser acionadas quando os padrões desejados existissem. Então, como cada camada está altamente conectada, todo o neocognitron como um todo poderia identificar cada uma das partes compostas presentes na imagem, independentemente de onde elas existissem fisicamente. Portanto, quando um segmento de linha específico existisse em algum lugar da imagem, sempre haveria um nó específico que seria acionado.

Mantendo essa imagem sempre presente, considere a regressão linear que é simplesmente encontrar uma fórmula (ou uma linha) via soma do erro ao quadrado, que passa mais de perto pelos seus dados, que é fácil de entender. Para encontrar "linhas" curvas, podemos fazer o mesmo cálculo da soma dos produtos, mas agora adicionamos alguns parâmetros de x ^ 2 ou x ^ 3 ou polinômios de ordem ainda mais alta. Agora você tem um classificador de regressão logística. Este classificador pode encontrar relacionamentos que não são lineares por natureza. De fato, a regressão logística pode expressar relacionamentos arbitrariamente complexos, mas você ainda precisa escolher manualmente o número correto de recursos de energia para realizar um bom trabalho na previsão dos dados.

Uma maneira de pensar na rede neural é considerar a última camada como um classificador de regressão logística , e então as camadas ocultas podem ser pensadas como "seletores de recursos" automáticos . Isso elimina o trabalho de escolher manualmente o número correto e a potência dos recursos de entrada. Assim, o NN se torna um seletor automático de recursos de energia e pode encontrar qualquer relação linear ou não linear ou servir como um classificador de conjuntos arbitrariamente complexos ** (isso pressupõe apenas que existem camadas e conexões ocultas suficientes para representar a complexidade de o modelo que ele precisa aprender). No final, espera-se que um NN que funcione bem aprenda não apenas "o relacionamento" entre as entradas e as saídas, mas, em vez disso, buscamos uma abstração ou um modelo quegeneraliza bem.

Como regra geral, a rede neural não pode aprender nada que um ser humano razoavelmente inteligente não possa, teoricamente, aprender com tempo suficiente com os mesmos dados, no entanto,

  • pode ser capaz de aprender algumas coisas que ninguém descobriu ainda
  • para grandes problemas, um banco de computadores que processa redes neurais pode encontrar soluções realmente boas muito mais rapidamente do que uma equipe de pessoas (a um custo muito menor)
  • as NNs treinadas uma vez produzirão resultados consistentes com as informações nas quais foram treinadas e devem generalizar bem se ajustadas adequadamente
  • NN nunca fica entediado ou distraído
Mcstar
fonte
11
+1 no parágrafo sobre como a última camada faz regressão logística sobre a seleção de recursos da camada oculta. Essa é uma boa maneira de pensar sobre os NNs.
jlund3
Obrigado, mas devo esclarecer que não estou dizendo exatamente que a última camada de cada RNA é na verdade uma camada de regressão logística, mas apenas que essa é uma configuração possível que poderia resolver muitos problemas. Devido à maneira mais aleatória, normalmente treinamos as RNAs, provavelmente qualquer regressão resultante é espalhada por muitos nós e camadas de uma maneira muito aleatória. Pode-se treinar sub-redes para responder de maneiras específicas e depois bombear a saída delas para uma camada de regressão para criar redes especializadas para problemas particulares. Tornando uma RNA altamente eficiente em memória e velocidade.
Mcstar
11
Essa resposta continua recebendo visualizações, então pensei em apontar que já tem mais de 5 anos e considera apenas redes de alimentação totalmente conectadas. Embora as idéias conceituais aqui ainda sejam válidas, elas não dão ao profissional o suficiente para entender conceitos profundos de NN que se tornaram padrão na última década. A CNN (rede neural de convolução) é uma adaptação moderna muito importante que fornece super poderes às redes profundas, permitindo que localizem bordas, contraste, nitidez, espaços de cores, sombras e muito mais e use isso para determinar o contexto de recursos de baixo nível.
Mcstar #
10

Você pode ter ouvido dizer que as redes neurais são " aproximadores de funções universais ". Em essência, o teorema de Cybenko diz que, para qualquer mapeamento de funções de reais para reais, você pode aproximar-se com uma rede neural com funções de ativação sigmóide. De fato, as redes neurais permitem calcular qualquer função computável por uma máquina de Turing (ou seja, qualquer coisa que você possa escrever um algoritmo para calcular). Infelizmente, essas provas dizem apenas que, para algumas configurações finitas de neurônios e pesos, você pode aproximar qualquer função.

A teoria é boa e elegante, mas sua pergunta parece ser mais parecida com a de como realmente codificar a computação de alguma função em um conjunto de neurônios e pesos. Para ilustrar, considere um exemplo simples - o exclusivo-ou. O XOR aceita duas entradas, passa essas entradas. Quando uma e apenas uma das entradas são ativadas, o nó de saída é ativado. Com as duas ou nenhuma das entradas ativadas, o nó de saída não é ativado.

Uma rede Perceptron de três camadas capaz de calcular o XOR emprestado da wikipedia.

Observe que os três nós ocultos fazem coisas diferentes. Os nós mais à esquerda e mais à direita simplesmente passam pelas ativações dos nós de entrada de respeito. O neurônio do meio recebe as duas entradas e, de alguma forma, as nega se ambas estiverem ativadas. Essa inteligente combinação e recombinação de insumos é essencialmente como o trabalho em uma rede neural é feito.

Obviamente, para funções mais complexas, a combinação e recombinação devem ser feitas de maneiras mais inteligentes e complicadas, mas é essencialmente isso que acontece em um nível baixo. O louco é que isso é realmente tudo o que você precisa para calcular qualquer função computável! Por outro lado, as máquinas de turing também se tornam enganosamente simples ...

O problema é que não temos realmente uma maneira de gerar magicamente a rede neural que calcula alguma função arbitrária. As provas apenas nos dizem que existe alguma rede por aí que poderia fazê-lo. Quando treinamos nossas redes neurais, estamos simplesmente tentando encontrar uma rede bem próxima.

No contexto do reconhecimento de imagem, você pode imaginar padrões de codificação na rede. Por exemplo, para reconhecer o número '1', você pode imaginar nós ocultos que esperam que uma coluna de pixels seja quase total ou totalmente ativada, com os pixels vizinhos desativados. Esse nó oculto pode ser bastante bom em reconhecer uma linha reta nessa coluna específica. Coloque o suficiente disso em breve e, em breve, você terá vários nós em locais suficientes da sua imagem; se eu mostrar à rede um, nós ocultos em linha reta suficientes serão ativados, indicando um '1'. É claro que o problema se generaliza na rede para que ela possa reconhecer um conjunto variado de entradas.

Espero que isso ajude você a entender mais ou menos os conceitos de como uma rede neural pode executar cálculos. No entanto, você chegou a um ponto bastante importante sobre as redes neurais: em geral, é difícil, na melhor das hipóteses, entender por que a rede gera uma saída específica, especialmente quando você considera que, para algo como reconhecimento de imagem, as redes geralmente são grande o suficiente para que os humanos tenham dificuldade em compreender cada uma das partes móveis da máquina. O que complica ainda mais o fato é que, em geral, a maioria das redes neurais na verdade não possui um único nó oculto para cada pequeno recurso que a rede possa aprender sobre os dados. Em vez disso, detectar algo como uma linha reta para classificar o número '1' ocorreria de maneira não centralizada em muitos nós ocultos. Outros algoritmos,

Se você está procurando mais leitura, eu recomendo a leitura deste tutorial no ai junkie. Ele mostra os conceitos básicos de como uma rede neural funciona e até fornece um exemplo de código simples para que as redes neurais conduzam um tanque em direção a uma meta. No entanto, o tutorial não abrange a retropropagação, que é de longe a maneira mais comum de treinar redes neurais, e usa um algoritmo genético simples. Quando ele começa a falar sobre genética, acho que você pode parar de ler ...

jlund3
fonte
Obrigado por todo o tempo e esforços para reunir todas essas palavras e pensamentos. Estou particularmente interessado no NN Convolucional para reconhecimento de imagem. Eu tentei o exemplo de detecção de rosto na biblioteca OpenCV, mas achei que ele é bom apenas em objetos rígidos. A Rede Neural tem um limite semelhante no reconhecimento de padrões, ou seja, apenas é bom em objetos rígidos?
usar o seguinte comando
Não há razão teórica para que a NN (ou a CNN) tenha um limite para o reconhecimento de padrões, mas como você já descobriu, certos problemas são mais fáceis de aprender do que outros. Como muitos problemas no aprendizado de máquina, você provavelmente precisará ajustar um pouco o seu modelo para que ele possa se sair bem no tipo específico de problema que você está tentando resolver, e as NNs não são exceção a isso.
jlund3
11
Aqui está um artigo interessante sobre como estruturar melhor as NNs juntas para resolver problemas de grade em 2d, como classificação de imagens. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3
11
Tangencialmente, a dificuldade em classificar corretamente objetos visuais "não rígidos", ou dito de outra maneira, objetos cujas bordas não possuem linhas limpas é exatamente por isso que até a natureza determinou que a camuflagem é uma excelente estratégia de evasão. Alimento para o pensamento.
Mcstar
2

Que o que você está confuso

como ele aprende sobre o que está em uma imagem.

O que está em uma imagem é representado digitalmente pelos valores nos pixels da imagem. Se você der um exemplo de cor na imagem. O pixel pode ter três valores, cada um para as três cores principais - vermelho, verde e azul ( RGB). Um pixel com ( 10,50,100) significa que possui 'menos' elementos de cor azul do que um pixel com ( 40,50,100). Assim, na imagem, o primeiro pixel representa uma região com menos cor azul. Essas são as informações que a rede neural aprende, de um local / região da imagem para a outra e acaba 'sabendo' o que está na imagem. O mesmo princípio é aplicado a outros recursos de imagem (além da cor) que podem ser usados ​​como entrada na rede neural. Veja isto e isto para obter conceitos básicos de imagem e depois vá para este para aprender como a rede neural funciona.

Gathide
fonte
1

Todos os problemas de aprendizado de máquina são iguais. Você tem alguns dados de treinamento, aprende um modelo que representa esses dados e tem capacidade de generalizar esse conhecimento da maneira que agrupa, classifica e aprende com algoritmos diferentes.

No reconhecimento de imagem, você tem novamente um conjunto de imagens sobre as quais deseja aprender.

  1. Essas imagens foram processadas primeiro e alguns recursos são extraídos das imagens (muitos esquemas possíveis de recursos de imagem, como SIFT, Bag of WORDS), como você usa pixels e seus valores.
  2. Dê essas imagens com vetores de características correspondentes ao seu algoritmo ML (Net Neural, SVM ou outros).
  3. Aprenda um modelo
  4. Use este modelo para reconhecer objetos que são vistos suficientemente nos dados de treinamento.

Se você deseja reconhecer mais de uma coisa, use vários classificadores para cada uma.

erogol
fonte
1

Também gostaria de mencionar muito popular para redes neurais convolucionais de reconhecimento de imagem. Aqui está um link para uma explicação simplificada de uma CNN .

Resumidamente, na CNN, a imagem é primeiro dividida em recursos, como bordas, formas, coleções de formas. Em seguida, esses recursos são 'alimentados' em uma rede neural multicamada 'regular' totalmente conectada (perceptron multicamada).

Em mais detalhes, um conjunto de filtros é aplicado para extrair recursos na forma de um mapa de recursos. Um filtro é apenas uma matriz (aleatória no início) aplicada à imagem original, para que o produto escalar da matriz da imagem original e da matriz do filtro seja calculado e o resultado seja resumido. O filtro se move ao longo da imagem original, um pixel (a etapa) de cada vez, e a matriz do mapa de recursos está sendo preenchida. Um mapa de recursos é criado para cada filtro. Em seguida, a não linearidade é introduzida com RELU (Rectified Linear Unit) para cada pixel em cada mapa de recursos. O pool, através da aplicação de max (), sum () ou average (), é feito após a convolução. Por fim, os recursos extraídos dessa maneira parecem peças 'ampliadas' da imagem original. Esses recursos são inseridos em uma rede neural totalmente conectada (todas as unidades estão conectadas) e as probabilidades de cada imagem (digamos que treinamos nossa rede em imagens de carros, árvores e barcos) são calculadas após cada avanço na rede. A rede é treinada, o que significa que os parâmetros (pesos) e as matrizes de filtro são otimizados por meio de retropropagação (minimização de erro de classificação incorreta). Quando uma nova imagem é inserida na rede treinada, apenas o feedforward é necessário para identificar a imagem (desde que a rede seja precisa o suficiente, ou seja, nós a treinamos com exemplos suficientes etc.) o que significa que os parâmetros (pesos) e as matrizes de filtro são otimizados por meio de retropropagação (minimização de erro de classificação incorreta). Quando uma nova imagem é inserida na rede treinada, apenas o feedforward é necessário para identificar a imagem (desde que a rede seja precisa o suficiente, ou seja, nós a treinamos com exemplos suficientes etc.) o que significa que os parâmetros (pesos) e as matrizes de filtro são otimizados por meio de retropropagação (minimização de erro de classificação incorreta). Quando uma nova imagem é inserida na rede treinada, apenas o feedforward é necessário para identificar a imagem (desde que a rede seja precisa o suficiente, ou seja, nós a treinamos com exemplos suficientes etc.)

Leo Skhrnkv
fonte
0

É bom saber que a ANN pode criar qualquer função f (x) ou f (x, y, z, ..) ou qualquer multifuncional para esse assunto. Mas também é importante saber que as funções têm limites para classificar os dados ... existem subconjuntos de relações mais complexas de conjuntos de potências de objetos, que são importantes na classificação e que não são descritos por essas funções de maneira elegante ou natural, mas são importantes na linguagem e na classificação de objetos. A RNA também pode fazer isso.

zach
fonte