SlideShare a Scribd company logo
1 of 26
Download to read offline
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. ...
Спасибо за внимание!
Вопросы и комментарии, пожалуйста :)

More Related Content

What's hot

зобнин информатика в школе
зобнин   информатика в школезобнин   информатика в школе
зобнин информатика в школе
Yandex
 

What's hot (20)

зобнин информатика в школе
зобнин   информатика в школезобнин   информатика в школе
зобнин информатика в школе
 
Введение в архитектуры нейронных сетей / HighLoad++ 2016
Введение в архитектуры нейронных сетей / HighLoad++ 2016Введение в архитектуры нейронных сетей / HighLoad++ 2016
Введение в архитектуры нейронных сетей / HighLoad++ 2016
 
Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...Архитектура и программирование потоковых многоядерных процессоров для научных...
Архитектура и программирование потоковых многоядерных процессоров для научных...
 
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
Нейронные сети: быстрый инференс на GPU с помощью TensorRT (демо) / Дмитрий К...
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stl
 
Python: ввод и вывод
Python: ввод и выводPython: ввод и вывод
Python: ввод и вывод
 
Беглый обзор "внутренностей" Python
Беглый обзор "внутренностей" PythonБеглый обзор "внутренностей" Python
Беглый обзор "внутренностей" Python
 
Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська Статический анализ: ошибки в медиаплеере и безглючная аська
Статический анализ: ошибки в медиаплеере и безглючная аська
 
Oop java.generics
Oop java.genericsOop java.generics
Oop java.generics
 
Python. Обработка ошибок
Python. Обработка ошибокPython. Обработка ошибок
Python. Обработка ошибок
 
Machine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий ЛапинMachine learning c использованием нейронных сетей, Дмитрий Лапин
Machine learning c использованием нейронных сетей, Дмитрий Лапин
 
Универсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHPУниверсальный сигнатурный анализ кода на C#, Java, PHP
Универсальный сигнатурный анализ кода на C#, Java, PHP
 
Введение в потоки питона
Введение в потоки питонаВведение в потоки питона
Введение в потоки питона
 
Алгоритмы и языки программирования
Алгоритмы и языки программированияАлгоритмы и языки программирования
Алгоритмы и языки программирования
 
Obj c
Obj cObj c
Obj c
 
ООП в Python
ООП в PythonООП в Python
ООП в Python
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
контейнеры STL
контейнеры STLконтейнеры STL
контейнеры STL
 
стандартная библиотека с++: введение
стандартная библиотека с++: введениестандартная библиотека с++: введение
стандартная библиотека с++: введение
 
ввод и вывод элементов массива
ввод и вывод элементов массиваввод и вывод элементов массива
ввод и вывод элементов массива
 

Similar to Sequence prediction with TensorFlow

Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
ScalaNsk
 
лекция1
лекция1лекция1
лекция1
shagore
 
Дмитрий Кручинин - Сравнительный анализ библиотек глубинного обучения
Дмитрий Кручинин - Сравнительный анализ библиотек глубинного обученияДмитрий Кручинин - Сравнительный анализ библиотек глубинного обучения
Дмитрий Кручинин - Сравнительный анализ библиотек глубинного обучения
AIST
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
sef2009
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 Fin
Liudmila Li
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
it-people
 

Similar to Sequence prediction with TensorFlow (20)

Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
Введение в архитектуры нейронных сетей / Григорий Сапунов (Intento)
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
лекция1
лекция1лекция1
лекция1
 
Дмитрий Кручинин - Сравнительный анализ библиотек глубинного обучения
Дмитрий Кручинин - Сравнительный анализ библиотек глубинного обученияДмитрий Кручинин - Сравнительный анализ библиотек глубинного обучения
Дмитрий Кручинин - Сравнительный анализ библиотек глубинного обучения
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
Алексей Куканов — Параллелизм в C++: управляйте приложением, а не потоками!
 
Deep convolution networks with caffe
Deep convolution networks with caffeDeep convolution networks with caffe
Deep convolution networks with caffe
 
Бинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMБинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVM
 
Бинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVMБинарный анализ с декомпиляцией и LLVM
Бинарный анализ с декомпиляцией и LLVM
 
Root Conf2009 Fin
Root Conf2009 FinRoot Conf2009 Fin
Root Conf2009 Fin
 
Caché Native Access. InterSystems Meetup 2014
Caché Native Access. InterSystems  Meetup 2014Caché Native Access. InterSystems  Meetup 2014
Caché Native Access. InterSystems Meetup 2014
 
Максим Лапшин — введение в Erlang
Максим Лапшин — введение в ErlangМаксим Лапшин — введение в Erlang
Максим Лапшин — введение в Erlang
 
Сверточные нейронные сети
Сверточные нейронные сетиСверточные нейронные сети
Сверточные нейронные сети
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelines
 
закон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelinesзакон иерархических компенсаций седова и C++ core guidelines
закон иерархических компенсаций седова и C++ core guidelines
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
Denys Samoylenko ''JS learning lifehacks: common programmer's mistake''
 

More from Denis Dus

More from Denis Dus (7)

Probabilistic modeling in deep learning
Probabilistic modeling in deep learningProbabilistic modeling in deep learning
Probabilistic modeling in deep learning
 
Generative modeling with Convolutional Neural Networks
Generative modeling with Convolutional Neural NetworksGenerative modeling with Convolutional Neural Networks
Generative modeling with Convolutional Neural Networks
 
Reproducibility and automation of machine learning process
Reproducibility and automation of machine learning processReproducibility and automation of machine learning process
Reproducibility and automation of machine learning process
 
Assignment of arbitrarily distributed random samples to the fixed probability...
Assignment of arbitrarily distributed random samples to the fixed probability...Assignment of arbitrarily distributed random samples to the fixed probability...
Assignment of arbitrarily distributed random samples to the fixed probability...
 
word2vec (часть 2)
word2vec (часть 2)word2vec (часть 2)
word2vec (часть 2)
 
word2vec (part 1)
word2vec (part 1)word2vec (part 1)
word2vec (part 1)
 
Using spark 1.2 with Java 8 and Cassandra
Using spark 1.2 with Java 8 and CassandraUsing spark 1.2 with Java 8 and Cassandra
Using spark 1.2 with Java 8 and Cassandra
 

Sequence prediction with TensorFlow

  • 1. Sequence prediction with TensorFlow Dzianis Dus 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
  • 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. Входные данные: 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)
  • 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
  • 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. Спасибо за внимание! Вопросы и комментарии, пожалуйста :)