Articles

Compreensão redes neurais 2: A matemática de redes neurais em 3 equações

Na primeira parte desta série, discutimos o conceito de uma rede neural, bem como a matemática descreve um único neurônio. No entanto, existem muitos neurônios em uma única camada e muitas camadas em toda a rede, então precisamos criar uma equação geral que descreva uma rede neural.

neurônio único

a primeira coisa que nossa rede precisa fazer é passar informações pelas camadas. Já sabemos como fazer isso para um único neurônio:

a Saída do neurônio é a função de ativação de uma soma ponderada do neurônio de entrada do

2 neurônios

Agora podemos aplicar a mesma lógica quando temos 2 neurônios na segunda camada.

neste exemplo, a cada neurônio da primeira camada está ligada a cada neurônio da segunda camada, este tipo de rede é chamado de rede totalmente conectada. O neurônio Y1 está conectado aos neurônios X1 e X2 com pesos W11 e W12 e o neurônio Y2 está conectado aos neurônios X1 e X2 com pesos W21 e W22. Nesta Notação, o primeiro índice do do peso indica o neurônio de saída e o segundo índice indica o neurônio de entrada, portanto, por exemplo, W12 é o peso na conexão de X2 a Y1. Agora podemos escrever as equações para Y1 e Y2:

Agora esta equação pode ser expressa usando a multiplicação de matrizes.

visualização de multiplicação de matrizes a partir de http://matrixmultiplication.xyz/

Se você é novo para a multiplicação de matriz e álgebra linear, e isso o torna confuso eu recomendo 3blue1brown de álgebra linear da série.

agora podemos escrever a saída do primeiro neurônio como Y1 e a saída do segundo neurônio como Y2. Isso nos dá a seguinte equação:

Toda a camada

a Partir disso, podemos abstrair a regra geral para a saída da camada:

Agora nesta equação todas as variáveis são matrizes e o sinal de multiplicação representa a multiplicação de matrizes.

o uso da matriz na equação nos permite escrevê-la de forma simples e torna-a verdadeira para qualquer número de entrada e neurônios na saída.

na programação de redes neurais, também usamos multiplicação de matrizes, pois isso nos permite tornar a computação paralela e usar hardware eficiente para ela, como placas gráficas.

Agora temos a equação para uma única camada, mas nada nos impede de tomar a saída desta camada e usando-o como uma entrada para a próxima camada. Isso nos dá a equação genérica que descreve a saída de cada camada de rede neural. Mais uma coisa, precisamos adicionar, é a função de ativação, vou explicar por que precisamos de funções de ativação na próxima parte da série, por enquanto você pode pensar como uma maneira de escalar a saída, para que não se torne muito grande ou muito insignificante.

Com esta equação, podemos propagar a informação através de várias camadas da rede neural, como nós queremos. Mas sem qualquer aprendizado, a rede neural é apenas um conjunto de multiplicações de matrizes aleatórias que não significa nada.

então, como ensinar nossa rede neural? Em primeiro lugar, precisamos calcular o erro da rede neural e pensar em como passar esse erro para todas as camadas.

2 : passando o erro-back-propagation

para entender o algoritmo de propagação de erros, temos que voltar a um exemplo com 2 neurônios na primeira camada e 1 neurônio na segunda camada.

Vamos supor que Y camada é a camada de saída da rede e Y1 neurônio deve retornar algum valor. Agora, esse valor pode ser diferente do valor esperado um pouco, então há algum erro no neurônio Y1. Podemos pensar nesse erro como a diferença entre o valor retornado e o valor esperado. Sabemos o erro no Y1, mas precisamos passar esse erro para as camadas inferiores da rede porque queremos que todas as camadas aprendam, não apenas a camada Y. Então, como passar esse erro para X1 e X2? Bem, uma abordagem ingênua seria dividir o erro Y1 uniformemente, uma vez que existem 2 neurônios na camada X, poderíamos dizer que o erro X1 e X2 é igual ao erro Y1 concebido por 2.

no entanto, Existe um grande problema com esta abordagem, os neurônios têm pesos diferentes conectados a eles. Se o peso conectado ao neurônio X1 for muito maior do que o peso conectado ao neurônio X2, o erro em Y1 é muito mais influenciado por X1 desde Y1 = ( X1 * W11 + X2 * X12). Portanto, se W11 for maior que W12, devemos passar mais do erro Y1 para o neurônio X1, pois este é o neurônio que contribui para ele.

Agora o que temos observado é que nós podemos atualizar nosso algoritmo não dividir o erro de forma uniforme, mas para dividi-lo de acordo com o racionamento de entrada do neurônio peso para todos os pesos de vir para a saída do neurônio.

atualizar o peso

Agora podemos ir um passo além e analisar o exemplo, onde há mais de um neurônio na camada de saída.

neste exemplo podemos ver que e.g. neurônio X1 contribui não só para o erro de Y1, mas também para o erro de Y2 e este erro é ainda proporcional ao seu peso. Então, na equação que descreve o erro de X1, precisamospara ter tanto erro de Y1 multiplicado pela razão dos pesos e erro de Y2 multiplicado pela razão dos pesos chegando a Y2.

Esta equação também pode ser escrita na forma de multiplicação de matrizes.

Agora há um outro truque que podemos fazer para tornar essa passagem mais simples, sem perder um monte de informações relevantes. O denominador da razão de peso, atua como um fator de normalização, por isso não nos importamos muito com isso, parcialmente porque a equação final teremos outros meios de regular o aprendizado da rede neural.

Esta é também uma observação a mais que podemos fazer. Podemos ver que a matriz com peso nesta equação é bastante semelhante à matriz do algoritmo feed forward. A diferença é que as linhas e colunas são trocadas. Em álgebra, chamamos essa transposição da matriz.

como não há necessidade de usar 2 variáveis diferentes, podemos apenas usar a mesma variável do algoritmo feed forward. Isso nos dá a equação geral de back-algoritmo de propagação

Note que no feed-forward algoritmo estávamos indo formar a primeira camada para o último, mas na parte de trás de propagação vamos formar a última camada de rede para o primeiro, uma vez que para calcular o erro em uma determinada camada precisamos de informações sobre o erro na camada seguinte.

Tendências AI Artigos:

1. Como eu usei o aprendizado de máquina como inspiração para pinturas físicas

2. MS ou Startup Job – que caminho seguir para construir uma carreira em Deep Learning?

3. TOP 100 artigos médios relacionados com Inteligência Artificial

4. Inteligência Artificial Conferência

Agora que sabemos como passar as informações adiante e passar o erro para trás, podemos usar o erro em cada camada para atualizar o peso.

3 : atualizando os pesos

agora que sabemos quais erros a rede neural faz em cada camada, podemos finalmente começar a ensinar nossa rede a encontrar a melhor solução para o problema.

mas qual é a melhor solução?

o erro nos informa sobre o quão erradas são nossas soluções, então, naturalmente, a melhor solução seria aquela em que a função de erro é mínima.

função de Erro depende dos pesos da rede, de modo que nós queremos encontrar tais pesos de valores que resultam em o mínimo global da função de erro. Observe que esta imagem é apenas para fins de visualização. Em aplicações da vida real, Temos mais de 1 peso, então a função de erro é função de alta dimensão.

mas como encontramos o mínimo dessa função? Uma ideia simples aqui é começar com pesos aleatórios, calcular a função de erro para esses pesos e, em seguida, verificar a inclinação dessa função para descer.

Mas como podemos conhecer a inclinação da função?

podemos usar álgebra linear mais uma vez e alavancar o fato de que a derivada de uma função em determinado ponto é igual à inclinação de uma função neste ponto. Podemos escrever este derivado da seguinte forma:

Onde E é a nossa função de erro e W representa o peso. Essa notação nos informa que queremos encontrar a derivada da função de erro em relação ao peso. Usamos n + 1 com o erro, já que em nossa notação a saída da rede neural após os pesos Wn está em+1.

podemos usar este derivado para atualizar o peso:

Este representa o “descer” de aprendizagem de cada iteração (época) que atualizar o peso de acordo com a inclinação da derivada da função de erro.

há mais uma coisa que precisamos antes de apresentar a equação final e que é a taxa de aprendizagem. A taxa de aprendizagem regula os grandes passos que estamos dando durante a descida.

Como você pode ver com maior índice de aprendizagem, podemos dar passos maiores. Isso significa que podemos chegar ao melhor da função mais rápido, mas também há uma chance maior de perdermos.

com a menor taxa de aprendizado, damos passos menores, o que resulta na necessidade de mais épocas para atingir o mínimo da função, mas há uma chance menor de perdê-la.

é por isso que, na prática, muitas vezes usamos taxa de aprendizagem que é dependente das etapas anteriores, por exemplo. se houver uma forte tendência de ir em uma direção, podemos dar passos maiores (maior taxa de aprendizado), mas se a direção continuar mudando, devemos tomar medidas menores (menor taxa de aprendizado) para procurar o mínimo melhor. No nosso exemplo, no entanto, vamos adotar a abordagem simples e usar o valor da taxa de aprendizagem fixa. Isso nos dá a seguinte equação.

taxa de aprendizagem (Lr) é um número em rage 0 — 1. Quanto menor for, menor será a mudança para os pesos. Se o aprendizado estiver próximo de 1. usamos o valor total da derivada para atualizar os pesos e, se estiver próximo de 0, usamos apenas uma pequena parte dela. Isso significa que a taxa de aprendizado, como o nome sugere, regula o quanto a rede “aprende” em uma única iteração.Atualizar os pesos foi a equação final que precisávamos em nossa rede neural. São as equações que são responsáveis pelo aprendizado real da rede e por ensiná-la a dar resultados significativos em vez de valores aleatórios.

Colocando tudo junto

Feed-forward

de Volta a propagação

Atualizando os pesos

Deixe uma resposta

O seu endereço de email não será publicado.