Как стать автором
Обновить

Комментарии 27

Спасибо за хорошую обзорную статью! Виртуально ставлю плюсик. Было бы интересно почитать, что ещё нужно знать для написания "распознавалки" (как раскрытие вашей фразы "однако даже после столь внимательного погружения в материал и прояснения каждой его части я не уверен, что смогу написать что-то похожее, например распознавалку знаков, без заглядывания в книгу").

Тут, в общем-то, все, что нужно. Здесь представлен именно пример нейросети для распознания символов. В книге была еще одна часть, посвященная работе с питоном.

Я же имел в виду просто уровень усвоения информации и общую картину в голове. Думаю, мне нужно перечитать собственную статью еще пару раз, чтобы от зубов отскакивало)

Интересно, а есть какой-то быстрый способ или хак вычисления сигмоиды для целочисленных параметров, с помощью комбинации битовых операций? Ведь по сути здесь не нужна плавающая точка, входное значение вместо -1..+1 представить как -128..+127 (для байта) или подобными значениями для слова и двойного слова, а выходное - unsigned значением такого же типа (0..255).

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

Но ещё лучше будет использовать ReLU. Они проще вычисляются и ускоряют обучение.

Идея сигмоиды в том, чтобы значение на выходе не превышало заданных границ, даже если на входе ± бесконечность. Сигмоидальных функций миллион, к ним и арктангенс относится, и всякие менее известные типа x/sqrt(1+x*x).

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

Если же говорить о хаке типа «быстрый обратный квадратный корень», то в современных процессорах в нём нет смысла, sqrt они умеют выполнять за одну инструкцию. А так, по идее, должно быть можно, просто никто не пробовал.

Благодарю, добавил в закладки. Функция сглаживания (сигмоида) - это из нечеткой логики?

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

Ну зачем ещё одна "общевводная статься о том, что сто-пятьсот раз описано в Сети". Если вы одолели только то, что написали в статье, то вы ничего не поняли. Сейчас это уровень, наверное, можно сопоставить с подготовительной группой в садике.
Неужели нельзя копнуть хоть чуть-чуть дальше? Свертки, например, рассмотреть? Разобраться, как их обучение работает.

Какой бы тривиальной вам не казалась эта тема - она не простая. Просто вы не входите в ЦА, вы это уже знаете.

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

Теперь, после десяти минут матана, можно и свертки рассмотреть)

Ну а мне хороша зашла ваша статья. Буду ждать еще от вас такие же по сверточным :)

Статьи на эту тему выходят регулярно и уже выходили 100500 раз. Настолько же регулярно авторы останавливаются на перцептронах и на обратном распространении ошибки (эта идея примерно из 1940х-1950х), ничего не рассказывая о современных наработках.

На практике применение нейросетей начинается сейчас с какого-нибудь Keras, TensorFlow или Pytorch, которые имеют в основе удобное построение графа вычислений и автоматическое дифференцирование функции, заданной этим графом. Наверно, из-за такой автоматизации и начался бум нейросетей лет 7-8 назад. И наверно, сейчас про эти вещи знают примерно все.

Статьи про перцептроны бесполезны сейчас чуть более чем полностью.

То есть, если спросить у вас как высчитывается градиент для обратного распространения ошибки, вы бы легко дали ответ?

Если бы я нашел статью, пересказывающую ту книгу и все мелкие детали, я бы не стал ее писать.

Я помню, что градиент считается как dE/dw, а дальше идёт матричное дифференцирование. Но это теория. На практике градиент автоматически считает библиотека типа Keras, причём она считает производные для всех слоёв. Практика здесь далеко ушла от базовой теории - руками градиенты считать не нужно, поэтому базовая теория сейчас малополезна.

Поиск по тегу "перцептрон" даёт штук 8 таких начальных статей, но мне кажется, что их больше (можно посмотреть по другим ключевым словам). Я такие комментарии по поводу перцептронов уже несколько раз писал, эта тема очень проста, вот и всплывает периодически. И это только на Хабре.

Кстати, а сеть то на первой схеме НЕ ПОЛНОСВЯЗНАЯ, несмотря на описание

Тоже сразу подумал про коробки)

Так это была просто иллюстрация. Каждый нейрон должен быть связан со всеми нейронами соседнего уровня.

Ошибка в статье. В разборе "Обратного распространения ошибки с нескольких слоев" сказано, что "o1 высчитывается из узлов первого слоя с помощью связей w11 и w12". Разве о1 не должно высчитываться из узлов первого слоя с помощью связей w11 и w21 , которые и корректируются с помощью ошибки этого узла (указано на рисунке).

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

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

Про сверточные сети планируете написать?

Некоторые картинки слишком пересвечены, перескантровать бы.

Как мы видим, o1 высчитывается из узлов первого слоя с помощью связей w11 и w12

Тут опечатка. Должно быть: "Как мы видим, o1 высчитывается из узлов первого слоя с помощью связей w11 и w21 "

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории