3SELLER Journal 3SELLER →

Как выглядит код нейросети: 9 строк Python вместо магии из фильмов

14.11.2026

На днях друг спросил, как выглядит код нейросети. Я открыл ноутбук и показал девять строчек на Python. Он разочаровался: где магия, где формулы на весь экран, где бегущие строки терминала из фильмов? Пришлось объяснять: магии в коде нет, есть матричное умножение и цикл, который десять тысяч раз подкручивает несколько чисел, пока сеть не начинает угадывать.

Разберу реальный код нейросети построчно: от учебного перцептрона в девять строк до боевых версий на Keras и PyTorch. Заодно поговорим о неожиданной проблеме последних лет: код нейросети научились писать сами нейросети, и отличить его от человеческого непросто. Маркеры существуют, и о них стоит знать каждому, кто работает с разработкой.

Нейросеть умещается в девять строк Python

Возьмём классический пример Эндрю Траска, доктора философии Оксфордского университета и автора книг о глубоком обучении. Его полносвязная нейросеть выглядит так:

from numpy import exp, array, random, dot

X = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
y = array([[0, 1, 1, 0]]).T
weights = 2 * random.random((3, 1)) - 1
for i in range(10000):
    output = 1 / (1 + exp(-dot(X, weights)))
    weights += dot(X.T, (y - output) * output * (1 - output))
print(dot(array([1, 0, 0]), weights))

Девять строк и единственная зависимость NumPy, никакого машинного обучения из коробки. Сеть обучается на крошечном наборе из четырёх примеров: три входных сигнала, один выход. После десяти тысяч итераций она корректно предсказывает ответ для комбинации входов, которую никогда не видела. На слабом ноутбуке всё сходится за пару секунд.

При запуске вы увидите число в диапазоне от нуля до единицы, предсказание сети для входа [1, 0, 0]. Никаких окон, графиков и анимаций, если не добавить их руками. Код нейросети в консоли выглядит максимально буднично, и в этом вся прелесть.

Что спрятано внутри этих строк

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

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

weights и есть сама нейросеть. Три случайных числа от -1 до 1 задают стартовые веса связей. Дальше работает цикл на десять тысяч итераций, где каждый проход выполняет две операции. Сначала сеть считает предсказание по формуле 1 / (1 + exp(-dot(X, weights))), это сигмоида поверх матричного умножения. Затем веса сдвигаются в сторону уменьшения ошибки. Вся обратная связь, которую в учебниках называют backpropagation, живёт в одной строчке: dot(X.T, (y - output) * output * (1 - output)).

Веса стартуют случайными не просто так: при нулевой инициализации все нейроны учатся одинаково и сеть вырождается в примитив. Случайность ломает симметрию и заставляет связи специализироваться. Деталь уровня «почему код выглядит именно так», о которую спотыкается каждый второй новичок.

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

Боевой код: та же сеть на Keras и PyTorch

Учебный пример нужен для понимания, но в реальных проектах сигмоиды вручную никто не перемножает. Та же задача на Keras выглядит заметно спокойнее:

from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
model.add(Dense(4, input_dim=3, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y, epochs=10000, verbose=0)
print(model.predict(array([[1, 0, 0]])))

Читается почти как английский: создаём модель, добавляем слои, компилируем, обучаем, предсказываем. Под капотом фреймворк сам реализует прямой проход, функцию потерь и градиентный спуск. Строк формально больше, а смысла в каждой меньше, потому что вся математика спрятана внутри слоёв.

PyTorch предлагает другой стиль. Сеть оформляют отдельным классом на базе nn.Module:

import torch
import torch.nn as nn

class TinyNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(3, 4)
        self.fc2 = nn.Linear(4, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        return torch.sigmoid(self.fc2(x))

model = TinyNet()
print(model(torch.tensor([[1.0, 0.0, 0.0]])))

Здесь архитектура видна буквально: два линейных слоя, между ними нелинейность relu, на выходе сигмоида. Исследователи любят PyTorch за прозрачность, прототипировщики ценят Keras за скорость. Суть в обоих случаях одна: современный код нейросети представляет собой конфигурацию готовых блоков, а не ручную математику.

За кадром девяти строк остались параметры: количество нейронов в слое, learning rate, число эпох, функция потерь. В Keras они прячутся в аргументах Dense и compile, в PyTorch уходят в конструкторы слоёв и оптимизатор. Практика показывает, что четыре-пять таких ручек определяют большую часть результата, остальные тонкости вторичны.

Из чего состоит настоящий проект с нейросетью

Модель обычно занимает десятую часть репозитория. Вокруг неё живёт обвязка, и именно она съедает основной объём кода:

Забавная деталь из практики: код инференса почти всегда скромнее кода обучения. Обучение представляет собой цикл, эксперименты и логи, а использование обученной сети сводится к загрузке весов и одному вызову модели. При чтении чужого репозитория идите по маршруту: определение модели, функция потерь, оптимизатор. Эти три точки дают понимание 80% происходящего, остальное обвязка.

Где посмотреть код настоящих нейросетей бесплатно

Любопытство утоляется легально и без затрат. На GitHub лежат исходники популярных фреймворков: PyTorch, TensorFlow, JAX. Реализации научных статей собирает агрегатор Papers With Code, а конфиги архитектур в модельном хабе Hugging Face читаются прямо в браузере.

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

Парадокс: нейросетевой код выглядит аккуратнее человеческого

Самая занятная часть разговора. В корпоративном блоге Ростелекома разбирали, как отличить код, написанный нейросетью, от кода программиста, и сформулировали неожиданный вывод. Алгоритм выдаёт не случайный набор команд, а усреднённый вариант лучших практик. Синтетический код часто выглядит опрятнее человеческого: отступы выровнены, переменные названы корректно, опечаток нет.

И вот ловушка. Слишком полное соблюдение формальных правил как раз указывает на искусственное происхождение. Люди склонны к стилистическим вольностям и сокращениям, поэтому идеальная аккуратность сама по себе наводит на подозрения. Я замечал то же на код-ревью: человеческий код живой, с сокращениями, шутками в комментариях и хаками трёхлетней давности. Синтетический код стерилен, как операционная до операции.

Конкретный пример. Человек по привычке напишет cnt, buf или init_usr, потому что команду так приучили. Модель выдаст user_input_count или processed_data_buffer, причём оба варианта будут безупречно оформлены. Красиво, читабельно и почему-то без единого сокращения, к которым прикипает любой разработчик с опытом больше года.

Маркеры, по которым вычисляют нейросеть-автора

Практики ловят ИИ-код по повторяющимся симптомам:

Журнал «Код» добавляет нюанс, который рушит всю детективную работу. Модель можно попросить специально допустить мелкие ошибки и неточности, не влияющие на работоспособность, и код сразу станет выглядеть человечнее: кто-то ведь мог забыть про ВерблюжийСтиль в названии переменной. Да, если её об этом попросить. Держите это в голове, когда встречаете заявления о стопроцентных детекторах ИИ-кода: надёжного способа не существует, есть только набор эвристик.

Зачем вообще отличать ИИ-код от человеческого

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

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

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

Запустить свой первый код нейросети можно сегодня вечером

Девять строк из начала статьи легко скопировать в любой онлайн-интерпретатор Python и запустить. Дальше начинается интересное: попросить модель объяснить каждую операцию, переписать пример на PyTorch, добавить скрытый слой, превратить сеть в классификатор тональности отзывов. Нейросети разбирают чужой код по косточкам и не устают от вопросов, в отличие от любого живого ментора.

Загвоздка одна, и она банальная: доступ. Флагманские модели из России напрямую не работают, а подписки требуют иностранных карт, которых у большинства нет. Я решаю вопрос через сервис 3GPT от 3SELLER. Роутер даёт прямой доступ из России к флагманам: Chat GPT 6 Astra, Chat GPT 6.1 Sol, Chat GPT 5.5, Claude Fable 5, Claude Fable 5.1, Claude Opus 5.5, плюс Nano Banana для создания изображений, генерация видео и другие модели. Стоимость от 149 рублей, баланс пополняется российской картой, через СБП или криптой.

3GPT: доступ к флагманским нейросетям из России

На практике это выглядит так: открыт чат с Claude, вставлен код перцептрона, задан вопрос про строку обновления весов. Через минуту у вас готовое объяснение с разбором производной сигмоиды, а ещё через пять минут готова переписанная версия на PyTorch с комментариями. За рамками кода возможности те же: модели пишут продающие тексты, собирают сайты, создают и обрабатывают максимально реалистичные изображения, генерируют видеоролики и голос. Один аккаунт закрывает весь набор, переключение между моделями занимает пару кликов.

Готовые ИИ-агенты под конкретные задачи

У 3GPT есть ещё фишка, которой я пользуюсь постоянно: готовые ИИ-агенты под ваши задачи. Выбираете агента и начинаете общение. Он уже настроен под сценарий: код, тексты, маркетинг или анализ данных. Модель агента меняется прямо в чате, без перенастройки контекста: сегодня работаете с Claude Fable 5.1, завтра сравниваете ответ с Chat GPT 6.

Готовые ИИ-агенты в 3GPT

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

С чего начать прямо сейчас

Скопируйте девять строк перцептрона, запустите и посмотрите, как сеть сходится к ответу. Затем попросите модель разобрать строку с обновлением весов, потому что именно там спрятан весь смысл глубокого обучения. Получить доступ ко всем флагманским моделям нейросетей из России можно на официальном сайте 3GPT: пополнение российской картой, через СБП или криптой. Код нейросети выглядит куда проще, чем принято думать, и именно поэтому его стоит открыть и пощупать сегодня же.

← Вернуться к блогу

Читать дальше