16 de abril de 2009
Derivando a Matriz de Peso
Tenho estado um pouco ocupado e sem tempo para realizar os posts, mas vamos dar continuidade.
No post anterior vimos o funcionamento de uma Rede Neural Hopfield para reconhecimento de padrões, entretanto, notamos uma matriz de Peso, que já estava pronta para reconhecer os valores de entrada 1010 e 0101. Como chegamos naqueles valores da matriz?
Começamos então como uma matriz de peso em branco, como segue abaixo:
| 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 0 |
Tendo uma matriz inicial, treinaremos ela para reconhecer os padrões 0101, então para isso, calcularemos uma matriz para a entrada 0101, a qual é chamada de matriz de contribuição 0101.
Após calcular essa matriz de contribuição 0101, o resultado é adicionado a matriz de peso em branco, se quisermos que ela também reconheça o padrão 1110, então calcularemos a matriz de contribuição 1110 e também iremos adicionar a matriz de peso.
Lembramos que com as redes neurais Hopfield, teremos então uma Rede Neural que será capaz de reconhecer os padrões 0101 e 1110, e também, os complementos destes (1010 e 0001).
Para calcular a Matriz de Contribuição 0101 seguiremos três passos:
-
Calcular os valores bipolares de 0101, ou seja transformar 0101 em -1,1,-1,1;
-
Transpor o equivalente bipolar de 0101 e multiplicar por ele mesmo;
-
E ajustar os valores da diagonal principal do resultado para 0.
Esse último, pois os neurônios não tem conexões entre si mesmos, nas redes neurais Hopfield. Lembremos, do último post, que a Matriz de Peso nas redes neurais Hopfield são na verdade os pesos dos neurônios ligados a cada outro neurônio.
Vamos começar então do primeiro passo, segundo Heathon, é necessário converter os valores binários para bipolar, pois “0 não é o contrário de 1, preferivelmente -1 é o inverso matemático de 1.”
Já temos a classe bipolarutil, que contém métodos necessários para a conversão, agora, matematicamente falando, a conversão pode ser dada através das seguintes equações.
| -1 | 1 | -1 | 1 |
Para o passo 2, necessitaremos multiplicar o vetor anterior pela sua transposição, sendo então o seguinte:
| -1 | 1 | -1 | 1 |
X
| -1 |
| 1 |
| -1 |
| 1 |
Com essa multiplicação, obteremos como resultado a seguinte matriz:
| 1 | -1 | 1 | -1 |
| -1 | 1 | -1 | 1 |
| 1 | -1 | 1 | -1 |
| -1 | 1 | -1 | 1 |
Agora é o momento de utilizar o passo 3, ajustar o valor da diagonal principal para 0, para efeitos matematicos fazemos isso diminuindo da matriz de contribuição a Matriz Identidade, e o resultado será:
| 0 | -1 | 1 | -1 |
| -1 | 0 | -1 | 1 |
| 1 | -1 | 0 | -1 |
| -1 | 1 | -1 | 0 |
Com nossa matriz de contribuição pronta, tudo que temos a fazer agora é adicionar essa matriz de contribuição 0101 à Matriz de Peso da Rede Neural. E caso queiramos que nossa rede também reconheça o padrão 1001, iremos fazer os mesmos procedimentos deste post e no final adicionar à matriz de Peso, que já terá a Matriz de Contribuição 0101.
No próximo post, iremos ver isso na prática, os exemplos de Jeff Heathon, que você pode olhar no site do mesmo, ao lado.

criado por abelcorrea
19:19 — Arquivado em: 





