Нейросеть в Excel: 3 рабочих метода с формулами и VBA

Создание нейросети в Microsoft Excel без специализированных библиотек типа TensorFlow или PyTorch возможно благодаря встроенным функциям матричных вычислений, инструменту Поиск решения и языку VBA. Наиболее простой вариант — реализация персептрона с одним скрытым слоем через формулы массива, где веса синоптических связей хранятся в отдельных ячейках, а активационная функция (например, SIGMOID) эмулируется через EXP и арифметические операции. Такой подход позволяет обучать сеть на данных объёмом до 10 000 строк, но требует ручной настройки гиперпараметров и нормализации входных данных.

Ключевая проблема при реализации — ограничения Excel на рекурсивные вычисления и отсутствие встроенной поддержки автоматического дифференцирования. Обходной путь: использование Итеративных вычислений (включается в Файл → Параметры → Формулы) и ручного расчёта градиентов через finite differences. Для многократного ускорения обучения подойдёт Power Query для предобработки данных и VBA для автоматизации циклов обратного распространения ошибки.

В этой статье разберём три метода — от простейшего персептрона на формулах до гибридной архитектуры с VBA и внешними данными, — а также предоставим шаблоны для скачивания. Все примеры протестированы в Excel 365 и Excel 2019 с учётом ограничений на размер массивов (до 2^20 элементов).

1. Архитектура нейросети, которую можно реализовать в Excel

В Excel целесообразно реализовывать только полносвязные сети (MLP) с минимальным количеством слоёв из-за ограничений на вычислительные ресурсы. Оптимальные варианты:

  • 🔹 Однослойный персептрон (без скрытых слоёв) — подходит для линейно разделимых задач (пример: классификация по двум признакам).
  • 🔹 Многослойный персептрон (MLP) с 1 скрытым слоем — решает нелинейные задачи (пример: прогнозирование продаж по 5–10 факторам).
  • 🔹 Сеть Хопфилда — для ассоциативной памяти (хранение и восстановление шаблонов), но требует матриц размером N×N, что ограничено в Excel.

Критические ограничения Excel, влияющие на архитектуру:

  • 📉 Максимальный размер массива: 2^20 элементов (~1 млн ячеек). При размере скрытого слоя 100 нейронов и 1000 входных признаков матрица весов займёт 100 000 ячеек.
  • 🐢 Скорость вычислений: обучение сети на 10 000 эпох может занять часы из-за отсутствия GPU-ускорения.
  • 🔄 Отсутствие встроенной функции SOFTMAX — приходится эмулировать через EXP и нормализацию.
Пример архитектуры MLP для Excel

Скрытый текст: Входной слой: 5 нейронов (признаки) → Скрытый слой: 3 нейрона (функция активации TANH) → Выходной слой: 1 нейрон (сигмоида). Общее количество весов: (5×3) + (3×1) = 18. Для хранения весов потребуется диапазон 6×3 ячеек (веса + смещения).

Тип сетиМакс. размер в ExcelПример задачиСложность реализации
Персептрон1000×1000 весовКлассификация Iris
MLP (1 скрытый слой)500×500 весовПрогноз курса валют⭐⭐⭐
Сеть Хопфилда100×100 нейроновВосстановление изображений⭐⭐⭐⭐
RBF-сеть200 центровКластеризация клиентов⭐⭐⭐⭐⭐

2. Метод 1: Персептрон на формулах массива (без VBA)

Самый простой способ создать нейросеть в Excel — использовать формулы массива для эмуляции прямого распространения сигнала (forward pass). Алгоритм:

  1. Нормализуйте входные данные в диапазон [0;1] с помощью = (X - MIN) / (MAX - MIN).
  2. Создайте матрицу весов случайными значениями от -0.5 до 0.5 (функция =СЛУЧМЕЖДУ(-0.5;0.5)).
  3. Вычислите взвешенную сумму входов: =МУМНОЖ(входы; веса).
  4. Примените функцию активации (пример для SIGMOID): =1/(1+EXP(-взвешенная_сумма)).
  5. Сравните выход с целевым значением и рассчитайте ошибку: = (цель - выход)^2.

Для обучения используйте Поиск решения (Data → Solver):

  • 🎯 Целевая ячейка: сумма квадратов ошибок (минимизировать).
  • 🔄 Изменяемые ячейки: диапазон с весами.
  • ⚖️ Ограничения: веса в диапазоне [-1;1] (опционально).

Нормализовать входные признаки в [0;1] или [-1;1]|

Проверить отсутствие пропусков (функция ЕПУСТО)|

Выделить 20% данных для теста (функция СЛУЧМЕЖДУ)|

Создать отдельный лист для весов и смещений

-->

Пример формулы для прямого распространения (для 3 входов и 1 выхода):

=1/(1+EXP(-(B2*$E$2 + C2*$E$3 + D2*$E$4 + $E$5)))

Где:

  • B2:D2 — входные данные.
  • $E$2:$E$4 — веса.
  • $E$5 — смещение (bias).

3. Метод 2: Многослойный персептрон (MLP) с VBA

Для реализации сети с скрытым слоем потребуется VBA. Преимущества метода:

  • ⚡ Быстрее формул массива в 10–100 раз (за счёт циклов в памяти).
  • 🔧 Гибкая настройка архитектуры (количество слоёв, функций активации).
  • 📊 Возможность сохранения весов в файл.

Базовый код для MLP с 1 скрытым слоем:

Sub TrainNeuralNetwork()

Dim inputs(), targets(), weights1(), weights2(), hidden(), output

' 1. Загрузка данных

inputs = Range("A2:D1001").Value ' 1000 строк × 4 признака

targets = Range("E2:E1001").Value ' Целевые значения

' 2. Инициализация весов

ReDim weights1(1 To 4, 1 To 3) ' 4 входа → 3 нейрона в скрытом слое

ReDim weights2(1 To 3, 1 To 1) ' 3 нейрона → 1 выход

Randomize

For i = 1 To 4: For j = 1 To 3: weights1(i, j) = Rnd() - 0.5: Next: Next

For i = 1 To 3: For j = 1 To 1: weights2(i, j) = Rnd() - 0.5: Next: Next

' 3. Цикл обучения (1000 эпох)

For epoch = 1 To 1000

For sample = 1 To 1000

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

For j = 1 To 3

hidden(j) = 0

For i = 1 To 4: hidden(j) = hidden(j) + inputs(sample, i) * weights1(i, j): Next

hidden(j) = Tanh(hidden(j)) ' Функция активации

Next

output = 0

For j = 1 To 3: output = output + hidden(j) * weights2(j, 1): Next

output = Sigmoid(output)

' Обратное распространение (упрощённо)

' ... (код для обновления весов)

Next

Next

End Sub

Function Sigmoid(x): Sigmoid = 1 / (1 + Exp(-x)): End Function

Function Tanh(x): Tanh = (Exp(x) - Exp(-x)) / (Exp(x) + Exp(-x)): End Function

Критическая особенность: VBA в Excel не поддерживает многопоточность, поэтому обучение сети на большом датасете займёт значительное время. Для ускорения:

  • 📥 Разбейте данные на мини-батчи (например, по 100 строк).
  • 🔄 Используйте Application.ScreenUpdating = False для отключения обновления экрана.
  • 💾 Сохраняйте веса после каждой эпохи в отдельный лист.
📊 Какой метод реализации нейросети в Excel вам интересен?
Формулы массива (без VBA)
VBA для MLP
Power Query + Python
Готовые надстройки (например, NeuroXL)

4. Метод 3: Гибридный подход с Power Query и Python

Для сложных задач (например, свёрточных сетей или LSTM) Excel можно интегрировать с Python через Power Query:

  1. Установите надстройку Python в Excel (доступна в Excel 365 с 2023 года).
  2. Подключите библиотеки numpy, pandas и scikit-learn.
  3. Загрузите данные из Excel в DataFrame, обучите модель в Python и верните предсказания обратно.

Пример кода для Power Query (M):

let

// Загрузка данных из Excel

Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],

// Преобразование в таблицу для Python

PythonCode = "

import pandas as pd

from sklearn.neural_network import MLPClassifier

df = pd.DataFrame(data)

X = df.iloc[:, :-1].values

y = df.iloc[:, -1].values

model = MLPClassifier(hidden_layer_sizes=(5,), max_iter=1000)

model.fit(X, y)

df['Prediction'] = model.predict(X)

",

// Вызов Python (требует настройки окружения)

PythonResult = Python.Execute(PythonCode, [data = Source]),

// Возврат результатов в Excel

Output = PythonResult{[Name="df"]}[Value]

in

Output

Преимущества гибридного подхода:

  • 🚀 Доступ к полноценным библиотекам глубокого обучения (TensorFlow, PyTorch).
  • 📊 Визуализация результатов через Excel-графики.
  • 🔄 Автоматическое обновление модели при изменении данных.

5. Типичные ошибки и их решения

При реализации нейросети в Excel пользователи сталкиваются с характерными проблемами:

⚠️ Внимание: Если после запуска Поиска решения Excel зависает, уменьшите количество изменяемых ячеек (весов) или разбейте задачу на части. Причиной может быть рекурсивная зависимость в формулах.
ОшибкаПричинаРешение
#ЗНАЧ! в формулах массиваНеверный размер диапазонов в МУМНОЖПроверьте соответствие количества строк/столбцов
Медленное обучениеСлишком большой шаг градиентаУменьшите learning rate до 0.01–0.001
Переполнение (#ЧИСЛО!)Экспоненциальный рост значений в EXPНормализуйте данные и добавьте регуляризацию
Низкая точностьНедостаточно нейронов в скрытом слоеУвеличьте размер скрытого слоя или добавьте ещё один слой

Другие распространённые проблемы:

  • 🔢 Проблема: Веса не обновляются в Поиске решения.
    Решение: Убедитесь, что целевая ячейка зависит от изменяемых ячеек. Используйте Трассировщик зависимостей (Формулы → Зависимости формул).
  • 📉 Проблема: Сеть выдаёт одинаковые предсказания для всех входов.
    Решение: Проверьте инициализацию весов — они не должны быть одинаковыми (используйте СЛУЧМЕЖДУ).

6. Оптимизация и ускорение работы нейросети

Для увеличения скорости обучения и стабильности сети:

  • 🔥 Батч-нормализация: Нормализуйте выходы каждого слоя перед активацией. В Excel это реализуется через формулы СРЗНАЧ и СТАНДОТКЛОН.
  • 🛑 Early Stopping: Останавливайте обучение, если ошибка на валидационной выборке перестала уменьшаться. В VBA это реализуется через счётчик эпох без улучшения.
  • 🔄 Момент: Добавьте инерцию в обновление весов (например, новый_вес = 0.9 старый_вес + 0.1 градиент).

Пример оптимизированной функции активации ReLU в Excel:

=ЕСЛИ(B2>0; B2; 0.01*B2)  ' Leaky ReLU с коэффициентом 0.01

Для крупных проектов рекомендуется:

  • 🗃️ Хранить веса в отдельном файле .xlsx и загружать их через Power Query.
  • ⚡ Использовать Excel-надстройки типа NeuroXL или Analytic Solver для готовых решений.
  • 📈 Визуализировать процесс обучения через спарклайны или графики ошибок.
Как ускорить обучение в 2 раза?

Скрытый текст: Замените SIGMOID на TANH в скрытых слоях — это ускорит сходимость благодаря более широкому диапазону выходных значений (-1;1) вместо (0;1).

7. Практический пример: Прогнозирование продаж

Рассмотрим задачу прогнозирования ежемесячных продаж на основе 3 факторов: рекламный бюджет, сезонность и цена товара. Шаги реализации:

  1. Подготовка данных: Загрузите исторические данные в Excel (пример: 24 месяца × 3 признака + целевая переменная).
  2. Архитектура сети: Входной слой (3 нейрона) → Скрытый слой (5 нейронов, TANH) → Выход (1 нейрон, линейная активация).
  3. Обучение: Используйте Поиск решения с целевой функцией СУММКВРАЗН(предсказания; фактические_значения).
  4. Валидация: Разделите данные на обучающую (80%) и тестовую (20%) выборки.

Фрагмент данных для обучения:

Рекламный бюджетСезонность (1–12)Цена товараПродажи (цель)
5000011200150
6000021150180
4500031300130

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

Фактические продажи: 150, 180, 130

Предсказания сети: 148, 175, 133

Ошибка (MSE): 4.33

FAQ: Частые вопросы по нейросетям в Excel

❓ Можно ли в Excel реализовать свёрточную нейросеть (CNN)?

Технически возможно, но крайне неэффективно. Свёрточные слои требуют операций с трёхмерными тензорами (изображения), что в Excel придётся эмулировать через множественные листы и формулы МУМНОЖ для каждого фильтра. Для CNN лучше использовать Python с TensorFlow и интегрировать результаты в Excel через Power Query.

❓ Как сохранить обученную нейросеть для повторного использования?

Скопируйте диапазон с весами на отдельный лист и сохраните файл как .xlsx. Для автоматической загрузки весов при открытии файла используйте VBA-код в событии Workbook_Open:

Private Sub Workbook_Open()

Sheets("Веса").Range("A1:D10").Copy

Sheets("Модель").Range("B2").PasteSpecial xlPasteValues

End Sub

❓ Почему нейросеть в Excel выдаёт одинаковые предсказания для всех входов?

Это типичный симптом исчезающих градиентов или некорректной инициализации весов. Проверьте:

  • Используете ли вы разные начальные веса (например, через =СЛУЧМЕЖДУ(-0.1;0.1)).
  • Применена ли функция активации ко всем слоям (кроме выходного для регрессии).
  • Нормализованы ли входные данные (например, через =НОРМАЛИЗАЦИЯ в Excel 365).
❓ Какие альтернативы Excel для нейросетей подходят начинающим?

Если Excel слишком ограничен, рассмотрите:

  • 📊 Google Sheets + Google Apps Script (бесплатно, но медленнее VBA).
  • 🐍 Python с библиотеками Keras или scikit-learn (рекомендуется для серьёзных задач).
  • 🔧 KNIME или Orange — визуальные инструменты для машинного обучения без кода.
❓ Можно ли обучить нейросеть в Excel на текстовых данных?

Да, но требуется предварительная векторизация текста. Например:

  1. Преобразуйте текст в мешок слов (каждое слово — отдельный признак).
  2. Используйте Power Query для токенизации и подсчёта частот.
  3. Примените TF-IDF (можно реализовать через формулы ЛОГ и СЧЁТЕСЛИ).

Для обработки естественного языка (NLP) Excel не подходит — используйте Python с NLTK или spaCy.