Простая самописная нейросеть на Питоне

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

Создаём двуслойную нейросеть (входной слой не берется при подсчете слоев).

двуслойная сеть

1. Создаем класс нейросети в Питоне

2. Добавляем функцию прямого прохода (от входного слоя к выходному)

Сигмоида используется в качестве функции активации (её описание будет дано в последнем листинге с примером).

нейросеть

3. Добавляем обратное распространение

Функция потерь:
функция потерь

Производная и градиент, поиск минимума:
градиент

минимизация функции потерь

4. Проверяем на примере (обратите внимание, что в начале добавлено несколько важных строк)

Пояснение к примеру:
x1 принимает значения 0, 0, 1, 1
x2 принимает значения 0, 1, 0, 1
x3 принимает значения 1, 1, 1, 1
y (целевая переменная) принимает значения 0, 1, 1, 0 соответственно

Наша нейросеть пытается подобрать идеальный набор весов, чтобы описать данную функцию. Проведено 1500 прогонов (итераций).

В моём случае результат получился таким:
[[0.02313339]
[0.97440622]
[0.98318163]
[0.02296596]]
loss: 0.0019279632821274807
Сравните с идеалом:
[[0]
[1]
[1]
[0]]

Визуализация функции потерь показывается как она минимизируется (стремится к нулю).

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

Data Scientist # 1

Машинное обучение, большие данные, наука о данных, анализ данных, цифровой маркетинг, искусственный интеллект, нейронные сети, глубокое обучение, data science, data scientist, machine learning, artificial intelligence, big data, deep learning

Данные — новый актив!

Эффективно управлять можно только тем, что можно измерить.
Copyright © 2016-2021 Data Scientist. Все права защищены.