Pull to refresh

Алгоритм обратного распространения ошибки с регуляризацией на c#

Reading time 14 min
Views 83K
.NET *Data Mining *
Привет. Я хочу продолжить тему реализации методов машинного обучения на c#, и в этой статье я расскажу про алгоритм обратного распространения ошибки для обучения нейронной сети прямого распространения, а также приведу его реализацию на языке C#. Особенность данной реализации в том, что реализация алгоритма абстрагирована от реализаций целевой функции (той, которую нейросеть пытается минимизировать) и функции активации нейронов. В итоге получится некий конструктор, с помощью которого можно поиграться с различными параметрами сети и алгоритма обучения, посмотреть и сравнить результат. Предполагается, что вы уже знакомы с тем, что такое искусственная нейросеть (если нет, то настоятельно рекомендую для начала изучить википедию или одну из подобных статей). Интересно? Лезем под кат.

Читать дальше →
Total votes 38: ↑31 and ↓7 +24
Comments 46

Нейронная сеть с SoftMax слоем на c#

Reading time 5 min
Views 62K
.NET *Data Mining *
Привет, в прошлой статье я рассказал про алгоритм обратного распространения ошибки и привел реализацию, не зависящую от функции ошибки и от функции активации нейрона. Было показано несколько простых примеров подмены этих самых параметров: минимизация квадрата Евклидова расстояния и логарифмического правдоподобия для сигмоидной функции и гиперболического тангенса. Данный пост будет логическим продолжение прошлого, в котором я рассмотрю немного нестандартный пример, а именно функцию активации Softmax для минимизации перекрестной энтропии. Эта модель актуальна при задаче классификации, когда необходимо получить на выходе нейросети вероятности принадлежности входного образа одному из не пересекающихся классов. Очевидно, что суммарный выход сети по всем нейронам выходного слоя должен равняться единице (так же как и для выходных образов обучающей выборки). Однако не достаточно просто нормализировать выходы, а нужно заставить сеть моделировать вероятностное распределение, и обучать ее именно этому. Кстати, сейчас на coursera.org идёт курс по нейросетям, именно он помог углубиться в понимание софтмакса, иначе я продолжал бы использовать сторонние реализации.

Читать дальше →
Total votes 17: ↑15 and ↓2 +13
Comments 1

Локальная скорость обучения весов нейронов в алгоритме обратного распространения ошибки

Reading time 3 min
Views 15K
Data Mining *Algorithms *
Привет, в одной из последних лекций по нейронным сетям на курсере речь шла о том, как можно улучшить сходимость алгоритма обратного распространения ошибки в общем, и в частности рассмотрели модель, когда каждый вес нейрона имеет свою собственную скорость обучения (neuron local gain). Я давно хотел реализовать какой нибудь алгоритм, который бы автоматически настраивал бы скорость обучения сети, но все лень руки не доходили, а тут вдруг такой простой и незамысловатый способ. В этой небольшой статье я расскажу про эту модель и приведу несколько примеров того, когда эта модель может быть полезна.

Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Comments 7

Прогресс в разработке нейросетей для машинного обучения

Reading time 3 min
Views 43K
Data Mining *Algorithms *
В пятничном номере NY Times опубликована статья о значительных успехах, который демонстрируют в последние годы разработчики алгоритмов для самообучаемых нейросетей. В глубоких структурах есть несколько скрытых слоёв, которые традиционно тяжело было обучать. Но всё изменилось с использованием стека из машин Больцмана (RBM) для предварительной тренировки. После этого можно удобно перенастраивать веса, применяя метод обратного распространения ошибки (backpropagation). Плюс появление быстрых GPU — всё это привело к существенному прогрессу, который мы наблюдаем в последние годы.

Сами разработчики не делают громких заявлений, чтобы не поднимать ажиотаж вокруг нейросетей — такой, как в 1960-е годы поднялся вокруг кибернетики. Тем не менее, можно говорить о возрождении интереса к исследованиям в этой области.
Читать дальше →
Total votes 87: ↑74 and ↓13 +61
Comments 29

Предобучение нейронной сети с использованием ограниченной машины Больцмана

Reading time 9 min
Views 52K
Data Mining *
Привет. Как и планировалось в прошлом посте об ограниченных машинах Больцмана, в этом будет рассмотрено применение RBM для предобучения обыкновенной многослойной сети прямого распространения. Такая сеть обычно обучается алгоритмом обратного распространения ошибки, который зависит от многих параметров, и пока не существует точного алгоритма выбора этих самых параметров обучения, как и оптимальной архитектуры сети. Разработано множество эвристик, позволяющих сократить пространство поиска, а также методик оценки качества выбранных параметров (например, кросс-валидация). Мало того, оказывается, и сам алгоритм обратного распространения не так уж хорош. Хотя Румельхарт, Хинтон и Вильямс показали сходимость алгоритма обратного распространения (тут еще более математическое доказательство сходимости), но есть небольшой нюанс: алгоритм сходится при бесконечно малых изменениях весов (т.е. при скорости обучения, стремящейся к нулю). И даже это не все. Как правило, этим алгоритмом обучают небольшие сети с одним или двумя скрытыми слоями из-за того, что эффект обучения не доходит до дальних слоев. Далее мы поговорим подробнее о том, почему же не доходит, и применим технику инициализации весов с помощью обученной RBM, которую разработал Джеффри Хинтон.

Читать дальше →
Total votes 38: ↑37 and ↓1 +36
Comments 11

Сверточная нейронная сеть, часть 2: обучение алгоритмом обратного распространения ошибки

Reading time 5 min
Views 80K
Machine learning *
В первой части были рассмотрены: структура, топология, функции активации и обучающее множество. В этой части попробую объяснить как происходит обучение сверточной нейронной сети.

Обучение сверточной нейронной сети


На начальном этапе нейронная сеть является необученной (ненастроенной). В общем смысле под обучением понимают последовательное предъявление образа на вход нейросети, из обучающего набора, затем полученный ответ сравнивается с желаемым выходом, в нашем случае это 1 – образ представляет лицо, минус 1 – образ представляет фон (не лицо), полученная разница между ожидаемым ответом и полученным является результат функции ошибки (дельта ошибки). Затем эту дельту ошибки необходимо распространить на все связанные нейроны сети.
Читать дальше →
Total votes 27: ↑27 and ↓0 +27
Comments 34

Возможно, в мозге найден эквивалент обратного распространения

Reading time 7 min
Views 11K
SkillFactory corporate blog Python *Reading room Popular science Brain
Translation

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

Не прерывая работу нейронов, эта модель позволяет выполнять биологическое обратное распространение, а эффективность реализации нового алгоритма близка к эффективности классического обратного распространения. За подробностями и кодом приглашаем под кат, пока у нас начинается курс по ML и DL.

Читать далее
Total votes 17: ↑14 and ↓3 +11
Comments 19

Почему инициализировать веса нейронной сети одинаковыми значениями (например, нулями) – это плохая идея

Reading time 11 min
Views 10K
Algorithms *Machine learning *Artificial Intelligence
Sandbox

В популярных фреймворках машинного обучения TensorFlow и PyTorch при инициализации весов нейросети используются случайные числа. В этой статье мы попытаемся разобраться, почему для этих целей не используют ноль или какую-нибудь константу.

Кто хочет быстрый и короткий ответ на этот вопрос, вот он: если инициализировать веса нулями, то нейросеть может не обучаться совсем или обучаться плохо.

Кто хочет более развёрнуто узнать, что значит «плохо», может просто перемотать к заключению в конце статьи.

А тем, кто хочет в деталях разобраться с основами обучения нейронных сетей, добро пожаловать в мир математических формул. Мы детально разберём, из-за чего в механизме обучения может произойти «сбой».

Читать далее
Total votes 10: ↑10 and ↓0 +10
Comments 11

Подробно рассматриваем обратное распространение ошибки для простой нейронной сети. Численный пример

Level of difficulty Medium
Reading time 6 min
Views 3.2K
Algorithms *Mathematics *Machine learning *Artificial Intelligence
Sandbox
🤖 Machine learning season

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

Надеемся, что статья будет интересной и полезной для всех, кто приступает к изучению глубинного обучения и нейронных сетей!

Total votes 21: ↑21 and ↓0 +21
Comments 0