Академический Документы
Профессиональный Документы
Культура Документы
Agora que sabemos o slope, podemos pegar nosso chute de 0.25 e testar nele:
Obtemos o valor correto para a joaninha de 1.1
Lembrando que esse slope é da joaninha 1.1, não da 1.0:
y = (A + ΔA)x
y = (0.25 + 0.1167) * 3
y = 1.1
Agora vamos testa com a lagarta, mas vamos diminuir um pouco par x,y = (1.0, 2.9)
Agora vamos pegar esse chute de 0.25, aplicar o slope para quando estamos em x = 1
(lagarta), pois ja fizemos isso quando x = 3 (joaninha acima)
Mas 0.3667 é longe de 2.9 .. nao deu muito certo:
t = (A + ΔA)x
0.3667 = (0.25 + 0.1167) * 1.0 (Lembrando que o x dessa lagarta é 1.0)
Se ΔA = E / x Então:
2.5333 = 2.5333 / 1.0 (Lembrando que o x dessa lagarta é 1.0)
Agora achamos um novo slope 2.5333
---------
Para a joaninha (x,y) = (3, 1.1)
Adicionamos um moderador ou learning rate L
ΔA = L (E / x )
0.0583 = 0.5 * (0.35 / 3.0)
Antes deu 0.1167, agora deu 0.0583
E se agora ΔA é 0.0583, o novo A é
novoA = (A + ΔA)
0.3083 = 0.25 + 0.0583
Se testarmos esse novo A para tentar achar o y:
y = Ax
0.9250 = 0.3083 * 3.0
Percebemos que y está agora mais próximo do valor correto 1.1
1 Passo:
2CAM1NODE = (1CAMNODE1 * W1,1) + (1CAM2NODE + W2,1) + ….
2CAM2NODE = (1CAMNODE1 * W1,2) + (1CAM2NODE + W2,2) + ….
Lembrando que cada camada tem seus próprios weights. Entre a camada 1 e 2 tem weights
diferentes da camada 2 e 3.
2 Passo:
Aplica a activation function SIGMOID para esse resultado, Assim temos como resultado final
os inputs da próxima camada.
O = sigmoid (X)
Agora podemos passar passar para a próxima camada e repetir os passos 1 e 2.
3 Passo:
Back Propagating errors. Essa parte é somente utilizada no treino. Não na query da rede em si.
Quando chegamos no final temos uma matrix O de outputs. Também temos um matriz de
resultados corretos (targets). Diminuímos Outputs - Targets para achar uma matriz de erros
iniciais para a última camada.
4 Passo:
Encontrar a expressão para o slope, ΔW e o novo W.
gradient descent nos ajuda a encontrar o mínimo sem precisar calcular toda a função, que
seria muito complicada para um computador.
Agora que encontramos o slope. Também utilizamos um learning rate (alpha) para moderar a
força dessas mudanças nos weights simplesmente multiplicando α pelo SLOPE.
ΔW = α * SLOPE
Simplificando essas expressões temos a diferença entre os weights antigos e os novos
(Repare que delta indica diferença):
Repare que Tk - Ok foi simplificado como Ek.
E que no passo 2 já aplicamos sigmoid nos outputs das camadas. Não aplicamos de novo. Ok e
Oj em vermelho já são os outputs do passo 2. E também Oj no final é transposta.
Repare também que essa simplificação já incluímos o sinal negativo de W = W - ΔW. Então se
formos utilizar ela fazemos W = W + ΔW
Mas se não utilizar a simplificação utilizamos W = W - ΔW mesmo
Segundo essa figura montamos um exemplo para achar W11 (Que era 2.0 mas vai mudar):
PONTOS A SE OBSERVAR:
● Neural networks don’t work well if the input, output and initial weight data is not prepared to
match the network design and the actual problem being solved.
● A common problem is saturation - where large signals, sometimes driven by large weights,
lead to signals that are at the very shallow slopes of the activation function. This reduces the
ability to learn better weights.
● Another problem is zero value signals or weights. These also kill the ability to learn better
weights.
● The internal link weights should be random and small, avoiding zero. Some will use more
sophisticated rules, for example, reducing the size of these weights if there are more links into a
node.
● Inputs should be scaled to be small, but not zero. A common range is 0.01 to 0.99, or -1.0 to
+1.0, depending on which better matches the problem.
● Outputs should be within the range of what the activation function can produce. Values below
0 or above 1, inclusive, are impossible for the logistic sigmoid. Setting training targets outside
the valid range will drive ever larger weights, leading to saturation. A good range is 0.01 to 0.99.
MELHORIAS:
Nao ha um método exato para saber como melhorar a rede. Podemos tentar as seguintes
mudanças:
Podemos achar uma porcentagem de quantas vezes a passaram acertou ou não colocando os
resultados em um array 1 para certo e 0 para errado, e assim achar a performance:
performance = [1, 0, 1, 1, 1, 1, 1, 0, 0, 0]
performance = performance.sum() / performance.size
Assim podemos fazer um for de lrs, epochs ou inputs e ir testando as performances conforme
diferentes valores e assim achar os melhores valores possíveis:
lrs = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]
for lr im lrs:
if calcperformance(lr) > lastPerformance:
…….
--------------------------------------------------------------------------------------------------------------------------------
CLASSIFICATION
REGRESSION
ASSOCIATION
CLUSTERING
--------------------------------------------------------------------------------------------------------------------------------
#CALCULO
Então a partir desses dois pontos podemos traçar uma reta como na figura
Pra achar a distância dessa reta entre esses dois pontos é so usar pitágoras.
Primeiro devemos achar os valores de S nesses pontos. Pra isso simplesmente calculamos a
funcao:
s = 01 em t = 01 pois s = 1²
s = 25 em t = 05 opis s = 5²
Extent e height
Height é s1 - s0 = 25 - 1 = 24
Extent é t1 - t0 = 5 - 1 = 4
Se T 0 = (t - Δx)
Se T1 = (t + Δx)
G = ….
G = 3T² + Δx
G = 3T²
REGRA GERAL
B B−1
G de A * T é igual a B AT
Ex:
T 5 =========== 5 * 1 * T 5 − 1 ================== 5T 4
T 3 + C ======= (3T 3 − 1 ) + C ================== 3T 2 + C = 3T 2
6T 6 + 9T + 4 == (6 * 6 * T 6 − 1 ) + (1 * 9 * T 1 − 1 ) + 4 == 36T 5 + 9
δf
δy
= 2y
δy
δx
= 3x² + 1
δf
Então… = (2y) * (3y² + 1) simplificando…. (2x³ + 2x) (3x² + 1)
δx
Z = w*a*b
A = Sigmoid(z)
C = (e - a)²
Analisando a figura…. vemos que conforme mudamos certos parâmetros seus resultados
também são alterados. Por exemplo ali em w*a*b = z, se w for maior z vai ser maior, se w for
menor, z vai ser menor. Isso também ocorreria com a e b, mas a é fixo, nao varia e nao estamos
interessados na variação de B por enquanto. Essa mesma lógica pode ser utilizada em A e C,
Então:
δz
Z varia conforme W ( )
δw
δa
A varia conforme Z ( )
δz
δc
C varia conforme A ( )
δa
A partir de tudo isso vemos que o valor de W no início influencia o valor de C lá no final. Ou seja
C varia conforme W. Assim podemos usar a chain rule e descobrir a derivada de C conforme W:
δc
Obtemos a derivada de
δa
=
δc
Agora vamos ver derivada de C sobre B ( )
δb
Também podemos encontrar a derivada de C sobre A, embora esse parâmetro não vai mudar:
SEGUINDO A MESMA LÓGICA, MAS PELO LIVRO:
Usamos esse slope para atualizar os novos weights: (Negativo pois estamos tentando diminuir o slope
para achar o mínimo)
ETAPA 1 - CONVOLUTION
Já nesse exemplo apenas alguns pixels são iguais, resultando um resultado menor que 1:
Fazendo todas essas comparações para um bloco obtemos uma cada de comparacao.
Fazendo em vários blocos temos várias camadas, um para cada bloco.
ETAPA 2 - POOLING
ETAPA 3 - NORMALIZATION
As etapas anteriores não precisam seguir essa ordem, inclusive várias redes têm combinações diferentes
de etapas:
ETAPA 4 - FULLY CONNECTED LAYER
Agora pegamos o resultado das camadas e passamos para uma rede neural comum de classificação: