Обложка канала

tldr_arxiv. Страница 6

Короткий и четкий разбор свежих и нашумевших статей по deep learning

  • tldr_arxiv

    An Empirical Evaluation of Generic Convolutional and Recurrent Networks for Sequence Modeling
    https://arxiv.org/pdf/1803.01271.pdf
    за наводку спасибо @annapotapenko, за редактуру @googloed1
    Когда - 4 марта 2018

    В чем понт
    Самое актуальное и полное сравнение сверточных и реккурентных архитектур для моделирования последовательностей. Авторы берут свой достаточно простой вариант сверточной сети и сравнивают ее на разных классических задачках для сопоставления рекуррентых сетей между собой (на домашнем поле, как они выражаются в статье) со стандартными рекуррентными архитектурами GRU, LSTM и ‘vanilla RNN’. На всех задачах их свертки побили реккурентные сетки. Примеры задач - PennTreebank, Copy memory, The adding problem. Опровергает распространенный тезис о том, что рекуррентные сети - самое естественное, что можно придумать для моделирования последовательностей (текста, например)

    Подробности
    Какие именно сверточные сети
    Для того, чтобы повторять функции рекуррентных сетей, нам нужно 2 основных свойства - уметь выплевывать output такого же размера, как input и не смотреть в будущее (при моделировании текста каждое слово обрабатывать с использованием информации только о предыдущих). С первой задачей справляется полносверточная сетка с паддингом нулями, чтобы последующие слои имели ту же длину, что и предыдущие. Вторую задачу мы решаем казуальными разреженными свертками, прикладывая свертки только к предыдущим элементам в последовательности (ровно теми свертками, которые используются в Wavenet и описаны в предыдущем посте).

    Преимущества сверточных сетей
    1.Можно параллелить(то есть существенно ускорить обучение!!) 2. Можно просто и гибко контролировать размер модели в памяти, например, делать свертки более разреженными 3.Градиенты не затухают, информация с дальних концов последовательности не теряется (так как обратное распространение ошибки идет не сонаправленно с последовательностью(то есть по всей длине), а с глубиной сети(которая логарифм длины)) 4.Для тренировки нужно меньше памяти (для рекуррентных сетей надо помнить все предыдущие состояния ячеек, что критично, особенно при обучении на длинных последовательностях)

    Недостатки сверточных сетей
    1.Нужно больше памяти во время применения(так как в рекуррентных сетях нужно помнить только текущий вход и скрытое состояние)

    Что в итоге
    При простой архитектуре и минимальном тюнинге сверточных сетей, они бьют классические рекуррентные. Но авторы подчеркивают, что сейчас появилось много продвинутых докруток на рекуррентные сети, которые бьют их сверточную архитектуру. Однако не стоит забывать, то что докрутки - это годы работы ведущих групп, а сверточная архитектура авторов собрана на коленке. Авторы говорят, что если вложиться в этом направлении, можно добиться результатов еще круче, чем те, которые есть на продвинутых рекуррентных сетях.
  • tldr_arxiv

    Natural TTS synthesis by conditioning wavenet on mel spectrogram predictions
    https://arxiv.org/pdf/1712.05884.pdf
    За наводку спасибо @googloed1
    Когда - 16 февраля 2018

    В чем понт
    Авторы побили очередной рекорд для TTS(text to speech) с MOS(mean opinion score -среднее оценки асессоров от 1 до 5) 4.53 против профессиональных спикеров с 4.58. Модель смотрит на запятые, капс, по ходу исправляет ошибки, читает слова, ориентируясь на семантику (например, desert, по-русски покидать и пустыня, произносится по разному, хотя пишется одинаково). По ссылке можно послушать демонстрацию вышесказанного и примеры озвучки одного и того же текста диктором и алгоритмом (лично я угадала принадлежность 2 из 4 примеров) https://google.github.io/tacotron/publications/tacotron2/index.html

    Подробности
    Историческая справка - в основе статьи лежит модель Wavenet (гугловский прародитель почти всего современного движа на тему TTS). Wavenet умеет авторегрессивно генерить звуки - человеческую речь, музыку. В качестве обучающей выборки мы используем аудиосигнал в виде осциллограммы(изображение частот звуковой волны во времени), и для предсказания каждого момента времени берем, например, четыре предыдущих момента, проходимся по ним разреженной свёрткой (прикладываем ее к 1-му и 2-му предыдущему, а затем к 3-му и 4-му предыдущему), пропускаем это еще через несколько сверток и на выходе получаем одно число - собственно частоту сигнала для нашего конкретного момента времени. Чтобы генерить сигнал не просто так, а по тексту, при предсказании дополнительно учитываем выученное нами же представление символов в виде лингвистических признаков озвучки этого текста .
    Вернемся к статье. Одним из трюков в этой статье является использование вместо лингвистических фичей mel-спектрограмм(Фурье трансформаций с дополнительными преобразованиями сигнала) - они лучше подхватывают особенности человеческого голоса. Обучение сети можно разделить на два этапа - из символов учимся предсказывать признаковое описание для будущего звука в виде mel-спектрограмм, а затем из спектрограмм итеративно генеририть звук.
    Первый этап состоит из энкодера и декодера. Энкодером получаем эмбеддинг для символов в тексте, обрабатываем свертками, нелинейностью и LSTM. К полученному результату применяем attention. Декодер - это авторегрессивная рекурентная сетка, которая умеет из полученного представления генерить спектрограммы. Параллельно с предсказанием спектрограммы, мы схлопываем выход декодера и контекст attention в скаляр и пропуская через сигмоиду получаем вероятность того, что стоит прекратить генерацию спектрограмм. Это делается, чтобы генерировать спектрограммы произвольной длительности (делаем модель более гибкой).
    На втором этапе мы с помощью модифицированного Wavenet, который принимает на вход спектрограммы вместо лингвистических фичей, генерим последовательно каждый звук через признаковое описание в виде спектрограммы и звука предыдущих моментов.
  • tldr_arxiv

    End-to-end Neural Coreference Resolution
    https://arxiv.org/pdf/1707.07045.pdf
    За разбор спасибо @leonshting
    Эта статья берется как SOTA baseline для coreference resolution в статье из предыдущего поста https://arxiv.org/pdf/1802.05365.pdf
    Когда
    15 декабря 2017 года

    В чем понт
    Модель, решающая end-to-end (без синтаксических парсеров, теггеров по частям речи и прочих костылей) задачу coreference resolution - для каждого понятия найти все понятия, которые отсылают к той же сущности. Когда вы задаёте Сири вопрос 'Кто такой Хинтон?', а потом 'Сколько ему лет?', вы хотите, чтобы Сири понимала, что 'ему' и 'Хинтон' это одна и та же сущность, и не лезла искать ваш запрос в гугл. Модель бьет state of the art по данной задаче.

    Подробности
    Обучающая выборка для этой задачи будет состоять из кластеров отрезков для каждой сущности. Например, для предложения 'Мама мыла раму. Ее сын Коля, в это время страдал фигней', выделим сущность и назовем ее ID0. Ей будут соответсвовать слова 'мама' и 'ее'. Вторая сущность(ID1) будет включать в себя 'сын' и ‘Коля’.
    Работу модели можно разбить на два этапа. На первом этапе берутся все возможные отрезки текста, скорятся по тому, насколько отрезок может быть упоминанием любой из сущностей (mention score), то есть насколько этот отрезок в принципе представляет для нас интерес. Выходом для этого этапа будут вероятности для отрезков разной длины быть сущностями. Например, для отрезков длиной 1 - 'Мама -0.9, мыла - 0.0001, раму - 0.001' и тд. Для отрезков длины 2 - ‘Мама мыла’ - 0.5, ‘мыла раму’ - 0.05 и тд. Эти вероятности считаются с помощью контекстного кодирования слов BiLSTM. Для каждого слова в предложении BiLSTM отдает свое внутреннее состояние. Рассмотрим все возможные отрезки текста, для каждого возьмем вектора (внутренние состояния) от LSTM и сумму этих векторов. Поскольку отрезки, а значит и список векторов слов, разной длины, нужно это упаковать в пространство фиксированной размерности. Делается это так: берем вектора начала отрезка, конца отрезка и взвешенную сумму всех векторов - attention. Веса attention’а - функция векторов. Итого имеем представление отрезка фиксированной размерности. Скармливаем это представление в слой с нелинейностью - получаем mention score.
    На втором этапе по mention score выбираются наилучшие отрезки-кандидаты. Для каждого кандидата смотрим, какие из других кандидатов могут быть референсом к данному - пытаемся определить кластер. Скор для этой части - сумма трех скоров - mention-score первого отрезка, mention-score второго отрезка, а также скора кореференса между отрезками - функции от векторов, конечномерных представлений отрезков, поэлементного произведения векторов и дополнительных фичей.
  • Реклама

  • tldr_arxiv

    Deep contextualized word representations
    https://arxiv.org/pdf/1802.05365.pdf
    за наводку спасибо @annapotapenko
    Когда
    15 февраля 2018 года

    В чем понт
    Для того, чтобы решать задачи nlp, надо уметь получать хорошие векторные представления слов, которые будут моделировать семантику, синтаксис и омонимию (например слово ‘лук’ может нести 2 смысла, для которых надо использовать разные вектора). При этом здорово использовать и нагенерированный человечеством массив информации, и уметь быстро приспосабливаться под локальные особенности задачи и текста. Что и сделали авторы, побив state of the art в 6 задачах nlp на 6-20% (например, анализ тональности, выделение частей речи)

    Подробности
    Для каждого токена (слова или некоторого количества символов) хочется получить несколько векторов, чтобы потом для каждой задачи скомбинировать их оптимальным образом, то есть просто выучить веса, с которыми их нужно складывать (что позволит учесть локальные особенности текста и задачи, омонимию)
    Такие вектора для каждого токена получаются обучением LSTM прямого и обратного распространения. Forward LSTM учится предсказывать вероятность токена при условии предыдущих токенов и скрытых состояний сети, backward - при условии следующих, суммарный лосс получается сложением лоссов forward и backward. Для каждого токена используется такие сети forward и backward LSTM каждая с L слоями, соответственно нулевое состояние - это Glove вектор, который пока не учитывает контекст, последнее состояние используется для предсказания следующего токена. На выходе для каждого токена получим набор векторов, состояний всех слоев forward и backward LSTM, которые осталось только сложить с нужными весами. Веса мы уже учим на конкретной задаче и данных (например, для слова три среди векторов будет часть векторов, близких к слову два и мой, вектора, отражающие глагол это или числительное, вектора, из которых можно понять эмоциональную окраску текста)