MLP на Python без библиотек: как оценить затраты на AI

26 июня 2026 года на Habr вышла статья, которая делает то, чего не хватает большинству материалов по нейросетям: показывает внутреннее устройство без готовых библиотек. Автор под ником kretoffer разобрал многослойный перцептрон (MLP) на примере распознавания рукописных цифр из датасета MNIST — от объявления класса нейрона до расчёта ошибки. Для бизнеса, который использует AI-инструменты, понимание этой механики означает возможность оценивать, где нейросеть действительно нужна, а где её применение — лишние затраты на инфраструктуру и время команды.

Что именно изменилось: появился сквозной разбор MLP с кодом на Python

Статья — не обзор библиотек PyTorch или TensorFlow, а полная сборка нейросети с нуля. Автор последовательно объясняет три ключевых элемента:

  • Нейрон — класс с весами (weights) и коэффициентом сдвига (bias), инициализированными случайными значениями от -0.5 до 0.5.
  • Слой — набор нейронов, каждый из которых соединён со всеми нейронами предыдущего слоя.
  • Сеть — последовательность слоёв, где размер каждого следующего слоя задаётся параметром sizes.

Архитектура для примера: входной слой — 784 нейрона (28×28 пикселей изображения), два скрытых слоя по 12 нейронов, выходной слой — 10 нейронов (по числу цифр). Ответом считается нейрон с максимальным значением.

Код на Python, который приводит автор, можно запустить в любом окружении без установки дополнительных библиотек — только стандартный random.

Почему это меняет подход к выбору AI-инструментов

Для руководителя, который решает, внедрять ли нейросеть в конкретную задачу, понимание базовой архитектуры даёт три практических преимущества:

  1. Оценка сложности задачи. Если входные данные можно представить как фиксированный набор чисел (пиксели, признаки, показатели), MLP — рабочий вариант. Если данные неструктурированы или требуют учёта последовательности (текст, аудио), нужны другие архитектуры.
  2. Контроль затрат на обучение. Автор показывает, что обучение — это итеративный процесс: прямое распространение (forward pass), расчёт ошибки, обратное распространение (backpropagation) и обновление весов. Каждая итерация требует времени. Чем больше слоёв и нейронов, тем дороже обучение.
  3. Понимание ограничений. MLP не умеет распознавать пространственные закономерности так, как это делают свёрточные сети (CNN). Для задачи MNIST MLP работает, но для фотографий или видео потребуется другая архитектура.
Что меняется Почему важно бизнесу Что проверить
Понимание внутреннего устройства нейросети Позволяет оценить, подходит ли MLP для задачи, до найма разработчика Какие типы данных в задаче: табличные, изображения, текст, аудио
Прозрачность процесса обучения Можно оценить время и стоимость обучения до запуска Сколько итераций (эпох) потребуется для сходимости
Отсутствие зависимости от библиотек Снижает vendor lock-in и упрощает аудит кода Можно ли реализовать прототип без PyTorch/TensorFlow
Понимание роли весов и bias Помогает интерпретировать, почему сеть выдала конкретный ответ Есть ли в команде специалист, способный прочитать веса обученной модели

Как собрать нейросеть с нуля: рабочий метод из статьи

Автор предлагает последовательность, которую можно воспроизвести за 30–40 минут:

Шаг 1. Объявить класс нейрона

import random

class Neuron:
    def __init__(self, num_inputs):
        self.weights = [random.uniform(-0.5, 0.5) for _ in range(num_inputs)]
        self.bias = random.uniform(-0.5, 0.5)

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

Шаг 2. Собрать слой и сеть

class Layer:
    def __init__(self, num_neurons, num_inputs):
        self.neurons = [Neuron(num_inputs) for _ in range(num_neurons)]

class NeuralNetwork:
    def __init__(self, sizes):
        self.layers = []
        for i in range(len(sizes) - 1):
            self.layers.append(Layer(sizes[i + 1], sizes[i]))

Параметр sizes — список, где каждый элемент задаёт количество нейронов в соответствующем слое. Для MNIST это [784, 12, 12, 10].

Шаг 3. Реализовать прямое распространение

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

Шаг 4. Обучить сеть

Обучение состоит из трёх повторяющихся шагов: - Прямой проход — вычисление ответа сети. - Расчёт ошибки — сравнение ответа с правильным. - Обратный проход — корректировка весов пропорционально их вкладу в ошибку.

Автор предупреждает: обучение может не сойтись, если неправильно выбрать скорость обучения (learning rate) или количество нейронов в скрытых слоях.

Где находятся риски и ограничения

Статья честно указывает на слабые места подхода:

  • MLP не подходит для сложных изображений. Для распознавания лиц, объектов или сцен нужны свёрточные сети (CNN), которые учитывают пространственную структуру.
  • Случайная инициализация может привести к застреванию. Если все веса инициализировать одинаково, нейроны будут обновляться синхронно и сеть не сможет обучаться разным признакам.
  • Переобучение. Если скрытых слоёв слишком много, сеть запоминает обучающие примеры, но не обобщает. На новых данных точность падает.
  • Отсутствие обработки последовательностей. MLP не видит порядка данных. Для текста, речи или временных рядов нужны рекуррентные сети (RNN) или трансформеры.

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

Что можно сделать на этой неделе

Чек-лист для руководителя, который рассматривает внедрение нейросети:

  1. Определите тип данных в задаче: табличные числа, изображения, текст, аудио или временные ряды.
  2. Если данные табличные (до 100–200 признаков), MLP — рабочий вариант для прототипа.
  3. Оцените, сколько размеченных примеров доступно. Для MLP нужно минимум несколько тысяч.
  4. Проверьте, есть ли в команде человек, способный реализовать прямое распространение и обратное распространение без готовых библиотек.
  5. Запланируйте бюджет на вычислительные ресурсы: обучение MLP на CPU возможно, но для больших сетей потребуется GPU.
  6. Если задача сложнее распознавания простых цифр, рассмотрите свёрточные или рекуррентные архитектуры — они потребуют больше ресурсов и специалистов.

Источники

Генерация изображения

  • Модель: flux-schnell
  • Провайдер: replicate