Sequence prediction with
TensorFlow
Dzianis Dus
Data Scientist at InData Labs
План доклада
1. Что мы хотим научиться делать
2. Моделирование: почему Deep Learning?
3. Моделирование: Recurrent Neural Networks
4. Трудности инженерной жизни
5. TensorFlow best practices
6. Questions?
Что мы хотим научиться делать
1. F(...) - неизвестная случайная функция
2. Для F(...) необходимо построить неслучайную аппроксимацию G(...):
Что мы хотим научиться делать
“Входные”
последовательности
“Входные”
последовательности
“Выходные”
последовательности
“Реализации”
процесса F(...)
Что мы хотим научиться делать: примеры
или
или
...
Что мы хотим научиться делать: резюме
Фактически, решать любые задачи вида:
Почему Deep Learning?
● Классические подходы:
○ Multivariate AR models, GARCH, …
○ Markov chains, HMM, CRF, …
○ …
● Плюсы:
○ Широко используются практически повсеместно
○ Имеют в основе развитую математическую базу
○ Зачастую не требуют больших объемов выборок
○ ...
● Минусы:
○ В основном имеют линейную природу
○ Основаны на достаточно строгих модельных предположениях
○ Трудно строить end-to-end системы (машинный перевод)
○ ...
Почему Deep Learning?
● Современные подходы:
○ Recurrent Neural Networks
○ Convolutional Neural Networks
○ Pure Fullyconnected Networks
○ ...
● Плюсы:
○ Унифицированное моделирование
○ Слабые модельные предположения
○ Очень нелинейные и полупараметрические
○ State-of-the-art
○ End-to-end системы
○ ...
● Минусы:
○ Количество свободных параметров (весов)
○ Трудности при оптимизации (весов и гиперпараметров)
○ Инженерные трудности
○ ...
Recurrent Neural Networks: Основы
Все существующие RNN модели:
1. hj - вектор “рекуррентной” памяти
2. Рекуррентная память некоторым образом агрегирует в себе “прошлое”
Recurrent Neural Networks: Основы
Vanilla RNN (Elman Network):
1. На практике работает плохо
2. Основные проблемы:
a. Vanishing / Exploding gradient problem
b. Слишком частое обновление рекуррентной памяти
Recurrent Neural Networks: LSTM
1. Предлагает концепцию “Gates” для рекуррентной памяти
2. Самый широко используемый RNN Cell
3. Первое упоминание в 1994-ом, много последующих публикаций
4. Выработаны Best Practices для улучшения сходимости
5. http://colah.github.io/posts/2015-08-Understanding-LSTMs/
Recurrent Neural Networks: LSTM
Математика внутри Cell:
Gates: Forget, Input,
Output
Recurrent memory
Recurrent Neural Networks: LSTM
Реализовано средствами
TensorFlow
“Монолитная” операция
(tensorflow/contrib/rnn/kernels/lstm_ops.h)
Recurrent Neural Networks: Варианты
Другие RNN Cells:
1. LSTM with Peepholes
2. GRU (Gated Recurrent Unit)
3. SCRNN (Structurally Constrained RNN)
4. ...
“LSTM: A Search Space Odyssey”
https://arxiv.org/abs/1503.04069
Трудности инженерной жизни
TensorFlow: RNN Example
Входные данные: Feature(s) protobuf
Feature:
1. Protocol Buffer: tensorflow/core/example/feature.proto
2. Содержит списки, которые состоят из нуля и более элементов
3. Доступны следующие типизированные списки:
a. BytesList
b. FloatList
c. Int64List
На базе Feature:
1. Features = map<string, Feature>
2. FeatureList = repeated Feature
3. FeatureLists = map<string, FeatureList>
Входные данные: SequenceExample protobuf
SequenceExample:
1. Protocol Buffer: tensorflow/core/example/example.proto
2. Хранит одну или более последовательностей
3. Состоит из:
a. сontext (Feature) = общие признаки и свойства
b. feature_lists = FeatureLists
Плюсы:
1. Переиспользование кода
2. Разделение препроцессинга и обучения
3. Distribute Training: TFRecords файлы
4. session.run(..., feed_dict=...) => TensorFlow Pipelines
Минусы:
1. Много метаинформации + CRC32
2. Рост объема данных (x5 - x10)
SequenceExample: Использование
Сохранение в TFRecords: PySpark:
TensorFlow:
TensorFlow Pipelines: Queues & Dynamic padding
Подробнее:
1. https://www.tensorflow.org/programmers_guide/threading_and_queues
2. https://www.tensorflow.org/programmers_guide/reading_data
TensorFlow Pipelines: Queues usage
TensorFlow Pipelines: Weights sharing
TensorFlow Pipelines: Model persistence
Резюме
Ускорение обучения в ~ 3 раза за счет оптимизаций:
1. Pipelines
a. Предобработанные данные
b. Асинхронные чтения минуя Python
c. Буферизация чтений
d. Не лишены недостатков!
2. Dynamic padding
a. Padding только до максимальной
длины в текущем batch
3. Dynamic RNN
a. tf.nn.dynamic_rnn
b. Unrolling происходит только до
заданной длины для каждой
последовательности
Что осталось вне фокуса доклада?
Инженерия:
1. Sequence prediction with CNNs (x8 - x10 speedup!)
2. TensorFlow Cluster + Multiple GPU + Async SGD ~ linear scaling (8 GPUs ~ x6 - x8 speedup!)
3. Monitoring with TensorBoard
4. ...
Best Practices для RNN:
1. Многослойные RNN: tf.contrib.rnn.MultiRNNCell
2. RNN wrappers: tf.contrib.rnn.DropoutWrapper, tf.contrib.rnn.ResidualWrapper, …
3. Начальная инициализация весов сети
4. Ненулевая инициализация вектора начального состояния
5. Оптимизация весов, подбор гиперпараметов
6. State-of-the-art модели (Google Neural Translation Machine, …)
7. ...
Спасибо за внимание!
Вопросы и комментарии, пожалуйста :)

Sequence prediction with TensorFlow

  • 1.
    Sequence prediction with TensorFlow DzianisDus Data Scientist at InData Labs
  • 2.
    План доклада 1. Чтомы хотим научиться делать 2. Моделирование: почему Deep Learning? 3. Моделирование: Recurrent Neural Networks 4. Трудности инженерной жизни 5. TensorFlow best practices 6. Questions?
  • 3.
    Что мы хотимнаучиться делать 1. F(...) - неизвестная случайная функция 2. Для F(...) необходимо построить неслучайную аппроксимацию G(...):
  • 4.
    Что мы хотимнаучиться делать “Входные” последовательности “Входные” последовательности “Выходные” последовательности “Реализации” процесса F(...)
  • 5.
    Что мы хотимнаучиться делать: примеры или или ...
  • 6.
    Что мы хотимнаучиться делать: резюме Фактически, решать любые задачи вида:
  • 7.
    Почему Deep Learning? ●Классические подходы: ○ Multivariate AR models, GARCH, … ○ Markov chains, HMM, CRF, … ○ … ● Плюсы: ○ Широко используются практически повсеместно ○ Имеют в основе развитую математическую базу ○ Зачастую не требуют больших объемов выборок ○ ... ● Минусы: ○ В основном имеют линейную природу ○ Основаны на достаточно строгих модельных предположениях ○ Трудно строить end-to-end системы (машинный перевод) ○ ...
  • 8.
    Почему Deep Learning? ●Современные подходы: ○ Recurrent Neural Networks ○ Convolutional Neural Networks ○ Pure Fullyconnected Networks ○ ... ● Плюсы: ○ Унифицированное моделирование ○ Слабые модельные предположения ○ Очень нелинейные и полупараметрические ○ State-of-the-art ○ End-to-end системы ○ ... ● Минусы: ○ Количество свободных параметров (весов) ○ Трудности при оптимизации (весов и гиперпараметров) ○ Инженерные трудности ○ ...
  • 9.
    Recurrent Neural Networks:Основы Все существующие RNN модели: 1. hj - вектор “рекуррентной” памяти 2. Рекуррентная память некоторым образом агрегирует в себе “прошлое”
  • 10.
    Recurrent Neural Networks:Основы Vanilla RNN (Elman Network): 1. На практике работает плохо 2. Основные проблемы: a. Vanishing / Exploding gradient problem b. Слишком частое обновление рекуррентной памяти
  • 11.
    Recurrent Neural Networks:LSTM 1. Предлагает концепцию “Gates” для рекуррентной памяти 2. Самый широко используемый RNN Cell 3. Первое упоминание в 1994-ом, много последующих публикаций 4. Выработаны Best Practices для улучшения сходимости 5. http://colah.github.io/posts/2015-08-Understanding-LSTMs/
  • 12.
    Recurrent Neural Networks:LSTM Математика внутри Cell: Gates: Forget, Input, Output Recurrent memory
  • 13.
    Recurrent Neural Networks:LSTM Реализовано средствами TensorFlow “Монолитная” операция (tensorflow/contrib/rnn/kernels/lstm_ops.h)
  • 14.
    Recurrent Neural Networks:Варианты Другие RNN Cells: 1. LSTM with Peepholes 2. GRU (Gated Recurrent Unit) 3. SCRNN (Structurally Constrained RNN) 4. ... “LSTM: A Search Space Odyssey” https://arxiv.org/abs/1503.04069
  • 15.
  • 16.
  • 17.
    Входные данные: Feature(s)protobuf Feature: 1. Protocol Buffer: tensorflow/core/example/feature.proto 2. Содержит списки, которые состоят из нуля и более элементов 3. Доступны следующие типизированные списки: a. BytesList b. FloatList c. Int64List На базе Feature: 1. Features = map<string, Feature> 2. FeatureList = repeated Feature 3. FeatureLists = map<string, FeatureList>
  • 18.
    Входные данные: SequenceExampleprotobuf SequenceExample: 1. Protocol Buffer: tensorflow/core/example/example.proto 2. Хранит одну или более последовательностей 3. Состоит из: a. сontext (Feature) = общие признаки и свойства b. feature_lists = FeatureLists Плюсы: 1. Переиспользование кода 2. Разделение препроцессинга и обучения 3. Distribute Training: TFRecords файлы 4. session.run(..., feed_dict=...) => TensorFlow Pipelines Минусы: 1. Много метаинформации + CRC32 2. Рост объема данных (x5 - x10)
  • 19.
  • 20.
    TensorFlow Pipelines: Queues& Dynamic padding Подробнее: 1. https://www.tensorflow.org/programmers_guide/threading_and_queues 2. https://www.tensorflow.org/programmers_guide/reading_data
  • 21.
  • 22.
  • 23.
  • 24.
    Резюме Ускорение обучения в~ 3 раза за счет оптимизаций: 1. Pipelines a. Предобработанные данные b. Асинхронные чтения минуя Python c. Буферизация чтений d. Не лишены недостатков! 2. Dynamic padding a. Padding только до максимальной длины в текущем batch 3. Dynamic RNN a. tf.nn.dynamic_rnn b. Unrolling происходит только до заданной длины для каждой последовательности
  • 25.
    Что осталось внефокуса доклада? Инженерия: 1. Sequence prediction with CNNs (x8 - x10 speedup!) 2. TensorFlow Cluster + Multiple GPU + Async SGD ~ linear scaling (8 GPUs ~ x6 - x8 speedup!) 3. Monitoring with TensorBoard 4. ... Best Practices для RNN: 1. Многослойные RNN: tf.contrib.rnn.MultiRNNCell 2. RNN wrappers: tf.contrib.rnn.DropoutWrapper, tf.contrib.rnn.ResidualWrapper, … 3. Начальная инициализация весов сети 4. Ненулевая инициализация вектора начального состояния 5. Оптимизация весов, подбор гиперпараметов 6. State-of-the-art модели (Google Neural Translation Machine, …) 7. ...
  • 26.
    Спасибо за внимание! Вопросыи комментарии, пожалуйста :)