machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Необоснованная эффективность одного нейрона

Дата публикации Jun 7, 2017

Перекрестный пост отhttps://rakeshchada.github.io/Sentiment-Neuron.html

(Все мои эксперименты и визуализации можно посмотреть вэтоблокнот Jupyter).

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

Впрочем, это не первый случай, когда кто-то обнаружил такие интерпретируемые нейроны.Karpathy et al.например, обнаруженные нейроны, которые активируются внутри кавычек,еслиоператоры в блоке кода и т. д. Это было подробно объяснено вэтоотличный пост в блоге. На самом деле этот пост вдохновил меня на название этого поста :) Однако, настроение - это представление высокого уровня. Это больше связано с более глубоким пониманием семантики текста, а не только с его синтаксической структурой. Тот факт, что один нейрон захватил все настроение, поражает воображение. Это означает, что единственное число с плавающей запятой - это все, что требуется для классификации настроения абзаца. Как это увлекательно ?!

Я лично хотел изучить это подробнее. К счастью, авторы открыли исходный код модели, которую они обучали в течение примерно одного месяца (!), Вместе с частью своего кода. Я добавил к ней визуализацию тепловой карты чувств и сделал некоторые другие модификации. Я выбрал бинарный набор данных отзывов Yelp, представленный вЧжан и др.,для анализа. Всего ~ 600 000 отзывов.

Языковая модель

Все начинается с задачи моделирования языка на уровне персонажа. Цель состоит в том, чтобы предсказать один символ за раз в куске текста. Преимущество моделирования на уровне персонажа по сравнению с уровнем на уровне слов заключается в его способности захватывать слова из словарного запаса. Авторы обучили мультипликативную модель LSTM с 4096 единицами. Каждый символ был закодирован в 64-мерном векторе, и LSTM работает с пакетами по 64 символа за раз. Они использовали набор обзоров Amazon с ~ 82 миллионами обзоров продуктов.

Сентимент Нейрон Дискавери

Первый вопрос, который заинтриговал меня, был -Как авторы обнаружили этот нейрон чувств в первую очередь?Я имею в виду, что в выходном слое было около 4096 нейронов. Они визуализировали каждого из тех, кто пытается найти какие-то шаблоны? Возможно, нет. Но если вы внимательно прочитаете статью, то обнаружите, что они обучали линейные модели поверх тех 4096 нейронов, используя регуляризацию L1. Учитывая, что существует модель с 4096 функциями, обнаружение этой конкретной функции будет сводиться к вопросу о характеристиках (весах). Если один нейрон решал почти всю задачу классификации, то вклад от него должен быть очень высоким и заметным.

Давайте посмотрим, относится ли это к нашему чувственному нейрону. Это график вклада функций, который я подготовил, обучая набор данных Yelp для классификации настроений.

Значения функций с регуляризацией L1

Вот Это Да! Действительно есть одна особенность с большим весом. Это должен быть нейрон чувств. Фактически, мы можем даже получить его индекс среди списка 4096 нейронов. Если вы посмотрите наблокнотвы увидите, что это индекс 2388. Есть также несколько других нейронов, которые имеют относительно более высокий вклад. Мы посмотрим на них в конце.

Обучение без учителя

Теперь, когда мы обнаружили, что нейрон чувств очень сильно повлиял на окончательное настроение, было бы интересно увидеть влияние размера обучающих данных на его способность к обучению. Авторы сделали этот эксперимент. Они начинают с нуля тренировочных данных и постепенно увеличивают их, пока производительность не достигнет предела. Это привело к интригующему открытию. Даже сданные с нулевой меткойНейрон настроения смог предсказать настроение с большой точностью!Обучение без присмотра с большим эффектом!Модель была обучена на задаче моделирования языка без использования данных, помеченных вручную. Одна из особенностей этой модели затем используется для прогнозирования другой задачи (классификации настроений) без какой-либо контролируемой подготовки. Это также аналогично типичной настройке обучения обучению, которая является обычной техникой в ​​задачах Computer Vision.

Более того, производительность довольно быстро достигает верхнего предела (10–100 примеров в зависимости от задачи). Это значит, чтомиллионы примеров, помеченных вручную, оказывают такое же влияние на производительность модели, как и сотни примеров, Можно было бы сэкономить много усилий и затрат на маркировку, если бы этот образец был обнаружен раньше!

Приступая к нашей задаче классификации Yelp, я попробовал неконтролируемую классификацию набора данных, используя порог для значения нейрона настроений Поскольку выход подается через tanh gate, я предсказываю положительный класс, если выход положительный и отрицательный, если выход отрицательный. Без какой-либо подготовки это дало мне точность~ 93,67%на задании. Это довольно удивительно!

Визуализация сентиментального нейрона

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

Сентимент Тепловая карта для обзора

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

Вот еще один для отрицательного отзыва:

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

Большой! Как это работает на больших кусках текста?

Это чудесно! Несмотря на огромную длину текста, ему удалось достаточно точно уловить все вариации настроения. Длинные тексты - это то, с чем обычно борются рекуррентные нейронные сети!

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

Вот пример:

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

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

Чувство как-то всегда остается в положительной зоне, несмотря на явное присутствие негативных фраз!

Обновление конца предложения

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

Смена настроений

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

Значение настроения меняется для обзора

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

Влияние длины обзора

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

Рассмотрите Распределение Длины для Успеха, Неудачи и Все отзывы

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

Другие важные нейроны

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

Визуализация других важных нейронов

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

Обучение под наблюдением

Мы видели, как чувствительный нейрон выполнялся с нулевым наблюдением. Я также пробовал тренировать модель на всем наборе данных yelp. Лучшая линейная модель (логистическая регрессия с регуляризацией l2 и скоростью обучения 0,001) дала мне ~94,86%точность Это всего лишь ~ 1% улучшение по сравнению с неконтролируемой тренировкой только с помощью сентиментального нейрона. Это согласуется с утверждением авторов о том, что дополнительный надзор помогает только в определенной степени, и производительность очень быстро достигает предела.

Генерация текста

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

Вот что он генерирует, когда его просят начать с «Хмм».

Hmm what a waste of film not to mention a Marilyn movie for nothing.

Хм, это было не плохо!

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

  • сентиментальность= 1,0 иНачальная фраза= «Это есть» =>This is a great album with a quality history of the group.
  • сентиментальность= -1,0 иНачальная фраза= «Это может» =>It might have been good but I found myself skipping pages to get to the end.

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

  • Настроение = 1,0=>I can't wait to try the other flavors - and I have a ton of them on hand just in case one should have gone out for a trip or need a "big new place" and they are delicious.
  • Настроение = -1,0=>I can't believe I bought this book.

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

Тем не менее, были случаи, когда сгенерированный текст не совсем соответствовал настроению.

  • Настроение = -1,0а такжеНачальная фраза= «Отлично» =>Great DVD with the original production leaving good video and audio quality.

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

  • This is the greatest movie ever! Ever since my parents had watched it back in the 80s, I always watched it.

Кажется, что есть некоторая корреляция этого (нейрон 801) с чувством.

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

Что дальше?

Мы видели несколько интригующих вещей. Эти результаты должны стать отличным мотивирующим фактором для более глубокого изучения языкового моделирования и предварительного обучения / обучения в НЛП. Векторы слова (word2vec,перчаткаи т.д.), как правило, являются единственным видом предварительно обученных результатов, используемых в настоящее время в задачах Deep Learning NLP. Я также воодушевлен результатами, когда кто-то увеличивает / уменьшает область наборов данных и проводит аналогичный анализ. Например, одна из гипотез (выдвинутых авторами) такого дискретного присутствия нейрона чувств заключается в том, что чувство является сильной прогностической особенностью для языкового моделирования обзоров. Итак, можем ли мы обнаружить такие дискретные и интерпретируемые нейроны, контролируя вручную распределение наших обучающих наборов данных? В качестве примера, можем ли мы обнаружитьтематические нейроныделая наши учебные данные новостным корпусом на разные темы? В целом, идея состоит в том, чтобы сделать данные обучения очень специфичными для предметной области / задачи и посмотреть, сможем ли мы восстановить какие-либо интерпретируемые нейроны с помощью языкового моделирования. Это можно сделать на нескольких доменах / задачах.

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

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

Есть бесконечные возможности, и я рад любой будущей работе, которая связана с этим!

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

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map