Redes neurais para crianças: explique o mais simples possível

Olá a todos. Não é segredo que quase todos os artigos do nosso blog são publicados para iniciar este ou aquele curso. O próximo artigo pode ser programado para o lançamento do curso "Redes Neurais em Python", mas, dada a simplicidade do material, não quero associá-lo ao curso, mas simplesmente publicá-lo como um material bônus, como um pequeno tutorial para o menor. Prevendo perguntas, quero dizer imediatamente que este artigo não está relacionado ao curso e não foi escrito pelo professor. Se você deseja aprender mais sobre o curso, faça isso na página correspondente .




Olá a todos! Hoje eu quero falar sobre como as redes neurais são organizadas, mas é tão simples que mesmo os iniciantes que dominam apenas o básico do Python podem entender.

O que são redes neurais e inteligência artificial em geral?


Na filosofia da IA, existem dois tipos de inteligência artificial - forte e fraca. A teoria da forte inteligência artificial sugere que os computadores podem adquirir a capacidade de pensar e estar cientes de si mesmos como uma pessoa separada (bem, algo como o que aconteceu em Detroit Become Human). A teoria da inteligência artificial fraca sugere que tal intelecto não pode ser ou é muito difícil de construir, e enquanto a ciência é capaz de criar redes neurais que apenas repetem parcialmente o trabalho das redes neurais de criaturas vivas. Mas a filosofia simplesmente não se aplica à ciência porque nada pode ser provado lá, então não vamos nos concentrar nisso. As redes neurais fracas agora ocupam uma posição dominante na ciência de dados e são amplamente usadas: no reconhecimento de imagens visuais, compra inteligente de bens,até o sistema OBS do veículo. Portanto, começar a aprender IA agora é mais do que relevante.

O que são redes neurais?


As redes neurais são modelos matemáticos da operação de redes neurais reais de seres vivos. Basta transferir o modelo matemático para um programa (e, por isso, o Python é tão amplamente usado na programação de redes neurais, tão conveniente para a programação de soluções para problemas matemáticos. Na verdade, as redes neurais podem ser escritas em quase qualquer linguagem de programação que suporte qualquer tipo de matemática Mesmo no Scratch, que foi originalmente criado para ensinar os conceitos básicos de programação para alunos mais jovens. Você pode ver aqui ).

Conceitos básicos de redes neurais


Existem muitos algoritmos para a operação de redes neurais (e agora o lado matemático dessa questão está sendo desenvolvido ativamente). A solução clássica para iniciantes é o método de retropropagação, um método de cálculo de gradiente usado para atualizar os pesos de um perceptron de várias camadas. Na forma em que é geralmente estudada por iniciantes (com uma função de ativação sigmóide), a rede neural é bastante lenta, mas relativamente precisa.

O programa que vamos escrever é chamado de enorme extensão da rede neural.

Antes de prosseguir com sua descrição, vamos discutir o que as redes neurais fazem em geral.

O que as redes neurais estão fazendo, se simplificadas?


Se simplificarmos um pouco o conceito de redes neurais, uma rede neural que é ensinada de acordo com o princípio de aprender com um professor, após treinamento no princípio de “estímulo - reação”, indicando as respostas corretas, pode trabalhar com estranhosdados. Em outras palavras, se você propôs um determinado conjunto de palavras para a rede neural de entrada (por exemplo, um conjunto de revisões na pesquisa de filmes, positivas e negativas, em qualquer formato, pelo menos txt, pelo menos json, a questão é apenas no programa para processar esses dados). Para criar com êxito uma rede neural, você precisará de dois conjuntos de dados: um conjunto de testes com o qual você possa avaliar o desempenho da rede neural criada e um conjunto de treinamento no qual os dados são rotulados como positivos / negativos (e aqui surge o problema de classificar o big data porque é longo e ocupação sombria). Depois de treinar a rede neural (que pode levar muito tempo e recursos do computador, dependendo da dimensionalidade dos dados, do processamento deles e, na maioria das vezes, dos mais importantes, dos algoritmos usados), ela poderá tentarpara prever com alguma precisão, uma avaliação positiva ou negativa veio à sua opinião. Mas as redes neurais (assim como uma pessoa real) têm uma certa porcentagem de erro. A tarefa da otimização é reduzi-la ao mínimo, mas é provável que a questão de avaliar a qualidade das redes neurais nunca vá a lugar algum. Por exemplo, eles dão uma foto de um cachorro-quente e você diz com certeza que é um cachorro-quente. Mas e se a foto estiver embaçada? Preto e branco? Filmado com pouca visibilidade? Aqui você já pode afirmar apenas com um certo grau de probabilidade, mesmo que tenha preparado ou comido muitos cachorros-quentes em sua vida.



Introdução à programação da nossa rede neural de brinquedos


OK, vamos lá. Não haverá dados de teste e treinamento em nossa rede neural de brinquedos, nossa rede neural de brinquedos tentará encontrar a proporção da proporção entre quaisquer dados.

Pare. E qual é o objetivo? O mesmo é encontrado em uma expressão matemática simples.
Sem dúvida. No entanto, agora peguei essa expressão para mostrar o processo de aprendizado de uma rede neural. Suponha que tenhamos a tarefa de descobrir qual é o fator de conversão entre polegadas e centímetros. Quantos centímetros são necessários em uma polegada? Para uma pessoa que conhece matemática pelo menos na quinta série (ou mesmo antes), não é difícil lembrar o que é o coeficiente de tradução 2,54.

Mas, por enquanto, vamos esquecer isso por um tempo e imaginar que precisamos criar um algoritmo simples que calcule universalmente esse parâmetro. No entanto, o problema também é que as redes neurais não são constantes com valores de coeficiente prontos, caso contrário, não teriam treinamento "ao vivo".

No total, estamos na posição de uma criança que apenas se sentou na frente de um conjunto de cubos e vai pegá-los em suas próprias mãos pela primeira vez e construir a primeira torre em sua vida. Ele sabe apenas aproximadamente como funciona a física dos objetos; ele, assim como nós, sabe que existe uma certa proporção específica (no seu caso, é a gravidade). Então, o que a criança fará?

Ele pega e aleatoriamente coloca alguns dados. Da mesma forma, podemos adivinhar aleatoriamente qual coeficiente teremos (e as redes neurais de adultos reais também fazem isso, geralmente geralmente guiadas pela geração de números em uma distribuição normal).
Por acaso, suponha que o coeficiente de acoplamento de polegadas e centímetros (vamos começar a chamá-lo de peso , como nas redes neurais adultas) será, por exemplo, 2,4. Então obtemos a expressão matemática mais complicada:

1 * 2.4 = 2.4

Ótimo, quase adivinhámos, e temos algum resultado. Mas está incorreto e, o que é normal para o processo de aprendizado, temos algum erro. Como no sistema nervoso com feedback, precisamos responder de alguma forma ao erro. Mas primeiro você precisa entender seu tamanho. Como eu já disse, ao treinar redes neurais com um professor, os dados são executados primeiro em dados marcados e somente depois enviados à classificação para dados semelhantes, mas não marcados. Também sabemos o que devemos obter o resultado correto, portanto, posso calcular o erro:

t_target = 2.54
t_now = 2.40
e = t_target - t_now
//  ,   0.14

Agora sabemos o quão errado. Mas o que fazer? Naturalmente, nossa rede neural de brinquedos deve ler os dados o mais baixo possível. E, nisso, outra característica subaquática das redes neurais se manifesta - na maioria das vezes elas têm algum fator de perda durante o treinamento, a parte da Data Science, chamada otimização , está empenhada em minimizar o erro .

Mas agora não é sobre isso. Sem dúvida, precisamos começar a alterar o coeficiente de acoplamento em algum passo, mas com o quê? Obviamente, você não precisa ser muito grande; caso contrário, nosso coeficiente de acoplamento será impreciso e não muito pequeno; caso contrário, teremos que treinar a rede neural por um longo tempo. Não existe uma opção 100% correta para encontrar essa etapa, na maioria das vezes esses parâmetros em uma rede neural real são selecionados mais intuitivamente do que com base em alguma fórmula ou algoritmo (embora isso também seja possível). Agora, podemos selecionar aleatoriamente o valor de nossa etapa (na linguagem das redes neurais, nossa etapa é chamada learning_rate); por exemplo, o valor 0,05 funcionará da maneira ideal. Além disso, você precisa concordar com quantas vezes o recuo na taxa de aprendizado ocorrerá.. O número desses recuos será chamado de época, como nas redes neurais adultas. Agora, armado com todo esse conhecimento, você pode tentar escrever um pequeno programa Python que executará nosso programa de rede neural de brinquedo.

import random

#    Python  random,        

inches = 40  #    40    101, 6 
centimetre = 101.6

#  ,        , learning rate  

def kid_neuro(epoch, lr, accur):
    W_coef = random.uniform(0, 2)  #     
    print("    : ", W_coef)
    for i in range(epoch):  #    
        Error = centimetre - (inches * W_coef)
        print("  ", Error)  #      
        if Error > 0:
            W_coef += lr  #    ,    

        if Error < 0:
            W_coef -= lr  #   ,    

        if Error < accur:
            print("  ", W_coef)
            return  #  ,      

epoch = int(input("epoch: "))  #      ""
lr = float(input("enter learning rate: "))  #   
accur = float(input("enter accurancy:  "))  #   ,     ,         

kid_neuro(epoch, lr, accur)  #    -

Deixo o leitor a tentar administrar a rede neural dessa criança com vários parâmetros por conta própria. Acontece muito bem na época = 100-, taxa de aprendizado = 0,01, precisão = 0,1.

Apesar da aparente inutilidade deste programa, discutimos com você o trabalho e os conceitos básicos de redes neurais, que também são usados ​​na construção de grandes redes neurais reais, por exemplo, no algoritmo de backprogation.

Resumidamente, esses conceitos básicos:

  • W — . - , . — , ,
  • lr — learning rate, .
  • epoch ,

Como prática, você pode tentar escrever a rede neural de seus próprios filhos, que traduzirá, por exemplo, quilômetros em milhas. E armado com o conhecimento adquirido neste artigo, você pode facilmente vir aqui , por exemplo , e já tentar iniciar a rede neural de maneira mais significativa.

Alguns links úteis que você pode acessar se quiser continuar aprendendo sobre redes neurais:


All Articles