Определение смещения для нейронной сети Персептроны? - PullRequest
4 голосов
/ 26 апреля 2011

Это одна из вещей, с которой я начинаю понимать нейронные сети: я не совсем понимаю, для чего изначально нужно установить «уклон»? Я понимаю, что Perceptron рассчитывает его вывод на основе:

P * W + b> 0

и затем вы можете рассчитать модель обучения на основе b = b + [G - O], где G - правильный выход, а O - фактический выход (1 или 0) для расчета нового смещения ... но что насчет начального смещения ..... Я не очень понимаю, как это рассчитывается, или какое начальное значение следует использовать, кроме "угадывания", есть ли для этого какой-либо тип формулы?

Простите, если я в чем-то ошибаюсь, я все еще изучаю всю идею нейронной сети, прежде чем реализовать свою (дрянную).

То же самое относится и к скорости обучения ..... Я имею в виду большинство книг, и такие просто "выбирают один" для μ.

Ответы [ 2 ]

9 голосов
/ 27 апреля 2011

Краткий ответ: это зависит ...

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

2) Однако вы также можете установить весовые коэффициенты вручную (без обучения), чтобы получить некоторые особые поведения: например, вы можете использовать смещение, чтобы заставить персептрон вести себя как логический элемент (предположим, что двоичные входы X1 и X2 либо 0, либо 1, и функция активации масштабируется, чтобы получить выходной сигнал 0 или 1).

ИЛИ вентиль: W1 = 1, W2 = 1, смещение = 0

И вентиль: W1 = 1, W2 = 1, смещение = -1

Вы можете решить классическую проблему XOR , используя AND и OR в качестве первого слоя в многослойной сети, и передать их в третий персептрон с W1 = 3 (из вентиля OR), W2 = -2 (от входа И) и смещение = -2, вот так:

perceptron XOR

(Примечание: эти значения будут другими, если ваша функция активации масштабируется до -1 / + 1, т.е. функция SGN)


3) От того, как установить скорость обучения, зависит (!), Но я думаю, что обычно рекомендуется что-то вроде 0,01. По сути, вы хотите, чтобы система училась как можно быстрее, но не так быстро, чтобы веса не сходились должным образом.

0 голосов
/ 02 февраля 2015

Поскольку @Richard уже ответил на большую часть вопроса, я остановлюсь только на скорости обучения.Из того, что я прочитал (и это работает), есть очень простая формула, которую вы можете использовать для обновления скорости обучения для каждой итерации k, и это:

learningRate_k = constant / k

Здесь очевидно, что 0-я итерация исключена, поскольку вы будете делить на ноль.Константа может быть любой, какой вы хотите (кроме 0, конечно, потому что она не будет иметь никакого смысла: D), но проще всего, естественно, 1, так что вы получите

learningRate_k = 1 / k

Результирующий ряд подчиняется двум основным правилам:

  • lim_ (t-> inf) SUM от k = 1 до t (learningRate_k) = inf
  • lim_ (t-> inf) SUM от k = 1 до t (learningRate_k ^ 2)

Обратите внимание, что конвергенция вашего персептрона напрямую связана с серией скоростей обучения.Он начинается большим (для k = 1 вы получаете 1/1 = 1) и становится все меньше и меньше с каждым обновлением вашего персептрона, поскольку - как и в реальной жизни - когда вы сталкиваетесь с чем-то новым в начале, вы узнаете много, но позжена тебя учат все меньше и меньше.

...