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-инструментов
Для руководителя, который решает, внедрять ли нейросеть в конкретную задачу, понимание базовой архитектуры даёт три практических преимущества:
- Оценка сложности задачи. Если входные данные можно представить как фиксированный набор чисел (пиксели, признаки, показатели), MLP — рабочий вариант. Если данные неструктурированы или требуют учёта последовательности (текст, аудио), нужны другие архитектуры.
- Контроль затрат на обучение. Автор показывает, что обучение — это итеративный процесс: прямое распространение (forward pass), расчёт ошибки, обратное распространение (backpropagation) и обновление весов. Каждая итерация требует времени. Чем больше слоёв и нейронов, тем дороже обучение.
- Понимание ограничений. 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 — хороший инструмент для прототипирования и задач с табличными данными, но не универсальное решение. Прежде чем инвестировать в обучение, стоит проверить, подходит ли архитектура под тип данных.
Что можно сделать на этой неделе
Чек-лист для руководителя, который рассматривает внедрение нейросети:
- Определите тип данных в задаче: табличные числа, изображения, текст, аудио или временные ряды.
- Если данные табличные (до 100–200 признаков), MLP — рабочий вариант для прототипа.
- Оцените, сколько размеченных примеров доступно. Для MLP нужно минимум несколько тысяч.
- Проверьте, есть ли в команде человек, способный реализовать прямое распространение и обратное распространение без готовых библиотек.
- Запланируйте бюджет на вычислительные ресурсы: обучение MLP на CPU возможно, но для больших сетей потребуется GPU.
- Если задача сложнее распознавания простых цифр, рассмотрите свёрточные или рекуррентные архитектуры — они потребуют больше ресурсов и специалистов.
Источники
Генерация изображения
- Модель:
flux-schnell - Провайдер:
replicate