Redes Neurais Artificiais #2 Propagations — Conceito Básico

Francke Peixoto
4 min readOct 18, 2020

--

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:

--

--

Francke Peixoto
Francke Peixoto

Written by Francke Peixoto

Software Engineer | Data Engineer | Data & Analytics Enthusiastic | Machine Learning | Azure | Fullstack Developer | Systems Analist | .Net — Acta, non verba

No responses yet