Первым шагом к пониманию того, как работает глубокое обучение, является понимание различий между несколькими важными терминами.
Нейронная сеть (искусственная нейронная сеть) — это попытка воспроизведения работы человеческого мозга на компьютере при помощи слоев нейронов.
Искусственный интеллект — способность машины или программы находить решения при помощи вычислений.
Во время первых исследований в области ИИ ученые пытались воспроизвести человеческий интеллект для решения конкретных задач — например, игры с человеком. Было введено большое количество правил, которым должен следовать компьютер. На основе этих правил компьютер принимал решения в согласии с конкретным списком возможных действий.
Машинное обучение — это попытка научить компьютеры самостоятельно обучаться на большом количестве данных вместо жестко постулированных правил.
Машинное обучение позволяет компьютерам самостоятельно обучаться. Это возможно благодаря вычислительной мощности современных компьютеров, которые могут легко обрабатывать большие наборы данных.
Контролируемое обучение (обучение с учителем, supervised learning) подразумевает использование помеченных наборов данных, содержащих входные данные и ожидаемые выходные результаты. Когда вы обучаете нейронную сеть с помощью контролируемого обучения, вы подаете как входные данные, так и ожидаемые выходные результаты.
Если результат, генерируемый нейронной сетью, неверен, она скорректирует свои вычисления. Это итерационный процесс, оканчивающийся тогда, когда сеть перестает совершать ошибки.
Примером задачи с контролируемым обучением является предсказание погоды. Нейросеть учится делать прогноз погоды с использованием исторических данных. Обучающие данные включают в себя входные данные (давление, влажность, скорость ветра) и выходные результаты (температура).
Неконтролируемое обучение (обучение без учителя, unsupervised learning) — это машинное обучение с использованием наборов данных без определенной структуры.
Когда вы обучаете нейросеть неконтролируемо, она самостоятельно проводит логическую классификацию данных. Примером задачи с неконтролируемым обучением является предсказание поведения посетителей интернет-магазинов. В этом случае сеть не обучается на размеченных даннх. Вместо этого она самостоятельно классифицирует входные данные и отвечает на вопрос, какие пользователи чаще всего покупают различные товары.
Глубокое обучение
Теперь вы подготовлены к изучению того, что такое глубокое обучение и как оно работает.
Глубокое обучение — это метод машинного обучения. Глубокое обучение позволяет обучать модель предсказывать результат по набору входных данных. Для обучения сети можно использовать как контролируемое, так и неконтролируемое обучение.
Разница между машинным и глубоким обучением
Рассмотрим, как работает глубокое обучение, на примере сервиса по оценке стоимости авиабилета. Мы будем обучать его контролируемым образом.
Мы хотим, чтобы наш сервис предсказывал цену на авиабилет по следующим входным данным:
- аэропорт вылета;
- аэропорт назначения;
- дата отбытия;
- авиакомпания.
Нейронные сети глубокого обучения
Давайте заглянем внутрь нашей модели. Как и у животных, искусственная нейронная сеть содержит взаимосвязанные нейроны. На диаграмме они представлены кругами:
Глубокая нейронная сеть (с двумя скрытыми слоями)
Нейроны сгруппированы в три различных типа слоев:
- входной слой;
- скрытый слой (слои);
- выходной слой.
Входной слой принимает входные данные. В нашем случае имеется четыре нейрона на входном слое: аэропорт вылета, аэропорт назначения, дата вылета и авиакомпания. Входной уровень передает эти данные в первый скрытый слой.
Скрытые слои выполняют математические вычисления со входными данными. Одна из задач при создании нейронных сетей — определение количества скрытых слоев и нейронов на каждом слое.
Выходной слой выдает результат. В нашем случае это прогноз цены на билет.
Итак, как же вычисляется цена? Здесь вступает в силу магия глубокого обучения. Нейроны связаны между собой с определенным весом. Вес определяет важность элемента входных данных. Исходные веса задаются случайным образом.
При прогнозировании цены на билет дата вылета является одним из наиболее важных факторов. Следовательно, связи нейрона времени вылета будут иметь большой вес.
После того, как набор входных данных прошел через все слои нейронной сети, функция активации возвращает выходные результаты через выходной уровень.
Обучение глубокой сети
Обучение нейросети — самая сложная часть глубокого обучения. Почему?
- Вам нужен большой набор данных.
- Вам нужно большое количество вычислительной мощности.
Для оценки стоимости билета нужно найти исторические данные о ценах на билеты. Из-за большого количества возможных комбинаций аэропортов и дат вылета нам нужен очень большой список цен на билеты.
Для обучения сети нужно подать в нее подготовленные данные и сравнить сгенерированные ей выходные результаты с результатами из нашего тестового набора данных. Поскольку сеть еще не обучена, результаты будут неверными.
После пропуска всех данных можно определить функцию, которая будет показывать нам, насколько результаты работы алгоритма отличаются от реальных данных. Эта функция называется функцией потерь.
В идеале мы хотим, чтобы функция потерь была равна нулю. В этом случае выходные результаты работы сети полностью совпадают с результатами тестового набора данных.
Нужно менять веса между нейронами. Можно делать это случайным образом до тех пор, пока функция потерь не станет равной нулю, но это не очень эффективно.
Вместо этого мы будем использовать метод градиентного спуска. Градиентный спуск — это метод, который позволяет найти минимум функции. В нашем случае мы ищем минимум функции потерь.
Суть метода состоит в небольшом изменении весов после каждой итерации. Вычисляя производную (или градиент) функции потерь при определенном наборе весов, можно определить, в каком направлении находится минимум.
Для минимизации функции потерь нужно многократно перебирать данные. Именно поэтому нам требуется большая вычислительная мощность. Уточнение весов с помощью градиентного спуска выполняется автоматически. В этом и состоит магия глубокого обучения!
После обучения можно использовать разработанный нами сервис для прогнозирования цен на авиабилеты.
В сухом остатке:
- Глубокое обучение использует нейронную сеть для воспроизведения интеллекта животных.
- Существует три типа слоев нейронов в нейронной сети: входной слой, скрытый слой (слои) и выходной слой.
- Связи между нейронами имеют вес, определяемый важностью элемента входных данных.
- Для обучения глубокой нейронной сети необходим реально большой набор данных.
- Итерационно сравнивая выходные результаты со включенными в набор данными, можно вычислить функцию потерь, указывающую, насколько сильно ошибается алгоритм.
- После каждой итерации (epoch) веса между нейронами перераспределяются с помощью метода градиентного спуска для минимизации функции потерь.
Koji Hashimoto / Physical Review D, 2019
Идея голографической дуальности, или AdS/CFT-соответствия — это один из ключевых результатов современной теоретической физики. Первые намеки на AdS/CFT-соответствие обнаружил в 1997 году Хуан Малдасена, с тех пор физики посвятили изучению этой темы по меньшей мере несколько тысяч (а то и десятков тысяч) статей. Если кратко, то идея AdS/CFT-соответствия заключается в том, что конформная теория поля в d-мерном пространстве (CFTd) ведет себя абсолютно так же, как классическая теория гравитации в (d+1)-мерном пространстве анти-де Ситтера (AdSd+1). Если строго, то в том, что производящий функционал квантовой теории поля в пределе большого числа степеней свободы равен экспоненте от действия Эйнштейна — Гильберта.
Tatsuma Nishioka et al. / Journal of Physics A, 2007
Уважаемое хабросообщество, решил поделиться с вами моими наработками в изучении нейросети Машины Больцмана, сделанными в студенческие года.
В России по данной теме было крайне мало информации. Даже руководитель нашей кафедры не мог мне помочь с материалом. Благо наш университет состоял в единой международной базе, и была возможность воспользоваться зарубежным опытом. В частности, большая часть была найдена в литературе оксфордского университета. По сути, данная статья является сборником информации из различных источников, переосмысленная и изложенная достаточно понятным языком, как мне кажется. Надеюсь кому-то будет интересно. Когда-то меня это заставляло не спать ночами.
Итак, приступим.
Сеть Хопфилда
На стадии инициализации сети весовые коэффициенты синапсов устанавливаются следующим образом [3][4]:
(1)
Здесь i и j – индексы, соответственно, предсинаптического и постсинаптического нейронов; xik, xjk – i-ый и j-ый элементы вектора k-ого образца.
Алгоритм функционирования сети следующий (p – номер итерации):
1. На входы сети подается неизвестный сигнал. Фактически его ввод осуществляется непосредственной установкой значений аксонов:
Yi(0) = xi, i = 0. n-1 (2)
поэтому обозначение на схеме сети входных синапсов в явном виде носит чисто условный характер. Ноль в скобке справа от yi означает нулевую итерацию в цикле работы сети.
2. Рассчитывается новое состояние нейронов
(3)
и новые значения аксонов
(4)
Рис. 4 Активационные функции
где f – активационная функция в виде скачка, приведенная на рисунке (4)
3. Проверка, изменились ли выходные значения аксонов за последнюю итерацию. Если да – переход к пункту 2, иначе (если выходы застабилизировались) – конец. При этом выходной вектор представляет собой образец, наилучшим образом сочетающийся с входными данными.
Как говорилось выше, иногда сеть не может провести распознавание и выдает на выходе несуществующий образ. Это связано с проблемой ограниченности возможностей сети. Для сети Хопфилда число запоминаемых образов m не должно превышать величины, примерно равной 0.15•n. Кроме того, если два образа А и Б сильно похожи, они, возможно, будут вызывать у сети перекрестные ассоциации, то есть предъявление на входы сети вектора А приведет к появлению на ее выходах вектора Б и наоборот.
Так же для полного понимания функционирования сети необходимо упомянуть о правиле Хебба.
Правило обучения для сети Хопфилда опирается на исследования Дональда Хебба (D.Hebb, 1949), который предположил, что синаптическая связь, соединяющая два нейрона будет усиливатьося, если в процессе обучения оба нейрона согласованно испытывают возбуждение либо торможение. Простой алгоритм, реализующий такой механизм обучения, получил название правила Хебба. Рассмотрим его подробно.
Синхронный и асинхронный вариант активации
Рассмотрим поведение сети во времени при фиксированной матрице весов. Пускай в момент t=0 мы предали вектору состояния некоторое значение. Существуют два варианта дальнейшего процесса работы сети: синхронный и асинхронный. Синхронный вариант работы заключается в том, что все нейроны одновременно изменят своё состояние в момент t+1 согласно состоянию сети на момент t. В случае асинхронной работы в момент t+1 своё состояние изменяет только один нейрон, в момент t+2 некоторый другой нейрон согласно состоянию сети в момент t+1 и т.д. (каждый раз нейрон выбирается случайно). В любом случае с течением времени сеть каким-то образом изменяет своё состояние. Утверждается, что при наложенных нами условиях на матрицу весов сеть через какое-то конечное время придёт в стационарное состояние, то есть. Так же утверждается, что это стационарное состояние S достигается и является одним и тем же вне зависимости от синхронности работы нейронов.
Машины Больцмана (Вероятностная сеть)
Друзья, это пока все что я успел вспомнить и найти в своих запасниках.
В следующей статье хочу описать уже прикладной аспект этого вопроса, а именно разработку программы использующую алгоритм Машины Больцмана. Решение будет на задача коммивояжора.
Всем спасибо за внимание.
Очень жду комментариев и вопросов.