Propagação para Trás
A propagação para trás (backprop) é o processo de calcular como a função de perda varia em relação a cada parâmetro da rede. O objetivo é atualizar os parâmetros na direção que reduz a perda.
Para isso, utiliza-se o algoritmo de gradiente descendente e calcula-se as derivadas da perda em relação aos valores de pré-ativação de cada camada (valores brutos antes da aplicação da função de ativação), propagando-os para trás.
Cada camada contribui para a previsão final, portanto, os gradientes devem ser calculados de forma estruturada:
- Realizar a propagação para frente;
- Calcular a derivada da perda em relação à pré-ativação de saída;
- Propagar essa derivada para trás pelas camadas usando a regra da cadeia;
- Calcular os gradientes para pesos e vieses para atualizá-los.
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 utilizar a seguinte notação:
- Wl é a matriz de pesos da camada l;
- bl é o vetor de vieses da camada l;
- zl é o vetor de pré-ativações da camada l;
- al é o vetor de ativações da camada l;
Portanto, definindo a0 como x (as entradas), a propagação para frente em um perceptron com n camadas pode ser descrita pela seguinte sequência de operações:
a0z1a1=x,=W1a0+b1,=f1(z1),...zlal...=Wlal−1+bl,=fl(zl),...znany^...=Wnan−1+bn,=fn(zn),=an.Para descrever a retropropagação matematicamente, introduzimos as seguintes notações:
- dal: derivada da função de perda em relação às ativações na camada l;
- dzl: derivada da função de perda em relação às pré-ativações na camada l (antes de aplicar a função de ativação);
- dWl: derivada da função de perda em relação aos pesos na camada l;
- dbl: derivada da função de perda em relação aos biases na camada l.
Cálculo dos Gradientes para a Camada de Saída
Na camada final n, primeiro calculamos o gradiente da função de perda em relação às ativações da camada de saída, dan. Em seguida, utilizando a regra da cadeia, calculamos o gradiente da função de perda em relação às pré-ativações da camada de saída:
dzn=dan⊙f′n(zn)O símbolo ⊙ representa multiplicação elemento a elemento. Como estamos trabalhando com vetores e matrizes, o símbolo de multiplicação usual ⋅ representa o produto escalar. f′n é a derivada da função de ativação da camada de saída.
Esta quantidade representa o quanto a função de perda é sensível a alterações na pré-ativação da camada de saída.
Após obtermos dzn, calculamos os gradientes para os pesos e vieses:
dWndbn=dzn⋅(an−1)T=dznonde (an−1)T é o vetor transposto de ativações da camada anterior. Considerando que o vetor original é um vetor nneurons×1, o vetor transposto é 1×nneurons.
Para propagar isso para trás, calculamos a derivada da perda em relação às ativações da camada anterior:
dan−1=(Wn)T⋅dznPropagando Gradientes para as Camadas Ocultas
Para cada camada oculta l, o procedimento é o mesmo. Dado dal:
- Calcular a derivada da perda em relação às pré-ativações;
- Calcular os gradientes para os pesos e vieses;
- Calcular dal−1 para propagar a derivada para trás.
Esta etapa se repete até alcançarmos a camada de entrada.
Atualização de Pesos e Biases
Após calcularmos os gradientes para todas as camadas, atualizamos os pesos e biases utilizando o gradiente descendente:
Wlbl=Wl−α⋅dWl=bl−α⋅dblonde α é a taxa de aprendizado, que controla o quanto ajustamos os parâmetros.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 4
Propagação para Trás
Deslize para mostrar o menu
A propagação para trás (backprop) é o processo de calcular como a função de perda varia em relação a cada parâmetro da rede. O objetivo é atualizar os parâmetros na direção que reduz a perda.
Para isso, utiliza-se o algoritmo de gradiente descendente e calcula-se as derivadas da perda em relação aos valores de pré-ativação de cada camada (valores brutos antes da aplicação da função de ativação), propagando-os para trás.
Cada camada contribui para a previsão final, portanto, os gradientes devem ser calculados de forma estruturada:
- Realizar a propagação para frente;
- Calcular a derivada da perda em relação à pré-ativação de saída;
- Propagar essa derivada para trás pelas camadas usando a regra da cadeia;
- Calcular os gradientes para pesos e vieses para atualizá-los.
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 utilizar a seguinte notação:
- Wl é a matriz de pesos da camada l;
- bl é o vetor de vieses da camada l;
- zl é o vetor de pré-ativações da camada l;
- al é o vetor de ativações da camada l;
Portanto, definindo a0 como x (as entradas), a propagação para frente em um perceptron com n camadas pode ser descrita pela seguinte sequência de operações:
a0z1a1=x,=W1a0+b1,=f1(z1),...zlal...=Wlal−1+bl,=fl(zl),...znany^...=Wnan−1+bn,=fn(zn),=an.Para descrever a retropropagação matematicamente, introduzimos as seguintes notações:
- dal: derivada da função de perda em relação às ativações na camada l;
- dzl: derivada da função de perda em relação às pré-ativações na camada l (antes de aplicar a função de ativação);
- dWl: derivada da função de perda em relação aos pesos na camada l;
- dbl: derivada da função de perda em relação aos biases na camada l.
Cálculo dos Gradientes para a Camada de Saída
Na camada final n, primeiro calculamos o gradiente da função de perda em relação às ativações da camada de saída, dan. Em seguida, utilizando a regra da cadeia, calculamos o gradiente da função de perda em relação às pré-ativações da camada de saída:
dzn=dan⊙f′n(zn)O símbolo ⊙ representa multiplicação elemento a elemento. Como estamos trabalhando com vetores e matrizes, o símbolo de multiplicação usual ⋅ representa o produto escalar. f′n é a derivada da função de ativação da camada de saída.
Esta quantidade representa o quanto a função de perda é sensível a alterações na pré-ativação da camada de saída.
Após obtermos dzn, calculamos os gradientes para os pesos e vieses:
dWndbn=dzn⋅(an−1)T=dznonde (an−1)T é o vetor transposto de ativações da camada anterior. Considerando que o vetor original é um vetor nneurons×1, o vetor transposto é 1×nneurons.
Para propagar isso para trás, calculamos a derivada da perda em relação às ativações da camada anterior:
dan−1=(Wn)T⋅dznPropagando Gradientes para as Camadas Ocultas
Para cada camada oculta l, o procedimento é o mesmo. Dado dal:
- Calcular a derivada da perda em relação às pré-ativações;
- Calcular os gradientes para os pesos e vieses;
- Calcular dal−1 para propagar a derivada para trás.
Esta etapa se repete até alcançarmos a camada de entrada.
Atualização de Pesos e Biases
Após calcularmos os gradientes para todas as camadas, atualizamos os pesos e biases utilizando o gradiente descendente:
Wlbl=Wl−α⋅dWl=bl−α⋅dblonde α é a taxa de aprendizado, que controla o quanto ajustamos os parâmetros.
Obrigado pelo seu feedback!