Post on 15-Jul-2022
Edgard Jamhour
Neurônios correspondem a simples funções, geralmente não lineares, que relacionam duas ou mais entradas a uma saída.
b = bias (constante)
Total Net Input
A função de ativação é utilizada para transformar o “total net input” em uma saída normalizada.
Sigmoid: Tanh: ReLU:
Multilayer perceptron é uma ANN (rede neural artificial formada com uma camada de entrada (i), uma cadamda de saída (o) e uma ou mais camadas intermediárias ou escondidas (h).
A ANN é uma equação não linear do tipo: 𝑓(𝒙,𝒘) = 𝒐 x : vetor de entradas: x = (x1, x2, ..., xe) w : vetor de pesos: w = (w1, w2,..., wp) o : vetor de saídas: o= (o1, o2,..., oS)
Equação: Multilayer Percepton, uma camada escondida: e=3, p=12, s=2
Data uma base de treinamento, a métrica de ajuste da ANN é o erro quadrático.
O erro é calculado sobre uma base usada para treinamento. Exemplo: resultado do exame final de estudantes com base no
número de horas de estudo e o resultado da primeira parcial.
Seja um dataset D=(d1, ..., dn)
O erro quadrático é dado por:
𝐸 = 0.5 (𝑑𝑖,𝑘 − 𝑜𝑘)2𝑠
𝑘 𝑛
𝑖=1
𝐸 = 0.5 (𝑑𝑖,𝑘 − 𝑓(𝒙,𝒘)𝑘)2𝑠
𝑘 𝑛
𝑖=1
O objetivo é encontrar w que minimiza E.
Qualquer método de otimização não linear pode ser utilizado para minimizar o erro quadrático.
Abordagens comuns são:
Gradiente descendente:
▪ Precisa calcular o gradiente: 𝛻𝐸 =𝜕𝐸
𝜕𝑤1, ⋯ ,
𝜕𝐸
𝜕𝑤𝑝
Método Heurístico ▪ Pode resolver o problema sem cálculo do gradiente
▪ Exemplo: Nelder-Mead (downhill simplex method)
Multi-layer perceptron com uma camada escondida:
x1
x2
1
h1
h2
1
o1
o2
w1
w2 w3
w4
w5
w6
w7
w8 w9
w10 w11
w12
Equações dos neurônios de saída:
𝑜1 =1
1+𝑒𝑛𝑒𝑡01 e 𝑛𝑒𝑡01= w7 h1 + w8 h2 + w9
𝑜2 =1
1+𝑒𝑛𝑒𝑡02 𝑒 𝑛𝑒𝑡02= w10 h1 + w11 h2 + w12
Equações dos neurônios da camada escondida:
ℎ1 =1
1+𝑒𝑛𝑒𝑡ℎ1 e 𝑛𝑒𝑡ℎ1= w1 x1 + w2 x2 + w3
ℎ2 =1
1+𝑒𝑛𝑒𝑡ℎ2 𝑒 𝑛𝑒𝑡ℎ2= w4 x1 + w5 h2 + w6
Erro quadrático:
𝐸 = 0.5 (𝑜1 − 𝑑𝑖,1)2+(𝑜2 − 𝑑𝑖,2)
2
DERIVADAS PARCIAIS
𝜕𝐸
𝜕𝑤7=
𝜕𝐸
𝜕𝑜1∙
𝜕𝑜1
𝜕𝑛𝑒𝑡01∙𝜕𝑛𝑒𝑡01
𝜕𝑤7
𝜕𝐸
𝜕𝑜1 = (𝑜1 − 𝑑𝑖,1)
𝜕𝑜1
𝜕𝑛𝑒𝑡1 =-
𝑒𝑛𝑒𝑡01
1+𝑒𝑛𝑒𝑡01 2 = 𝑜1 1 − 𝑜1
𝜕𝑛𝑒𝑡1
𝜕𝑤7 = ℎ1
POR ANALOGIA:
Fazendo: Eoj = (𝑜𝑗 − 𝑑𝑖,j)
𝑜 𝑗 = 𝑜1 1 − 𝑜1
𝜕𝐸
𝜕𝑤7= 𝐸𝑜1 ∙ 𝑜 1 ∙ ℎ1
𝜕𝐸
𝜕𝑤8= 𝐸𝑜1 ∙ 𝑜 1 ∙ ℎ2
𝜕𝐸
𝜕𝑤9= 𝐸𝑜1 ∙ 𝑜 1 ∙ 1
𝜕𝐸
𝜕𝑤10= 𝐸𝑜2 ∙ 𝑜 2 ∙ ℎ1
𝜕𝐸
𝜕𝑤11= 𝐸𝑜2 ∙ 𝑜 2 ∙ ℎ2
𝜕𝐸
𝜕𝑤12= 𝐸𝑜2 ∙ 𝑜 2 ∙ 1
𝜕𝐸
𝜕𝑤1=
𝜕𝐸
𝜕ℎ1∙
𝜕ℎ1
𝜕𝑛𝑒𝑡ℎ1∙𝜕𝑛𝑒𝑡ℎ1
𝜕𝑤1
𝜕𝐸
𝜕ℎ1 =
𝜕𝐸
𝜕𝑜1∙
𝜕𝑜1
𝜕𝑛𝑒𝑡01 ∙
𝜕𝑛𝑒𝑡01
𝜕ℎ1 +
𝜕𝐸
𝜕𝑜2∙
𝜕𝑜2
𝜕𝑛𝑒𝑡02∙𝜕𝑛𝑒𝑡02
𝜕ℎ1
𝜕𝐸
𝜕ℎ1 = 𝐸𝑜1
𝑜 1𝑤7 + 𝐸𝑜2𝑜 2 𝑤10
onde:
Eoj = (𝑜𝑗 − 𝑑𝑖,j)
𝑜 𝑗 = 𝑜1 1 − 𝑜1
𝜕ℎ1
𝜕𝑛𝑒𝑡1 = ℎ1 1 − ℎ1 =ℎ 1
𝜕𝑛𝑒𝑡1
𝜕𝑤1 = 𝑥1
𝜕𝐸
𝜕𝑤1= 𝐸𝑜1
𝑜 1𝑤7 + 𝐸𝑜2
𝑜 2 𝑤10 ℎ 1𝑥1
𝜕𝐸
𝜕𝑤1= 𝐸𝑜1
𝑜 1𝑤7 + 𝐸𝑜2
𝑜 2 𝑤10 ℎ 1𝑥1
𝜕𝐸
𝜕𝑤2= 𝐸𝑜1
𝑜 1𝑤7 + 𝐸𝑜2
𝑜 2 𝑤10 ℎ 1𝑥2
𝜕𝐸
𝜕𝑤3= 𝐸𝑜1
𝑜 1𝑤7 + 𝐸𝑜2
𝑜 2 𝑤10 ℎ 1
𝜕𝐸
𝜕𝑤4= 𝐸𝑜1
𝑜 1𝑤8 + 𝐸𝑜2
𝑜 2 𝑤11 ℎ 2𝑥1
𝜕𝐸
𝜕𝑤5= 𝐸𝑜1
𝑜 1𝑤8 + 𝐸𝑜2
𝑜 2 𝑤11 ℎ 2𝑥2
𝜕𝐸
𝜕𝑤6= 𝐸𝑜1
𝑜 1𝑤8 + 𝐸𝑜2
𝑜 2 𝑤11 ℎ 2
𝜕𝐸
𝜕𝑤7= 𝐸𝑜1
𝑜 1ℎ1
𝜕𝐸
𝜕𝑤8= 𝐸𝑜1
𝑜 1ℎ2
𝜕𝐸
𝜕𝑤9= 𝐸𝑜1
𝑜 11
𝜕𝐸
𝜕𝑤10= 𝐸𝑜2
𝑜 2ℎ1
𝜕𝐸
𝜕𝑤11= 𝐸𝑜2
𝑜 2ℎ2
𝜕𝐸
𝜕𝑤12= 𝐸𝑜2
𝑜 21
Um dos métodos mais utilizados para resolver problemas numéricos sem cálculo do gradiente é o Nelder-Mead downhill simplex method
Amoeba method
Método do poliédro-flexível
Nelder-Mead é considerado um método heurístico
Dado um vetor x de dimensão n, o método procura a solução ótima construindo um poliedro de dimensão n+1
O nome “simplex” corresponde a um poliedro de n+1 vértices em n dimensões.
▪ Segmento de linha em uma linha
▪ Triangulo em um plano
▪ Tetraedro no espaço tridimensional
Um Tetraedro em 3 dimensões corresponde a um simplex com 4 vértices.
x1
x2
x3
x4
x = (x1, x2, x3) é a solução que se deseja encontrar P = {x1, x2, x3 , x4} são pontos de teste usados para construir o poliedro
Função que se deseja minimizar:
f(x,y) = x2 + x*y - 10x + y2
x = (x,y)
Poliedro: {(x1,y1), (x2,y2), (x3,y3) }
(0.5,10) f = 100.25
(10,30) f=1200
(30,20) f=1600
O poliedro é inicializado com pontos escolhidos pseudo aleatoriamento que delimitam a região de procura
Os nós são ordenados do pior para o melhor nó: {x1, x2, x3}
Centroide excluindo o pior nó: 𝐶 =𝒙1+𝒙2
2
(0.5,10) f = 100.25
(30,20) f=1600
(10,30) f=1200
(5.25,20) 480.06
Pior nó
x1
x2
x3
melhor nó
x0
Um novo ponto é procurado inicialmente na direção oposta ao pior nó a partir do centroide. xr = x0 + (x0-xn+1)
Valor padrão: =1
reflexão:{-19.5,20}
xr
xo xn+1
Se o 𝑓 𝒙1 ≤ 𝑓 𝒙𝑟 < 𝑓 𝒙𝑛
O novo ponto xr substitui o pior ponto x3
xr
Se 𝑓 𝒙𝑟 < 𝑓 𝒙1
O novo ponto é procurado na direção de xr
xe = x0 + *(xr-x0), com >1 ( exemplo, =2)
Se 𝑓 𝒙𝑒 < 𝑓 𝒙𝑟 xe substitui xn+1
Senão: xr substitui xn+1
Se 𝑓 𝒙𝑟 ≥ 𝑓 𝒙n
O novo ponto é procurado na direção do pior ponto xn+1
xc = x0 + (xn+1-x0), com 0 < ≤ 0.5 ( default, =0.5)
Se 𝑓 𝒙c < 𝑓 𝒙𝑛+1 xc substitui xn+1
Senão: Encolher o Poliedro
Substituir todos os pontos, exceto o melhor: x1
xi = x1 + (xi-x1), ≤ 1 ( default, =0.5)
Convergência:
Quando o poliedro fica muito pequeno;
(xi – xj) < para qualquer par (i,j) no vetor
Quando a função sendo minimizada fica suficientemente pequena
Quando um número máximo de iterações é atingido
Parte 1: Implemente a rede neural do tipo multi-camada perceptron no Matlab. x1
x2
1
h1
h2
1
o1
o2
w1
w2 w3
w4
w5
w6
w7
w8 w9
w10 w11
w12
sigmoid = @(x) (1/(1 + exp(-x))); neuron = @(x,w)(sigmoid( x*w')); hl = @(x,w)[1 neuron(x,w(1:3)) neuron(x,w(4:6))]; ol = @(x,w)[neuron(hl(x,w),w(7:9)) neuron(hl(x,w),w(10:12))]; % dataset = [[x1 x2 res], ...]; function res = erro(w, ol, dataset) [ n, ~ ] = size(dataset); res = 0; for i=1:n d = ol([1,dataset(i,1),dataset(i,2)],w); e = norm(d-[dataset(i,3),1-dataset(i,3)])^2; res = res + e; end end f = @(ws) erro(ws,ol,dataset); res = fminsearch(f,rand(1,12));