Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Propagação para Trás | Rede Neural do Zero
Introdução às Redes Neurais

bookPropagação para Trás

Propagação para trás, ou backpropagation, é o processo de determinar como a função de perda varia em relação a cada parâmetro da rede neural. O objetivo é ajustar esses parâmetros de forma a reduzir a perda total.

Esse processo depende do algoritmo de gradiente descendente, que utiliza as derivadas da perda em relação aos valores de pré-ativação de cada camada (os resultados brutos antes da aplicação da função de ativação) e as propaga para trás pela rede.

Como cada camada contribui para a previsão final, os gradientes são calculados passo a passo:

  1. Realizar a propagação para frente para obter as saídas;
  2. Calcular a derivada da perda em relação à pré-ativação da saída;
  3. Propagar essa derivada para trás pelas camadas usando a regra da cadeia;
  4. Calcular e utilizar os gradientes para pesos e vieses para atualizá-los durante o treinamento.
Note
Nota

Gradientes representam a taxa de variação de uma função em relação às suas entradas, ou seja, são suas derivadas. Eles indicam quanto uma pequena alteração nos pesos, vieses ou ativações afeta a função de perda, orientando o processo de aprendizado do modelo por meio do gradiente descendente.

Notação

Para tornar a explicação mais clara, vamos usar a seguinte notação:

  • WlW^l é a matriz de pesos da camada ll;
  • blb^l é o vetor de vieses da camada ll;
  • zlz^l é o vetor de pré-ativações da camada ll;
  • ala^l é o vetor de ativações da camada ll;

Portanto, definindo a0a^0 como xx (as entradas), a propagação para frente em um perceptron com n camadas pode ser descrita pela seguinte sequência de operações:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Para descrever a retropropagação matematicamente, introduzindo as seguintes notações:

  • dalda^l: derivada da perda em relação às ativações na camada ll;
  • dzldz^l: derivada da perda em relação às pré-ativações na camada ll (antes de aplicar a função de ativação);
  • dWldW^l: derivada da perda em relação aos pesos na camada ll;
  • dbldb^l: derivada da perda em relação aos biases na camada ll.

Cálculo dos Gradientes para a Camada de Saída

Na camada final nn, o primeiro passo é calcular o gradiente da perda em relação às ativações da camada de saída, denotado como danda^n.

Em seguida, utilizando a regra da cadeia, o gradiente da perda em relação às pré-ativações da camada de saída é calculado como:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)

Aqui, fn(zn)f'^n(z^n) representa a derivada da função de ativação na camada nn, e o símbolo \odot denota multiplicação elemento a elemento.

Note
Nota

O símbolo \odot denota multiplicação elemento a elemento, o que significa que cada elemento de um vetor é multiplicado pelo elemento correspondente de outro vetor. Em contraste, o símbolo \cdot representa o produto escalar, utilizado para multiplicação padrão de matrizes ou vetores. O termo fnf'^n refere-se à derivada da função de ativação na camada de saída.

Este valor indica o quão sensível a função de perda é em relação às mudanças nos valores de pré-ativação da camada de saída.

Após calcular dzndz^n, o próximo passo é determinar os gradientes para os pesos e vieses:

dWn=dzn(an1)T,dbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T,\\ db^n &= dz^n \end{aligned}

Esses gradientes descrevem quanto cada peso e viés na camada de saída deve ser ajustado para reduzir a perda.

Aqui, (an1)T(a^{n-1})^T é o vetor de ativação transposto da camada anterior. Se o vetor original possui a forma nneurons×1n_{\text{neurons}} \times 1, sua transposta possui a forma 1×nneurons1 \times n_{\text{neurons}}.

Para continuar a propagação para trás, a derivada da perda em relação às ativações da camada anterior é calculada como:

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Esta expressão permite que o sinal de erro seja propagado para trás na rede, possibilitando o ajuste das camadas anteriores durante o treinamento.

Propagação dos Gradientes para as Camadas Ocultas

Para cada camada oculta ll o procedimento é o mesmo. Dado dalda^l:

  1. Calcular a derivada da perda em relação às pré-ativações;
  2. Calcular os gradientes para os pesos e vieses;
  3. Calcular dal1da^{l-1} para propagar a derivada para trás.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Esse processo é repetido para cada camada anterior, passo a passo, até que a camada de entrada seja alcançada.

Atualização de Pesos e Vieses

Após o cálculo dos gradientes para todas as camadas, os pesos e vieses são atualizados utilizando o algoritmo de gradiente descendente:

Wl=WlαdWl,bl=blαdbl.\begin{aligned} W^l &= W^l - \alpha \cdot dW^l,\\ b^l &= b^l - \alpha \cdot db^l. \end{aligned}

Aqui, α\alpha representa a taxa de aprendizado, que controla o quanto os parâmetros são ajustados a cada etapa de treinamento.

Aqui, α\alpha é a taxa de aprendizado, um hiperparâmetro que determina o tamanho do ajuste aplicado aos pesos e vieses durante cada etapa de atualização.

question mark

Durante a retropropagação, como uma rede neural atualiza seus pesos e vieses para minimizar a função de perda?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain how the chain rule is applied in backpropagation?

What is the difference between pre-activations and activations in a neural network?

Can you provide an example of calculating gradients for a simple neural network?

Awesome!

Completion rate improved to 4

bookPropagação para Trás

Deslize para mostrar o menu

Propagação para trás, ou backpropagation, é o processo de determinar como a função de perda varia em relação a cada parâmetro da rede neural. O objetivo é ajustar esses parâmetros de forma a reduzir a perda total.

Esse processo depende do algoritmo de gradiente descendente, que utiliza as derivadas da perda em relação aos valores de pré-ativação de cada camada (os resultados brutos antes da aplicação da função de ativação) e as propaga para trás pela rede.

Como cada camada contribui para a previsão final, os gradientes são calculados passo a passo:

  1. Realizar a propagação para frente para obter as saídas;
  2. Calcular a derivada da perda em relação à pré-ativação da saída;
  3. Propagar essa derivada para trás pelas camadas usando a regra da cadeia;
  4. Calcular e utilizar os gradientes para pesos e vieses para atualizá-los durante o treinamento.
Note
Nota

Gradientes representam a taxa de variação de uma função em relação às suas entradas, ou seja, são suas derivadas. Eles indicam quanto uma pequena alteração nos pesos, vieses ou ativações afeta a função de perda, orientando o processo de aprendizado do modelo por meio do gradiente descendente.

Notação

Para tornar a explicação mais clara, vamos usar a seguinte notação:

  • WlW^l é a matriz de pesos da camada ll;
  • blb^l é o vetor de vieses da camada ll;
  • zlz^l é o vetor de pré-ativações da camada ll;
  • ala^l é o vetor de ativações da camada ll;

Portanto, definindo a0a^0 como xx (as entradas), a propagação para frente em um perceptron com n camadas pode ser descrita pela seguinte sequência de operações:

a0=x,......z1=W1a0+b1,zl=Wlal1+bl,zn=Wnan1+bn,a1=f1(z1),al=fl(zl),an=fn(zn),......y^=an.\begin{aligned} a^0 &= x, & &... & &...\\ z^1 &= W^1 a^0 + b^1, & z^l &= W^l a^{l-1} + b^l, & z^n &= W^n a^{n-1} + b^n,\\ a^1 &= f^1(z^1), & a^l &= f^l(z^l), & a^n &= f^n(z^n),\\ &... & &... & \hat y &= a^n. \end{aligned}

Para descrever a retropropagação matematicamente, introduzindo as seguintes notações:

  • dalda^l: derivada da perda em relação às ativações na camada ll;
  • dzldz^l: derivada da perda em relação às pré-ativações na camada ll (antes de aplicar a função de ativação);
  • dWldW^l: derivada da perda em relação aos pesos na camada ll;
  • dbldb^l: derivada da perda em relação aos biases na camada ll.

Cálculo dos Gradientes para a Camada de Saída

Na camada final nn, o primeiro passo é calcular o gradiente da perda em relação às ativações da camada de saída, denotado como danda^n.

Em seguida, utilizando a regra da cadeia, o gradiente da perda em relação às pré-ativações da camada de saída é calculado como:

dzn=danfn(zn)dz^n = da^n \odot f'^n(z^n)

Aqui, fn(zn)f'^n(z^n) representa a derivada da função de ativação na camada nn, e o símbolo \odot denota multiplicação elemento a elemento.

Note
Nota

O símbolo \odot denota multiplicação elemento a elemento, o que significa que cada elemento de um vetor é multiplicado pelo elemento correspondente de outro vetor. Em contraste, o símbolo \cdot representa o produto escalar, utilizado para multiplicação padrão de matrizes ou vetores. O termo fnf'^n refere-se à derivada da função de ativação na camada de saída.

Este valor indica o quão sensível a função de perda é em relação às mudanças nos valores de pré-ativação da camada de saída.

Após calcular dzndz^n, o próximo passo é determinar os gradientes para os pesos e vieses:

dWn=dzn(an1)T,dbn=dzn\begin{aligned} dW^n &= dz^n \cdot (a^{n-1})^T,\\ db^n &= dz^n \end{aligned}

Esses gradientes descrevem quanto cada peso e viés na camada de saída deve ser ajustado para reduzir a perda.

Aqui, (an1)T(a^{n-1})^T é o vetor de ativação transposto da camada anterior. Se o vetor original possui a forma nneurons×1n_{\text{neurons}} \times 1, sua transposta possui a forma 1×nneurons1 \times n_{\text{neurons}}.

Para continuar a propagação para trás, a derivada da perda em relação às ativações da camada anterior é calculada como:

dan1=(Wn)Tdznda^{n-1} = (W^n)^T \cdot dz^n

Esta expressão permite que o sinal de erro seja propagado para trás na rede, possibilitando o ajuste das camadas anteriores durante o treinamento.

Propagação dos Gradientes para as Camadas Ocultas

Para cada camada oculta ll o procedimento é o mesmo. Dado dalda^l:

  1. Calcular a derivada da perda em relação às pré-ativações;
  2. Calcular os gradientes para os pesos e vieses;
  3. Calcular dal1da^{l-1} para propagar a derivada para trás.
dzl=dalfl(zl)dWl=dzl(al1)Tdbl=dzldal1=(Wl)Tdzl\begin{aligned} dz^l &= da^l \odot f'^l(z^l)\\ dW^l &= dz^l \cdot (a^{l-1})^T\\ db^l &= dz^l\\ da^{l-1} &= (W^l)^T \cdot dz^l \end{aligned}

Esse processo é repetido para cada camada anterior, passo a passo, até que a camada de entrada seja alcançada.

Atualização de Pesos e Vieses

Após o cálculo dos gradientes para todas as camadas, os pesos e vieses são atualizados utilizando o algoritmo de gradiente descendente:

Wl=WlαdWl,bl=blαdbl.\begin{aligned} W^l &= W^l - \alpha \cdot dW^l,\\ b^l &= b^l - \alpha \cdot db^l. \end{aligned}

Aqui, α\alpha representa a taxa de aprendizado, que controla o quanto os parâmetros são ajustados a cada etapa de treinamento.

Aqui, α\alpha é a taxa de aprendizado, um hiperparâmetro que determina o tamanho do ajuste aplicado aos pesos e vieses durante cada etapa de atualização.

question mark

Durante a retropropagação, como uma rede neural atualiza seus pesos e vieses para minimizar a função de perda?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 7
some-alt