{"id":14289,"url":"\/distributions\/14289\/click?bit=1&hash=892464fe46102746d8d05914a41d0a54b0756f476a912469a2c12e8168d8a933","title":"\u041e\u0434\u0438\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043d\u0430 5%, \u0430 \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u043a \u2014 \u043d\u0430 20%","buttonText":"","imageUuid":""}

Нейросеть в Excel

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В диапазоне 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 формулы СРЗНАЧ() для отображения доли правильных ответов.

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

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

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

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

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

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

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

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

0
6 комментариев
Написать комментарий...
Vovan Milos

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

Ответить
Развернуть ветку
NTA
Автор

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

Ответить
Развернуть ветку
Kamshat Tleubergenova

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

Ответить
Развернуть ветку
NTA
Автор

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

Ответить
Развернуть ветку
AlendS

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

Ответить
Развернуть ветку
NTA
Автор

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

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
3 комментария
Раскрывать всегда