Нейросеть в Excel

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

Однако создать свою нейросеть можно даже не имея знаний о языках программирования, и используя простейший инструмент, знакомый любому офисному сотруднику – MS Excel.

Схематично моя будущая нейросеть выглядит так:

Нейросеть в Excel

Это упрощенная схема перцептрона. Перцептрон – простейший вид нейронных сетей, в основе которых лежит математическая модель восприятия информации мозгом, состоящая из сенсоров, ассоциативных и реагирующих элементов. На вход подаются значения признаков, которые могут быть равны 0 или 1. Строгая бинарность обусловлена тем, что признаки – это, своего рода, сенсоры, и они могут находиться либо в состоянии покоя (равны 0), либо в состоянии возбуждения (равны 1). Затем эти признаки умножатся на вес и суммируются. После при помощи функции активации (сигмоиды) получаю значения на выходе от 0 до 1. Таким образом, главной задачей является нахождение весов, обеспечивающих наиболее точное прогнозирование.

Представлю, что требуется по определенному набору признаков научить нейросеть определять является ли животное домашней кошкой или нет.

Нейросеть в Excel

В датасете имеется 9 признаков, если экземпляр им обладает, то ставится 1, если нет, то 0. Целевой столбец назван «Выход»: 1 – значит экземпляр кошка, 0 – не кошка. В идеале нейросеть должна предсказать 1 для всех кошек и 0 для всех не кошек.

Первый шаг – создание таблицы поиска весов для каждого признака:

Нейросеть в Excel

В диапазоне M3:U2 генерирую случайные величины весов при помощи формулы СЛЧИС().

Далее создаю столбцы для Bias (смещение) и Output (предсказание модели):

Нейросеть в Excel

Формула в ячейке W3:

=B3*M3+C3*N3+D3*O3+E3*P3+F3*Q3+G3*R3+H3*S3+I3*T3+J3*U3

Нейросеть в Excel

Протягиваю формулу до ячейки W14.

Bias – нейрон смещения. Простыми словами, это дополнительная информация о природе данных для модели, способ показать модели, «в какую сторону думать».

Формула в ячейке output – функция сигмоиды:

=ЕСЛИ(Bias=0;0;1/(1+(EXP(-Bias))))

Нейросеть в Excel

Данная функция необходима для интерпретации значения bias. Мне нужно получить значения от 0 до 1. Output – предсказание модели. Если значение меньше 0.5, то экземпляр не является кошкой, если больше, то является.

Создаю таблицу для корректировки весов:

Нейросеть в Excel

В ячейке Z3 следующая формула:

=($K3-$X3)*B3*$X3*(1-$X3)

Протягиваю её на весь диапазон Z1:AH14

Возвращаюсь в блок с весами: в ячейку М4 прописываю формулу: =M3+Z3

Протягиваю её на диапазон M4:U14:

Нейросеть в Excel

В диапазоне AJ3:AJ14 пишу формулу: =ЕСЛИ(X3<0,5;0;1) – если значение в столбце Output больше, либо равно 0.5, то модель предполагает, что в строке домашняя кошка.

В диапазоне AK3:AK14 пишу формулу: =ЕСЛИ(K3=1;ЕСЛИ(AJ3=K3;1;0);»») – проверяю правильно ли модель предсказала домашнюю кошку.

В диапазоне AL3:AL14 пишу формулу: =ЕСЛИ(K3=0;ЕСЛИ(AJ3=K3;1;0);»»)– проверяю правильно ли модель предсказала не домашнюю кошку.

В ячейках AK15 и AL15 формулы СРЗНАЧ() для отображения доли правильных ответов.

Нейросеть в Excel

На рисунке видно, что на данный момент модель считает все записи домашними кошками (цифра 1 в столбце «Предсказание»).

Копирую диапазон M14:U14 и вставляю значения в диапазон M3:U3:

Нейросеть в Excel

Смотрю результат:

Нейросеть в Excel

Теперь модель не все записи считает домашними кошками, но результат пока ещё не лучший.

Совершаю ещё несколько итераций. Копирую диапазон M14:U14 и вставляю значения в диапазон M3:U3. В таблице ниже видно, как менялись предсказания после каждого цикла:

Нейросеть в Excel

В итоге, моя нейросеть после восьми итераций верно предсказала значения для всех строк.

Используя полученные веса из диапазона M14:U14, можно проверять другие комбинации признаков, и модель будет предсказывать является ли представленная строка домашней кошкой или нет.

Нейросеть в Excel

Видно, что модель неидеальна, так как неверно предсказала рысь. Зато манула она определила верно, несмотря на то, что он больше походит на домашнюю кошку, чем рысь. На самом деле 100%-я точность для нейросетей невозможна, поэтому полученный результат можно считать неплохим. На практике использование MS Excel для задач машинного обучения — не очень хорошая идея, так как он не может работать с большим объемом данных, да и создан совершенно для другого. Однако, используя методы, представленные в посте, можно самостоятельно «поиграть» с данными, что поможет понять базовые принципы работы нейросетей.

1818
6 комментариев

Недавно довольно поверхностно узнал, как работают нейросети, сразу подумал об экселе, ведь в нём можно делать слои из строк/столбцов, присваивать веса ячейкам и вычислять значения. Отогнал эту мысль, а сейчас опять вспомнил, уже всерьёз. Очень оказываешься рад, когда узнаёшь, что не один такой чокнутый.
Сделал своё подобие сего шедевра, тоже сразу одни единички на выход выдал, после первой итерации ничего не поменялось, после второй 1 неправильный ответ, после 5-ой и т.д. сразу стал угадывать!
P.S. в ячейку W3 можно было написать СУМПРОИЗВ, а в AJ3 — ОКРУГЛ, так вроде проще.

Автор

Отлично! И спасибо за уточнение 💪🏻

Здравствуйте. как можно скачать эту работу?

Автор

Здравствуйте, пришлите в личные сообщения адрес почты, пришлем вам xlsx

Добрый день! Я сама учитель математики и классный руководитель. Сейчас стоит задача наиболее доступным способом показать детям логику нейронных сетей, так как это проект школьный. Наткнулась на вашу статью. Я разобралась, что веса умножаются на признаки, а потом нормализуются, но Вы не могли бы разъяснить суть формулы и ее логику вставки в таблицу корректировки весов =($K3-$X3)*B3*$X3*(1-$X3) в таблице корректировки весов. Спасибо.

Автор

Здравствуйте!
Формула определяет величину смещения для веса Bn в зависимости от результата вывода модели в текущей итерации.
Если простым языком, то на сколько нужно изменить вес признака в зависимости от ответа модели.
Сама формула в ячейке – это корректировка веса с помощью градиента сигмоиды = ошибка * значение_признака * предсказание_модели * (1 – предсказание_модели),
где ошибка = реальное_значение (кошка/не кошка) минус предсказание модели ($K3-$X3)
значение признака – это B3
предсказание_модели * (1 минус предсказание_модели) - это градиент функции:
предсказание_модели – это $X3
Градиент функции показывает как быстро функция меняется в разных направлениях.