Погружаемся в нейронные сети на Python

Погружаемся в нейронные сети на Python Программирование и разработка

Если вы когда-либо использовали голосовое приложение, такое как Alexa или Siri, вы взаимодействовали с нейронной сетью. (И, конечно же, у вас уже есть собственная нейронная сеть — в вашем мозгу.)

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

Научившись использовать нейронные сети, вы сможете применять их в различных интересных случаях использования, таких как обработка естественного языка (NLP) и компьютерное зрение.

Сегодня мы поговорим о нейронных сетях и о том, как с ними можно начать работать в Python.

Что такое нейронные сети?

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

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

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

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

Чтобы проиллюстрировать это, персептрон использует линейную модель для разделения заданного набора входных данных на два класса:

Это здорово, но большинство реальных данных не связаны линейной

Это здорово, но большинство реальных данных не связаны линейной зависимостью.

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

Многослойные нейронные сети составляют основу глубокого обучения.

Когда мы говорим о нейронных сетях, мы обычно имеем в виду многослойные нейронные сети.

В многослойной нейронной сети есть три типа слоев:

  • Входной слой: получает набор входных данных, передает входные данные скрытому слою.
  • Скрытый слой (слои): содержит основные вычислительные блоки; все вычисления выполняются в этих слоях
  • Выходные слои: также содержит вычислительные единицы и возвращает выходные данные. (Есть споры о том, следует ли считать выходной слой скрытым слоем или нет.)

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

На следующем рисунке показана нейронная сеть с одним

В этих скрытых слоях и происходят вычисления. Без скрытых слоев нейронная сеть будет просто возвращать выходные данные, идентичные входным данным.

Скрытые слои — это то, что действительно обеспечивает глубокое обучение.

Распространенные типы нейронных сетей

Хотя существуют различные типы нейронных сетей, наиболее распространенными являются:

  • Сверточные нейронные сети : они обычно используются для анализа изображений и являются вдохновителями распознавания изображений и лиц.
  • Рекуррентные нейронные сети (RNN) : они учатся на последовательных обучающих данных. На них работают приложения для распознавания речи. Одним из типов RNN является сеть с долговременной кратковременной памятью (LSTM), тип нейронной сети, лежащий в основе Google Translate.

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

Как работают нейронные сети

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

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

Некоторые из ключевых вычислительных компонентов нейронных сетей включают в себя:

  • Функции активации : у каждого персептрона есть функция активации, которая стандартизирует его выходные данные и предотвращает разрушение различных блоков. Обычной функцией активации является сигмовидная функция активации.
  • Вес : значение, присвоенное соединениям между персептронами, оцениваемое алгоритмом обучения.

Процесс обучения нейронной сети выглядит так:

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

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

Чтобы уменьшить потери, мы обновляем веса. На данном этапе мы не используем случайные числа в качестве весов. Вместо этого мы используем алгоритмы оптимизации для определения необходимых изменений.

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

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

Начало работы с нейронными сетями в Python

Создание нейронных сетей (NN) — одна из многих замечательных вещей, которые вы можете делать с помощью языка программирования Python.

На пути к освоению нейронных сетей вам понадобится несколько ингредиентов:

  • Базовое владение Python
  • Фреймворки глубокого обучения (такие как Keras, TensorFlow и PyTorch )
  • Базовое знакомство с линейной алгеброй, вероятностью и исчислением

Библиотеки и фреймворки для нейронных сетей на Python

Существуют различные библиотеки и модули, которые вы можете использовать, чтобы начать создавать нейронные сети в Python:

  • Keras : среда глубокого обучения, ориентированная на нейронные сети.
  • NumPy : библиотека Python с высокоуровневыми математическими функциями для многомерных матриц и массивов.
  • pandas : библиотека Python для анализа и обработки данных.
  • scikit-learn : библиотека машинного обучения Python для регрессии и классификации
  • Matplotlib : библиотека Python для построения графиков и визуализации.
  • TensorFlow : библиотека машинного обучения и искусственного интеллекта, ориентированная на обучение нейронных сетей.

Нейронные сети в Python: пример кода

Давайте взглянем на то, как мы реализуем нейронные сети в Python.

Следующий код Python — это простой пример классификации изображений с использованием TensorFlow.

# Import packages
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.utils import plot_model
# Build neural network model
def build_model():
    # instantiate a Sequential class and linearly stack the layers of your model
    seq_model = tf.keras.models.Sequential([tf.keras.layers.Flatten(input_shape=(28, 28)),
                                            tf.keras.layers.Dense(128, activation=tf.nn.relu),
                                            tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
    return seq_model
# Instantiate the model and plot it
model = build_model_with_functional()
plot_model(model)
#Load and prepare data
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()
training_images = training_images / 255.0
test_images = test_images / 255.0
# Set optimization algorithm
model.compile(optimizer=tf.optimizers.Adam(),
              loss=’sparse_categorical_crossentropy’,
              metrics=[‘accuracy’])
# Train and evaluate the model
model.fit(training_images, training_labels, epochs=5)
model.evaluate(test_images, test_labels)

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

Читайте также:  Структура данных 101: как использовать связанные списки в Java
Оцените статью
bestprogrammer.ru
Добавить комментарий