Redes Neurais Artificiais #2 Propagations — Conceito Básico
Artigo Redes Neurais Artificiais | Parte #1
Forward Propagation
➡️ Forward propagation é o processo de “alimentar” um conjunto de entradas em uma rede neural para obter resultado com seus pesos e, em seguida, na última entrada sua função de ativação compara seus valores com a sáida real (gabarito 🤓).
🔘 Demonstração de como é o cálculo da saída de um forward pass em uma RNA 3–4–1:
Os pesos iniciais da primeira e segunda camadas:
Wij(peso)=⎡⎣⎢0.10.50.20.20.40.60.40.70.30.30.90.8⎤⎦⎥Wij(peso)=[0.10.20.40.30.50.40.70.90.20.60.30.8] >> Wjk=⎡⎣⎢⎢⎢0.20.30.60.1⎤⎦⎥⎥⎥Wjk=[0.20.30.60.1]
Input:
i=⎡⎣⎢0.10.40.5⎤⎦⎥i=[0.10.40.5]
Output:
o=[1]o=[1]
Em nosso exemplo, usaremos a função de ativação ReLU e na camada de saída á será usado a Sigmóide.
blz, mas agora vamos codificar um pouco! 🥱
Code
Saída da RNA Feed Forward: [[0.63807065]]
Cross entropy error
A Cross-entropy loss ou perda logarítimica, mede o desempenho de um modelo cuja saída é um valor de probabilidade entre 0 e 1. A Cross-entropy loss aumenta à mediada que sua probabilidade prevista diverge da label real.
📍 Um modelo perfeito teria uma perda logarítimica de 0.
Equação:
L=−∑i(y′ilog(yi)+(1−y′i)log(1−yi))L=−∑i(y′ilog(yi)+(1−y′i)log(1−yi))
🧮 Onde yiyi é o valor previsto para a classe iiI e y′iy′i é a probabilidade verdadeira da classe.
Code
Saida de nossa RNA: [[0.63807065]]
Nosso Ground Truth: [[1]]
Cross Entropy Error: [0.19513123]
📌 Em resumo, é assim que um Forward Propagation trabalha e como nossa RNA gera suas previsões. A etapa de propagação direta é menos tensa matematicamente, frente ao Back-Propagation.
Back-propagation
Back-propagation é um método usado em RNAs para calcular um gradiente (nossa bússola 🔭) que é necessário no cáclulo dos pesos que são usados na rede.
Alguns derivadas importantes
Equações:
Cross entropy error:
∂L∂yi=−y′iyi+(1−y′i)(1−yi)∂L∂yi=−y′iyi+(1−y′i)(1−yi)
Sigmoid:
∂Sigmoid(x)∂x=Sigmoid(x)×(1−Sigmoid(x))∂Sigmoid(x)∂x=Sigmoid(x)×(1−Sigmoid(x))
Code
Out[3]:
Text(0, 0.5, 'sigmóide')
ReLU:
∂ReLU(x)∂x={1,0,if x>0.otherwise.∂ReLU(x)∂x={1,if x>0.0,otherwise.
Code
Out[4]:
Text(0, 0.5, 'ReLU')
Uma ilustração de como uma rede neural retropropaga seu erro:
Code
Backpropagation da camada de saída para a camada oculta.Derivada da Cross Entropy Loss em relação a nossa saida: [[-1.56722456]]Derivada da Signóide de entrada (antes da função de ativação) da camada de saída: [[0.23093649]]Derivada das entradas da camada oculta (antes da função de ativação)
em relação aos pesos da camada de saída: [[0.31 0.48 0.47 0.79]]Chain Rule: [[-0.1121981 ]
[-0.17372609]
[-0.17010679]
[-0.28592418]]
Code
Backpropagation da camada oculta para a camada de saída.Derivada da Cross Entropy Loss em relação a entrada da camada oculta (após a função de ativação):
[[-0.07238587 -0.1085788 -0.21715761 -0.03619293]]Derivada da ReLU de entrada (antes da função de ativação) da camada oculta:
[[1. 1. 1. 1.]]Derivada das entradas da camada oculta (antes da função de ativação)
com os pesos da camada oculta: [[0.1 0.4 0.5]]Chain Rule:
[[-0.00723859 -0.01085788 -0.02171576 -0.00361929]
[-0.02895435 -0.04343152 -0.08686304 -0.01447717]
[-0.03619293 -0.0542894 -0.1085788 -0.01809647]]
Code
Novos pesos obtidos após o processo do Backpropagation.w_ij:
[[0.10723859 0.21085788 0.42171576 0.30361929]
[0.52895435 0.44343152 0.78686304 0.91447717]
[0.23619293 0.6542894 0.4085788 0.81809647]]w_jk:
[[0.3121981 ]
[0.47372609]
[0.77010679]
[0.38592418]]
Code
Agora é só prever a saída com os novos pesos.i: [[0.1 0.4 0.5]]Novos pesos da camada oculta:
[[0.10723859 0.21085788 0.42171576 0.30361929]
[0.52895435 0.44343152 0.78686304 0.91447717]
[0.23619293 0.6542894 0.4085788 0.81809647]]Novos pessoas da camada de saída:
[[0.3121981 ]
[0.47372609]
[0.77010679]
[0.38592418]]Calcular o produto escalar das entradas e dos pesos da camada oculta:
[[0.34040206 0.5256031 0.56120619 0.80520103]]ReLU: [[0.34040206 0.5256031 0.56120619 0.80520103]]Produto escalar após ativação: [[1.09820002]]Sigmoid: [[0.74992269]]
🏆 E é isso, Acabou! 🤣
Você acabou de fazer os propagations mais famosos da Deep Learning!
https://www.kaggle.com/franckepeixoto/redes-neurais-artificiais-2-propagations
Referências:
- Deep Learning Brasil (Em português) — Perceptron e Adaline
- Deep Learning Brasil (Em português) — Parametrização de redes neurais profundas
- Deep Learning Brasil (Em português) — Algoritmo da retropropagação de erros (Backpropagation) para redes multi-layer perceptron
- https://medium.com/@franckepeixoto/mlp-multilayer-perceptron-conceito-de-b%C3%A1sico-93afa91dd03e
- https://medium.com/@franckepeixoto/machine-learning-indaga%C3%A7%C3%B5es-f0fce290451c
- https://en.wikipedia.org/wiki/Artificial_neural_network
- https://en.wikipedia.org/wiki/Activation_function
- https://en.wikipedia.org/wiki/Sigmoid_function
- https://theclevermachine.wordpress.com/tag/tanh-function/
- http://dataaspirant.com/2017/03/07/difference-between-softmax-function-and-sigmoid-function/
- https://github.com/Kulbear/deep-learning-nano-foundation/wiki/ReLU-and-Softmax-Activation-Functions
- http://ml-cheatsheet.readthedocs.io/en/latest/loss_functions.html
- https://en.wikipedia.org/wiki/Backpropagation
- https://towardsdatascience.com/understanding-backpropagation-algorithm-7bb3aa2f95fd