No Image

Элементарное введение в технологию нейронных сетей

СОДЕРЖАНИЕ
0 просмотров
11 марта 2020

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

ПРЕДИСЛОВИЕ К РУССКОМУ ИЗДАНИЮ

1 ВВЕДЕНИЕ В ЕСТЕСТВЕННЫЕ И ИСКУССТВЕННЫЕ НЕЙРОННЫЕ СЕТИ
1.1. Для чего нужно изучать нейронные сети?
1.2. Что было известно о мозге к началу построения первых нейронных сетей?
1.3. Как создавались первые нейронные сети?
1.4. Почему нейронные сети обладают многослойной структурой?
1.5. Насколько первые нейронные сети были похожи на биологический мозг?
1.6. Какими методами сегодня исследуется мозг, и могут ли нейронные сети помочь в познании тайн человеческого мышления?
1.7. Насколько нейронные сети проще биологических объектов?
1.8. Каковы главные достоинства нейронных сетей?
1.9. Кто и для чего применяет нейронные сети сегодня?
1.10. Смогут ли нейронные сети вытеснить современные компьютеры?
1.11. Может быть, и не надо заниматься нейронными сетями?
1.12. Контрольные вопросы и задания для самостоятельного выполнения

2 СТРУКТУРА НЕЙРОННОЙ СЕТИ
2.1. Как устроена нейронная сеть?
2.2. Как можно изготовить искусственный нейрон?
2.3. Почему не используется точная модель биологического нейрона?
2.4. Как функционирует сеть, состоящая из

искусственных нейронов?
2.5. Как влияет структура нейронной сети на

выполняемые ею функции?
2.6. Как "по-умному" выбирать структуру сети?
2.7. Какой информацией надо "потчевать" сеть?
2.8. Как объяснить сети, где живет слон?
2.9. Как интерпретировать результаты функционирования сети?
2.10. Что лучше получить от сети

— число или решение?
2.11. Что лучше иметь — одну сеть с несколькими выходами или несколько сетей с одним выходом?
2.12. Что скрывается в "скрытых" слоях?
2.13. Сколько потребуется нейронов для

построения хорошей сети?
2.14. Контрольные вопросы и задания для

3 ОБУЧЕНИЕ НЕЙРОННОЙ СЕТИ
3.1. Кто такой учитель, который будет обучать сеть?
3.2. Может ли сеть обучаться самостоятельно?
3.3. Где и как нейронные сети накапливают полученные знания?
3.4. Как организовать обучение сети?
3.5. Почему это иногда не получается?
3.6. Для чего используется момент?
3.7. С чего начинать обучение нейронной сети?
3.8. Как долго надо обучать сеть?
3.9. Как обучать скрытые слои?
3.10. Каким образом сеть может самообучаться?
3.11. Как проводить самообучение сети?
3.12. Контрольные вопросы и задания для самостоятельного выполнения

4 ФУНКЦИОНИРОВАНИЕ ПРОСТЕЙШЕЙ НЕЙРОННОЙ СЕТИ
4.1. Как перейти от теории к практике, или как использовать программы, предназначенные для читателей этой книги?
4.2. Чего можно ожидать от единственного нейрона?
4.3. Что еще можно наблюдать в ходе экспериментов?
4.4. Как справиться с большим количеством входов нейрона?
4.5. Как ведет себя простая линейная нейронная сеть?
4.6. Как построить простую линейную нейронную сеть?
4.7. Как использовать представленную нейронную сеть?
4.8. Как и для чего в нейронную сеть вводится конкуренция?
4.9. Как еще можно использовать нейронную сеть?
4.10. Контрольные вопросы и задания для самостоятельного выполнения

5 ОБУЧЕНИЕ ПРОСТЫХ ЛИНЕЙНЫХ ОДНОСЛОЙНЫХ НЕЙРОННЫХ СЕТЕЙ
5.1. Как построить обучающую выборку?
5.2. Как можно обучать одиночный нейрон?
5.3. Может ли нейрон обладать врожденными способностями?
5.4. Насколько строго надо обучать нейрон?
5.5. Как обучать простую сеть?
5.6. Каковы возможности применения таких простых нейронных сетей?
5.7. Может ли сеть научиться фильтровать сигналы?
5.8. Контрольные вопросы и задания для самостоятельного выполнения

6 НЕЛИНЕЙНЫЕ НЕЙРОННЫЕ СЕТИ
6.1. Зачем нужны нелинейности в сети?
6.2. Как функционирует нелинейный нейрон?
6.3. Как функционирует сеть, состоящая из нелинейных нейронов?
6.4. Как представить функционирование нелинейных нейронов?
6.5. Каковы возможности многослойной нелинейной сети?
6.6. Как протекает обучение нелинейного нейрона?
6.7. Какие исследования можно проводить в процессе обучения нейрона?
6.8. Контрольные вопросы и задания для самостоятельного выполнения

7 ОБРАТНОЕ РАСПРОСТРАНЕНИЕ
7.1. Что называется обратным распространением?
7.2. Как изменять "порог" нелинейной функции активации нейрона?
7.3. Какая форма нелинейной функции активации нейрона применяется наиболее часто?
7.4. Как функционирует многослойная сеть, состоящая из нелинейных нейронов?
7.5. Как можно обучать многослойную сеть?
7.6. Что надо наблюдать в процессе обучения многослойной сети?
7.7. Контрольные вопросы и задания для самостоятельного выполнения

8 ФОРМЫ ОБУЧЕНИЯ НЕЙРОННЫХ СЕТЕЙ
8.1. Как использовать многослойную нейронную сеть для распознавания образов?
8.2. Как запрограммировать нейронную сеть для распознавания образов?
8.3. Как выбирать структуру нейронной сети в ходе экспериментов?
8.4. Как подготовить задачу распознавания образов?
8.5. Какие формы обучения можно наблюдать в сети?
8.6. Что еще можно наблюдать в исследуемой сети?
8.7. Контрольные вопросы и задания для самостоятельного выполнения

9 НЕЙРОННЫЕ СЕТИ С САМООБУЧЕНИЕМ
9.1. На чем основана идея самообучения сети?
9.2. Как протекает длительное самообучение сети?
9.3. Можно ли успехи самообучения считать повышением интеллекта сети?
9.4. На что еще надо обратить внимание в процессе самообучения сети?
9.5. "Мечты" и "фантазии", возникающие при самообучении сети
9.6. Запоминание и забывание
9.7. Все ли входные данные приводят к самообучению сети?
9.8. Что может дать введение конкуренции в сеть?
9.9. Какие формы принимает самообучение с конкуренцией?
9.10. Контрольные вопросы и задания для самостоятельного выполнения

10 СЕТИ С САМООРГАНИЗАЦИЕЙ
10.1. Структура нейронной сети, функционирующей по принципу самоорганизации
10.2. На чем основана самоорганизация и для чего она может пригодиться?
10.3. Как определяется соседство в сети?
10.4. Что следует за признанием какого-либо нейрона соседом?
10.5. Что могут сети Кохонена?
10.6. Как ведут себя сети Кохонена при обработке более сложных данных?
10.7. Что происходит в сети при слишком широком распределении начальных значений весов?
10.8. Можно ли изменять форму самоорганизации в процессе самообучения сети?
10.9. Ну и для чего все это может пригодиться?
10.10. Как можно использовать сеть в качестве инструмента для преобразования размерности пространства входных сигналов?
10.11. Контрольные вопросы и задания для самостоятельного выполнения

Читайте также:  Монитор samsung 34 c34h890wji обзор

11 РЕКУРРЕНТНЫЕ СЕТИ
11.1. Что такое рекуррентная нейронная сеть?
11.2. Каковы свойства сетей с обратной связью?
11.3. Кому нужны такие сети с петлями?
11.4. Какова структура сети Хопфилда?
11.5. Как нейронная сеть играет роль ассоциативной памяти?
11.6. Как работает программа, позволяющая тебе самостоятельно исследовать функционирование сети Хопфилда?
11.7. Несколько интересных примеров
11.8. Как и для чего можно использовать автоматическую генерацию эталонов для сети Хопфилда?
11.9. Какие исследования можно проводить с применением ассоциативной памяти?
11.10. Что еще можно наблюдать в ассоциативной памяти?
11.11. Контрольные вопросы и задания для самостоятельного выполнения

Приложение 1. Математическая модель нейрона
Приложение 2. Линейные и нелинейные нейроны
Приложение 3. Математические функции, часто используемые в нелинейных нейронах
Приложение 4. Какова роль "учителя" при обучении нейронной сети?
Приложение 5. Элементы технологии самообучения сети
Приложение 6. Технология обучения, применяемая в нейронных сетях
Приложение 7. Ускорение процесса обучения
Приложение 8. Обучение многослойных сетей методом обратного распространения ошибки
Приложение 9. Обучение сети как минимизация функции погрешности

Ищу книжку Рышард Тадеусевич, Барбара Боровик "Элементарное введение в технологию нейронных сетей с примерами программ", не нашел ни в электронном виде, ни в бумажном .

поделитесь, если есть в электронном .

Дубликаты не найдены

Твоя книга на английском вот на русском в формате djvi

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

Тоже ищу, спасибо.

Слушай а может ты в бумаге и в Москве найдешь oracle exam guide 1Z0-047?

не дешевая это да, спасибо за труд! На озоне нет в наличии перманентно, уже с месяц назад подписался (типо сообщат когда появится в наличии). 10к это перебор, новая на амазоне в районе 60$, но эт все за бугром + доставка.

Еще раз спасибо большое

Не, электронка есть, но блин неудобно что капец, по этой причине и в поисках физической версии

Да, образы находи на каком то трекере. Спасибо.

@PropH , @Forsunkin , Ребята а не скините ссылочку откуда качали в электронном виде (если можно то и ссылку на диски). Ну или кудато выложите, если можно. Буду ооочень благодарен!

@PropH , Огромное спасибо, качаю. А Вы не сдавали данный экзамен? Интересует актуальность данной книги для подготовки, все таки она 2010 года, а мне нада подготовиться до конца сентября.

на я.д и ссыль сюда)

Не книга, но могу посоветовать достаточно простой, но интересный курс на степике – https://stepic.org/course/%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%.

Не слушайте его, он его просто не проходил)

Пока вот этот курс не прослушаете

Даже не заходите на степик

Читайте лучше Хайкина "Нейронные сети. Полный курс". Вполне доступно объясняется

я на озоне ее покупал в бумаге

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

Так. А где актуальная ссылка-то?

Ссылку в студию, достало читать ароматизаторы

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

Искусственные нейронные сети сейчас находятся на пике популярности. Можно задаться вопросом, сыграло ли громкое название свою роль в маркетинге и применении этой модели. Я знаю некоторых бизнес-менеджеров, радостно упоминающих об использовании в их продуктах «искусственных нейронных сетей» и «глубокого обучения». Так ли рады были бы они, если бы их продукты использовали «модели с соединёнными кругами» или «машины „совершишь ошибку — будешь наказан“»? Но, вне всяких сомнений, искусственные нейросети — стоящая вещь, и это очевидно благодаря их успеху во множестве областей применения: распознавание изображений, обработка естественных языков, автоматизированный трейдинг и автономные автомобили. Я специалист по обработке и анализу данных, но раньше не понимал их, поэтому чувствовал себя мастером, не освоившим свой инструмент. Но наконец я выполнил своё «домашнее задание» и написал эту статью, чтобы помочь другим преодолеть те же самые препятствия, которые встретились мне в процессе моего (всё ещё продолжающегося) обучения.

Код на R для примеров, представленных в этой статье, можно найти здесь в Библии задач машинного обучения. Кроме того, после прочтения этой статьи стоит изучить часть 2, Neural Networks – A Worked Example, в которой приведены подробности создания и программирования нейросети с нуля.

Мы начнём с мотивирующей задачи. У нас есть набор изображений в градациях серого, каждое из которых является сеткой пикселей 2×2, в которой каждый пиксель имеет значение яркости от 0 (белый) до 255 (чёрный). Наша цель — создать модель, которая будет находить изображения с паттерном «лестницы».

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

Предварительная обработка

В каждом изображении мы помечаем пиксели $inline$x_<1>$inline$ , $inline$x_<2>$inline$ , $inline$x_<3>$inline$ , $inline$x_<4>$inline$ и генерируем входной вектор $inline$x=eginx_<1>&x_<2>&x_<3>&x_<4>end$inline$ , который будет являться входными данными нашей модели. Мы ожидаем, что наша модель будет прогнозировать True (изображение содержит паттерн лестницы) или False (изображение не содержит паттерна лестницы).

ImageId x1 x2 x3 x4 IsStairs
1 252 4 155 175 TRUE
2 175 10 186 200 TRUE
3 82 131 230 100 FALSE
498 36 187 43 249 FALSE
499 1 160 169 242 TRUE
500 198 134 22 188 FALSE
Читайте также:  Лучшие паяльные станции 2018

Однослойный перцептрон (итерация модели 0)

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

$$display$$f(x)= <egin1 &< ext> w_1x_1 + w_2x_2 + w_3x_3 + w_4x_4 > threshold\ 0 & < ext> end>$$display$$

Давайте выразим это иначе

Здесь $inline$hat$inline$ — наша оценка прогноза.

Графически мы можем представить перцептрон как входные узлы, передающие данные выходному узлу.

Для нашего примера мы построим следующий перцептрон:

Вот как будет работать перцептрон на некоторых из обучающих изображений.

Это определённо лучше случайных догадок и имеет здравый смысл. У всех паттернов лестниц есть в нижнем ряду тёмные пиксели, что создаёт большие положительные коэффициенты $inline$x_<3>$inline$ и $inline$x_<4>$inline$ . Тем не менее, в этой модели есть очевидные проблемы.

  1. Модель выдаёт на выходе действительное число, значение которого коррелирует с концепцией похожести (чем больше значение, тем выше вероятность того, что на изображении есть лестница), но нет никакой основы для интерпретации этих значений как вероятностей, потому что они могут находиться вне интервала [0, 1].
  2. Модель не может ухватить нелинейные взаимосвязи между переменными и целевым значением. Чтобы убедиться в этом, рассмотрим следующие гипотетические сценарии:

Случай A

Начнём с изображения x = [100, 0, 0, 125]. Увеличим $inline$x_<3>$inline$ с 0 до 60.

Случай B

Начнём с предыдущего изображения, x = [100, 0, 60, 125]. Увеличим $inline$x_<3>$inline$ с 60 до 120.

Интуитивно понятно, что случай A должен гораздо сильнее увеличить $inline$hat$inline$ , чем случай B. Однако поскольку наша модель перцептрона является линейным уравнением, то прирост +60 $inline$x_<3>$inline$ в обоих случаях приведёт к приросту +0.12 $inline$hat$inline$ .

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

Однослойный перцептрон с сигмоидной функцией активации (итерация модели 1)

Мы можем решить проблемы 1 и 2, обернув наш перцептрон в сигмоиду (с последующим выбором других весов). Стоит напомнить, что функция «сигмоида» — это S-образная кривая, ограниченная по вертикальной оси между 0 и 1, благодаря чему она часто используется для моделирования вероятности двоичного события.

В соответствии с этой мыслью, мы можем дополнить нашу модель следующим изображением и уравнением.

$$display$$z = w cdot x = w_1x_1 + w_2x_2 + w_3x_3 + w_4x_4$$display$$

Выглядит знакомо? Да, это наша старая подруга, логистическая регрессия. Однако она хорошо послужит нам для интерпретации модели как линейного перцептрона с сигмоидной функцией активации, потому что это даёт нам больше возможностей для более общего подхода. Кроме того, поскольку мы теперь можем интерпретировать $inline$hat$inline$ как вероятность, то нам нужно соответствующим образом изменить правило принятия решений.

Продолжим с нашим примером задачи и будем считать, что у нас получилась следующая подобранная модель:

$$display$$egin w_1 & w_2 & w_3 & w_4 end = egin -0.140 & -0.145 & 0.121 & 0.092 end$$display$$

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

Нам определённо удалось решить проблему 1. Посмотрите, как она решает и проблему 2.

Случай A

Начнём с изображения [100, 0, 0, 100]. Увеличим $inline$x_3$inline$ " с 0 до 50.

Случай B

Начнём с изображения [100, 0, 50, 100]. Увеличим $inline$x_3$inline$ " с 50 до 100.

Заметьте, как кривизна сигмоиды заставляет случай A «сработать» (быстро увеличиться) с увеличением $inline$z = w cdot x$inline$ , но темп замедляется при продолжении увеличения $inline$z$inline$ . Это соответствует нашему интуитивному пониманию, что случай A должен отражать бОльшее увеличение вероятности паттерна лестницы, чем случай B.

К сожалению, эта модель по-прежнему имеет проблемы.

  1. $inline$widehat y$inline$ имеет монотонную связь с каждой переменной. А что если нам нужно распознавать лестницы более светлого оттенка?
  2. Модель не учитывает взаимодействие переменных. Предположим, что нижний ряд изображения чёрный. Если верхний левый пиксель белый, то затемнение верхнего правого пикселя должно увеличить вероятность паттерна лестницы. Если верхний левый пиксель чёрный, то затенение верхнего правого пикселя должно снижать вероятность лестницы. Другими словами, увеличение $inline$x_3$inline$ должно потенциально приводить к увеличению или уменьшению $inline$widehat y$inline$ , в зависимости от значений других переменных. В нашей текущей модели этого никак не достичь.

Многослойный перцептрон с сигмоидной функцией активации (итерация модели 2)

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

Пример 1: распознавание паттерна лестницы

Другой вариант

  1. Построим модель, срабатывающую, когда нижний ряд тёмный, $inline$widehat y_1$inline$
  2. Построим модель, срабатывающую, когда верхний левый пиксель тёмный и верхний правый пиксель светлый, $inline$widehat y_2$inline$
  3. Построим модель, срабатывающую, когда верхний левый пиксель светлый и верхний правый пиксель тёмный, $inline$widehat y_3$inline$
  4. Добавим базовые модели так, что конечная сигмоидная функция срабатывала только когда $inline$widehat y_1$inline$ и $inline$widehat y_2$inline$ велики, или когда $inline$widehat y_1$inline$ и $inline$widehat y_3$inline$ велики. (Заметьте, что $inline$widehat y_2$inline$ и $inline$widehat y_3$inline$ не могут быть большими одновременно.)

Пример 2: распознать лестницы светлого оттенка
  1. Построим модели, срабатывающие при «затенённом нижнем ряде», «затенённом x1 и белом x2», «затенённом x2 и белом x1», $inline$widehat y_1$inline$ , $inline$widehat y_2$inline$ и $inline$widehat y_3$inline$
  2. Построим модели, срабатывающие при «тёмном нижнем ряде», «тёмном x1 и белом x2», «тёмном x2 и белом x», $inline$widehat y_4$inline$ , $inline$widehat y_5$inline$ и $inline$widehat y_6$inline$
  3. Соединим модели таким образом, чтобы «тёмные» идентификаторы вычитались из «затенённых» идентификаторов перед сжиманием результата сигмоидой

Примечание о терминологии

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

Читайте также:  Системная плата pegatron 2acf

Альтернативные функции активации

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

Многоклассовая классификация

Мы с лёгкостью можем расширить нашу модель, чтобы она работала в многоклассовой классификации, с помощью использования нескольких узлов в конечном выходном слое. Идея здесь заключается в том, что каждый выходной узел соответствует одному из классов $inline$C$inline$ , которые мы стремимся спрогнозировать. Вместо сужения выхода с помощью сигмоиды, которая отражает элемент из $inline$mathbb$inline$ в элемент из интервала [0, 1] мы можем использовать функцию softmax, которая отражает вектор в $inline$mathbb^n$inline$ в вектор в $inline$mathbb^n$inline$ таким образом, что сумма элементов получившегося вектора равна 1. Иными словами, мы можем создать такую сеть, которая даёт на выходе вектор [ $inline$prob(class_1)$inline$ , $inline$prob(class_2)$inline$ , …, $inline$prob(class_C)$inline$ ].

Использование трёх и более слоёв (глубокое обучение)

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

Подбор модели под размеченные обучающие образцы (обратное распространение ошибки обучения)

Увы, но мы добрались и до процедуры подбора. До этого мы говорили о том, что нейросети могут работать эффективно, но не обсуждали то, как нейросеть подгоняется под размеченные обучающие образцы. Аналогом этого вопроса может быть такой: «Как можно выбрать наилучшие веса для сети на основании нескольких размеченных обучающих образцов?». Обычным ответом является градиентный спуск (хотя может подойти и ММП). Если продолжить работу над нашим примером задачи, то процедура градиентного спуска может выглядеть примерно так:

  1. Начинаем с каких-то размеченных обучающих данных
  2. Выберем для минимизации дифференцируемую функцию потерь, $inline$L(mathbf<widehat Y>, mathbf)$inline$
  3. Выберем структуру сети. Особенно чётко нужно определить количество слоёв и узлов на каждом слое.
  4. Инициализируем сеть со случайными весами
  5. Пропускаем сквозь сеть обучающие данные, чтобы сгенерировать прогноз для каждого образца. Измерим общую погрешность согласно функции потерь, $inline$L(mathbf<widehat Y>, mathbf)$inline$ . (Это называется прямым распространением.)
  6. Определяем, насколько меняются текущие потери относительно небольших изменений каждого из весов. Другими словами, вычисляем градиент $inline$L$inline$ с учётом каждого веса в сети. (Это называется обратным распространением.)
  7. Делаем небольшой «шаг» в направлении отрицательного градиента. Например, если $inline$w_ <23>= 1.5$inline$ , а $inline$frac<partial L><partial w_<23>> = 2.2$inline$ , то уменьшение $inline$w_<23>$inline$ на небольшую величину должно привести к небольшому уменьшению текущих потерь. Поэтому мы изменяем $inline$w_3 := w_3 – 2.2 imes 0.001$inline$ (где 0.001 — заданный «размер шага»).
  8. Повторяем этот процесс (с шага 5) фиксированное количество раз или пока потери не сойдутся

По крайней мере, такова основная идея. При реализации на практике возникает множество затруднений.

Затруднение 1 – вычислительная сложность

В процессе подбора среди прочего нам нужно вычислять градиент $inline$L$inline$ с учётом каждого веса. Это сложно, потому что $inline$L$inline$ зависит от каждого узла в выходном слое, и каждый из этих узлов зависит от каждого узла в слое перед ним, и так далее. Это значит, что вычисление $inline$frac<partial L><partial w_>$inline$ превращается в настоящий кошмар с формулами сложных производных. (Не забывайте, что многие нейронные сети в реальном мире содержат тысячи узлов в десятках слоёв.) Решить эту задачу можно, заметив, что при применении формулы сложной производной большинство $inline$frac<partial L><partial w_>$inline$ повторно использует одинаковые промежуточные производные. Если вы будете внимательно это отслеживать, то сможете избежать одних и тех же повторных вычислений тысячи раз.

Ещё одна хитрость заключается в использовании специальных функций активации, производные которых можно записать как функцию их значения. Например, производная $inline$sigmoid(x)$inline$ = $inline$sigmoid(x)(1 – sigmoid(x))$inline$ . Это удобно, потому что во время прямого прохода при вычислении $inline$widehat y$inline$ для каждого обучающего образца нам нужно вычислять $inline$sigmoid(mathbf)$inline$ поэлементно для некоторого вектора $inline$mathbf$inline$ . Во время обратного распространения мы можем повторно использовать эти значения для вычисления градиента $inline$L$inline$ с учётом весов, что позволит сэкономить время и память.

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

  1. Изменять веса на основе batch1
  2. Изменять веса на основе batch2
  3. Изменять веса на основе batch3

где градиент $inline$L$inline$ повторно вычисляется после каждого изменения.

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

Затруднение 2 – у градиентного спуска могут возникать проблемы с поиском абсолютного минимума

Это проблема не столько нейросетей, сколько градиентного спуска. Существует вероятность, что во время градиентного спуска веса могут застрять в локальном минимуме. Также возможно, что веса «перепрыгнут» минимум. Один из способов справиться с этим — использовать различные размеры шагов. Ещё один способ — увеличить количество узлов и/или слоёв в сети. (Но стоит опасаться чрезмерно близкой подгонки). Кроме того, могут быть эффективными некоторые эвристические техники, например, использование момента.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector