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/
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)
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. ...