2013-10-03 5 views
8

Я реализовал Алгоритм обучения Перцептрона в Python, как показано ниже. Даже с 500 000 итераций он все равно не сходится.Почему Алгоритм обучения Перцептрону не сходится?

У меня есть матрица данных обучения X с целевым вектором Y и весовой вектор w для оптимизации.

Мое правило обновление:

while(exist_mistakes): 
    # dot product to check for mistakes 
    output = [np.sign(np.dot(X[i], w)) == Y[i] for i in range(0, len(X))] 

    # find index of mistake. (choose randomly in order to avoid repeating same index.) 
    n = random.randint(0, len(X)-1) 
    while(output[n]): # if output is true here, choose again 
     n = random.randint(0, len(X)-1) 

    # once we have found a mistake, update 
    w = w + Y[n]*X[n] 

Является ли это так? Или почему он не сходится даже после 500 000 итераций?

+0

Хотелось бы, чтобы я мог это доказать, но для любого распознавателя должно быть бесконечное количество целей, которые невозможно обучить (или Курт Гёдель будет иметь какую-то заднюю педаль). – msw

+2

только боковое примечание - случайная выборка из примера с кратким рассмотрением крайне неэффективна, вы должны просто перебирать все примеры и обновлять каждую классификацию. – lejlot

+0

В вашем правиле обновления персептрона также отсутствует параметр скорости обучения, который может повлиять на конвергенцию весов. – bogatron

ответ

13

Perceptrons от Minsky and Papert (in) классно продемонстрировал в 1969 году, что алгоритм обучения перцептрону не сходится для наборов данных, которые не являются линейно разделяемыми.

Если вы уверены, что ваш набор данных линейно разделен, вы можете попробовать добавить смещение к каждому из ваших векторов данных, как описано в вопросе: Perceptron learning algorithm not converging to 0 - добавление смещения может помочь моделировать границы решений, которые не проходят через происхождение.

В качестве альтернативы, если вы хотите использовать вариант алгоритма обучения персептрона, который гарантированно сходится к краю указанной ширины, даже для наборов данных, которые не являются линейно разделяемыми, посмотрите на Averaged Perceptron -- PDF. Усредненный персептрон является приближенным к проголосоваемому персептрону, который был представлен (насколько мне известно) в хорошей статье Фрейнда и Шапира, "Large Margin Classification Using the Perceptron Algorithm" -- PDF.

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

Смежные вопросы