Попаданцы нейросети космос: Cерия книг «Вселенная EVE Online» – скачать по порядку или читать онлайн

Книги Попаданцы в другие миры (фантастика) читать онлайн бесплатно новинки 2020

Книги жанра «Попаданцы в другие миры (фантастика)» — читать, скачать и слушать на портале Литмаркет

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

С чего все началось?

Рубрика фантастического попаданческого жанра возникла на рубеже 19 и 20 века, в те времена, когда началось освоение космического пространства. В целом, можно выделить несколько этапов возникновения подкатегории:

  1. Конец 19 века. Начало изучения вселенной на Западе. Именно эти произведения стали прототипами фантастических попаданцев.

  2. Рубеж 19-20 века. Накопление научного материла, которым и воспользовались авторы

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

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

Каноны подкатегории

Увлекает категория книг онлайн — «Попаданцы в другие миры (фантастика)» тех, кто любит научно-популярные произведения. В основу каждого сюжета включено ряд характерных особенностей:

  1. Главный персонаж часто связан с какой-либо сферой техники и науки.

  2. Сложный, многоплановый сюжет с несколькими дополнительными линиями.

  3. Наличие консервативного мышления у жителей.

  4. Специфическое оборудование и оружие.

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

  6. Все события происходят в космосе, на других небесных объектах.

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

  8. Специфическое чувство юмора персонажей.

  9. Наличие конфликтов между помощником (второстепенный персонаж) и главным героем.

  10. Поднятие и раскрытие нескольких социально известных проблем общества. Показ альтернативных решений.

  11. Идеализация многих технических процессов. Иногда описываемые механизмы имеют совершенно другую структуру и алгоритм работы.

  12. Поднимаются проблемы выживания в сложных обстоятельствах.

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

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

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

Сервис Литмаркет

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

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

Жанр «Фанфик: EVE — миры содружества», 57 книг. О жанре: описание, книги, рейтинги, рекомендации — Персональная электронная библиотека

Мультифильтр: off

c 1 по 25 из 57

102550100  по новизне дате чтениярейтингужанруавторуназваниюстатусу чтениягоду созданияциклам
Студент · Малик Маркин 2016 Жанры: попаданчество, фанфик: eve — миры содружества
Циклы: Николай Колос #2
Владелец: Gvandr Вторая часть приключений Николая Колоса.
Свобода — хорошо, а дураком быть плохо. Нужно много знаний. Нужно врастать в социум. Ну так полный вперёд!…
  • Рейтинг:5
  • Дата:2016
  • Статус:читал
Раб · Малик Маркин 2016 Жанры: попаданчество, фанфик: eve — миры содружества
Циклы: Николай Колос #1
Владелец: Gvandr Николай заступился за девушку и покалечил сынка человека, который занимался страшным бизнесом. Он продавал землян космическим работорговцам. И именно Николаем было уплачено за лечение сынка…
  • Рейтинг:5
  • Дата:2016
  • Статус:читал
Шахтер — 2 · Игорь Хорт 2011 Жанр: фанфик: eve — миры содружества
Циклы: Шахтер #2
Владелец: Gvandr Егор активно занимается развитием собственной корпорации «Кедр» в зафронтирном космосе.
..
  • Рейтинг:7
  • Дата:2013
  • Статус:читал
Шахтер — 1 · Игорь Хорт 2011 Жанр: фанфик: eve — миры содружества
Циклы: Шахтер #1
Владелец: Gvandr Устроиться по объявлению на работу за пределами России — да легко… Работа связана с риском — ну и что? А дальнейшая судьба шести тысяч землян, оказавшихся в четырёх…
  • Рейтинг:8
  • Дата:2014
  • Статус:читал
Чек на миллиард · Василий Маханенко 2019 Жанры: фантастика: литрпг, фанфик: eve — миры содружества
Циклы: Проект Галактиона #3
Владелец: ZAVHOZ Чек на миллиард. Поиск, что казался навсегда утерянным, вновь засиял всеми красками, приманивая игроков, словно магнитом. Пираты, ульдане, затранцы — все должно уйти на второй план. Ведь финальная…
  • Статус:читал
Империя Аратан · Альберто Чудов 2012 Жанр: фанфик: eve — миры содружества
Владелец: Gvandr Никогда не знаешь, что ждёт тебя за закрытой дверью… Алекс хорошо выучил это правило за пять лет службы во французском Иностранном легионе. Он не подозревал, что в мирной…
  • Рейтинг:6,5
  • Дата:2013
  • Статус:
    читал
Император с Земли · Алексей Чижовский 2014 Жанр: фанфик: eve — миры содружества
Циклы: Инженер с Земли #5
Владелец: Gvandr За короткое время Алекс успел сделать головокружительную карьеру в мире звездных империй и космических войн, став главой собственной корпорации. Поиски потерянного корабля поколений приводят к…
  • Рейтинг:5
  • Дата:2014
  • Статус:
    читал
Адмирал с Земли · Алексей Чижовский 2013 Жанр: фанфик: eve — миры содружества
Циклы: Инженер с Земли #4
Владелец: Gvandr Алексу предстоит сделать непростой выбор и возглавить то, что осталось от некогда сильного клана космических бродяг — мусорщиков. Ему предстоит пройти через жаркие схватки и прикоснуться к наследию…
  • Рейтинг:5
  • Дата:2013
  • Статус:
    читал
Капитан с Земли · Алексей Чижовский 2013 Жанр: фанфик: eve — миры содружества
Циклы: Инженер с Земли #3
Владелец: Gvandr Не все благополучно в мире Содружества. Конфликты корпораций решают наемники, государства плетут интриги, а где-то в отдалении маячит внешняя угроза. Землянин Алекс уже успел пройти путь от инженера…
  • Рейтинг:4
  • Дата:2013
  • Статус:читал
Наемник с Земли · Алексей Чижовский 2013 Жанр: фанфик: eve — миры содружества
Циклы: Инженер с Земли #2
Владелец: Gvandr Землянин Алекс, оказавшись в мире Содружества, сумел стать востребованным специалистом-инженером. Некоторые необычные способности и нестандартный подход не раз спасали ему жизнь. Мог ли он знать…
  • Рейтинг:4
  • Дата:2013
  • Статус:читал
Инженер с Земли · Алексей Чижовский 2013 Жанр: фанфик: eve — миры содружества
Циклы: Инженер с Земли #1
Владелец: Gvandr Ты уже знаешь, что будет завтра и даже через год. Скучная жизнь, бессмысленная работа, бесконечное движение по кругу. Тебе выпал шанс все изменить. Добро пожаловать в большой космос! Космические…
  • Рейтинг:5
  • Дата:2013
  • Статус:читал
Гарт. Измененный · Алексей Чижовский 2014 Жанр: фанфик: eve — миры содружества
Циклы: Гарт 

Eve online — Аудиокниги — Eve echoes

Eve Online (официально пишется большими буквами EVE Online) — массовая многопользовательская видеоигра, симулятор космических кораблей, разработанная компанией CCP Games. Впервые она была выпущена в Северной Америке и Европе в мае 2003 года издательством Саймон энд Шустер Интеректив.

С 10 марта 2009 игра распространяется через магазины в коробочном варианте благодаря компании Atari.

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

Роман, основанный на игре EVE «Джокер» — Константин Муравьёв воплощает в жизнь эту неотразимую научную фантастическую среду.

Капитан с Земли — Алекс Чижовский

Капитан с Земли — Алекс Чижовский

Не все благополучно в мире Содружества. Конфликты корпораций решают наемники, государства плетут интриги, а где-то в отдалении маячит внешняя угроза. Землянин Алекс уже успел пройти путь от инженера до наемника. Осталось сделать следующий шаг –…

Через смерть — Михаил Атаманов

Через смерть — Михаил Атаманов

  • Автор: Атаманов Михаил
  • Жанр: Попаданцы / Приключения / Фантастика, фэнтези / LitRPG / EVE online

Играть шаблонно? Эта не наш метод! В попытке оттянуть вызов на императорский суд кронпринц вынуждает Чужин вторгнуться в его собственную систему. Вся Империя с замиранием сердца в режиме прямой…

Восьмой сектор — Михаил Атаманов

Восьмой сектор — Михаил Атаманов

  • Автор: Атаманов Михаил
  • Жанр: Попаданцы / Приключения / Фантастика, фэнтези / EVE online

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

Из варяг в небо — Олег Данильченко

Из варяг в небо — Олег Данильченко

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

На мягких лапах между звезд — Олег Данильченко

На мягких лапах между звезд — Олег Данильченко

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

Тропинка к Млечному пути — Олег Данильченко

Тропинка к Млечному пути — Олег Данильченко

  • Автор: Данильченко Олег
  • Жанр: Боевик / Попаданцы / Приключения / Фантастика, фэнтези / EVE online

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

Чужая война — Олег Данильченко

Чужая война — Олег Данильченко

  • Автор: Данильченко Олег
  • Жанр: Боевик / Попаданцы / Приключения / Фантастика, фэнтези / EVE online

Война — штука мерзопакостная. Как ни готовься к ней, всё равно начнется не вовремя. А если это ещё и не твоя война, в которую тебя волей или неволей втянули, то вообще туши свет. Однако как бы там ни…

Я – выживу — Владимир Поселягин

Я – выживу — Владимир Поселягин

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

Становление — Владимир Поселягин

Становление — Владимир Поселягин

Месть за предательство должна свершиться! Ворх Росс продолжает выживать на планете Зория. В этот раз всё сложнее, но упорный характер Ворха помогает ему и его семье вырваться из оков неприятностей….

Империя — Владимир Поселягин

Империя — Владимир Поселягин

Продолжение серии ЗУРГ! Запас карман не тянет! Ворх Росс – не просто паренек, что умудряется выжить там, где другой давно бы погиб, он ещё и наш современник, душа которого по воле судьбы вселилась. ..

Без пощады — Дем Михайлов

Без пощады — Дем Михайлов

  • Автор: Михайлов Дем
  • Жанр: Боевик / Приключения / Фантастика, фэнтези / EVE online

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

Рекрут — Алекс Каменев

Рекрут — Алекс Каменев

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

Я из будущего — Владимир Поселягин

Я из будущего — Владимир Поселягин

Задача, которую себе поставил Ворх Росс, практически выполнена, и на осколках былых человеческих государств начинается становление нового анклава, но перед ним стоит уже другая проблема. Сработал…

Наёмник — Алекс Каменев

Наёмник — Алекс Каменев

Не бойтесь сопротивления и угроз! Технологическое развитие не избавило человечество от привычки решать вопросы силовым путем. Профессия наемника все так же весьма широко востребована на территории…

Джокер — Константин Муравьёв

Джокер — Константин Муравьёв

Круговерть событий. Порталы, ведущие в неизвестные миры. Демоны, начавшие войну за обладание ими. Только вот ведет их враг, которого ты, казалось бы, оставил в другом времени и пространстве. Агенты из других миров, которые и сами разыгрывают в этом…

Игра без правил — Атаманов Михаил

Игра без правил — Атаманов Михаил

  • Автор: Атаманов Михаил
  • Жанр: Попаданцы / Приключения / Фантастика, фэнтези / LitRPG / EVE online

Главного героя тетралогии «Защита периметра» зовут Роман. Он отличный тактик в играх, посвящённых космическим сражениям. Его нанимают как флотоводца для ведения наиболее крупных баталий в игровых мирах. Но однажды Роман получает необычное…

Враг за спиной — Константин Муравьев

Враг за спиной — Константин Муравьев

Дим уже давно не тот, что только недавно попал на космическую станцию Рекура-4. Чтобы постараться оградить их только что созданную корпорацию и ее мало кому известного главу от посторонних посягательств, он опять должен для всех превратиться в…

Клан — Константин Муравьев

Клан — Константин Муравьев

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

Шаг в бездну — Константин Муравьёв

Шаг в бездну — Константин Муравьёв

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

Отголоски далекой битвы — Константин Муравьев

Отголоски далекой битвы — Константин Муравьев

Есть враг – а значит, в этом мире грядет война! Есть враг. Древний и опасный враг. Он очень силен и могуществен. С запретной и грозной магией. Той магией, о которой в этом мире уже давно забыли. Противник, разбитый и изгнанный несколько столетий…

Комментарии

Отель «Пастис» — Питер Мейл

Обожаю этого автора! Прослушала все его произведения, которые в свободном доступе! Очень интересно и захватывающе))) [leech=! ]!

Базовое введение в нейронные сети

Базовое введение в нейронные сети Простейшее определение нейронной сети, более правильное название которой — «искусственная нейронная сеть» (ИНС), дано изобретателем одного из первых нейрокомпьютеров, Доктор Роберт Хехт-Нильсен. Он определяет нейронную сеть как:
«… вычислительная система, состоящая из числа простой, взаимосвязанной обработки элементы, которые обрабатывают информацию своим реакция динамического состояния на внешние входы.

В «Учебнике по нейронным сетям: Часть I» Морин Кодилл, эксперта по искусственному интеллекту, февраль 1989 г.

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

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


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

Большинство ИНС содержат некоторую форму «правила обучения», которое изменяет веса соединений в соответствии с входными шаблонами, с которыми они представлены. В некотором смысле ИНС учатся на примерах, как и их биологические аналоги; ребенок учится узнавать собак по примерам собак.

Хотя нейронные сети используют множество различных видов правил обучения, эта демонстрация касается только одного; правило дельты. Правило дельты часто используется в наиболее распространенном классе ИНС, который называется «нейронными сетями обратного распространения» (BPNN). Backpropagation — это сокращение от обратного распространения ошибки.

С правилом дельты, как и с другими типами обратного распространения, «обучение» — это контролируемый процесс, который происходит с каждым циклом или «эпохой» (то есть каждый раз, когда сеть представляет новый входной шаблон) через прямой поток активации выходов, и обратное распространение ошибок корректировок веса.Проще говоря, когда нейронная сеть изначально представлена ​​шаблоном, она делает случайное «предположение» относительно того, что это может быть. Затем он видит, насколько далек его ответ от фактического, и вносит соответствующие изменения в его связь. веса. Более наглядно процесс выглядит примерно так:

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

Обратное распространение выполняет градиентный спуск в векторном пространстве решения к «глобальному минимуму» вдоль самого крутого вектора поверхности ошибки.Глобальный минимум — это теоретическое решение с минимально возможной ошибкой. Поверхность ошибки сама по себе является гиперпараболоидом, но редко «гладкий», как показано на рисунке ниже. В самом деле, в большинстве задач пространство для решения весьма неравномерно с многочисленными «ямами» и «холмами», которые может привести к тому, что сеть остановится в «локальном минимуме», что не является лучшим общим решением.

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

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

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


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

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


Нейронные сети — универсальные аппроксиматоры, и они работают лучше всего, если система, для моделирования которой вы их используете, имеет высокую устойчивость к ошибкам. Поэтому не рекомендуется использовать нейронную сеть для балансировки чековой книжки! Однако они очень хорошо работают для:
  • захвата ассоциаций или обнаружения закономерностей в наборе шаблонов;
  • , где объем, количество переменных или разнообразие данных очень велико;
  • отношения между переменными неясны; или,
  • Эти отношения трудно адекватно описать с помощью традиционных подходов.

У анализа нейронных сетей есть много преимуществ и ограничений, и для правильного обсуждения этого предмета нам нужно будет рассмотреть каждый отдельный тип сети, что не является необходимым для этого общего обсуждения. Однако в отношении сетей обратного распространения существуют некоторые специфические проблемы, о которых следует знать потенциальным пользователям.
  • Нейронные сети обратного распространения (и многие другие типы сетей) в определенном смысле «черные ящики». Помимо определения общей архитектуры сети и, возможно, первоначального заполнения ее случайными числами, у пользователя нет никакой другой роли, кроме как вводить его, наблюдать, как он тренируется, и ждать выхода.Фактически, было сказано, что при обратном распространении «вы почти не знаете, что делаете». Некоторые программные пакеты, доступные в свободном доступе (NevProp, bp, Mactivation), действительно позволяют пользователю измерять «прогресс» сетей через регулярные промежутки времени, но само обучение происходит само по себе. Конечным продуктом этой деятельности является обученная сеть, которая не предоставляет никаких уравнений или коэффициентов, определяющих взаимосвязь (как в регрессии) за пределами ее собственной внутренней математики. Сеть «ЕСТЬ» окончательное уравнение отношений.
  • Сети обратного распространения также, как правило, медленнее обучаются, чем другие типы сетей, и иногда требуют тысячи эпох. При запуске на действительно параллельной компьютерной системе эта проблема не является проблемой, но если BPNN моделируется на стандартной последовательной машине (то есть на одном SPARC, Mac или ПК), обучение может занять некоторое время. Это связано с тем, что ЦП машины должен вычислять функцию каждого узла и соединения отдельно, что может быть проблематичным в очень больших сетях с большим объемом данных.Однако скорость большинства современных машин такова, что это обычно не проблема.

В зависимости от природы приложения и мощности внутренних шаблонов данных обычно можно ожидать, что сеть будет достаточно хорошо обучаться. Это относится к проблемам, в которых отношения могут быть довольно динамичными или нелинейными. ИНС представляют собой аналитическую альтернативу обычным методам, которые часто ограничиваются строгими предположениями о нормальности, линейности, независимости переменных и т. Д.Поскольку ИНС может фиксировать многие виды отношений, она позволяет пользователю быстро и относительно легко моделировать явления, которые иначе было бы очень трудно или невозможно объяснить.
Для получения дополнительной информации о нейронных сетях в Интернете.

Вернуться на главную страницу

См. Пример нейронной сети.

Нейронные сети и глубокое обучение

Зрительная система человека — одно из чудес света. Рассмотреть возможность следующая последовательность рукописных цифр:

Большинство людей легко распознают эти цифры как 504192.Эта легкость обманчиво. В каждом полушарии нашего мозга у человека есть основная зрительная кора, также известная как V1, содержащая 140 миллионов нейронов, с десятки миллиардов связей между ними. И все же человеческое видение включает не только V1, но и целую серию зрительных кортик — V2, V3, V4 и V5 — выполнение все более сложной обработки изображений. Мы несем в голове суперкомпьютер, настроенный эволюцией над сотни миллионов лет и прекрасно приспособлены для понимания визуальный мир.Распознать рукописные цифры непросто. Скорее мы люди изумительно, поразительно хороши в понимании того, что глаза показывают нам. Но почти вся эта работа выполняется бессознательно. Так что мы обычно не понимаем, насколько серьезна проблема наших зрительных систем решить.

Сложность распознавания визуальных образов становится очевидной, если вы попытаться написать компьютерную программу для распознавания таких цифр над. То, что кажется простым, когда мы делаем это сами, внезапно становится крайне сложно.Простая интуиция о том, как мы распознаем формы — «9 имеет петлю вверху и вертикальную черту внизу. правильно »- оказывается, не так-то просто алгоритмически выразить. Когда вы пытаетесь уточнить такие правила, вы быстро теряетесь в болото исключений, предостережений и особых случаев. Это выглядит безнадежно.

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

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

В этой главе мы напишем компьютерную программу, реализующую нейронную сеть, которая учится распознавать рукописные цифры.Программа всего 74 строки и не использует специальных библиотек нейронных сетей. Но эта короткая программа может распознавать цифры с точностью более 96 процентов, без вмешательства человека. Кроме того, в следующих главах мы разработаем идеи, которые могут повысить точность до 99 процентов. В Фактически, лучшие коммерческие нейронные сети сейчас настолько хороши, что используются банками для обработки чеков и почтовыми отделениями для распознавания адреса.

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

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

Персептроны

Что такое нейронная сеть? Для начала я объясню тип Искусственный нейрон называется персептроном . Персептроны были развитый в 1950-х и 1960-х годах ученым Фрэнк Розенблатт, вдохновленный более ранним Работа Уоррен Маккаллох и Уолтер Питтс.Сегодня более распространено использование других модели искусственных нейронов — в этой книге и во многих современных работах в нейронных сетях используется основная модель нейрона, называемая сигмовидный нейрон . Вскоре мы перейдем к сигмовидным нейронам. Но понять, почему сигмовидные нейроны определены именно так, это стоит потратить время, чтобы сначала понять перцептроны.

Так как же работают перцептроны? Персептрон принимает несколько двоичных входов, $ x_1, x_2, \ ldots $ и производит один двоичный вывод:

В показанном примере перцептрон имеет три входа: $ x_1, x_2, x_3 $.В общем, входов может быть больше или меньше. Розенблатт предложил простое правило для вычисления вывода. Он представил веса , $ w_1, w_2, \ ldots $, действительные числа выражая важность соответствующих входов для выхода. В выход нейрона, $ 0 $ или $ 1 $, определяется тем, является ли взвешенная сумма $ \ sum_j w_j x_j $ меньше или больше порогового значения значение . Как и веса, Порог — это действительное число, которое является параметром нейрона. Класть это в более точных алгебраических терминах: \ begin {eqnarray} \ mbox {output} & = & \ left \ {\ begin {array} {ll} 0 & \ mbox {if} \ sum_j w_j x_j \ leq \ mbox {threshold} \\ 1 & \ mbox {if} \ sum_j w_j x_j> \ mbox {порог} \ end {array} \ right.\ tag {1} \ end {eqnarray} Вот и все, как работает перцептрон!

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

  1. Погода хорошая?
  2. Ваш парень или девушка хочет сопровождать вас?
  3. Находится ли фестиваль рядом с остановками общественного транспорта? (У вас нет машины).
Мы можем представить эти три фактора соответствующими двоичными переменными $ x_1, x_2 $ и $ x_3 $. Например, у нас было бы $ x_1 = 1 $, если бы погода хорошая, и $ x_1 = 0 $, если погода плохая. Аналогично $ x_2 = 1 $, если ваш парень или девушка хочет уйти, и $ x_2 = 0 $, если не.И снова аналогично для $ x_3 $ и общественного транспорта.

А теперь представьте, что вы абсолютно обожаете сыр, настолько, что вы счастливы пойти на фестиваль, даже если твой парень или девушка неинтересно, и до фестиваля трудно добраться. Но возможно ты действительно ненавижу плохую погоду, и ты ни за что не пойдешь на фестиваль если погода плохая. Вы можете использовать перцептроны для моделирования такого рода принятие решений. Один из способов сделать это — выбрать вес $ w_1 = 6 $. для погоды и $ w_2 = 2 $ и $ w_3 = 2 $ для других условий.Большее значение $ w_1 $ указывает на то, что погода имеет большое значение для вы, гораздо больше, чем то, присоединится ли к вам ваш парень или девушка, или близость общественного транспорта. Наконец, предположим, что вы выбрали порог 5 $ для перцептрона. С этим выбором перцептрон реализует желаемую модель принятия решений, выводя 1 доллар в хорошую погоду и 0 долларов в плохую. Не имеет значения, будет ли ваш парень или подруга хочет поехать, ни то рядом общественный транспорт.

Изменяя вес и порог, мы можем получить разные модели принятия решений. Например, предположим, что вместо этого мы выбрали порог от 3 $. Тогда перцептрон решит, что вам следует перейти к фестиваль в хорошую погоду или , когда оба фестиваль проходил рядом с остановками общественного транспорта и , ваш парень или подруга была готова к вам присоединиться. Другими словами, это будет другая модель принятия решений. Снижение порога означает ты охотнее поедешь на фестиваль.

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

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

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

Давайте упростим описание перцептронов. Условие $ \ sum_j w_j x_j> \ mbox {threshold} $ громоздко, и мы можем сделать два изменения обозначений, чтобы упростить его.Первое изменение — написать $ \ sum_j w_j x_j $ как скалярное произведение, $ w \ cdot x \ Equiv \ sum_j w_j x_j $, где $ w $ и $ x $ — векторы, компоненты которых являются весами и входы соответственно. Второе изменение — переместить порог на другая сторона неравенства, и заменить ее тем, что известно как смещение персептрона , $ b \ эквив. — \ mbox {threshold} $. Используя смещение вместо порога, правило перцептрона может быть переписано: \ begin {eqnarray} \ mbox {output} = \ left \ { \ begin {array} {ll} 0 & \ mbox {if} w \ cdot x + b \ leq 0 \\ 1 & \ mbox {if} w \ cdot x + b> 0 \ end {массив} \верно.\ tag {2} \ end {eqnarray} Вы можете рассматривать предвзятость как меру того, насколько легко получить персептрон для вывода 1 $. Или, говоря более биологическим языком, смещение — это мера того, насколько легко перцептрон пожар . Для перцептрона с действительно большим уклоном это чрезвычайно перцептрону легко выдать 1 доллар. Но если предвзятость очень отрицательный, то перцептрону сложно выдать 1 доллар. Очевидно, что введение предвзятости — это лишь небольшое изменение в том, как мы описывают перцептроны, но позже мы увидим, что это ведет к дальнейшим условные упрощения.Из-за этого в оставшейся части книга мы не будем использовать порог, мы всегда будем использовать смещение.

Я описал перцептроны как метод взвешивания доказательств для получения решения. Другой способ использования перцептронов — вычисление элементарные логические функции, которые мы обычно считаем лежащими в основе вычисление, такие функции, как И , ИЛИ и НЕИ . Например, предположим, что у нас есть перцептрон с двумя входные данные, каждый с весом -2 доллара и общим смещением 3 доллара.Вот наш перцептрон:

Затем мы видим, что вход $ 00 $ дает выход $ 1 $, поскольку $ (- 2) * 0 + (- 2) * 0 + 3 = 3 $ положительно. Здесь я ввел $ * $ символ, чтобы сделать умножение явным. Подобные расчеты показывают, что входы $ 01 $ и $ 10 $ дают выход $ 1 $. Но вход $ 11 $ производит вывод $ 0 $, так как $ (- 2) * 1 + (- 2) * 1 + 3 = -1 $ отрицательно. Итак, наш перцептрон реализует NAND Ворота!

Пример NAND показывает, что мы можем использовать перцептроны для вычисления простые логические функции.Фактически, мы можем использовать сети перцептронов для вычисления любой логической функции вообще. Причина в том, что шлюз NAND универсален для вычисление, то есть мы можем построить любое вычисление из NAND ворот. Например, мы можем использовать ворота NAND для построить схему, которая складывает два бита, $ x_1 $ и $ x_2 $. Это требует вычисление побитовой суммы, $ x_1 \ oplus x_2 $, а также бит переноса который устанавливается в $ 1 $, когда и $ x_1 $, и $ x_2 $ равны $ 1 $, i.е., перенос bit — это просто побитовое произведение $ x_1 x_2 $:

Чтобы получить эквивалентную сеть перцептронов, заменим все NAND вентили перцептронами с двумя входами, каждый с весом -2 доллара, а общая систематическая ошибка — 3 доллара. Вот получившаяся сеть. Заметка что я переместил перцептрон в правый нижний угол NAND калитка немного, просто чтоб стрелки было проще рисовать на схеме: Одним из примечательных аспектов этой сети перцептронов является то, что на выходе от крайнего левого перцептрона используется дважды как вход до самого нижнего перцептрон.Когда я определил модель перцептрона, я не сказал, такой вид двойного вывода в одно и то же место был разрешен. Фактически, это не имеет большого значения. Если мы не хотим этого допустить, тогда можно просто объединить две строки в одну соединение с весом -4 вместо двух соединений с -2 веса. (Если вы не находите это очевидным, вам следует остановиться и доказать себе, что это эквивалентно.) С этим изменением сеть выглядит следующим образом: все немаркированные веса равны -2, все смещения равный 3, и единичный вес -4, как отмечено: До сих пор я рисовал входные данные, такие как $ x_1 $ и $ x_2 $, как переменные. плавающий слева от сети перцептронов.На самом деле это обычный для рисования дополнительного слоя перцептронов — вход слой — для кодирования входов: Это обозначение для входных перцептронов, в которых у нас есть выход, но нет входов, это сокращение. На самом деле это не означает перцептрон без входов. Чтобы убедиться в этом, предположим, что у нас есть перцептрон без входов. затем взвешенная сумма $ \ sum_j w_j x_j $ всегда будет равна нулю, и поэтому перцептрон выдаст $ 1 $, если $ b> 0 $, и $ 0 $, если $ b \ leq 0 $. Что то есть перцептрон просто выводит фиксированное значение, а не желаемое. значение ($ x_1 $ в примере выше).Лучше подумать о вводить перцептроны как не совсем перцептроны, а скорее специальные единицы, которые просто определены для вывода желаемых значений, $ x_1, x_2, \ ldots $.

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

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

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

Сигмовидные нейроны

Алгоритмы обучения звучат потрясающе.Но как мы можем придумать такие алгоритмы для нейронной сети? Предположим, у нас есть сеть перцептроны, которые мы хотели бы использовать, чтобы научиться решать некоторые проблемы. За Например, входами в сеть могут быть необработанные данные пикселей из отсканированное рукописное изображение цифры. И мы бы хотели, чтобы сеть узнать веса и смещения, чтобы вывод из сети правильно классифицирует цифру. Чтобы увидеть, как может работать обучение, предположим, что мы делаем небольшое изменение веса (или предвзятости) в сети.Что мы как если бы это небольшое изменение веса вызвало лишь небольшое соответствующее изменение выхода из сети. Как мы увидим в мгновение, это свойство сделает обучение возможным. Схематично, вот что мы хотим (очевидно, что эта сеть слишком проста для распознавание почерка!):

Если бы было правдой, что небольшое изменение веса (или смещения) вызывает только небольшое изменение вывода, то мы могли бы использовать этот факт для изменения весов и предубеждений, чтобы заставить нашу сеть вести себя так, как мы хотеть.Например, предположим, что сеть по ошибке классифицирует изображение как «8», когда оно должно быть «9». Мы могли понять, как внести небольшое изменение в веса и смещения, чтобы сеть получила Немного ближе к отнесению изображения к «9». А потом мы повторяйте это, снова и снова меняя веса и смещения, чтобы получить все лучше и лучше. Сеть будет учиться.

Проблема в том, что этого не происходит, когда наша сеть содержит перцептроны.Фактически, небольшое изменение весов или смещения любого один персептрон в сети может иногда вызывать выход этот перцептрон полностью перевернуть, скажем, с 0 долларов на 1 доллар. Этот флип может затем привести к тому, что поведение остальной сети полностью изменится. изменить очень сложным образом. Итак, пока ваша цифра 9 может быть классифицировано правильно, поведение сети на всех остальных изображения, вероятно, полностью изменились в некоторых трудноуправляемых путь. Это затрудняет понимание того, как постепенно изменять веса и смещения, чтобы сеть приближалась к желаемому поведение.Возможно, есть какой-нибудь умный способ обойти это проблема. Но не сразу очевидно, как мы можем получить сеть перцептроны, чтобы учиться.

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

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

Подобно перцептрону, сигмовидный нейрон имеет входы, $ x_1, x_2, \ ldots $. Но вместо того, чтобы быть просто 0 или 1 долларом, эти входные данные также могут принимает любые значения от $ 0 $ до 1 $. Так, например, $ 0.638 \ ldots $ — допустимый вход для сигмовидного нейрона. Также как и перцептрон, сигмовидный нейрон имеет веса для каждого входа, $ w_1, w_2, \ ldots $ и общий уклон $ b $. {- z}}.\ tag {3} \ end {eqnarray} Проще говоря, выход сигмовидного нейрона с входами $ x_1, x_2, \ ldots $, весами $ w_1, w_2, \ ldots $ и смещением $ b $ \ begin {eqnarray} \ frac {1} {1+ \ exp (- \ sum_j w_j x_j-b)}. \ tag {4} \ end {eqnarray}

На первый взгляд, сигмовидные нейроны сильно отличаются от перцептронов. Алгебраическая форма сигмовидной функции может показаться непрозрачной и непрозрачной. запрещающий, если вы еще не знакомы с этим. На самом деле есть много общего между перцептронами и сигмовидными нейронами, и алгебраическая форма сигмовидной функции оказывается больше технические детали, чем настоящий барьер для понимания.{-z} \ rightarrow \ infty $ и $ \ sigma (z) \ приблизительно 0 $. Так когда $ z = w \ cdot x + b $ очень негативно, поведение сигмовидного нейрона также очень похож на перцептрон. Только когда $ w \ cdot x + b $ имеет скромный размер, что сильно отклоняется от перцептрона модель.

А как насчет алгебраической формы $ \ sigma $? Как мы можем понять что? На самом деле, точный вид $ \ sigma $ не так важен — какой действительно имеет значение форма функции при построении графика.Вот форма:

Эта форма представляет собой сглаженную версию ступенчатой ​​функции:

Если бы $ \ sigma $ на самом деле была ступенчатой ​​функцией, то сигмовидный нейрон будет персептроном, так как на выходе будет 1 доллар или 0 долларов в зависимости от того, было ли $ w \ cdot x + b $ положительным или отрицательный * * На самом деле, когда $ w \ cdot x + b = 0 $, перцептрон выводит $ 0 $, а пошаговая функция выводит $ 1 $. Итак, строго говоря, нам нужно будет изменить пошаговую функцию именно в этот момент.Но вы поняли идею … Используя фактическую функцию $ \ sigma $, мы получить, как уже говорилось выше, сглаженный перцептрон. На самом деле, решающим моментом является гладкость функции $ \ sigma $, не его подробная форма. Гладкость $ \ sigma $ означает, что малые изменяет $ \ Delta w_j $ в весах и $ \ Delta b $ в смещении будет произвести небольшое изменение $ \ Delta \ mbox {output} $ в выводе из нейрон. Фактически, исчисление говорит нам, что $ \ Delta \ mbox {output} $ — это хорошо приближается \ begin {eqnarray} \ Delta \ mbox {output} \ приблизительно \ sum_j \ frac {\ partial \, \ mbox {output}} {\ partial w_j} \ Delta w_j + \ frac {\ partial \, \ mbox {output}} {\ partial b} \ Delta b, \ tag {5} \ end {eqnarray} где сумма берется по всем весам, $ w_j $ и $ \ partial \, \ mbox {output} / \ partial w_j $ и $ \ partial \, \ mbox {output} / \ partial b $ обозначают частные производные $ \ mbox {output} $ по $ w_j $ и $ b $ соответственно.Не паникуйте, если вам неудобно с частными производными! Хотя выражение выше выглядит сложно, со всеми частными производными, на самом деле он говорит что-то очень простое (и это очень хорошие новости): $ \ Delta \ mbox {output} $ — это линейная функция изменений $ \ Delta w_j $ и $ \ Delta b $ в весах и смещении. Эта линейность позволяет легко выбирать небольшие изменения весов и смещений для достижения любых желаемое небольшое изменение на выходе.{-z}} \ nonumber \ end {eqnarray}? Фактически, позже в книге мы иногда рассматривают нейроны с выходом $ f (w \ cdot x + b) $ для некоторых других функций активации $ f (\ cdot) $. Главное что меняется, когда мы используем другую функцию активации, заключается в том, что частные значения частных производных в Уравнение (5) \ begin {eqnarray} \ Delta \ mbox {output} \ приблизительно \ sum_j \ frac {\ partial \, \ mbox {output}} {\ partial w_j} \ Delta w_j + \ frac {\ partial \, \ mbox {output}} {\ partial b} \ Delta b \ nonumber \ end {eqnarray} изменение.Оказывается, когда мы вычислить эти частные производные позже, использование $ \ sigma $ упростит алгебру просто потому, что экспоненты обладают прекрасными свойствами, когда дифференцированный. В любом случае $ \ sigma $ обычно используется в работе над нейронные сети, и это функция активации, которую мы будем чаще всего использовать в эта книга.

Как мы должны интерпретировать выходной сигнал сигмовидного нейрона? Очевидно, одно большое различие между перцептронами и сигмовидными нейронами состоит в том, что сигмовидные нейроны не просто выводят 0 или 1 доллар.Они могут иметь на выходе любое действительное число от $ 0 $ до $ 1 $, поэтому такие значения, как $ 0.173 \ ldots $ и $ 0.689 \ ldots $ являются допустимыми выходными данными. Это может быть полезно для Например, если мы хотим использовать выходное значение для представления среднего интенсивность пикселей в изображении, вводимом в нейронную сеть. Но иногда это может быть неприятно. Предположим, нам нужен вывод сеть, чтобы указать либо «входное изображение — 9», либо «входное изображение не 9 «. Очевидно, было бы проще сделать это, если бы выход был 0 или 1 доллар, как в перцептроне.Но на практике мы можем создать соглашение, чтобы справиться с этим, например, решив интерпретировать любой результат на сумму не менее 0,5 доллара США как цифру «9», а любой вывод менее 0,5 доллара США, что означает «не 9». Я всегда явно указать, когда мы используем такое соглашение, поэтому не следует вызвать путаницу.

Упражнения
  • Сигмовидные нейроны, моделирующие перцептроны, часть I $ \ mbox {} $
    Предположим, мы берем все веса и смещения в сети перцептроны, и умножьте их на положительную константу, $ c> 0 $.Покажите, что поведение сети не меняется.
  • Сигмовидные нейроны, имитирующие перцептроны, часть II $ \ mbox {} $
    Предположим, у нас есть та же установка, что и в последней задаче — сеть перцептронов. Предположим также, что общий вход в выбрана сеть перцептронов. Нам не понадобятся настоящие входное значение, нам просто нужно, чтобы вход был исправлен. Предположим, что веса и смещения таковы, что $ w \ cdot x + b \ neq 0 $ для введите $ x $ в любой конкретный перцептрон в сети.Теперь замените все перцептроны в сети сигмовидными нейронами и умножаются веса и смещения на положительную константу $ c> 0 $. Показать это в предел как $ c \ rightarrow \ infty $ поведение этой сети сигмовидные нейроны точно такие же, как сеть перцептронов. Как это может потерпеть неудачу, если $ w \ cdot x + b = 0 $ для одного из перцептроны?

Архитектура нейронных сетей

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

Как упоминалось ранее, крайний левый слой в этой сети называется входного слоя, а нейроны внутри слоя называются входными нейронами . Крайний правый или выходной слой содержит выходных нейронов , или, как в этом случае, единственный выходной нейрон. Средний слой называется скрытый слой , так как нейроны в этот слой не является ни входами, ни выходами.Термин «скрытый» возможно звучит немного загадочно — впервые я услышал термин Я подумал, что в нем должно быть какое-то глубокое философское или математическое значение — но на самом деле это означает не более чем «не вход или выход «. В приведенной выше сети есть только один скрытый слой, но в некоторых сетях есть несколько скрытых слоев. Например, следующие четырехслойная сеть имеет два скрытых слоя: Несколько сбивает с толку и по историческим причинам такой многослойный сети иногда называют многослойными перцептронами или MLP , несмотря на то, что они состоят из сигмовидных нейронов, не перцептроны.Я не буду использовать терминологию MLP в этой книге, так как я думаю, что это сбивает с толку, но хотел предупредить вас о его существовании.

Дизайн входного и выходного уровней в сети часто просто. Например, предположим, что мы пытаемся определить отображается ли на рукописном изображении цифра «9» или нет. Естественный способ дизайн сети заключается в кодировании интенсивности пикселей изображения во входные нейроны. Если изображение имеет оттенки серого 64 $ на 64 $ изображения, то у нас будет $ 4096 = 64 \ times 64 $ входных нейронов, с интенсивность соответствующим образом масштабировалась от 0 до 1 доллара.Выход слой будет содержать только один нейрон, с выходными значениями меньше чем $ 0,5 $, что означает «входное изображение не 9», и значения больше чем $ 0,5 $, что означает «входное изображение — 9».

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

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

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

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

Простая сеть для классификации рукописных цифр

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

на шесть отдельных изображений,

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

— это 5.

Мы сосредоточимся на написании программы для решения второй проблемы, то есть классифицирующие отдельные цифры. Мы делаем это, потому что оказывается, что проблему сегментации не так сложно решить, если у вас есть хороший способ классификации отдельных цифр. Есть много подходов к решению проблемы сегментации. Один подход — испытать много различные способы сегментирования изображения с использованием отдельной цифры классификатор для оценки каждой сегментации исследования.Пробная сегментация получает высокий балл, если индивидуальный классификатор цифр уверен в его классификация во всех сегментах и ​​низкий балл, если классификатор возникли проблемы в одном или нескольких сегментах. Идея в том, что если у классификатора где-то проблемы, то, вероятно, возникли проблемы из-за неправильного выбора сегментации. Эта идея и другие варианты могут быть использованы для решения сегментации проблема довольно хорошо. Поэтому вместо того, чтобы беспокоиться о сегментации, мы сконцентрироваться на разработке нейронной сети, которая может решить более интересная и сложная задача, а именно: распознать личность рукописные цифры.

Для распознавания отдельных цифр мы будем использовать трехслойный нейронный сеть:

Входной слой сети содержит нейроны, кодирующие значения входные пиксели. Как обсуждается в следующем разделе, наши обучающие данные для сети будет состоять из множества изображений размером $ 28 на $ 28 пикселей отсканированные рукописные цифры, поэтому входной слой содержит 784 доллара = 28 \ times 28 $ нейронов. Для простоты я опустил большую часть 784 $. входные нейроны на диаграмме выше.Входные пиксели имеют оттенки серого, со значением 0,0 $ представляет белый цвет, значение 1,0 $ представляет черный цвет, а промежуточные значения представляют постепенно затемняющие оттенки серого.

Второй уровень сети является скрытым. Обозначим количество нейронов в этом скрытом слое на $ n $, и мы будем экспериментировать с разными значениями для $ n $. Показанный пример иллюстрирует небольшой скрытый слой, содержащий всего $ n = 15 $ нейронов.

Выходной слой сети содержит 10 нейронов.Если первый нейрон срабатывает, т.е. имеет выход $ \ приблизительно 1 $, тогда это будет указывать что сеть считает цифру равной 0 долларов. Если второй нейрон срабатывает, что указывает на то, что сеть считает цифру $ 1 $. И так далее. Чуть точнее нумеруем выход нейронов от $ 0 $ до $ 9 $, и выясните, какой нейрон имеет максимальное значение активации. Если этот нейрон, скажем, нейрон номер $ 6 $, тогда наша сеть угадает, что введенная цифра была 6 долларов.4 = 16 $ больше 10 возможных значений входной цифры. Почему вместо этого наша сеть должна использовать нейроны за 10 долларов? Разве это не неэффективно? Окончательное обоснование эмпирическое: мы можем попробовать обе схемы сети, и оказывается, что для этой конкретной проблема, сеть с выходными нейронами за $ 10 учится распознавать цифр лучше, чем сеть с выходными нейронами по $ 4 $. Но затем заставляет задуматься о том, что , почему с выходными нейронами за 10 долларов работает лучше. Есть ли какая-то эвристика, которая заранее скажет нам, что мы должны использовать кодировку $ 10 $ -output вместо кодировки $ 4 $ -output?

Чтобы понять, почему мы это делаем, полезно подумать о том, что сеть делает из первых принципов.Рассмотрим сначала случай, когда мы используем выходные нейроны по $ 10 $. Сконцентрируемся на первом выходе нейрон, тот, который пытается решить, является ли цифра $ 0 $. Он делает это, взвешивая доказательства из скрытого слоя нейроны. Что делают эти скрытые нейроны? Ну, просто предположим ради аргумента, что первый нейрон в скрытом слое обнаруживает присутствует ли изображение, подобное приведенному ниже:

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

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

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

Предполагая, что нейронная сеть функционирует таким образом, мы можем дать правдоподобное объяснение того, почему лучше получать 10 долларов от сеть, а не 4 $. Если бы у нас было 4 доллара на выходе, то первый выходной нейрон будет пытаться решить, какой самый старший бит цифры было. И нет простого способа связать это значащий бит для простых форм, подобных показанным выше.Это трудно представьте, что существует какая-то веская историческая причина, по которой компонент формирует цифры будут тесно связаны (скажем) со старшим битом на выходе.

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

Exercise
  • Существует способ определения побитового представления цифру, добавив дополнительный уровень к трехуровневой сети выше. Дополнительный слой преобразует результат предыдущего слоя в двоичное представление, как показано на рисунке ниже. Найди набор весов и смещений для нового выходного слоя.Предположим, что первые $ 3 $ слоя нейронов таковы, что правильный выход в третий слой (то есть старый выходной слой) имеет активацию как минимум 0,99 доллара США, а активация неправильных выходов меньше 0,01 доллара США.

Обучение с градиентным спуском

Теперь, когда у нас есть дизайн для нашей нейронной сети, как она может научиться распознать цифры? Первое, что нам понадобится, это набор данных для изучения from — так называемый обучающий набор данных. Мы будем использовать MNIST набор данных, содержащий десятки тысяч отсканированных изображений рукописные цифры вместе с их правильной классификацией.Название MNIST происходит от того факта, что это модифицированное подмножество двух наборы данных, собранные NIST, Национальный институт стандартов США и Технологии. Вот несколько изображений из MNIST:

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

Данные MNIST состоят из двух частей.Первая часть содержит 60 000 изображения, которые будут использоваться в качестве обучающих данных. Эти изображения отсканированы образцы почерка от 250 человек, половина из которых были переписаны США Сотрудники бюро, половина из которых были старшеклассниками. В изображения имеют оттенки серого и имеют размер 28 на 28 пикселей. Вторая часть набор данных MNIST составляет 10 000 изображений, которые будут использоваться в качестве тестовых данных. Еще раз, это 28 на 28 изображений в оттенках серого. Мы будем использовать тестовые данные для оценить, насколько хорошо наша нейронная сеть научилась распознавать цифры.Чтобы сделать этот тест производительности хорошим, тестовые данные были взяты из другой набор из 250 человек, чем исходные данные обучения (хотя по-прежнему существует разделение на сотрудников Бюро переписи населения и школьники). Это дает нам уверенность в том, что наша система может распознавать цифры от людей, чьи записи он не видел во время обучение.

Мы будем использовать обозначение $ x $ для обозначения обучающего ввода. Это будет удобно рассматривать каждый обучающий вход $ x $ как $ 28 \ times 28 = 784 $ -мерный вектор.T $ — желаемый результат сеть. Обратите внимание, что $ T $ здесь — операция транспонирования, вектор-строку в обычный вектор (столбец).

Нам нужен алгоритм, который позволяет нам находить веса и смещения так что выход из сети приблизительно равен $ y (x) $ для всех учебные ресурсы $ x $. Чтобы количественно оценить, насколько хорошо мы достигаем этой цели мы определяем функцию стоимости * * Иногда упоминается как потеря или цель функция.2. \ tag {6} \ end {eqnarray} Здесь $ w $ обозначает набор всех весов в сети, $ b $ все смещения, $ n $ — общее количество обучающих входов, $ a $ — вектор выходов из сети при вводе $ x $, а сумма равна по всем обучающим входам $ x $. Конечно, результат $ a $ зависит от $ x $, $ w $ и $ b $, но для простоты обозначений я явно не указал на эту зависимость. Обозначение $ \ | v \ | $ просто обозначает обычная функция длины для вектора $ v $.Мы назовем $ C $ квадратичная функция стоимости ; это также иногда известная как ошибка среднего квадрата или просто MSE . Рассматривая форму квадратичной функции стоимости, мы видим, что $ C (w, b) $ неотрицательно, так как каждый член в сумме неотрицателен. Кроме того, стоимость $ C (w, b) $ становится малой, т.е. $ C (w, b) \ приблизительно 0 $, именно тогда, когда $ y (x) $ приблизительно равно выходу, $ a $, для всех обучающих входов $ x $. Итак, наш алгоритм обучения выполнил хорошая работа, если он может найти веса и смещения так, чтобы $ C (w, b) \ приблизительно 0 $.Напротив, это не так хорошо, когда $ C (w, b) $ велико — это будет означать, что $ y (x) $ не близок к выходу $ a $ для большого количество входов. Итак, цель нашего алгоритма обучения будет заключаться в том, чтобы минимизировать стоимость $ C (w, b) $ как функцию весов и смещений. Другими словами, мы хотим найти набор весов и смещений, которые делают стоимость как можно меньше. Мы сделаем это, используя известный алгоритм как градиентный спуск .

Зачем вводить квадратичную стоимость? В конце концов, разве мы не в первую очередь интересует количество изображений, правильно классифицированных сеть? Почему бы не попытаться увеличить это число напрямую, а не минимизировать косвенный показатель, такой как квадратичная стоимость? Проблема с то есть количество правильно классифицированных изображений не является гладким функция весов и смещений в сети.По большей части, внесение небольших изменений в веса и смещения не вызовет никаких изменений вообще по количеству тренировочных образов классифицированных правильно. Что затрудняет понимание того, как изменить веса и смещения для повышения производительности. Если вместо этого использовать гладкую функцию стоимости как и квадратичная стоимость, оказывается легко выяснить, как внести небольшие изменения в веса и смещения, чтобы получить улучшение стоимости. Вот почему мы в первую очередь сосредотачиваемся на минимизации квадратичная стоимость, и только после этого мы рассмотрим классификацию точность.2 \ nonumber \ end {eqnarray} отлично работает для понимание основ обучения в нейронных сетях, поэтому мы придерживайся этого пока.

Итак, наша цель при обучении нейронной сети — найти веса и смещения, которые минимизируют квадратичную функцию стоимости $ C (w, b) $. Этот хорошо поставленная задача, но в ней много отвлекающей структуры в нынешней постановке — интерпретация $ w $ и $ b $ как весов и смещения, скрывающаяся в фоновом режиме функция $ \ sigma $, выбор сетевой архитектуры, MNIST и т. д.Оказывается, что мы можем понять огромное количество, игнорируя большую часть этого структура, и просто сосредоточившись на аспекте минимизации. Таким образом, для Теперь мы забудем про конкретную форму стоимости функция, подключение к нейронным сетям и т. д. Вместо, мы собираемся представить, что нам просто дали функцию многих переменные, и мы хотим минимизировать эту функцию. Шли в разработать метод под названием градиентный спуск , который можно использовать для решения таких задач минимизации.Тогда мы вернемся к конкретная функция, которую мы хотим минимизировать для нейронных сетей.

Хорошо, предположим, мы пытаемся минимизировать некоторую функцию, $ C (v) $. Это может быть любая действительная функция многих переменных, $ v = v_1, v_2, \ ldots $. Обратите внимание, что я заменил обозначения $ w $ и $ b $ на $ v $ чтобы подчеркнуть, что это может быть любая функция — мы не больше не думать конкретно в контексте нейронных сетей. Чтобы минимизировать $ C (v) $, это помогает представить $ C $ как функцию всего двух переменные, которые мы назовем $ v_1 $ и $ v_2 $:

Мы хотели бы найти, где $ C $ достигает своего глобального минимума.Сейчас же, конечно, для функции, построенной выше, мы можем взглянуть на график и найди минимум. В этом смысле я, возможно, немного показал тоже простая функция! Общая функция $ C $ может быть сложная функция многих переменных, и обычно это не будет можно просто взглянуть на график, чтобы найти минимум.

Одним из способов решения проблемы является исчисление, чтобы попытаться найти минимум аналитически. Мы могли бы вычислить производные, а затем попробовать использовать им найти места, где $ C $ — экстремум.Если повезет, что может работать, когда $ C $ является функцией одной или нескольких переменных. Но это превратится в кошмар, когда у нас будет намного больше переменных. И для нейронных сетей нам часто нужно и еще переменных — самые большие нейронные сети имеют функции затрат, которые зависят от миллиардов весов и смещений чрезвычайно сложным образом. Использование исчисления минимизировать это просто не получится!

(После утверждения, что мы получим понимание, представив $ C $ как функция всего двух переменных, я дважды перевернул абзацев и сказал: «Эй, а что, если это функция многих других чем две переменные? »Извините за это.Пожалуйста, поверьте мне, когда я говорю что действительно помогает представить $ C $ как функцию двух переменные. Просто так бывает, что картина иногда ломается, и последние два абзаца были посвящены таким поломкам. Хороший размышления о математике часто связаны с манипуляциями с несколькими интуитивными картинки, узнавая, когда уместно использовать каждую картинку, а когда это не так.)

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

На основании того, что я только что написал, можно предположить, что мы будем пытаясь записать уравнения движения Ньютона для мяча, учитывая влияние трения и силы тяжести и так далее. Фактически, мы не собираемся относиться к аналогии с мячом так серьезно — мы разрабатываем алгоритм минимизации $ C $, а не разрабатываем точное моделирование законов физики! Взгляд мяча предназначен для стимулирования нашего воображения, а не для ограничения нашего мышления.Так вместо того, чтобы вдаваться во все беспорядочные детали физики, давайте просто спросите себя: если бы мы были объявлены Богом на один день и могли бы помириться наши собственные законы физики, диктующие мячу, как он должен катиться, какой закон или законы движения мы могли бы выбрать, чтобы мяч всегда катился на дно долины?

Чтобы уточнить этот вопрос, давайте подумаем, что происходит когда мы перемещаем мяч на небольшую сумму $ \ Delta v_1 $ в $ v_1 $ направление, и небольшая сумма $ \ Delta v_2 $ в направлении $ v_2 $. T $, где $ T $ снова операция транспонирования, превращающая векторы-строки в векторы-столбцы.Т. \ tag {8} \ end {eqnarray} Сейчас мы перепишем замену $ \ Delta C $ в терминах $ \ Delta v $. и градиент $ \ nabla C $. Но прежде чем перейти к этому, я хочу чтобы прояснить то, что иногда заставляет людей зацикливаться на градиент. При первом знакомстве с обозначением $ \ nabla C $, люди иногда задаются вопросом, как они должны думать о $ \ nabla $ символ. Что именно означает $ \ nabla $? На самом деле это прекрасно нормально думать о $ \ nabla C $ как об одном математическом объекте — вектор, определенный выше, который записывается с использованием двух символы.С этой точки зрения $ \ nabla $ — это всего лишь кусок обозначение размахивания флагом, говорящее «эй, $ \ nabla C $ это градиент вектор «. Есть более продвинутые точки зрения, в которых $ \ nabla $ может рассматриваться как самостоятельный математический объект (для пример, как дифференциальный оператор), но нам не понадобятся такие точки Посмотреть.

С этими определениями выражение (7) \ begin {eqnarray} \ Delta C \ приблизительно \ frac {\ partial C} {\ partial v_1} \ Delta v_1 + \ frac {\ partial C} {\ partial v_2} \ Delta v_2 \ nonumber \ end {eqnarray} для $ \ Delta C $ можно переписать как \ begin {eqnarray} \ Delta C \ приблизительно \ набла C \ cdot \ Delta v.\ tag {9} \ end {eqnarray} Это уравнение помогает объяснить, почему $ \ nabla C $ называется градиентом vector: $ \ nabla C $ связывает изменения в $ v $ с изменениями в $ C $, так же как мы ожидаем чего-то, что называется градиентом. Но что на самом деле В уравнении интересно то, что оно позволяет нам увидеть, как выбрать $ \ Delta v $, чтобы сделать $ \ Delta C $ отрицательным. В частности, предположим мы выбираем \ begin {eqnarray} \ Delta v = — \ eta \ nabla C, \ tag {10} \ end {eqnarray} где $ \ eta $ — небольшой положительный параметр (известный как скорость обучения ).2 \ geq 0 $, это гарантирует, что $ \ Delta C \ leq 0 $, т.е. $ C $ будет всегда уменьшаться, никогда не увеличиваться, если мы изменим $ v $ в соответствии с рецепт в (10) \ begin {eqnarray} \ Delta v = — \ eta \ nabla C \ nonumber \ end {eqnarray}. (В пределах, конечно, пределы приближения в уравнении (9) \ begin {eqnarray} \ Delta C \ приблизительно \ nabla C \ cdot \ Delta v \ nonumber \ end {eqnarray}). Это именно та недвижимость, которую мы хотели! Итак, мы возьмем Уравнение (10) \ begin {eqnarray} \ Delta v = — \ eta \ nabla C \ nonumber \ end {eqnarray} для определения «закона движения» для мяча в нашем алгоритме градиентного спуска.То есть мы будем использовать Уравнение (10) \ begin {eqnarray} \ Delta v = — \ eta \ nabla C \ nonumber \ end {eqnarray} для вычисления значения для $ \ Delta v $, затем переместите положение шара $ v $ на эту величину: \ begin {eqnarray} v \ rightarrow v ‘= v — \ eta \ nabla C. \ tag {11} \ end {eqnarray} Затем мы снова воспользуемся этим правилом обновления, чтобы сделать еще один ход. Если мы продолжайте делать это снова и снова, мы будем продолжать снижать $ C $ до тех пор, пока … надеюсь — мы достигли глобального минимума.

Подводя итог, алгоритм градиентного спуска работает следующим образом: многократно вычислить градиент $ \ nabla C $, а затем перейти в против направления , «падающего» по склону долины.Мы можем визуализировать это так:

Обратите внимание, что с этим правилом градиентный спуск не воспроизводит реальный физическое движение. В реальной жизни мяч имеет импульс, и этот импульс может позволить ему катиться по склону или даже (на мгновение) катиться в гору. Только после того, как в нем возникло трение, мяч гарантированно скатится в долину. Напротив, наше правило для выбор $ \ Delta v $ просто говорит «спустись, прямо сейчас». Это все еще неплохое правило для поиска минимума!

Чтобы градиентный спуск работал правильно, нам нужно выбрать скорость обучения $ \ eta $ быть маленькой достаточно, чтобы уравнение (9) \ begin {eqnarray} \ Delta C \ приблизительно \ nabla C \ cdot \ Delta v \ nonumber \ end {eqnarray} — хорошее приближение.Если мы этого не делаем, мы можем получить $ \ Delta C> 0 $, что, очевидно, не будь хорошим! В то же время мы не хотим, чтобы $ \ eta $ было слишком маленьким, так как это сделает изменения $ \ Delta v $ крошечными, и, следовательно, Алгоритм градиентного спуска будет работать очень медленно. В практике реализации, $ \ eta $ часто меняется так, чтобы Уравнение (9) \ begin {eqnarray} \ Delta C \ приблизительно \ nabla C \ cdot \ Delta v \ nonumber \ end {eqnarray} остается хорошим приближением, но алгоритм не слишком медленный.Т. \ tag {13} \ end {eqnarray} Как и в случае с двумя переменными, мы можем выбирать \ begin {eqnarray} \ Delta v = — \ eta \ nabla C, \ tag {14} \ end {eqnarray} и нам гарантируется, что наш (приблизительный) выражение (12) \ begin {eqnarray} \ Delta C \ приблизительно \ nabla C \ cdot \ Delta v \ nonumber \ end {eqnarray} для $ \ Delta C $ будет отрицательным. Это дает нам возможность минимизировать градиент, даже если $ C $ является функцией многих переменных, многократно применяя обновление правило \ begin {eqnarray} v \ rightarrow v ‘= v- \ eta \ nabla C.\ tag {15} \ end {eqnarray} Вы можете думать об этом правиле обновления как о , определяющем градиент алгоритм спуска. Это дает нам возможность многократно менять позиция $ v $, чтобы найти минимум функции $ C $. Правило не всегда работает — несколько вещей могут пойти не так и помешать градиентный спуск от нахождения глобального минимума $ C $, точку мы вернитесь к исследованию в следующих главах. Но на практике градиент спуск часто работает очень хорошо, и в нейронных сетях мы найдем что это мощный способ минимизировать функцию затрат, и поэтому помогая сети учиться.

Действительно, есть даже смысл, в котором градиентный спуск является оптимальным. Стратегия поиска минимум. Предположим, мы пытаемся сделать перемещение $ \ Delta v $ в позицию так, чтобы уменьшить $ C $ на возможный. Это эквивалентно минимизации $ \ Delta C \ приблизительно \ nabla C \ cdot \ Delta v $. Мы ограничим размер хода так, чтобы $ \ | \ Delta v \ | = \ epsilon $ для небольшого фиксированного $ \ epsilon> 0 $. В другом словами, нам нужен небольшой шаг фиксированного размера, и мы пытаясь найти направление движения, которое уменьшает $ C $ на столько, возможный.Можно доказать, что выбор $ \ Delta v $, который минимизирует $ \ nabla C \ cdot \ Delta v $ is $ \ Delta v = — \ eta \ nabla C $, где $ \ eta = \ epsilon / \ | \ nabla C \ | $ определяется размером ограничение $ \ | \ Delta v \ | = \ эпсилон $. Итак, градиентный спуск может быть рассматривается как способ делать небольшие шаги в направлении, которое большинство, чтобы немедленно уменьшить $ C $.

Упражнения
  • Докажите утверждение последнего абзаца. Подсказка: Если вы еще не знакомы с Коши-Шварц неравенство, возможно, вам будет полезно ознакомиться с этим.
  • Я объяснил градиентный спуск, когда $ C $ является функцией двух переменные, и когда это функция более двух переменных. Что происходит, когда $ C $ является функцией только одной переменной? Ты можешь предоставить геометрическую интерпретацию того, что делает градиентный спуск в одномерном случае?

Люди исследовали множество вариантов градиентного спуска, включая варианты, которые более точно имитируют настоящий физический мяч. Эти варианты имитации мяча имеют некоторые преимущества, но также имеют главный недостаток: оказывается, что необходимо вычислить второй частные производные от $ C $, и это может быть довольно дорогостоящим. 2 \ nonumber \ end {eqnarray}.Чтобы увидеть, как это работает, давайте повторно сформулируйте правило обновления градиентного спуска с весами и смещениями заменяя переменные $ v_j $. Другими словами, наша «позиция» сейчас имеет компоненты $ w_k $ и $ b_l $, а вектор градиента $ \ nabla C $ имеет соответствующие компоненты $ \ partial C / \ partial w_k $ и $ \ partial C / \ частичный b_l $. Записываем правило обновления градиентного спуска в с точки зрения компонентов, мы имеем \ begin {eqnarray} w_k & \ rightarrow & w_k ‘= w_k- \ eta \ frac {\ partial C} {\ partial w_k} \ tag {16} \\ b_l & \ rightarrow & b_l ‘= b_l- \ eta \ frac {\ partial C} {\ partial b_l}.\ tag {17} \ end {eqnarray} Повторно применяя это правило обновления, мы можем «скатиться с холма», и надеюсь найти минимум функции стоимости. Другими словами, это правило можно использовать для обучения в нейронной сети.

При применении градиентного спуска возникает ряд проблем. правило. Мы подробно рассмотрим их в следующих главах. 2 \ nonumber \ end {eqnarray}.2} {2} $ для физических лиц обучающие примеры. На практике для вычисления градиента $ \ nabla C $ мы необходимо вычислить градиенты $ \ nabla C_x $ отдельно для каждого обучающий ввод, $ x $, а затем их усреднение, $ \ nabla C = \ frac {1} {n} \ sum_x \ nabla C_x $. К сожалению, когда количество обучающих входов очень большой, это может занять много времени, поэтому обучение происходит медленно.

Идея под названием стохастический градиентный спуск может быть использована для ускорения до обучения. Идея состоит в том, чтобы оценить градиент $ \ nabla C $ как вычисление $ \ nabla C_x $ для небольшой выборки случайно выбранного обучения входы.При усреднении по этой небольшой выборке оказывается, что мы можем быстро получить хорошую оценку истинного градиента $ \ nabla C $, и это помогает ускорить градиентный спуск, а значит, и обучение.

Чтобы сделать эти идеи более точными, работает стохастический градиентный спуск. случайный выбор небольшого количества $ m $ случайно выбранных тренировок входы. m \ nabla C_ {X_ {j}}} {m} \ приблизительно \ frac {\ sum_x \ nabla C_x} {n} = \ nabla C, \ tag {18} \ end {eqnarray} где вторая сумма — по всему набору обучающих данных.m \ nabla C_ {X_ {j}}, \ tag {19} \ end {eqnarray} подтверждая, что мы можем оценить общий градиент путем вычисления градиенты только для случайно выбранной мини-партии.

Чтобы явно связать это с обучением в нейронных сетях, предположим $ w_k $ и $ b_l $ обозначают веса и смещения в нашей нейронной сети. Тогда стохастический градиентный спуск работает, выбирая случайным образом выбранный мини-пакет обучающих входов, и обучение с ними, \ begin {eqnarray} w_k & \ rightarrow & w_k ‘= w_k- \ frac {\ eta} {m} \ sum_j \ frac {\ partial C_ {X_j}} {\ partial w_k} \ tag {20} \\ b_l & \ rightarrow & b_l ‘= b_l- \ frac {\ eta} {m} \ sum_j \ frac {\ partial C_ {X_j}} {\ partial b_l}, \ tag {21} \ end {eqnarray} где суммы взяты по всем обучающим примерам $ X_j $ в текущем мини-партия.Затем выбираем еще одну случайно выбранную мини-партию и тренируйтесь с ними. 2 \ nonumber \ end {eqnarray} мы масштабировали общую стоимость функция множителем $ \ frac {1} {n} $.Иногда люди пропускают $ \ frac {1} {n} $, суммируя затраты на отдельные примеры обучения вместо усреднения. Это особенно полезно, когда общая количество обучающих примеров заранее не известно. Это может произойти, если например, в режиме реального времени создается больше обучающих данных. И аналогичным образом правила мини-пакетного обновления (20) \ begin {eqnarray} w_k & \ rightarrow & w_k ‘= w_k- \ frac {\ eta} {m} \ sum_j \ frac {\ partial C_ {X_j}} {\ partial w_k} \ nonumber \ end {eqnarray} и (21) \ begin {eqnarray} b_l & \ rightarrow & b_l ‘= b_l- \ frac {\ eta} {m} \ sum_j \ frac {\ partial C_ {X_j}} {\ partial b_l} \ nonumber \ end {eqnarray} иногда пропускают член $ \ frac {1} {m} $ из перед суммами.Концептуально это не имеет большого значения, поскольку это эквивалентно изменению масштаба скорости обучения $ \ eta $. Но когда делаешь стоит обратить внимание на подробные сравнения разных работ.

Мы можем рассматривать стохастический градиентный спуск как политический опрос: намного проще отобрать небольшую мини-серию, чем применить градиентный спуск ко всему пакету, как при проведении опроса легче, чем провести полные выборы. Например, если у нас есть обучающий набор размером $ n = 60 000 $, как в MNIST, и выберите размер мини-партии (скажем) $ m = 10 $, это означает, что мы получим коэффициент Ускорение оценки градиента на 6000 долларов! Конечно, оценка не будет идеальным — будут статистические колебания — но это не обязательно быть идеальным: все, что нас действительно волнует, — это двигаться в общее направление, которое поможет снизить $ C $, а это значит, что мы не нужен точный расчет градиента.На практике стохастический градиентный спуск — широко используемый и мощный метод для обучение в нейронных сетях, и это основа для большинства методы обучения, которые мы разработаем в этой книге.

Упражнение
  • Экстремальный вариант градиентного спуска — использовать мини-пакет размером всего 1. То есть, учитывая ввод для обучения, $ x $, мы обновляем наши веса и смещения по правилам $ w_k \ rightarrow w_k ‘= w_k — \ eta \ partial C_x / \ partial w_k $ и $ b_l \ rightarrow b_l ‘= b_l — \ eta \ partial C_x / \ partial b_l $.Затем мы выбираем другой обучающий ввод и снова обновите веса и смещения. И так далее, несколько раз. Эта процедура известна как онлайн , онлайн или инкрементальное обучение. В онлайн-обучении нейронная сеть обучается только по одному обучающему входу за раз (просто как люди). Назовите одно преимущество и один недостаток онлайн-обучение по сравнению со стохастическим градиентным спуском с размер мини-партии, скажем, 20 $.

Позвольте мне завершить этот раздел, обсудив момент, в котором иногда возникают ошибки люди, плохо знакомые с градиентным спуском. В нейронных сетях стоимость $ C $ составляет, конечно, функция многих переменных — все веса и смещения — и таким образом в некотором смысле определяет поверхность в очень многомерной Космос. Некоторые люди зацикливаются на мысли: «Эй, я должен уметь визуализируйте все эти дополнительные измерения ». И они могут начать волноваться: «Я не могу мыслить в четырех измерениях, не говоря уже о пяти (или пяти миллион) ».Есть ли у них какие-то особые способности? способности, которые есть у «настоящих» суперматематиков? Конечно, ответ нет. Даже самые профессиональные математики не могут представить себе четыре габариты особенно хорошо, если вообще. Вместо этого они используют трюк заключается в разработке других способов представления того, что происходит. Это именно то, что мы сделали выше: мы использовали алгебраический (а не визуальный) представление $ \ Delta C $, чтобы выяснить, как двигаться, чтобы уменьшить $ C $. Люди, которые умеют мыслить большими измерениями, имеют ментальная библиотека, содержащая множество различных техник по этим линии; наш алгебраический трюк — лишь один пример.Эти методы могут не иметь той простоты, к которой мы привыкли при визуализации трех размеров, но как только вы создадите библиотеку таких методов, вы может довольно хорошо мыслить в больших измерениях. Я не буду вдаваться в подробнее здесь, но если вам интересно, то можете почитать этот обсуждение некоторых методик профессиональных математиков привык мыслить большими измерениями. Хотя некоторые приемы обсуждаются довольно сложно, большая часть лучшего контента интуитивно понятна и доступны и могут быть освоены кем угодно.

Реализация нашей сети для классификации цифр

Хорошо, давайте напишем программу, которая научится распознавать рукописные цифры с использованием стохастического градиентного спуска и MNIST данные обучения. Мы сделаем это с помощью небольшой программы на Python (2.7), просто 74 строки кода! Первое, что нам нужно, это получить данные MNIST. Если вы являетесь пользователем git, вы можете получить данные путем клонирования репозиторий кода для этой книги,

 git clone https://github.com/mnielsen/neural-networks-and-deep-learning.мерзавец
 

Если вы не используете git, вы можете скачать данные и код Вот.

Между прочим, когда я описывал данные MNIST ранее, я сказал, что это разделить на 60 000 обучающих изображений и 10 000 тестовых изображений. Это официальное описание MNIST. Собственно, мы собираемся разделить данные на немного иначе. Мы оставим тестовые изображения как есть, но разделим Обучающий набор MNIST из 60000 изображений состоит из двух частей: набор из 50000 изображений. изображения, которые мы будем использовать для обучения нашей нейронной сети, и отдельный Набор для проверки 10 000 изображений .Мы не будем используйте данные проверки из этой главы, но позже в книге мы найти его полезным при выяснении того, как установить определенные гиперпараметры нейронной сети — например, скорость обучения и т. д., которые не выбираются напрямую нашими алгоритм обучения. Хотя данные проверки не являются частью оригинальная спецификация MNIST, многие люди используют MNIST таким образом, и использование данных проверки является обычным явлением в нейронных сетях. Когда я обращайтесь к «обучающим данным MNIST», я буду иметь в виду наш набор данных из 50000 изображений, а не исходные данные из 60000 изображений задавать* * Как отмечалось ранее, набор данных MNIST основан на двух данных наборы, собранные NIST, Национальным институтом США Стандарты и технологии.Для построения MNIST наборы данных NIST были урезаны и помещены в более удобный формат Янном ЛеКун, Коринна Кортес и Кристофер Дж. С. Берджес. Увидеть эта ссылка для получения дополнительной информации Детали. Набор данных в моем репозитории находится в форме, которая делает его легко загружать данные MNIST и манипулировать ими в Python. Я получил эта конкретная форма данных из машинного обучения LISA лаборатория Монреальского университета (ссылка) ..

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

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

 класс Сеть (объект):

    def __init __ (себя, размеры):
        self.num_layers = len (размеры)
        self.sizes = размеры
        self.biases = [np.random.randn (y, 1) для y в размерах [1:]]
        я.веса = [np.random.randn (y, x)
                        для x, y в zip (размеры [: - 1], размеры [1:])]
 

В этом коде размеры списка содержат количество нейронов в соответствующие слои. Так, например, если мы хотим создать Сетевой объект с 2 нейронами в первом слое, 3 нейронами в второй слой и 1 нейрон в последнем слое, мы бы сделали это с код:

Предубеждения и веса в объекте Network инициализируются случайным образом, используя Numpy np.random.randn функция для генерации Гаусса распределения со средним значением $ 0 $ и стандартным отклонением $ 1 $. Этот случайный инициализация дает нашему алгоритму стохастического градиентного спуска место начать с. В следующих главах мы найдем лучшие способы инициализация весов и смещений, но пока этого достаточно. Заметка что код инициализации сети предполагает, что первый слой нейронов является входным слоем и не устанавливает каких-либо смещений для эти нейроны, поскольку смещения используются только при вычислении выходы из более поздних слоев.{\ rm th} $ нейрон в третьем слое. Этот заказ индексов $ j $ и $ k $ может показаться странным — наверняка это принесет больше смысл поменять местами индексы $ j $ и $ k $? Большое преимущество использование этого порядка состоит в том, что это означает, что вектор активации третий слой нейронов: \ begin {eqnarray} а ‘= \ сигма (ш а + Ь). \ tag {22} \ end {eqnarray} В этом уравнении много чего происходит, так что давайте разберемся. кусочек за кусочком. $ a $ — вектор активаций второго слоя нейронов.Чтобы получить $ a ‘$, умножаем $ a $ на весовую матрицу $ w $, и добавьте вектор смещений $ b $. Затем мы применяем функцию $ \ sigma $ поэлементно к каждой записи в векторе $ w a + b $. (Это называется векторизация функция $ \ sigma $.) Легко проверить, что Уравнение (22) \ begin {eqnarray} a ‘= \ sigma (w a + b) \ nonumber \ end {eqnarray} дает тот же результат, что и наш предыдущее правило, уравнение (4) \ begin {eqnarray} \ frac {1} {1+ \ exp (- \ sum_j w_j x_j-b)} \ nonumber \ end {eqnarray}, для вычисление выхода сигмовидного нейрона.

Упражнение

Заблуждения 10 о нейронных сетях


Предупреждение : preg_replace (): модификатор / e больше не поддерживается, используйте вместо него preg_replace_callback в /home/customer/www/turingfinance.com/public_html/wp-content/plugins/latex/latex.php on line 47

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

  1. Нейронные сети не модели человеческого мозга
  2. Нейронные сети — это не просто «слабая форма» статистики
  3. Нейронные сети бывают разных архитектур
  4. Размер имеет значение, но больше не всегда лучше
  5. Для нейронных сетей существует множество обучающих алгоритмов
  6. Нейронные сети не всегда требуют большого количества данных
  7. Нейронные сети невозможно обучить ни на каких данных
  8. Возможно, потребуется переобучение нейронных сетей
  9. Нейронные сети — это не черные ящики
  10. Нейронные сети несложно реализовать

1.Нейронные сети не модели человеческого мозга

Человеческий мозг — одна из величайших загадок нашего времени, и ученые не пришли к единому мнению о том, как именно он работает. Существуют две теории мозга, а именно теория бабушкиной клетки и теория распределенного представления. Первая теория утверждает, что отдельные нейроны обладают высокой информационной емкостью и способны представлять сложные концепции, такие как ваша бабушка или даже Дженнифер Энистон. Вторая теория нейронов утверждает, что нейроны намного проще и представления сложных объектов распределены по многим нейронам.Искусственные нейронные сети во многом вдохновлены второй теорией.

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

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

Еще одна большая разница между мозгом и нейронными сетями — это размер и организация.

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

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