Сочетание прогнозирующих математических моделей и лабораторных экспериментов, проведенных Международной школой передовых исследований (Scuola Internazionale Superiore di Studi Avanzati, SISSA, Италия) пролило свет на несколько механизмов, стоящих за явлением кодирования информации, — пишет eurekalert.org.
По словам ученых, наш мозг работает «как книга, в которой отдельные страницы несут небольшие части общего текста, или как группа людей, которые насвистывают очень похожую мелодию».
Это феномен «взаимосвязи», при котором отдельные нейроны не всегда действуют как независимые единицы в получении и передаче информации, а часто как группа людей с похожими и одновременными действиями.
Наблюдая за электрической активностью этих клеток в лаборатории, вместе с использованием компьютеризированных математических моделей группа исследователей во главе с профессором Микеле Джулиано из SISSA впервые пролила свет на клеточные механизмы, лежащие в основе этих корреляций.
В ходе исследования ученые исследовали возбуждающие нейроны, предназначенные для стимулирования электрической активности других нейронов, и тормозные нейроны, предназначенные для подавления их активности.
«Наше открытие говорит нам, что возбуждающие клетки предпочитают индивидуальность и не обмениваются между собой большим количеством сообщений, в то время как ингибирующие клетки действуют вместе как единое целое. Это позволяет нам добавить новую информацию к пониманию того, как нейроны организуют информацию в мозге. «Информация всегда представлена электрической активностью групп клеток», — объясняет профессор Джульяно.
Исследование, поясняют авторы, было проведено с использованием комбинации математических моделей, предназначенных для прогнозирования электрического поведения нейронов, и непосредственных наблюдений, проведенных на нейронах в лаборатории. Это очень интересный комплексный подход по разным причинам.
Джульяно объясняет: «Сопровождение экспериментального открытия теорией усиливает его влияние. Более того, поскольку наши модели максимально просты, мы можем сосредоточить наше понимание на биологических механизмах, а не на описании исключительно их эффекта.
Этот подход стоит за текущим прогрессом в нейробиологии и открывает очень интересные направления исследований в области исследований мозга».
Избыточность электрической активности нейронов коры головного мозга, также называемая ко-изменчивостью, известна в течение некоторого времени. Сходство в поведении касается как входных данных, которыми обмениваются нейроны, так и их выходных данных, а именно ответа после входящего сообщения.
Пока не совсем известно, «как подобные входы генерируют одинаковые выходы, с точки зрения клеточных механизмов. Поэтому выяснение этих механизмов и изучение того, как различные типы клеток участвуют в этом явлении, является фундаментальным шагом в окончательном понимании сложных цепей мозга».
Джульяно продолжает: «Изучая биофизические характеристики этого явления, мы заметили, что возбуждающие нейроны имеют тенденцию препятствовать избыточности их выходов, возможно, потому что их действие должно быть однозначным и более информативным, учитывая, что их сообщения исходят из коры.
Ингибирующие нейроны делают наоборот: эти клетки, как правило, работают вместе, используя эту избыточность для синхронизации и усиления своих эффектов. Мы до сих пор не можем полностью объяснить роль корреляций в мозге, но мы, безусловно, обнаружили, что эти две категории нейронов должны рассматриваться в новом свете: они не идентичны». Тем не менее, это еще не все.
Джульяно заключает: «Это исследование является наиболее точным экспериментальным подтверждением простой математической теории, которая описывает, как электрическая активность нейронов проявляется и изменяется во времени».
[ eurekalert.org]
Информация предоставлена Информационным агентством «Научная Россия». Свидетельство о регистрации СМИ: ИА № ФС77-62580, выдано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций 31 июля 2015 года.
В вашем браузере отключен JavaScript. Будет показана упрощенная версия сайта, в которой могут отсутствовать многие функции.
«Туда и обратно» для нейронных сетей, или обзор применений автокодировщиков в анализе текстов
Мы уже писали в самой первой статье нашего корпоративного блога о том, как работает алгоритм обнаружения переводных заимствований. Лишь пара абзацев в той статье посвящена теме сравнения текстов, хотя идея достойна гораздо более развернутого описания. Однако, как известно, обо всем сразу рассказать нельзя, хоть и очень хочется.
В попытках воздать должное этой теме и архитектуре сети под названием «автокодировщик», к которой мы питаем очень теплые чувства, мы с Oleg_Bakhteev и написали этот обзор. Источник: Deep Learning for NLP (without Magic) Как мы упоминали в той статье, сравнение текстов у нас было “смысловое” – мы сопоставляли не сами текстовые фрагменты, а векторы, им соответствующие. Такие векторы получались в результате обучения нейронной сети, которая отображала текстовый фрагмент произвольной длины в вектор большой, но фиксированной размерности. Как получить такое отображение и как научить сеть выдавать нужные результаты – отдельный вопрос, о которой и пойдет речь ниже. Формально, автокодировщиком (или автоэнкодером) называется нейронная сеть, которая тренируется восстанавливать объекты, принимаемые на вход сети. Автокодировщик состоит из двух частей: энкодера f, который кодирует выборку X в свое внутреннее представление H, и декодера g, который восстанавливает исходную выборку. Таким образом, автокодировщик пытается совместить восстановленную версию каждого объекта выборки с исходным объектом. При обучении автокодировщика минимизируется следующая функция:
Где за r обозначается восстановленная версия исходного объекта:
Рассмотрим пример, представленный в blog.keras.io:
На вход сеть принимает объект x (в нашем случае — цифра 2).
Наша сеть кодирует этот объект в скрытое состояние. Затем по скрытому состоянию восстанавливается реконструкция объекта r, которая должна быть похожа на x. Как мы видим, восстановленное изображение (справа) стало более размытым. Объясняется это тем, что мы стараемся сохранить в скрытом представлении только наиболее важные признаки объекта, поэтому объект восстанавливается с потерями.
- Модель автокодировщика обучается по принципу испорченного телефона, где один человек (encoder) передает второму человеку (decoder) информацию (x), а тот в свою очередь, рассказывает его третьему (r(x)).
- Здесь можно провести аналогию с методом главных компонент: это метод снижения размерности, результатом работы которого является проекция выборки на подпространство, в котором дисперсия этой выборки максимальна.
- Пример сравнения метода главных компонент и автокодировщика представлен в статье Reducing the Dimensionality of Data with Neural Networks:
Одно из основных предназначений таких автокодировщиков — снижение размерности исходного пространства. Когда мы имеем дело с автокодировщиками, то сама процедура тренировки нейросети заставляет автокодировщик запоминать основные признаки объектов, по которым будет проще восстановить исходные объекты выборки. Действительно, автокодировщик является обобщением метода главных компонент: в случае, когда мы ограничиваемся рассмотрением линейных моделей, автокодировщик и метод главных компонент дают одинаковые векторные представления. Разница возникает, когда мы рассматриваем в качестве энкодера и декодера более сложные модели, например, многослойные полносвязные нейронные сети. Здесь продемонстрированы результаты обучения автокодировщика и метода главных компонент для выборки изображений человеческих лиц. В первой строке показаны лица людей из контрольной выборки, т.е. из специально отложенной части выборки, которая не использовалась алгоритмами в процессе обучения. На второй и третьей строке — восстановленные изображения из скрытых состояний автокодировщика и метода главных компонент соответственно одинаковой размерности. Здесь хорошо заметно, насколько более качественно сработал автокодировщик.
В этой же статье еще один показательный пример: сравнение результатов работы автокодировщика и метода LSA для задачи информационного поиска. Метод LSA, как и метод главных компонент, является классическим методом машинного обучения и часто применяется в задачах, связанных с обработкой естественного языка.
На рисунке представлены 2D-проекции множества документов, полученные с помощью автокодировщика и метода LSA. Цветами обозначена тематика документа. Видно, что проекция от автокодировщика хорошо разбивает документы по темам, в то время как LSA выдает куда более зашумленный результат.
Другим важным применением автокодировщиков является предобучение сетей. Предобучение сетей применяется в случае, когда оптимизируемая сеть является достаточно глубокой. В этом случае обучение сети “с нуля” может оказаться досточно сложным, поэтому сначала всю сеть представляют в виде цепочки энкодеров.
Алгоритм предобучения достаточно прост: для каждого слоя мы обучаем свой автокодировщик, и затем задаем, что выход очередного энкодера является одновременно входом для последующего слоя сети. Полученная модель состоит из цепочки энкодеров, обученных жадно сохранять наиболее важные признаки объектов, каждый на своем слое. Схема предобучения представлена ниже: Источник: psyyz10.github.io Такая структура называется Stacked Autoencoder и часто применяется как “разгон” для дальнейшего обучения полной модели глубокой сети. Мотивация такого обучения нейросети заключается в том, что глубокая нейросеть является невыпуклой функцией: в процессе обучения сети оптимизация параметров может “застрять” в локальном минимуме. Жадное предобучение параметров сети позволяет найти хорошую точку старта для итогового обучения и тем самым постараться избежать таких локальных минимумов.
Конечно, мы рассмотрели далеко не все возможные структуры, ведь есть еще Sparse Autoencoders, Denoising Autoencoders, Contractive Autoencoder, Reconstruction Contractive Autoencoder.
Они различаются между собой использованием различных функций ошибки и штрафных слагаемых к ним. Все эти архитектуры, как нам кажется, достойны отдельного обзора.
В нашей же статье мы показываем прежде всего общую концепцию автокодировщиков и те конкретные задачи текстового анализа, которые решаются с его использованием.
А как это работает в текстах?
Перейдем теперь к конкретным примерам применения автокодировщиков для задач анализа текстов. Нас интересуют обе стороны применения – как модели для получения внутренних представлений, так и использования этих внутренних представлений как признаков, например, в дальнейшей задаче классификации.
Статьи по этой теме чаще всего затрагивают такие задачи, как сентимент анализ, или детектирования перефразирований, но также встречаются работы, описывающие применения автокодировщиков для сравнения текстов на разных языках или для машинного перевода.
В задачах текстового анализа чаще всего объектом выступает предложение, т.е.
упорядоченная последовательность слов. Таким образом, автокодировщик принимает на вход именно эту последовательность слов, а точнее – векторных представлений этих слов, взятых из некоторой предобученной ранее модели. Что такое векторные представления слов, было рассмотрено на Хабре достаточно подробно, например здесь.
Таким образом, автокодировщик, принимая на вход последовательность слов, должен обучить некоторое внутреннее представление всего предложения, отвечающее тем характеристикам, которые важны для нас, исходя из поставленной задачи.
В задачах текстового анализа нам необходимо отобразить предложения в векторы так, чтобы они были близки в смысле некоторой функции расстояния, чаще всего косинусной меры:
Источник: Deep Learning for NLP (without Magic)
Одним из первых авторов, кто показал успешное применение автокодировщиков в текстовом анализе, был Richard Socher.
В своей статье Dynamic Pooling and Unfolding Recursive Autoencoders for Paraphrase Detection он описывает новую структуру автокодировщика — Unfolding Recursive Autoencoder (Unfolding RAE) (см. на рисунок ниже).
Unfolding RAE
Предполагается, что структура предложения задана синтаксическим парсером. Рассматривается самая простая структура – структура бинарного дерева. Такое дерево состоит из листьев — слов фрагмента, внутренних узлов (узлов ветвления) — словосочетаний и терминальной вершины.
Принимая на вход последовательность слов (x1,x2,x3) (три векторных представления слов в этом примере), автокодировщик последовательно кодирует, в данном случае, справа-налево, векторные представления слов предложения в векторные представления словосочетаний, а затем в векторное представление всего предложения.
Конкретно в этом примере мы сначала кoнкатенируем векторы x2 и x3, затем домножаем их на матрицу We, имеющую размерность hidden×2visible, где hidden – где размер скрытого внутреннего представления, visible – размерность вектора слова.
Таким образом, мы снижаем размерность, затем добавляя нелинейность с помощью функции tanh. На первом шаге мы получаем скрытое векторное представление для словосочетания двух слов x2 и x3: h1=tanh(We [x2,x3 ]+be).
На втором мы объединяем его и оставшееся слово h2 = tanh(We [h1,x1 ]+be) и получаем векторное представление для всего предложения целиком — h2. Как и говорилось выше, в определении автокодировщика, нам нужно минимизировать ошибку между объектами и их восстановленными версиями. В нашем случае это – слова.
Поэтому, получив финальное векторное представление всего предложения h2, мы раскодируем его ввосстановленные версии (x1',x2',x3'). Декодер здесь работает по тому же принципу, что и энкодер, только матрица параметров и вектор сдвига здесь другие: Wd и bd.
Используя структуру бинарного дерева, можно кодировать предложения любой длины в вектор фиксированной размерности – мы всегда объединяем по паре векторов одинаковой размерности, используя при этом одну и ту же матрицу параметров We. В случае небинарного дерева нужно просто заранее инициализировать матрицы для случаев, если мы хотим объединять больше двух слов – 3, 4, … n, в данном случае матрица будет просто иметь размерность hidden×invisible.
Примечательно то, что в этой статье обученные векторные представления фраз используются не только для решения задачи классификации — перефразированными или нет является пара предложений. Приводятся также данные эксперимента по поиску ближайших соседей — основываясь лишь на полученном векторе предложения, для него ищутся ближайшие в выборке вектора, которые близки ему по смыслу:
- Вот пример из статьи NIPS 2017 — Deconvolutional Paragraph Representation Learning:
- Мы видим, что кодирование выборки X в скрытое представление h происходит с помощью сверточной нейронной сети, по такому же принципу работает и декодер.
- Или вот пример с использованием GRU-GRU в статье Skip-Thought Vectors.
Однако никто не мешает нам использовать для последовательного объединения слов в предложение и другие архитектуры сетей для кодирования и декодирования.
Интересной особенность здесь является то, что модель работает с тройками предложений: (si-1, si, si+1). Предложение si кодируется с применением стандартных формул GRU, а декодер, используя информацию о внутреннем представлении si, пытается раскодировать si-1 и si+1, также используя GRU.
Принцип работы в данном случае напоминает стандартную модель нейросетевого машинного перевода, который работает по схеме encoder-decoder.
Однако, здесь у нас нет двух языков, мы подаем на вход нашему блоку кодирования фразу на одном языке и ее же пытаемся восстановить.
В процессе обучения идет минимизация некоторого внутреннего функционала качества (это не всегда ошибка реконструкции), затем, если требуется, предобученные векторы используются в качестве признаков в другой задаче.
В другой работе — Bilingual Correspondence Recursive Autoencoders for Statistical Machine Translation — представлена архитектура, которая позволяет по-новому взглянуть на машинный перевод.
Сначала для двух языков отдельно обучаются рекурсивные автокодировщики (по принципу, описанному выше — там, где вводился Unfolding RAE). Затем, между ними обучается третий автокодировщик — отображение между двумя языками.
Такая архитектура имеет явное преимущество — при отображении текстов на разных языках в одно общее скрытое пространство мы можем сравнивать их, не используя машинный перевод, как промежуточный шаг.
Предобучение автокодировщиков на текстовых фрагментах часто встречается в статьях по обучению ранжирования. Тут, опять же, важен тот факт, что мы для обучения итогового функционала качества ранжирования сначала предобучаем автокодировщик для лучшей инициализации векторов запросов и ответов, подаваемых на вход сети.
И, разумеется, мы не можем не упомянуть о Вариационных автокодировщиках (Variational Autoencoders, или VAE) как о генеративных моделях. Лучше всего, конечно, просто посмотреть эту запись лекции от Яндекса.
Нам же достаточно сказать следующее: если мы хотим из скрытого пространства обычного автокодировщика генерировать объекты, то качество такой генерации будет невысоким, поскольку мы ничего не знаем о распределении скрытой переменной.
Но можно сразу тренировать автокодировщик на генерацию, вводя предположение о распределении.
А дальше, используя VAE, можно из этого скрытого пространства генерировать тексты, например, как это делают авторы статьи Generating Sentences from a Continuous Space или A Hybrid Convolutional Variational Autoencoder for Text Generation.
Генеративные свойства VAE хорошо проявляют себя и в задачах сравнения текстов на разных языках — A Variational Autoencoding Approach for Inducing Cross-lingual Word Embeddings отличный тому пример.
В качестве вывода хотим сделать небольшой прогноз.
Representation Learning — обучение внутренних представлений, с использованием именно VAE, особенно в связке с Generative Adversarial Networks, является одним из самых развивающихся подходов за последние годы — об этом можно судить хотя бы по самым частым темам статей на последних топовых конференциях по машинному обучению ICLR 2018 и ICML 2018. Это довольно логично — ведь его использование помогло поднять качество в ряде задач, причем не только связанных с текстами. Но это уже тема совершенно другого обзора…
Принципы кодирования информации в нервной системе
Интенсивное изучение активности нейронов мозга у неанестезированных животных, начавшееся в 50-х годах, неизбежно поставило вопрос о способах кодирования нейронами информации о внешнем мире. Сегодня можно говорить о нескольких принципах кодирования в нейронных сетях.
Одни из них достаточно просты и характерны для периферического уровня обработки информации, другие — более сложны и характеризуют передачу информации на более высоких уровнях нервной системы, включая кору, В процессе эволюции принципы кодирования более высокого уровня начинают преобладать над более примитивными.
Одним из простых способов кодирования информации признается специфичность рецепторов, избирательно реагирующих на определенные параметры стимуляции, например колбочки с разной чувствительностью к длинам волн видимого спектра, рецепторы давления, болевые, тактильные и др. Вработах Т. Буллока (1965) и В.
Маунткастла (1967) принцип специфичности получил дальнейшее развитие. Они предложили говорить о меченой линии как о моносинаптической передаче сигналов от рецептора к некоторому центральному нейрону, возбуждение которого соответствует выделению определенного качества стимула (СомьенДж.
, 1975).
Для каждой модальности эволюция нашла свое более адекватное решение проблемы передачи информации.Так, модель меченой линии более подходит к чувствительным окончаниямкожи, которые
высокоспецифичны относительно небольшого количества типов раздражений (рецепторы давления, прикосновения, температуры, боли). Это соответственно требует малого числа меченых линий.
Другой способ передачи информации получил название частотного кода. Наиболее явно он связан с кодированием интенсивности раздражения. Для многих периферических нервных волокон была установлена логарифмическая зависимость между интенсивностью раздражителя и частотой вызываемых имПД.
Она выявлена для частоты импульсов в одиночном волокне зрительного нерва, идущего от одного омматидия мечехвоста (Ити1и5), и интенсивности света; для частоты спайков веретена — рецептора мышцы лягушки и величины нагрузки на мышцу. Частотный способ кодирования информации об интенсивности стимула, включающего операцию логарифмирования, согласуется с психофизическим законом Г.
Фехнера о том, что величина ощущения пропорциональна логарифму интенсивности раздражителя.
Однако позже законФехнера был подвергнут серьезной критике. С.
Стивене на основании своих психофизических исследований, проведенных на людях с применением звукового, светового и электрического раздражения, взамен закона Фехнера предложил закон степенной функции.
Этот закон гласит, что ощущение пропорционально показателю степени стимула, при этом закон Фехнера представляет лишь частный случай степенной зависимости.
Закон степенной функции получил сильную эмпирическую поддержку при изучении электрической активности многих сенсорных элементов. Так, частота ПД ганглиозных клеток сетчатки лягушки, реагирующих на скорость движения, находится в степенной зависимости от угловой скорости стимула.
Степенной функции подчиняются отношения между частотой импульсации, идущей от медленно адаптирующихся кожных рецепторов, и силой надавливания. В то же время в других опытах получены данные, не соответствующие ни логарифмической, ни степенной зависимости.
В слуховых и вкусовых сенсорных волокнах зависимость частоты импульсов от интенсивности описывается 5-образной функцией.
Пытаясь примирить 5-образные зависимости, небольшое число твердо установленных логарифмических функций смассой фактов, подтверждающих закон степенной зависимости Стивенса, исследователи высказывают предположение, что степенные зависимости между стимулом и реакцией возникают на более высоких уровнях сенсорных систем, сменяя другие типы отношений, представленные на периферии (ТамарГ., 1976).
Другое объяснение связано с уточнением роли числа нервных волокон в передаче информации с помощью частотного кода.
Анализ передачи сигнала о вибрации от соматических рецепторов показал, что информация о частоте вибрации передается с помощью частоты ПД, а ее интенсивность кодируется числом одновременно активных рецепторов. По мнению Р.
Гранита (1957), число активированных волокон является важным фактором в механизме интерпретации частотного кода. Он полагает, что интенсивность не может быть передана с помощью только одной частоты импульсов.
Необходимо учитывать не отдельную единицу, а скорее активность статистических комплексов.
Поэтому, несмотря на значительное взаимодействие в сетчатке и последующую трансформацию сигналов на более высоких уровнях нервной системы, информация об интенсивности может кодироваться частотным кодом, но только на статистической основе, через группу одновременно возбужденных волокон.
В качестве альтернативногомеханизма к первым двум принципам кодирования — меченой линии и частотного кода — рассматривают также паттерн ответа нейрона (структурнуюорганизацию ПД во времени).
Устойчивость временного паттернаответа — отличительная черта нейронов специфической системы мозга. Система передачи информации о стимулах спомощью рисункаразрядов нейрона имеет ряд ограничений.
В нейронных сетях, работающих по этому коду, не может соблюдаться принцип экономии,так какон требует дополнительных операцийи времени по учету начала, конца реакции нейрона, определенияее длительности.
Кроме того, эффективность передачи информации о сигнале существенно зависит от состояния нейрона, что делаетданнуюсистему кодирования недостаточно надежной.
На роль ансамбля нейронов в кодировании информации указал Д. Хебб. Он считает, что ни один нейрон не может пересылать никакой информации другим нейронам и что она передается исключительно через возбуждение группы нейронов, входящих в состав соответствующих ансамблей. Д.
Хебб предложил рассматривать ансамбль нейронов в качестве основного способа кодирования и передачи информации.
Различные наборы возбужденных нейронов одного и того же ансамбля соответствуют разным параметрам стимула, а если ансамбль находится на выходе системы, управляющей движением, — то и разным реакциям. Данный способ кодирования имеет ряд преимуществ.
Он более надежен, так как не зависит от состояния одного нейрона. К тому же не требует дополнительно ни операций, ни времени. Однако для кодирования каждого типа стимулов необходим свой уникальный набор нейронов.
Особый принципобработки информации вытекаетиз детекторнойтеории. Он получил название принципа кодирования информа-
ции номером детектора (детекторного канала}. Передача информации по номеру канала (термин предложен Е.Н. Соколовым) означает, что сигнал следует по цепочке нейронов, конечное звено которой представлено нейроном-детектором простых или сложных признаков, избирательно реагирующим на определенный физический признак или их комплекс.
Идея о том, что информация кодируется номером канала, присутствовала уже в опытах И.П. Павлова с кожным анализатором собаки. Вырабатывая условные рефлексы на раздражение разных участков кожи лапы через «касалки», он установил наличие в коре больших полушарий соматотопической проекции.
Раздражение определенного участка кожи вызывало очаг возбуждения в определенном локусе соматосенсорной коры. Пространственное соответствие места приложения стимула и локуса возбуждения в коре получило подтверждение и в других анализаторах: зрительном, слуховом.
Тонотопическая проекция в слуховой коре отражает пространственное расположение волосковых клеток кортиевого органа, избирательно чувствительных к различной частоте звуковых колебаний. Такого рода проекции можно объяснить тем, что ре-цепторная поверхность отображается на карте коры посредством множества параллельных каналов — линий, имеющих свои номера.
При смещении сигнала относительно рецепторной поверхности максимум возбуждения перемещается по элементам карты коры. Сам же элемент карты представляет локальный детектор, избирательно отвечающий на раздражение определенного участка рецепторной поверхности.
Детекторы локальности, обладающие точечными рецептивными полями и избирательно реагирующие на прикосновение к определенной точке кожи, являются наиболее простыми детекторами. Совокупность детекторов локальности образует карту кожной поверхности в коре. Детекторы работают параллельно, каждая точка кожной поверхности представлена независимым детектором.
Сходный механизм передачи сигнала о стимулах действует и тогда, когда стимулы различаются не местом приложения, а другими признаками. Появление локуса возбуждения на детекторной карте зависит от параметров стимула.
С их изменением локус возбуждения на карте смешается. Для объяснения организации нейронной сети, работающей как детекторная система,Е.Н. Соколов предложил механизм векторного кодирования сигнала.
Принцип векторного кодирования информации впервые был сформулирован в 50-х годах шведским ученым Г. Йохансоном, который и положил начало новому направлению в психологии — векторной психологии. Г. Йохансон основывался на результатах
детального изучения восприятия движения. Он показал, что если две точки на экране движутся навстречу друг другу — одна по горизонтали, другая по вертикали, — то человек видит движение одной точки по наклонной прямой. Для объяснения эффекта иллюзии движения Г.
Йохансон использовал векторное представление.
Движение точки рассматривается им как результат формирования двухкомпонентного вектора, отражающего действие двух независимых факторов (движения в горизонтальном и вертикальном направлениях), В дальнейшем векторнаямодель была распространена им на восприятие движений корпуса и конечностей человека, а также на движение объектов в трехмерном пространстве. Е.Н Соколов развил векторные представления, применив их к изучению нейронных механизмов сенсорных процессов, а также двигательных и вегетативных реакций.
Векторная психофизиология — новое направление, ориентированное на соединение психологических явлений и процессов с векторным кодированием информации в нейронных сетях.
Глава 4 ВОСПРИЯТЕ
Автокодировщик
Автокодировщик (англ. autoencoder) — специальная архитектура искусственных нейронных сетей, позволяющая применять обучение без учителя при использовании метода с обратного распространения ошибки. Простейшая архитектура автокодировщика — сеть прямого распространения, без обратных связей, наиболее схожая с перцептроном и содержащая входной слой, промежуточный слой и выходной слой. В отличие от перцептрона , выходной слой автокодировщика должен содержать столько же нейронов, сколько и входной слой.
Автокодировщик состоит из двух частей: энкодера [math]g[/math] и декодера [math]f[/math]. Энкодер переводит входной сигнал в его представление (код): [math]h = g(x)[/math], а декодер восстанавливает сигнал по его коду: [math]x = f(h)[/math].
Автокодировщик, изменяя [math]f[/math] и [math]g[/math], стремится выучить тождественную функцию [math]x = f(g(x))[/math], минимизируя какой-то функционал ошибки. [math]L(x, f(g(x)))[/math]
При этом семейства функций энкодера [math]g[/math] и декодера [math]f[/math] как-то ограничены, чтобы автоэнкодер был вынужден отбирать наиболее важные свойства сигнала.
Автокодировщик можно использовать для предобучения, например, когда стоит задача классификации, а размеченных пар слишком мало. Или для понижения размерности в данных для последующей визуализации. Либо когда просто надо научиться различать полезные свойства входного сигнала.
Пример[править]
Для примера возьмем набор данных для продуктов, купленных клиентами
- Шаг 1: Возьмем первую строку из данных по клиенту для всех продуктов в качестве входа. [math]1[/math] означает, что клиент купил продукт. [math]0[/math] означает, что клиент не купил.
- Шаг 2: Закодируем ввод в другой вектор [math]h[/math] меньшего размера, чем входной. Можно использовать функцию активации сигмоида для [math]h[/math], так как она ее область значения от [math]0[/math] до [math]1[/math]. [math]W[/math] — вес, примененный к входу, [math]b[/math] — член смещения.
[math]h = f(Wx+b)[/math]
- Шаг 3: Декодируем вектор [math]h[/math], чтобы воссоздать ввод. Выход будет того же размера, что и вход
- Шаг 4: Рассчитать ошибку [math]L[/math]. Ошибка — это разница между входным и выходным вектором. Наша цель — минимизировать ошибку, чтобы выходной вектор был похож на входной вектор.
- Шаг 5: С помощью алгоритма обратного распространения ошибки нужно обновить веса. Скорость обучения определяется тем, насколько обновляются веса.
- Шаг 6: Повторите шаги с [math]1[/math] по [math]5[/math] для каждого клиента в наборе данных. Веса обновляются каждый раз (стохастический градиентный спуск)
- Шаг 7: Повторите для большего количества эпох. Эпоха — это когда все строки в наборе данных прошли через нейронную сеть.
Использование[править]
- Нелинейное уменьшения размерности. Кодирует ввод в скрытом слое с меньшей размерностью по сравнению с входным измерением. Скрытый слой позже декодируется как выходной. Автоэнкодер уменьшает размерность линейных и нелинейных данных, следовательно, он более мощный, чем метод главных компонент[на 3.04.19 не создан].
- Рекомендации пользователям. При этом используются глубокие кодеры, чтобы понять пользовательские предпочтения, порекомендовать фильмы, книги или предметы
- Извлечения зависимостей в данных: автоэнкодеры пытаются минимизировать ошибку восстановления. В процессе уменьшения ошибки он изучает некоторые важные зависимости, присутствующие во входных данных. Он восстанавливает входные данные из кодированного состояния. Кодирование генерирует новый набор функций, который представляет собой комбинацию оригинальных зависимостей. Кодирование в автоэнкодерах помогает идентифицировать скрытые зависимости, присутствующие во входных данных.
- Распознавание изображений: для распознавания изображений используется сложный автоэнкодер. Можно использовать несколько совмещенных кодировщиков, что помогает изучить различные функции изображения.
Виды автокодировщиков[править]
Undercomplete Autoencoders[править]
Имеют меньший размер скрытого слоя по сравнению с входным слоем. Это помогает выделить зависимости из данных. Undercomplete Autoencoders минимизируют функцию потерь, штрафуя [math]g(f(x))[/math] за отличия от входных данных x. Так же не нуждаются в регуляризации, поскольку максимизируют вероятность данных, а не копируют входные данные в выходные.
[math]L = |x — f(g(x))|[/math]
Sparse Autoencoders[1][править]
Размерность скрытого слоя больше, чем входного. Они все еще могут обнаружить важные особенности из данных. На скрытый слой накладывается штраф за разреженность, [math]Ω(h)[/math], значение, близкое к нулю, в дополнение к ошибке восстановления. Это предотвращает переобучение.
[math]L = |x — f(g(x))| + Ω(h)[/math]
Denoising Autoencoders(DAE)[2][править]
Создаем поврежденную копию ввода, внося некоторый шум. Это помогает обучить убирать шум из данных. DAE минимизирует функцию потерь между выходным узлом и поврежденным вводом.
[math]L = |x' — f(g(x))|[/math]
Contractive Autoencoders(CAE)[3][править]
Целью CAE является получение надежного представления данных, которое менее чувствительно к небольшим изменениям. Надежность представления данных достигается путем регуляризации. Наказание в CAE это норма Фробениуса матрицы Якоби, которая вычисляется для скрытого слоя относительно входных данных. Фробениусовой нормой матрицы Якоби является сумма квадратов всех элементов.
[math]L = |x — f(g(x))| + lambda*||J_f(x)||_F^2[/math]
[math]||J_f(x)||_F^2 = sum_{i, j}(partial h_j(x) / partial x_i)^2[/math]
Stacked Denoising Autoencoders[4][править]
Stacked Autoencoders — это нейронная сеть с несколькими слоями Sparse Autoencoders. Когда мы добавляем в автоэнкодер больше скрытых слоев, это помогает уменьшить объемные код, получаемый кодировщиком. Restricted Boltzmann Machine (RBM) является основной частью сети глубокого убеждения.
Deep Autoencoders[5][править]
Состоит из двух идентичных глубоких сетей. Одна сеть для кодирования и другая для декодирования. Обычно имеют от 4 до 5 уровней для кодирования и следующие от 4 до 5 уровней для декодирования.
Вариационный автокодировщик[править]
Автокодировщик, основанный на вариационном выводе.
Пример реализации[править]
Ниже приведена реализация частного случая автокодировщика на языке Python с использованием библиотеки Keras.
Эта реализация работает с датасетом рукописных цифр MNIST.
def create_dense_ae(): # Размерность кодированного представления encoding_dim = 49 # Энкодер # Входной плейсхолдер input_img = Input(shape=(28, 28, 1)) # 28, 28, 1 — размерности строк, столбцов, фильтров одной картинки, без батч-размерности # Вспомогательный слой решейпинга flat_img = Flatten()(input_img) # Кодированное полносвязным слоем представление encoded = Dense(encoding_dim, activation='relu')(flat_img) # Декодер # Раскодированное другим полносвязным слоем изображение input_encoded = Input(shape=(encoding_dim,)) flat_decoded = Dense(28*28, activation='sigmoid')(input_encoded) decoded = Reshape((28, 28, 1))(flat_decoded) # Модели, в конструктор первым аргументом передаются входные слои, а вторым выходные слои # Другие модели можно так же использовать как и слои encoder = Model(input_img, encoded, name=»encoder») decoder = Model(input_encoded, decoded, name=»decoder») autoencoder = Model(input_img, decoder(encoder(input_img)), name=»autoencoder»)
return encoder, decoder, autoencoder
# Создание модели
encoder, decoder, autoencoder = create_dense_ae()
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
См. также[править]
- Вариационный автокодировщик
- Generative Adversarial Nets (GAN)