Как сделать нейронную сеть: архитектура, параметры и код

Опубликовано: 2021-02-12

Нейронные сети, как следует из названия, представляют собой цепи нейронов. Существуют различные типы нейронных сетей. Биологические нейронные сети состоят из настоящих биологических нейронов. Принимая во внимание, что искусственные нейронные сети (ИНС) — это система, основанная на биологической нейронной сети, которая присутствует в мозге. По оценкам, количество нейронов в мозге составляет около 100 миллиардов, которые общаются с помощью электрохимических сигналов.

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

Оглавление

Архитектура нейронной сети

Искусственная нейронная сеть состоит из искусственных нейронов, которые также называются «узлами». Эти узлы соединены друг с другом таким образом, что создается сеть или ячеистая сеть. Силе этих связей друг с другом присваивается значение. Это значение находится в диапазоне от -1 до 1.

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

Источник

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

Разница между прогнозируемым значением и фактическим значением (ошибка) будет распространяться в обратном направлении. Следовательно, нейронная сеть будет учиться на допущенных ошибках и пытаться скорректировать веса на основе назначенного подхода к скорости обучения.

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

Определите параметры

Функция активации

Существуют различные функции активации, которые можно использовать в нейронной сети в зависимости от решаемой проблемы.

Функции активации — это математические уравнения, которые есть у каждого нейрона. Он определяет вывод нейронной сети.
Эта функция активации прикрепляется к каждому нейрону в сети и определяет, должен ли он быть активирован или нет, что основано на том, помогает ли активация этого конкретного нейрона в получении соответствующих прогнозов на выходном уровне. К разным слоям могут быть привязаны разные функции активации. Функции активации также помогают нормализовать выходные данные каждого нейрона в диапазоне от 1 до 0 или от -1 до 1.

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

Работа функции активации
Пропущенная ссылка

Существует 3 типа функций активации:
Двоичный - x<0 y=0 , x>0 y=1
Линейный - x=y
Нелинейный — различные типы: Sigmoid, TanH, Logistic, ReLU, Softmax и т. д.

Источник: Блог

Тип: РеЛУ
Пропущенная ссылка

Алгоритм

Существует множество типов нейронных сетей, но их часто делят на сети прямой связи и сети обратной связи (обратного распространения).

1) Сеть прямой подачи — неповторяющаяся сеть, содержащая входы, выходы и скрытые слои; поскольку сигналы могут двигаться только в одном направлении. Входные данные передаются на уровень обрабатывающего оборудования, где выполняются расчеты. Каждый коэффициент обработки рассчитывается на основе веса входных данных. Рассчитываются новые значения, а затем новые входные значения подаются на следующий слой.

Этот процесс продолжается до тех пор, пока он не пройдет через все слои и не определит результат. Передаточная функция предела иногда используется для измерения выходных данных нейронов в выходном слое. Сети Feed Forward известны как сети Perceptron (прямые и косвенные) и включают их. Сети прямого распространения часто используются для интеллектуального анализа данных.

2) Сеть с обратной связью (например, рекуррентная нейронная сеть или RNN) имеет ретроспективные механизмы, что означает, что они могут передавать сигналы в обоих направлениях, используя ловушки/петли. Все возможные связи между нейронами разрешены.

Поскольку в этом типе сети присутствуют петли, она становится нелинейной системой, которая постоянно изменяется, пока не достигнет состояния устойчивости. Сети обратной связи часто используются для воспоминаний, связанных с проблемами производительности, когда сеть ищет хороший набор связанных объектов.

Повышение квалификации

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

Но сначала нам нужно обучить нашу модель правильному изучению весов, и поэтому процедура обучения работает следующим образом:

  1. Случайным образом выберите и инициализируйте веса для всех узлов. Существуют интеллектуальные методы инициализации, встроенные в TensorFlow и Keras (Python).
  2. Для каждого обучающего примера выполните прямой проход, используя текущие веса, и вычислите выходные данные каждого узла, идущего слева направо. Конечным результатом является значение последнего узла.
  3. Сравните окончательный результат с фактической целью в обучающих данных и измерьте ошибку, используя функцию потерь.
  4. Выполните обратный проход справа налево и распространите ошибку, вычисленную на последнем шаге, на каждый отдельный узел, используя обратное распространение.
  5. Рассчитайте вклад веса каждого нейрона в ошибку и соответствующим образом отрегулируйте веса соединения, используя градиентный спуск. Распространите градиенты ошибок обратно, начиная с последнего слоя.

Код Python для нейронной сети

Теперь, когда мы понимаем, как теоретически создается нейронная сеть, давайте реализуем то же самое с помощью Python.

Нейронная сеть в Python
Мы будем использовать Keras API с бэкендами Tensorflow или Theano для создания нашей нейронной сети.

Установка библиотек
Теано
>>> pip install –upgrade –no-deps git+git://github.com/Theano/Theano.git

Тензорфлоу и Керас
>>> pip3 установить тензорный поток
>>> pip install — обновить Keras

Импортируйте библиотеки

импортировать керас
из keras.models импорт последовательный
из keras.layers импорт плотный

Инициализация искусственной нейронной сети

модель = Последовательный()

Создает входные и скрытые слои-

model.add(Dense(input_dim = 2,unit=10, активация='relu', kernel_initializer='uniform'))

Этот код добавляет входной слой и один скрытый слой в последовательную сеть.
Dense(): позволяет нам создать плотно связанную нейронную сеть.
input_dim: форма или количество узлов во входном слое
Единицы: количество нейронов или узлов в текущем слое (скрытом слое)
активация: функция активации применяется к каждому узлу. «relu» означает выпрямленную линейную единицу.
kernel_initializer: начальные случайные веса слоя

Второй скрытый слой
model.add (Dense (единицы = 20, активация = 'relu', kernel_initializer = 'uniform'))

Код создает и добавляет в модель еще один скрытый слой с 20 узлами и функцией активации «выпрямленного линейного». Аналогичным образом можно добавить дополнительные слои в зависимости от проблемы и сложности.

Выходной слой
model.add (Dense (единицы = 1, активация = 'сигмоид', kernel_initializer = 'uniform'))

Одиночный выходной слой с Sigmoid или softmax — это обычно используемые функции активации для выходного слоя.

Составление ИНС:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Перед обучением ANN компилируется с функцией оптимизатора и функцией потерь.

Оптимизатор: функция оптимизатора для сети. Существуют различные типы оптимизаторов, и в основном используется Адам.
Потеря: используется для расчета потерь и ошибок. Существуют различные типы, и выбор зависит от характера решаемой проблемы.
Метрики: метрика, используемая для измерения производительности модели.

Подгонка модели к обучающим данным:
model.fit(X_train,Y_train,batch_size=64, эпохи=30)

Этот код создаст модель

Заключение

Теперь мы можем создать искусственную нейронную сеть (на Python) с нуля, поскольку мы поняли различные параметры, которые можно изменить в зависимости от рассматриваемой проблемы.

Если вам интересно узнать больше о методах глубокого обучения и машинном обучении, ознакомьтесь с дипломом PG IIIT-B и upGrad в области машинного обучения и искусственного интеллекта, который предназначен для работающих профессионалов и предлагает более 450 часов тщательного обучения, более 30 тематических исследований и задания, статус выпускника IIIT-B, более 5 практических практических проектов и помощь в трудоустройстве в ведущих фирмах.

Изучите курс машинного обучения в лучших университетах мира. Заработайте программы Masters, Executive PGP или Advanced Certificate Programs, чтобы ускорить свою карьеру.

Возглавьте технологическую революцию, управляемую искусственным интеллектом

Подать заявку на участие в программе Advanced Certificate Program в области машинного обучения и НЛП