сложность обучения нейронной сети

Сложность обучения нейронной сети

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Data Mining – это непосредственная работа с данными и их анализ человеком с использованием своих собственных интеллектуальных ресурсов.

В случае с Data Mining человек сам, как исследователь, занимается этим вопросом и погружается в него. В качестве примерной аналогии здесь можно вспомнить знаменитый фильм «Игры разума», когда главный герой, весь обложенный данными, сидел, думал и разгадывал некий шифр.

Ещё один пример хорошо показывает нам разницу между Data Mining и Machine Learning (Машинное обучение). В то время, когда многие пытались разгадать коды немецкой шифровальной машины «Enigma» вручную, своей головой, английский математик и криптограф Алан Тьюринг создавал машину, которая сама будет разгадывать этот код.

И машина в итоге победила.

Machine Learning – это обучение машины для того, чтобы она решала задачи определенного типа без участия человека.

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

Это тоже пример обычного классического Data Mining.

Machine Learning же – это ситуация, когда мы на этот Data Mining запускаем алгоритм, по которому происходит работа с данными. И именно написанный человеком алгоритм уже находит определенные закономерности, которые нам важно знать о неких данных.

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

Дальше нам важно понимать, что машинное обучение делится на 2 больших класса:

1. Классическое машинное обучение

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

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

В классическом машинном обучении очень велико участие человека.

Например, как писалось распознавание лиц методом классического машинного обучения?

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

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

Т.е. человек самостоятельно продумывал алгоритм, выделяя множество параметров и то, как они соотносятся друг с другом, а дальше уже распознавала машина на основе тех «ориентиров», которые ей дал человек.

2. Нейронные сети

Нейронные сети отличаются от классического машинного обучения тем, что они самообучающиеся. В случае с нейронными сетями человек, например, не пишет алгоритм конкретно под распознавание лиц и т.д.

К примеру, если бы мы писали классическим методом отдельно распознавание лиц и отдельно распознавание кошек и собак, то это были бы категорически разные алгоритмы.

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

Отличие нейронной сети в том, что у неё есть принцип, по которому она обучается, и нам нужно лишь дать ей выборку для обучения, чтобы она сама научилась.

Главное – выбрать правильную архитектуру сети (допустим, для работы с 2-D изображениями), указать, сколько классов объектов мы должны иметь на выходе и дать правильную обучающую выборку.

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

В них будут определенные отличия, но они будут минимальными.

Глубокое Обучение (Deep Learning)

И, наконец, в нейронных сетях выделяют глубокое обучение (Deep Learning).

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

Начнем чуть издалека. Когда нейронная сеть маленькая (без скрытых слоев или с минимальным их количеством), она не способна описать сложные явления и решить сколь-нибудь значимые значимые задачи, и в этом отношении её можно назвать «туповатой».

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

В последнее время именно глубокое обучение становится все более популярным и востребованным, т.к. появляется все больше и больше данных, а также постоянно растут вычислительные мощности.

Важно отметить, что глубокое обучение нужно не всегда.

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

Иными словами, сложность нейронной сети должна соответствовать сложности изучаемого явления.

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

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

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

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

Сразу можно сказать, что перечисленные ниже типы нельзя считать жестко разграниченными – они могут плавно перетекать друг в друга.

1. Распознавание образов (классификация)

— Распознавание лиц
— Распознавание эмоций
— Классификация типов огурцов на конвейере при сортировке и т.д.

2. Регрессия

— Определение возраста по фото
— Прогнозирование курса акций
— Оценка стоимости недвижимости

Например, у нас есть данные об объекте недвижимости, такие как: метраж, количество комнат, тип ремонта, развитость инфраструктуры в окрестностях этого объекта, удаленность от метро и т.д.

3. Прогнозирование временных рядов

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

Например, это задачи по предсказанию:

— Курсов акций, нефти, золота, биткойна
— Изменению процессов в котлах (давление, концентрация тех или иных веществ и т.д.)
— Количества трафика на сайте
— Объемов потребления электроэнергии и т.д.

Даже автопилот Tesla отчасти тоже можно отнести к задаче этого типа, ведь видеоряд следует рассматривать как временной ряд из картинок.

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

Именно поэтому мы сразу отметили тот факт, что не всегда есть четкая граница между разными типами задач.

4. Кластеризация

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

— Выявление классов читателей при email-рассылках
— Выявление классов изображений

Разумеется, люди ведут себя совершенно по-разному: кто-то открывает почти все письма, кто-то не открывает почти ничего.

Кто-то постоянно кликает по ссылкам в письмах, а кто-то просто их читает и кликает крайне редко.

Если передать эти изображения нейронной сети, то, после их анализа, она, к примеру «скажет» нам, что обнаружила 17 различных классов.

Это примеры типичных задач кластеризации.

5. Генерация

Если говорить кратко, то их задача – машинное творчество. Под машинным творчеством подразумевается генерация любого контента:

— Текстов (стихи, тексты песен, рассказы)
— Изображений (в том числе фотореалистичных)
— Аудио (генерация голоса, музыкальных произведений) и т.д.

Кроме того, в этот список можно добавить и задачи трансформации контента:

— раскрашивание черно-белых фильмов в цветные
— изменение сезона в видеоролике (например, трансформация окружающей среды из зимы в лето) и др.

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

Безусловно, есть и некоторые другие типы задач, которые решают нейронные сети, но все основные мы с вами рассмотрели.

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

Мы выделим 5 таких отличий:

1. Самообучение

Косвенно мы уже касались этой момента выше, поэтом сейчас раскроем его чуть больше.

Суть самообучения заключается в том, что мы задаем общий алгоритм, как она будет обучаться, а дальше она сама «понимает», как некое явление или процесс устроены изнутри.

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

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

Одновременно перемещалось 50 смайликов, и они могли замедляться / ускоряться и менять направление своего движения.

В алгоритме мы заложили, что если они вылетают за край экрана или попадают под клик мыши, то «умирают».

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

Это была вероятностная функция, которая отдавала приоритет «рождения» новых смайликов тем, кто прожил дольше всех и минимизировала вероятность появления «потомства» у тех, кто быстро улетел за пределы экрана или попался под клик мыши.

Сразу после запуска программы все смайлики начинают летать хаотично и быстро «умирают», улетая за края экрана.

Проходит буквально 1 минута, и они научаются не «умирать», улетая за правый край экрана, но улетают вниз. Еще через минуту они перестают улетать вниз. Через 5 минут они уже вообще не умирают.

Смайлики разбились на несколько групп: кто-то летал вдоль периметра экрана, кто-то топтался в центре, кто-то нарезал восьмерки, и т.д. При этом мышкой мы их еще не кликали.

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

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

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

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

И они обучились бы этому за те же самые 5-10 минут по тем же принципам генетических алгоритмов.

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

При всем при этом важно иметь компетенцию писать такие генетические алгоритмы и уметь подавать такой сети правильные входные данные.

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

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

На этом с самообучением всё, двигаемся дальше.

2. Требуется обучающая выборка

Нейронным сетям для обучения требуется обучающая выборка. Это главный минус, т.к. обычно нужно собрать много данных.

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

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

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

3. Не требуется понимания явления человеком

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

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

Если в классическом машинном обучении не являясь экспертом в предметной области (например, атомная энергетика, машиностроение, геологические процессы и т.п.) мы вообще не сможем решить задачу, то здесь это вполне реально.

4. Значительно точнее в большинстве задач

Например, аварийность автопилотов Tesla на пробег в 1 млн. км. примерно в 10 раз ниже, чем аварийность обычного водителя.

Точность предсказания медицинских диагнозов по МРТ также выше, чем у специалистов-врачей.

Нейронные сети обыгрывают людей практически в любые игры: шахматы, покер, го, компьютерные игры и т.д.

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

5. Непонятно, как работают внутри

Мы не можем туда влезть и понять, как там все устроено, как она «мыслит». Это все скрыто в весах, в цифрах.

Более или менее «увидеть» то, что происходит внутри возможно, разве что, в сверточных сетях при работе с изображениями, но даже это не позволяет нам получить полной картины.

И Яндекс не может ответить на подобные вопросы, т.к. это решение принимается нейронной сетью, а не чётко прописанным алгоритмом, который можно полностью объяснить.

Да, законы гравитации нам известны, однако предсказать в точности, как именно будет происходить его движение, практически невозможно.

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

Строение биологического нейрона

Для того, чтобы понять, как устроен искусственный нейрон, начнем с того, что вспомним, как функционирует обычная нервная клетка.

Итак, как выглядит нейрон?

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

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

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

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

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

Иными словами, нейромедиатор является неким мостиком между аксоном и множеством дендритов принимающей сигнал клетки.

Если нейромедиатора выбросится много, то сигнал передастся полностью или даже будет усилен. Если же его выбросится мало, то сигнал будет ослаблен, либо вовсе погашен и не передастся другим нейронам.

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

Все наше обучение с самого детства построено именно на этом и образование совсем новых связей происходит достаточно редко.

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

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

В течение жизни они не обучаются. Они рождаются уже умея всё, что они будут уметь в течение жизни.

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

С одной стороны, такая негибкость в плане обучения имеет свои минусы.

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

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

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

Если же это не играет важной роли для сохранения вида, то данная модель поведения так и не будет ими приобретена.

Модель математического нейрона Маккаллока — Питтса

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Обычно при работе математическими нейронами используются следующие обозначения:

X – входные данные
W – веса
H – тело нейрона
Y – выход нейронной сети

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

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

В теле нейрона накапливается взвешенная сумма от перемножения значений входящих сигналов и весов.

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

Если вес нулевой, то влияние одного нейрона на другой отсутствует. Если же вес отрицательный, то идет погашение сигнала в принимающего нейроне.

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

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

Простейший пример классификации 2 объектов

Теперь, когда мы разобрались с общим принципом работы, давайте посмотрим на простейший пример, иллюстрирующий процесс классификации 2 объектов с помощью нейронной сети.

Представим, что нам нужно отличить входной вектор (1,0) от вектора (0,1). Допустим, черное от белого, или белое от черного.

При этом, в нашем распоряжении есть простейшая сеть из 2 нейронов.

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Допустим, что мы зададим верхней связи вес «+1», а нижней – «-1». Теперь, если мы подадим на вход вектор (1,0), то на выходе мы получим 1.

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

Таким образом, наша нейронная сеть может классифицировать 2 разных объекта. Это совсем-совсем примитивный пример.

Обратите внимание на то, что в данном примере мы сами назначаем веса «+1» и «-1», что не совсем неправильно. В действительности они подбираются автоматически в процессе обучения сети.

Обучение нейронной сети – это подбор весов.

Любая нейронная сеть состоит из 2 составляющих:

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

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

Так, например, если мы работаем с генетическими алгоритмами, то в процессе обучения нейронная сеть может менять не только веса, но еще и свою структуру.

Но это скорее исключение, чем правило, поэтому в общем случае под обучением нейронной сети мы будем понимать именно процесс подбора весов.

Источник

Нейронные сети для начинающих. Часть 2

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Добро пожаловать во вторую часть руководства по нейронным сетям. Сразу хочу принести извинения всем кто ждал вторую часть намного раньше. По определенным причинам мне пришлось отложить ее написание. На самом деле я не ожидал, что у первой статьи будет такой спрос и что так много людей заинтересует данная тема. Взяв во внимание ваши комментарии, я постараюсь предоставить вам как можно больше информации и в то же время сохранить максимально понятный способ ее изложения. В данной статье, я буду рассказывать о способах обучения/тренировки нейросетей (в частности метод обратного распространения) и если вы, по каким-либо причинам, еще не прочитали первую часть, настоятельно рекомендую начать с нее. В процессе написания этой статьи, я хотел также рассказать о других видах нейросетей и методах тренировки, однако, начав писать про них, я понял что это пойдет вразрез с моим методом изложения. Я понимаю, что вам не терпится получить как можно больше информации, однако эти темы очень обширны и требуют детального анализа, а моей основной задачей является не написать очередную статью с поверхностным объяснением, а донести до вас каждый аспект затронутой темы и сделать статью максимально легкой в освоении. Спешу расстроить любителей “покодить”, так как я все еще не буду прибегать к использованию языка программирования и буду объяснять все “на пальцах”. Достаточно вступления, давайте теперь продолжим изучение нейросетей.

Что такое нейрон смещения?

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Перед тем как начать нашу основную тему, мы должны ввести понятие еще одного вида нейронов — нейрон смещения. Нейрон смещения или bias нейрон — это третий вид нейронов, используемый в большинстве нейросетей. Особенность этого типа нейронов заключается в том, что его вход и выход всегда равняются 1 и они никогда не имеют входных синапсов. Нейроны смещения могут, либо присутствовать в нейронной сети по одному на слое, либо полностью отсутствовать, 50/50 быть не может (красным на схеме обозначены веса и нейроны которые размещать нельзя). Соединения у нейронов смещения такие же, как у обычных нейронов — со всеми нейронами следующего уровня, за исключением того, что синапсов между двумя bias нейронами быть не может. Следовательно, их можно размещать на входном слое и всех скрытых слоях, но никак не на выходном слое, так как им попросту не с чем будет формировать связь.

Для чего нужен нейрон смещения?

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети
Нейрон смещения нужен для того, чтобы иметь возможность получать выходной результат, путем сдвига графика функции активации вправо или влево. Если это звучит запутанно, давайте рассмотрим простой пример, где есть один входной нейрон и один выходной нейрон. Тогда можно установить, что выход O2 будет равен входу H1, умноженному на его вес, и пропущенному через функцию активации (формула на фото слева). В нашем конкретном случае, будем использовать сигмоид.

Из школьного курса математики, мы знаем, что если взять функцию y = ax+b и менять у нее значения “а”, то будет изменяться наклон функции (цвета линий на графике слева), а если менять “b”, то мы будем смещать функцию вправо или влево (цвета линий на графике справа). Так вот “а” — это вес H1, а “b” — это вес нейрона смещения B1. Это грубый пример, но примерно так все и работает (если вы посмотрите на функцию активации справа на изображении, то заметите очень сильное сходство между формулами). То есть, когда в ходе обучения, мы регулируем веса скрытых и выходных нейронов, мы меняем наклон функции активации. Однако, регулирование веса нейронов смещения может дать нам возможность сдвинуть функцию активации по оси X и захватить новые участки. Иными словами, если точка, отвечающая за ваше решение, будет находиться, как показано на графике слева, то ваша НС никогда не сможет решить задачу без использования нейронов смещения. Поэтому, вы редко встретите нейронные сети без нейронов смещения.

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

ВАЖНО знать, что иногда на схемах не обозначают нейроны смещения, а просто учитывают их веса при вычислении входного значения например:

input = H1*w1+H2*w2+b3
b3 = bias*w3

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

Как сделать чтобы НС давала правильные ответы?

Ответ прост — нужно ее обучать. Однако, насколько бы прост не был ответ, его реализация в плане простоты, оставляет желать лучшего. Существует несколько методов обучения НС и я выделю 3, на мой взгляд, самых интересных:

Что такое градиентный спуск?

Это способ нахождения локального минимума или максимума функции с помощью движения вдоль градиента. Если вы поймете суть градиентного спуска, то у вас не должно возникнуть никаких вопросов во время использования метода обратного распространения. Для начала, давайте разберемся, что такое градиент и где он присутствует в нашей НС. Давайте построим график, где по оси х будут значения веса нейрона(w) а по оси у — ошибка соответствующая этому весу(e).

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Посмотрев на этот график, мы поймем, что график функция f(w) является зависимостью ошибки от выбранного веса. На этом графике нас интересует глобальный минимум — точка (w2,e2) или, иными словами, то место где график подходит ближе всего к оси х. Эта точка будет означать, что выбрав вес w2 мы получим самую маленькую ошибку — e2 и как следствие, самый лучший результат из всех возможных. Найти же эту точку нам поможет метод градиентного спуска (желтым на графике обозначен градиент). Соответственно у каждого веса в нейросети будет свой график и градиент и у каждого надо найти глобальный минимум.

Так что же такое, этот градиент? Градиент — это вектор который определяет крутизну склона и указывает его направление относительно какой либо из точек на поверхности или графике. Чтобы найти градиент нужно взять производную от графика по данной точке (как это и показано на графике). Двигаясь по направлению этого градиента мы будем плавно скатываться в низину. Теперь представим что ошибка — это лыжник, а график функции — гора. Соответственно, если ошибка равна 100%, то лыжник находиться на самой вершине горы и если ошибка 0% то в низине. Как все лыжники, ошибка стремится как можно быстрее спуститься вниз и уменьшить свое значение. В конечном случае у нас должен получиться следующий результат:

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Представьте что лыжника забрасывают, с помощью вертолета, на гору. На сколько высоко или низко зависит от случая (аналогично тому, как в нейронной сети при инициализации веса расставляются в случайном порядке). Допустим ошибка равна 90% и это наша точка отсчета. Теперь лыжнику нужно спуститься вниз, с помощью градиента. На пути вниз, в каждой точке мы будем вычислять градиент, что будет показывать нам направление спуска и при изменении наклона, корректировать его. Если склон будет прямым, то после n-ого количества таких действий мы доберемся до низины. Но в большинстве случаев склон (график функции) будет волнистый и наш лыжник столкнется с очень серьезной проблемой — локальный минимум. Я думаю все знают, что такое локальный и глобальный минимум функции, для освежения памяти вот пример. Попадание в локальный минимум чревато тем, что наш лыжник навсегда останется в этой низине и никогда не скатиться с горы, следовательно мы никогда не сможем получить правильный ответ. Но мы можем избежать этого, снарядив нашего лыжника реактивным ранцем под названием момент (momentum). Вот краткая иллюстрация момента:

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

Как вы уже наверное догадались, этот ранец придаст лыжнику необходимое ускорение чтобы преодолеть холм, удерживающий нас в локальном минимуме, однако здесь есть одно НО. Представим что мы установили определенное значение параметру момент и без труда смогли преодолеть все локальные минимумы, и добраться до глобального минимума. Так как мы не можем просто отключить реактивный ранец, то мы можем проскочить глобальный минимум, если рядом с ним есть еще низины. В конечном случае это не так важно, так как рано или поздно мы все равно вернемся обратно в глобальный минимум, но стоит помнить, что чем больше момент, тем больше будет размах с которым лыжник будет кататься по низинам. Вместе с моментом в методе обратного распространения также используется такой параметр как скорость обучения (learning rate). Как наверняка многие подумают, чем больше скорость обучения, тем быстрее мы обучим нейросеть. Нет. Скорость обучения, также как и момент, является гиперпараметром — величина которая подбирается путем проб и ошибок. Скорость обучения можно напрямую связать со скоростью лыжника и можно с уверенностью сказать — тише едешь дальше будешь. Однако здесь тоже есть определенные аспекты, так как если мы совсем не дадим лыжнику скорости то он вообще никуда не поедет, а если дадим маленькую скорость то время пути может растянуться на очень и очень большой период времени. Что же тогда произойдет если мы дадим слишком большую скорость?

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

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

Что такое Метод Обратного Распространения (МОР)?

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

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

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

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

H1input = 1*0.45+0*-0.12=0.45
H1output = sigmoid(0.45)=0.61

H2input = 1*0.78+0*0.13=0.78
H2output = sigmoid(0.78)=0.69

O1input = 0.61*1.5+0.69*-2.3=-0.672
O1output = sigmoid(-0.672)=0.33

Результат — 0.33, ошибка — 45%.

Так как мы уже подсчитали результат НС и ее ошибку, то мы можем сразу приступить к МОРу. Как я уже упоминал ранее, алгоритм всегда начинается с выходного нейрона. В таком случае давайте посчитаем для него значение δ (дельта) по формуле 1.
сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сетиТак как у выходного нейрона нет исходящих синапсов, то мы будем пользоваться первой формулой (δ output), следственно для скрытых нейронов мы уже будем брать вторую формулу (δ hidden). Тут все достаточно просто: считаем разницу между желаемым и полученным результатом и умножаем на производную функции активации от входного значения данного нейрона. Прежде чем приступить к вычислениям я хочу обратить ваше внимание на производную. Во первых как это уже наверное стало понятно, с МОР нужно использовать только те функции активации, которые могут быть дифференцированы. Во вторых чтобы не делать лишних вычислений, формулу производной можно заменить на более дружелюбную и простую формула вида:
сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети
Таким образом наши вычисления для точки O1 будут выглядеть следующим образом.

O1output = 0.33
O1ideal = 1
Error = 0.45

δO1 = (1 — 0.33) * ( (1 — 0.33) * 0.33 ) = 0.148

На этом вычисления для нейрона O1 закончены. Запомните, что после подсчета дельты нейрона мы обязаны сразу обновить веса всех исходящих синапсов этого нейрона. Так как в случае с O1 их нет, мы переходим к нейронам скрытого уровня и делаем тоже самое за исключение того, что формула подсчета дельты у нас теперь вторая и ее суть заключается в том, чтобы умножить производную функции активации от входного значения на сумму произведений всех исходящих весов и дельты нейрона с которой этот синапс связан. Но почему формулы разные? Дело в том что вся суть МОР заключается в том чтобы распространить ошибку выходных нейронов на все веса НС. Ошибку можно вычислить только на выходном уровне, как мы это уже сделали, также мы вычислили дельту в которой уже есть эта ошибка. Следственно теперь мы будем вместо ошибки использовать дельту которая будет передаваться от нейрона к нейрону. В таком случае давайте найдем дельту для H1:

H1output = 0.61
w5 = 1.5
δO1 = 0.148

δH1 = ( (1 — 0.61) * 0.61 ) * ( 1.5 * 0.148 ) = 0.053

Теперь нам нужно найти градиент для каждого исходящего синапса. Здесь обычно вставляют 3 этажную дробь с кучей производных и прочим математическим адом, но в этом и вся прелесть использования метода подсчета дельт, потому что в конечном счете ваша формула нахождения градиента будет выглядеть вот так:
сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети
Здесь точка A это точка в начале синапса, а точка B на конце синапса. Таким образом мы можем подсчитать градиент w5 следующим образом:

H1output = 0.61
δO1 = 0.148

GRADw5 = 0.61 * 0.148 = 0.09

Сейчас у нас есть все необходимые данные чтобы обновить вес w5 и мы сделаем это благодаря функции МОР которая рассчитывает величину на которую нужно изменить тот или иной вес и выглядит она следующим образом:
сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети
Настоятельно рекомендую вам не игнорировать вторую часть выражения и использовать момент так как это вам позволит избежать проблем с локальным минимумом.

Здесь мы видим 2 константы о которых мы уже говорили, когда рассматривали алгоритм градиентного спуска: E (эпсилон) — скорость обучения, α (альфа) — момент. Переводя формулу в слова получим: изменение веса синапса равно коэффициенту скорости обучения, умноженному на градиент этого веса, прибавить момент умноженный на предыдущее изменение этого веса (на 1-ой итерации равно 0). В таком случае давайте посчитаем изменение веса w5 и обновим его значение прибавив к нему Δw5.

E = 0.7
Α = 0.3
w5 = 1.5
GRADw5 = 0.09
Δw5(i-1) = 0

Δw5 = 0.7 * 0.09 + 0 * 0.3 = 0.063
w5 = w5 + Δw5 = 1.563

Таким образом после применения алгоритма наш вес увеличился на 0.063. Теперь предлагаю сделать вам тоже самое для H2.

GRADw6 = 0.69 * 0.148 = 0.1

Δw6 = 0.7 * 0.1 + 0 * 0.3 = 0.07

И конечно не забываем про I1 и I2, ведь у них тоже есть синапсы веса которых нам тоже нужно обновить. Однако помним, что нам не нужно находить дельты для входных нейронов так как у них нет входных синапсов.

Теперь давайте убедимся в том, что мы все сделали правильно и снова посчитаем выход НС только уже с обновленными весами.

H2input = 1 * 0.73 + 0 * 0.124 = 0.73
H2output = sigmoid(0.73) = 0.675

Результат — 0.37, ошибка — 39%.

Как мы видим после одной итерации МОР, нам удалось уменьшить ошибку на 0.04 (6%). Теперь нужно повторять это снова и снова, пока ваша ошибка не станет достаточно мала.

Что еще нужно знать о процессе обучения?

Нейросеть можно обучать с учителем и без (supervised, unsupervised learning).

Обучение с учителем — это тип тренировок присущий таким проблемам как регрессия и классификация (им мы и воспользовались в примере приведенном выше). Иными словами здесь вы выступаете в роли учителя а НС в роли ученика. Вы предоставляете входные данные и желаемый результат, то есть ученик посмотрев на входные данные поймет, что нужно стремиться к тому результату который вы ему предоставили.

Обучение без учителя — этот тип обучения встречается не так часто. Здесь нет учителя, поэтому сеть не получает желаемый результат или же их количество очень мало. В основном такой вид тренировок присущ НС у которых задача состоит в группировке данных по определенным параметрам. Допустим вы подаете на вход 10000 статей на хабре и после анализа всех этих статей НС сможет распределить их по категориям основываясь, например, на часто встречающихся словах. Статьи в которых упоминаются языки программирования, к программированию, а где такие слова как Photoshop, к дизайну.

Существует еще такой интересный метод, как обучение с подкреплением (reinforcement learning). Этот метод заслуживает отдельной статьи, но я попытаюсь вкратце описать его суть. Такой способ применим тогда, когда мы можем основываясь на результатах полученных от НС, дать ей оценку. Например мы хотим научить НС играть в PAC-MAN, тогда каждый раз когда НС будет набирать много очков мы будем ее поощрять. Иными словами мы предоставляем НС право найти любой способ достижения цели, до тех пор пока он будет давать хороший результат. Таким способом, сеть начнет понимать чего от нее хотят добиться и пытается найти наилучший способ достижения этой цели без постоянного предоставления данных “учителем”.

Также обучение можно производить тремя методами: стохастический метод (stochastic), пакетный метод (batch) и мини-пакетный метод (mini-batch). Существует очень много статей и исследований на тему того, какой из методов лучше и никто не может прийти к общему ответу. Я же сторонник стохастического метода, однако я не отрицаю тот факт, что каждый метод имеет свои плюсы и минусы.

Вкратце о каждом методе:

Стохастический (его еще иногда называют онлайн) метод работает по следующему принципу — нашел Δw, сразу обнови соответствующий вес.

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

Мини-пакетный метод является золотой серединой и пытается совместить в себе плюсы обоих методов. Здесь принцип таков: мы в свободном порядке распределяем веса по группам и меняем их веса на сумму Δw всех весов в той или иной группе.

Что такое гиперпараметры?

Гиперпараметры — это значения, которые нужно подбирать вручную и зачастую методом проб и ошибок. Среди таких значений можно выделить:

Что такое сходимость?

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети
Сходимость говорит о том, правильная ли архитектура НС и правильно ли были подобраны гиперпараметры в соответствии с поставленной задачей. Допустим наша программа выводит ошибку НС на каждой итерации в лог. Если с каждой итерацией ошибка будет уменьшаться, то мы на верном пути и наша НС сходится. Если же ошибка будет прыгать вверх — вниз или застынет на определенном уровне, то НС не сходится. В 99% случаев это решается изменением гиперпараметров. Оставшийся 1% будет означать, что у вас ошибка в архитектуре НС. Также бывает, что на сходимость влияет переобучение НС.

Что такое переобучение?

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

сложность обучения нейронной сети. Смотреть фото сложность обучения нейронной сети. Смотреть картинку сложность обучения нейронной сети. Картинка про сложность обучения нейронной сети. Фото сложность обучения нейронной сети

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *