Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Проблемы при обучении нейронной сети

#алгоритм #нейронные_сети


У меня есть нейронная сеть Кохонена, состоящая из десяти нейронов и кучи входов.
На вход ей подается спектральные портреты слов (были записаны на диктофон слова от
нуля до десяти, а потом преобразованы в спектральные портреты). Перед подачей портреты
нормализуются в пределах [-1; 1].

Матрица весов заполняется случайным образом при условии:

(1) 

где M - длина входного вектора

Подаю я какой-то вектор, считаю для него R и выбираю нейрон с наименьшим R (x - входные
параметры):

(2) 

Дальше необходимо скорректировать весовые коэффициенты:

(3) 

Информацию брал отсюда



Я по очереди подаю на вход спектральные портреты слов "ноль", "один", "два" и т.д.
(представляют собой вектор с элементами [-1; 1]). Все слова почему-то попадают на один
нейрон. При этом входные вектора довольно разные.

В чем может крыться проблема? Нет ли ошибок в алгоритме сети?



UPD: У меня значения в векторе R (вектор расстояний) получаются практически одинаковые
для всех нейронов:
237.3019  237.0699  237.0621  237.4326  237.0400  237.3023  237.3323  237.5506  237.1476
 237.3318

О чем это может говорить? Что плохие входные данные?



UPD 2: Код реализации

function [index, W] = recognize(W, X, SPEED)
%
% W - матрица весовых коэффициентов
% X - вектор входных параметров
% SPEED - коэффициент скорости обучения
%
% index - номер нейрона-победителя
%

AMOUNT_NEURON = size(W, 1);

% Вычисление R 
R = zeros(AMOUNT_NEURON, 1);
for i = 1:1:AMOUNT_NEURON
    for j = 1:1:size(W, 2)
        R(i) = R(i) + (X(j) - W(i, j))^2;
    end
    %R(i) = sqrt(R(i));
end

% Определение нейрона-победителя
[val, i] = min(R);

% Коррекция коэффициентов
for j = 1:1:size(W, 2)
    W(i, j) = W(i, j) + SPEED*(X(j) - W(i, j));
end

index = i;


Пойду тогда колдовать с начальной инициализацией весов
    


Ответы

Ответ 1



Такое может быть, если начальные вектора весов лежат в стороне от тренировочных векторов, как на картинке: Тогда ближайший вектор весов притянется к тренировочным точкам, и дальше все операции будут происходить только с ним. действительно, если матрицу весов проинициализировать не случайно, а векторами спектральных портретов, то все работает так, как и должно. Но тогда возникает вопрос где же тут самообучение сети, если мы в начале задаем так сказать эталоны. Предполагается, что у вас есть множество спектральных портретов каждого типа. В ходе самообучения веса перейдут в центр кластера соответствующего одному из типов. Еще вариант, как избежать ситуации, показанной на картинке: для инициализации считайте среднее всех спектральных портретов, потом к этой точке прибавляйте случайные добавки.

Комментариев нет:

Отправить комментарий