Как мы инициализируем нейронную сеть Хопфилда? - PullRequest
2 голосов
/ 31 августа 2011

Я только начал читать о нейронных сетях, и у меня есть основной вопрос. Что касается «инициализации» сети Хопфилда, я не могу понять это понятие инициализации. То есть мы вводим случайные числа? или введите четко определенный шаблон, который заставляет нейроны успокоиться в первый раз, предполагая, что все нейроны были в состоянии, равном нулю, с другими стабильными состояниями, равными 1 или -1 после ввода.

Рассмотрим нейронную сеть ниже. Который я взял у HeatonResearch

Рад, если кто-то мне это прояснит.

enter image description here

Ответы [ 3 ]

3 голосов
/ 31 августа 2011

При инициализации нейронных сетей, в том числе рекуррентных сетей Хопфилда, обычно инициализируют со случайными весами, так как в целом это даст хорошее время обучения в нескольких испытаниях и в ансамбле прогонов, что позволит избежать локальных минимумов. Как правило, не рекомендуется начинать с одного и того же начального веса в нескольких сериях, поскольку вы, вероятно, столкнетесь с одними и теми же локальными минимумами. В некоторых конфигурациях обучение может быть ускорено путем анализа роли узла в функциональном отображении, но это часто является более поздним этапом анализа после того, как что-то работает.

2 голосов
/ 31 августа 2011

Цель сети Hopefiled состоит в том, чтобы вызвать данные, которые были показаны, служа в качестве адресно-ориентированной памяти.Все начинается с чистого листа, все веса установлены на ноль.Обучение сети по вектору корректирует веса для ответа на нее.

Выход узла в сети Хопфилда зависит от состояния каждого другого узла и веса соединения узла с ним.Состояния соответствуют входу, с входом 0, отображаемым на -1, и входом 1, отображаемым на 1. Таким образом, если бы сеть в вашем примере имела вход 1010, N1 имел бы состояние 1, N2 -1, N3 1 и N4 -1.

Обучение сети означает добавление точечного произведения между выходом и самим собой в матрицу весов, устанавливая диагональ в ноль.Итак, чтобы тренироваться на 10101, мы добавили бы [1 -1 1 -1] · [1 -1 1 -1] ᵀ к весовой матрице.

0 голосов
/ 12 июня 2016

Вы можете проверить это хранилище -> Сеть Хопфилд

Там у вас есть пример для тестирования шаблона после тренировки сети в автономном режиме. Это тест

@Test
public void HopfieldTest(){
 double[] p1 = new double[]{1.0, -1.0,1.0,-1.0,1.0,-1.0,1.0,-1.0,1.0};
 double[] p2 = new double[]{1.0, 1.0,1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0};
 double[] p3 = new double[]{1.0, 1.0,-1.0,-1.0,1.0,-1.0,-1.0,1.0,-1.0};

 ArrayList<double[]> patterns = new ArrayList<>();
 patterns.add(p1);
 patterns.add(p2);

 Hopfield h = new Hopfield(9, new StepFunction());

 h.train(patterns); //train and load the Weight matrix

 double[] result = h.test(p3); //Test a pattern

 System.out.println("\nConnections of Network: " + h.connections() + "\n"); //show Neural connections
 System.out.println("Good recuperation capacity of samples: " + Hopfield.goodRecuperation(h.getWeights().length) + "\n");
 System.out.println("Perfect recuperation capacity of samples: " + 
 Hopfield.perfectRacuperation(h.getWeights().length) + "\n");
 System.out.println("Energy: " + h.energy(result));

 System.out.println("Weight Matrix");
 Matrix.showMatrix(h.getWeights());
 System.out.println("\nPattern result of test");
 Matrix.showVector(result);

 h.showAuxVector();
}

И после запуска теста вы можете увидеть

Running HopfieldTest

Connections of Network: 72

Good recuperation capacity of samples: 1

Perfect recuperation capacity of samples: 1

Energy: -32.0

Weight Matrix
 0.0        0.0     2.0    -2.0      2.0       -2.0       0.0       0.0     0.0
 0.0        0.0     0.0     0.0      0.0        0.0      -2.0       2.0    -2.0
 2.0        0.0     0.0    -2.0      2.0       -2.0       0.0       0.0     0.0
-2.0        0.0    -2.0     0.0     -2.0        2.0       0.0       0.0     0.0
 2.0        0.0     2.0    -2.0      0.0       -2.0       0.0       0.0     0.0
-2.0        0.0    -2.0     2.0     -2.0        0.0       0.0       0.0     0.0
 0.0       -2.0     0.0     0.0      0.0        0.0       0.0      -2.0     2.0
 0.0        2.0     0.0     0.0      0.0        0.0      -2.0       0.0    -2.0
 0.0       -2.0     0.0     0.0      0.0        0.0       2.0      -2.0     0.0

Pattern result of test 

1.0        1.0     1.0     -1.0     1.0       -1.0      -1.0       1.0     -1.0
-------------------------
The auxiliar vector is empty

Надеюсь, вы найдете это полезным. Привет

...