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

bookDesafio: Treinamento do Perceptron

Antes de prosseguir com o treinamento do perceptron, lembre-se de que ele utiliza a função de perda de entropia cruzada binária discutida anteriormente. O último conceito fundamental antes de implementar o backpropagation é a fórmula para a derivada dessa função de perda em relação às ativações de saída, ana^n. Abaixo estão as fórmulas para a função de perda e sua derivada:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

onde an=y^a^n = \hat{y}

Para verificar se o perceptron está sendo treinado corretamente, o método fit() também exibe a perda média em cada época. Isso é calculado pela média da perda em todos os exemplos de treinamento naquela época:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Por fim, as fórmulas para o cálculo dos gradientes são as seguintes:

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}

Os dados de treinamento de exemplo (X_train) juntamente com os rótulos correspondentes (y_train) estão armazenados como arrays NumPy no arquivo utils.py. Além disso, as instâncias das funções de ativação também estão definidas lá:

relu = ReLU()
sigmoid = Sigmoid()
Tarefa

Swipe to start coding

Seu objetivo é completar o processo de treinamento de um perceptron multicamadas implementando o backpropagation e atualizando os parâmetros do modelo.

Siga estes passos cuidadosamente:

  1. Implemente o método backward() na classe Layer:
  • Calcule os seguintes gradientes:
    • dz: derivada da função de perda em relação aos valores pré-ativação, utilizando a derivada da função de ativação;
  • d_weights: gradiente da perda em relação aos pesos, calculado como o produto escalar de dz e o vetor de entrada transposto;
  • d_biases: gradiente da perda em relação aos vieses, igual a dz;
  • da_prev: gradiente da perda em relação às ativações da camada anterior, obtido multiplicando a matriz de pesos transposta por dz.
  • Atualize os pesos e vieses utilizando a taxa de aprendizado.
  1. Complete o método fit() na classe Perceptron:
  • Calcule a saída do modelo chamando o método forward();
  • Calcule a função de perda utilizando a fórmula da entropia cruzada;
  • Calcule danda^n — a derivada da perda em relação às ativações de saída;
  • Faça um loop reverso pelas camadas, realizando o backpropagation ao chamar o método backward() de cada camada.
  1. Verifique o comportamento do treinamento:
  • Se tudo estiver implementado corretamente, a perda deve diminuir de forma constante a cada época ao utilizar uma taxa de aprendizado de 0.01.

Solução

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 10
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

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

close

Awesome!

Completion rate improved to 4

bookDesafio: Treinamento do Perceptron

Deslize para mostrar o menu

Antes de prosseguir com o treinamento do perceptron, lembre-se de que ele utiliza a função de perda de entropia cruzada binária discutida anteriormente. O último conceito fundamental antes de implementar o backpropagation é a fórmula para a derivada dessa função de perda em relação às ativações de saída, ana^n. Abaixo estão as fórmulas para a função de perda e sua derivada:

L=(ylog(y^)+(1y)log(1y^))dan=y^yy^(1y^)\begin{aligned} L &= -(y \log(\hat{y}) + (1-y) \log(1 - \hat{y}))\\ da^n &= \frac {\hat{y} - y} {\hat{y}(1 - \hat{y})} \end{aligned}

onde an=y^a^n = \hat{y}

Para verificar se o perceptron está sendo treinado corretamente, o método fit() também exibe a perda média em cada época. Isso é calculado pela média da perda em todos os exemplos de treinamento naquela época:

for epoch in range(epochs):
    loss = 0

    for i in range(training_data.shape[0]):
        loss += -(target * np.log(output) + (1 - target) * np.log(1 - output))

average_loss = loss[0, 0] / training_data.shape[0]
print(f'Loss at epoch {epoch + 1}: {average_loss:.3f}')
L=1Ni=1N(yilog(y^i)+(1yi)log(1y^i))L = -\frac1N \sum_{i=1}^N (y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i))

Por fim, as fórmulas para o cálculo dos gradientes são as seguintes:

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}

Os dados de treinamento de exemplo (X_train) juntamente com os rótulos correspondentes (y_train) estão armazenados como arrays NumPy no arquivo utils.py. Além disso, as instâncias das funções de ativação também estão definidas lá:

relu = ReLU()
sigmoid = Sigmoid()
Tarefa

Swipe to start coding

Seu objetivo é completar o processo de treinamento de um perceptron multicamadas implementando o backpropagation e atualizando os parâmetros do modelo.

Siga estes passos cuidadosamente:

  1. Implemente o método backward() na classe Layer:
  • Calcule os seguintes gradientes:
    • dz: derivada da função de perda em relação aos valores pré-ativação, utilizando a derivada da função de ativação;
  • d_weights: gradiente da perda em relação aos pesos, calculado como o produto escalar de dz e o vetor de entrada transposto;
  • d_biases: gradiente da perda em relação aos vieses, igual a dz;
  • da_prev: gradiente da perda em relação às ativações da camada anterior, obtido multiplicando a matriz de pesos transposta por dz.
  • Atualize os pesos e vieses utilizando a taxa de aprendizado.
  1. Complete o método fit() na classe Perceptron:
  • Calcule a saída do modelo chamando o método forward();
  • Calcule a função de perda utilizando a fórmula da entropia cruzada;
  • Calcule danda^n — a derivada da perda em relação às ativações de saída;
  • Faça um loop reverso pelas camadas, realizando o backpropagation ao chamar o método backward() de cada camada.
  1. Verifique o comportamento do treinamento:
  • Se tudo estiver implementado corretamente, a perda deve diminuir de forma constante a cada época ao utilizar uma taxa de aprendizado de 0.01.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 10
single

single

some-alt