Кодирование было хлебом с маслом для разработчиков с момента зарождения вычислительной техники. При традиционном подходе разработчики разбивают проблему на несколько подзадач, кодируют каждую часть отдельно, применяя набор правил, затем эти правила применяются к данным и возвращают результат. Короче говоря, мы вводим данные и правила в систему и получаем ответы из системы.
Но есть проблема с подобным подходом: «мы не всегда можем кодировать правила». Позвольте мне объяснить это на примере: допустим, мы хотим написать программу, которая может предсказать, будет ли человек ходить, бегать или ехать на велосипеде. Мы можем легко сделать это, установив некоторые правила, например: если 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