Включение узлов смещения в вашу нейронную сеть
В этой статье показано, как добавить значения смещения к многослойному персептрону, реализованному на языке программирования высокого уровня, таком как Python.
Добро пожаловать в серию статей о нейронных сетях All About Circuits, созданную техническим директором Робертом Кеймом. Прежде чем продолжить этот урок, посвященный узлам смещения, подумайте о том, чтобы наверстать упущенное из оставшейся части следующей серии:
- Как выполнить классификацию с помощью нейронной сети:что такое перцептрон?
- Как использовать простой пример нейронной сети персептрона для классификации данных
- Как обучить базовую нейронную сеть персептрона
- Общие сведения об обучении простой нейронной сети
- Введение в теорию обучения нейронных сетей.
- Скорость обучения в нейронных сетях
- Расширенное машинное обучение с многоуровневым персептроном
- Функция активации сигмовидной кишки:активация в многослойных перцептронных нейронных сетях.
- Как обучить многослойную нейронную сеть персептрона
- Понимание формул обучения и обратного распространения ошибки для многослойных персептронов
- Архитектура нейронной сети для реализации Python
- Как создать многослойную нейронную сеть персептрона на Python.
- Обработка сигналов с использованием нейронных сетей:проверка при проектировании нейронных сетей
- Обучающие наборы данных для нейронных сетей:как обучить и проверить нейронную сеть Python
- Сколько скрытых слоев и скрытых узлов нужно нейронной сети?
- Как повысить точность нейронной сети скрытого уровня
- Включение узлов смещения в вашу нейронную сеть
<час />
Узлы смещения, которые могут быть добавлены к входному слою персептрона или скрытому слою, создают постоянное значение, которое выбирает дизайнер.
Мы обсуждали значения смещения еще в Части 11, и я рекомендую вам прочитать (или перечитать) соответствующую часть этой статьи, если вы не понимаете, что такое узлы смещения или как они изменяют и потенциально улучшают функциональность нейронной сети.
В этой статье я сначала объясню два метода включения значений смещения в вашу сетевую архитектуру, а затем мы проведем эксперимент, чтобы увидеть, могут ли значения смещения улучшить точность, которую мы получили в предыдущей статье (часть 16).
Включение смещения через электронную таблицу
На следующей диаграмме изображена сеть, имеющая узел смещения на входном слое, но не в скрытом слое.
Если это именно та конфигурация, которую вы ищете, вы можете добавить значение смещения, используя электронную таблицу, содержащую данные обучения или проверки.
Преимущество этого метода просто в том, что не требуется существенных изменений кода. Первый шаг - вставить столбец в электронную таблицу и заполнить его значением смещения:
Теперь все, что вам нужно сделать, это увеличить размерность входного слоя на единицу:
Включение предвзятости в код
Если вам нужен узел смещения в скрытом слое или если вам не нравится работать с электронными таблицами, вам понадобится другое решение.
Предположим, мы хотим добавить узел смещения как к входному, так и к скрытому слою. Во-первых, нам нужно увеличить I_dim и H_dim , поскольку наша цель - интегрировать узлы смещения таким образом, чтобы они функционировали как обычные узлы, но с предварительно взвешенным значением, которое выбирается разработчиком и никогда не изменяется.
Я сделаю это следующим образом:
Создание узла смещения входного слоя
Как вы, возможно, помните, мы используем следующий код для сборки набора обучающих данных, разделения целевых выходных значений и извлечения количества обучающих выборок.
После этих операторов количество столбцов в двумерном массиве training_data будет равно количеству входных столбцов в электронной таблице. Нам нужно увеличить количество столбцов на один, чтобы учесть узел смещения во входном слое, и пока мы на нем, мы можем заполнить этот дополнительный столбец желаемым значением смещения.
В следующем коде показано, как это можно сделать.
np.ones () функция создает массив из одного столбца, количество строк которого равно training_count , и он присваивает значение +1 каждому элементу в этом массиве. Затем мы используем np.hstack () функция для добавления массива из одного столбца справа от исходного training_data массив.
Обратите внимание, что я выполнил эту процедуру как для данных обучения, так и для данных проверки. Важно помнить, что цель на самом деле не в изменении данных обучения или проверки; скорее, мы изменяем данные, чтобы реализовать желаемую конфигурацию сети.
Когда мы смотрим на блок-схему перцептрона, узлы смещения появляются как элементы самой сети; таким образом, любые образцы, обрабатываемые сетью, должны подвергаться этой модификации.
Создание узла смещения скрытого слоя
Мы можем добавить смещение в обработку с прогнозированием, изменив цикл for, который вычисляет значения постактивации скрытого слоя, а затем вручную вставив значение смещения для последнего скрытого узла (который на самом деле является узлом смещения).
Первая модификация показана ниже:
Если в сети не настроен узел смещения скрытого уровня, hidden_bias равно 0, и выполнение цикла for не изменилось.
Если, с другой стороны, мы решили включить узел смещения скрытого уровня, цикл for не будет вычислять значение постактивации для последнего узла в слое (т. Е. Узла смещения).
Следующим шагом является увеличение переменной узла так, чтобы он имел доступ к узлу смещения в postActivation_H массив, а затем присвойте значение смещения.
Обратите внимание, что эти изменения также должны применяться к проверочной части кода.
Значения смещения, отличные от +1
По моему опыту, +1 - это стандартное значение смещения, и я не знаю, есть ли какое-либо веское оправдание для использования других чисел. Смещение изменяется с помощью весов, поэтому выбор +1 не накладывает жестких ограничений на то, как смещение влияет на общую функциональность сети.
Однако, если вы хотите поэкспериментировать с другими значениями смещения, вы можете легко это сделать. Для скрытого смещения вы просто измените номер, присвоенный postActivation_H [node] . Для смещения ввода вы можете умножить new_column массив (который изначально имеет +1 для каждого элемента) на желаемое значение смещения.
Проверка эффекта смещения
Если вы читали Часть 16, то знаете, что моему Персептрону было трудно классифицировать образцы в Эксперименте 3, что было проблемой «высокой сложности».
Посмотрим, дает ли добавление одного или нескольких узлов смещения последовательное и значительное улучшение.
Мое предположение заключалось в том, что различия в точности классификации будут довольно незначительными, поэтому для этого эксперимента я использовал в среднем десять прогонов вместо пяти. Наборы данных для обучения и проверки были сгенерированы с использованием того же отношения высокой сложности между вводом и выводом, а размерность скрытого слоя составляла 7.
Вот результаты:
Заключение
Как видите, узлы смещения не привели к значительному изменению эффективности классификации.
На самом деле это меня не удивляет - я думаю, что узлы смещения иногда немного переоцениваются, и, учитывая характер входных данных, которые я использовал в этом эксперименте, я не вижу причин, по которым узлы смещения могут помочь.
Тем не менее смещение является важным методом в некоторых приложениях; Хорошая идея - написать код, поддерживающий функциональность смещенного узла, чтобы он был там, когда он вам нужен.
Промышленный робот
- Переосмысление плана игры для мониторинга сети
- Как усилить защиту ваших устройств для предотвращения кибератак
- Создание сети беспроводных датчиков в вашем доме
- Понимание локальных минимумов в обучении нейронной сети
- Как повысить точность нейронной сети скрытого слоя
- Как интегрировать управление запасными частями в вашу CMMS
- [Интервью] Отраслевые эксперты по выбору вашей сети IoT
- Как успешно интегрировать робототехнику в свое предприятие
- Преобразование цепочки поставок в центр возможностей
- Насколько безопасна сеть вашего цеха?