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

Но есть проблема с подобным подходом: «мы не всегда можем кодировать правила». Позвольте мне объяснить это на примере: допустим, мы хотим написать программу, которая может предсказать, будет ли человек ходить, бегать или ехать на велосипеде. Мы можем легко сделать это, установив некоторые правила, например: если 0 ‹скорость‹ 2 мили / час, то человек идет, или если скорость ›10 миль / час, то человек едет на велосипеде и так далее. Но что, если мы хотим предсказать, играет ли человек в гольф? В таком случае кодировать правила будет очень сложно. Здесь в игру вступает нейронная сеть. Данные вместе с ответами вводятся в систему, и мы выясняем правила. По сути, мы говорим машине, как выглядит ходьба или так выглядит игра в гольф, с достаточным количеством примеров, и машина выясняет правила для каждого из них.

Что такое нейронная сеть?

Нейронная сеть - это в основном набор функций, которые могут изучать шаблоны. Он немного выше, чем машинное обучение, и относится к области «Глубокое обучение».

Возьмем пример: у нас есть 5 значений «x» и «y» каждое.

x = 1, 2, 3, 4, 5

y = 4, 6, 8, 10, 12

Можете ли вы назвать формулу, которая отображает x в y?

Ответ: y = 2x + 2. Попробуем решить эту проблему с помощью нейронной сети. Я буду использовать Python и TensorFlow вместе с API в TensorFlow под названием Keras. Фреймворк для определения нейронной сети как набора последовательных слоев называется Keras. Перед тем, как углубиться в код, приведу несколько общих терминов, используемых в нейронных сетях:

  • Последовательный: определение последовательности слоев в нейронной сети. Последовательные слои определяются в последовательности, отсюда и слово «последовательные».
  • Свести. Преобразуйте фигуру массива в одномерный набор.
  • Плотность: слой связанных нейронов определенного размера.
  • Функция активации: говорит нейрону, что делать.
  • Активация Relu: говорит, что если X больше 0, вернуть X, если не вернуть 0. По сути, только значения больше 0 перемещаются по сети.
  • Активация Softmax: выбирает наибольшее значение из набора значений и возвращает 1 для этого значения и 0 для остальных. Например, [0,09, 0,64, 0,07, 0,02] превратится в [0, 1, 0, 0].
  • Оптимизатор: улучшает предположения для модели.
  • Функция потерь: насколько ошибочны предположения модели.

Импортировать библиотеки

Начнем с импорта TensorFlow и некоторых важных библиотек.

import tensorflow as tf
from tensorflow import keras
import numpy as np

Определить нейронную сеть

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

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

В приведенном выше коде «units = 1» представляет один нейрон.

Скомпилируйте нейронную сеть

Следующий шаг для компиляции нашей нейронной сети. Вот код для этого:

model.compile(optimizer='sgd', loss='mean_squared_error')

Мы знаем, что отношение между x и y: y = 2x + 2

Когда машина пытается обучиться, она делает случайное предположение, допустим, y = 5x + 10. Функция ПОТЕРЯ сравнивает угаданные ответы с известными правильными ответами и измеряет, насколько хорошо или плохо это было.

Функция оптимизатора делает предположение на основе того, как прошла функция потерь, она попытается минимизировать потери. Здесь я использовал «MEAN SQUARED ERROR» для потерь и «STOCHASTIC GRADIENT DESCENT» для оптимизатора.

Предоставление данных

Затем мы введем некоторые данные. Вот берем 5 хс и 5ис

x = np.array([1,2,3,4,5], dtype=float)
y = np.array([4,6,10,12], dtype=float)

Обучение нейронной сети

Процесс обучения модели происходит в вызове model.fit. Модель попытается минимизировать потери, повторяя до 200 раз (эпох).

model.fit(x, y, epochs=200)

Предсказывать

Теперь у нас есть модель, которую обучили изучать взаимосвязь между x и y. Мы можем использовать метод model.predict, чтобы предсказать значение y. Возьмем x = 10 и посмотрим, какое значение y мы получим.

print(model.predict([10.0]))

На выходе я получил 22,274. Что немного больше, чем правильных ответов, т.е. 22. Причина в том, что нейронная сеть работает с вероятностями. Модель правильно угадала связь между x и y, но поскольку количество предоставленных точек данных было всего 5, она не уверена.

Ссылки

[1] deeplearning.ai Специализация на практике TensorFlow, автор - Лоуренс Морони

[2] Практическое машинное обучение с помощью scikit-learn, Keras и Tensorflow