Как сделать так, чтобы data science проект не превратился в бардак
1. Использовать git
2. Придерживаться жесткой структуры проекта с кодом, например как в Cookiecutter http://drivendata.github.io/cookiecutter-data-science/#directory-structure
3. Придерживаться одного code style https://www.python.org/dev/peps/pep-0008/
4. Использовать один virtual environment для проекта и сэкспортировать его в requirements.txt
5. Писать небольшие unit тесты (например py.test) для функций и следить с помощью них за корректностью и воспроизводимостью ваших результатов. Можно попробовать написать тесты даже на модели и preprocessing шаги
6. Выделять классы, методы, делать их универсальными и простыми, пользоваться Single responsibility principle https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B5%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8
7. Вести небольшую вики с описанием экспериментов
8. Трекать performance ваших моделей чтобы позже можно было их легко сравнивать
9. Чтобы автоматизировать какие-то повторяющиеся шаги, можно использовать make или написать скрипт самому (bash или python), вот тут пример make в подобных задачах https://bost.ocks.org/mike/make/
10. Писать в нормальном редакторе, который будет вам помогать разрабатывать быстрее и подсказывать где у вас ошибки (например PyCharm Community, он бесплатный)
11. В Jupyter notebook следить за тем, чтобы он был воспроизводимым, там хватало всех важных селлов и импортов, писать время от времени markdown, удалять селлы, в которых вы экспериментировали, и они не относятся к общему скрипту. В начале скрипта, опять же в markdown, можно описать что тут вообще происходит, тогда вы сами себя поблагодарите через месяц 😏
Если у вас есть ваши секреты как следить за проектом - дайте знать, добавим в пост 🙂
Автоэнкодер - это такая нейронная сеть, которая преобразует входные данные (чаще всего сжимает) и пытается предсказать на выходе то, что у нее было на входе. Внутри сеть имеет hidden слой h, который является "кодом", представляющим входные данные. Сеть принимает на вход x и состоит из 2 частей: энкодер h = g(x) и декодер x' = f(g(x)), который реконструирует данные x. Обычно слой h по размерности меньше, чем входной (такой bottleneck получается), и в этом слое оседает только реально важная инфа для реконструкции оригинальных данных. В итоге мы получаем сеть, которая кодирует данные x (делает их representation в некотором latent space), и потом декодирует их, пытаясь получить то, что было изначально. Используется loss функция L(x, f(g(x))) + regularizer. Сеть пытается построить приблизительное отображение x = f(g(x)), и таким образом вычленить из входных данных только самую важную информацию, необходимую для реконструкции.
Зачем это надо?
- Уменьшить размерность: если input был из 1000 фич, а слой h сделать в 25 нейронов, то после обучения мы получим сеть, которая уменьшая размерность, все равно хорошо реконструирует исходные данные, значит в h оседает самая важная информация про input, но размерности 25 вместо 1000
- Такой "код" можно использовать как входные фичи для других алгоритмов
- Убрать шум: если добавить шум к своим картинкам, а во время обучения пытаться приближать их к незашумленным, то после обучения сеть сможет убирать шум для реально зашумленных картинок
- Anomaly detection - можно натренировать автоэнкодер на неаномальном классе, но не показывать аномальный. Потом, если показать аномальный экземпляр и посчитать ошибку реконструкции, то ошибка будет больше, чем была для неаномального класса
- Такой же трюк можно сделать для классификации (натренировать на одном классе, а потом показать экземпляр другого и посчитать ошибку реконструкции)
- Использовать как генеративную модель для генерации данных, похожих на нашу выборку (научиться семплить из того latent space, которое мы получили)
Вот отличный туториал по автоэнкодерам: https://habrahabr.ru/post/331382/
А вот тут глава из книги Deep learning: http://www.deeplearningbook.org/contents/autoencoders.html
Наткнулась на интересную статью, в которой рассказывается о том как оценить Баейесовскую ошибку (Bayes error) через ансамбль классификаторов.
Байесовская ошибка - это наименьшая возможная ошибка, которая может быть достигнута любым классификатором для данного пространства (данной задачи). Если распределения классов пересекаются, то такая ошибка строго больше нуля. Знать эту ошибку весьма полезно: например, если бы мы знали, что такая ошибка для нашей задачи равна 0.2, то это значит что какой бы мы классификатор не построили, он не будет работать лучше, чем с ошибкой 0.2. В общем случае посчитать такую Байесовскую ошибку сложно (аналитически можно только для простых распределений классов). В сложных случаях это требует оценки функций распределений и интегрирования по ним (мы же обычно не знаем из каких распределений пришли данные).
А в этой статье чуваки предложили метод как такую оценку можно легко получить из результатов ансамбля классификаторов, и тому как классификаторы друг с другом не согласны (см формулу 20).
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.330.3596&rep=rep1&type=pdf
В Канаде, при Университете Монреаля, есть лаборатория "Institute for Learning Algorithms", в которой зародились многие принципы deep learning, и которую основал Yoshua Bengio (тот самый, который был соавтором книги Deep Learning).
Там ежегодно летом проходят Deep learning Summer School, где рассказывают state-of-the-art штуки, новые технологии и разработки. Попасть туда наверняка непросто, а цена колеблется от $500 до $2000. Но в открытом доступе есть все видео, презентации и даже лабы с 2015, 2016 и 2017 годов! Мой внутренний нищеброд ликует :)
🍁 2015
Сайт: https://sites.google.com/site/deeplearningsummerschool/
Видео + презентации: http://videolectures.net/deeplearning2015_montreal/
Материалы: https://github.com/mila-udem/summerschool2015
🍁 2016
Сайт школы: https://sites.google.com/site/deeplearningsummerschool2016/home
Видео + презентации: http://videolectures.net/deeplearning2016_montreal/
YouTube: https://www.youtube.com/playlist?list=PL5bqIc6XopCbb-FvnHmD1neVlQKwGzQyR
Материалы: https://github.com/mila-udem/summerschool2016
🍁 2017 (в этом году она стала называться Deep learning and Reinforcement learning Summer School)
Сайт школы: https://mila.umontreal.ca/en/cours/deep-learning-summer-school-2017/
Видео + презентации: http://videolectures.net/deeplearning2017_montreal/
Слайды: https://mila.umontreal.ca/en/cours/deep-learning-summer-school-2017/slides/
Материалы: https://github.com/mila-udem/summerschool2017/
Использование совместно Reinforcement Learning и Deep Neural Networks сейчас в тренде, поэтому вот несколько крутых материалов по Reinforcement Learning:
Курс Reinforcement Learning http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html
Youtube video из курса: https://www.youtube.com/watch?v=2pWv7GOvuf0&list=PL7-jPKtc4r78-wCZcQn5IqyuWhBZ8fOxT
Имплементированные алгоритмы на Python с использованием OpenAI Gym и Tensorflow: https://github.com/dennybritz/reinforcement-learning
Лекция на YouTube от Andrew Ng на час https://www.youtube.com/watch?v=RtxI449ZjSc
Черновик книги: http://incompleteideas.net/sutton/book/bookdraft2017june.pdf
Курс Deep Reinforcement Learning (Berkeley) http://rll.berkeley.edu/deeprlcourse/
Andrew Ng запустил новую специализацию по deep learning на Coursera, и она состоит из 5 коротких курсов:
1. Neural Networks and Deep Learning
2. Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
3. Structuring Machine Learning Projects
4. Convolutional Neural Networks
5. Sequence Models
Кроме того, каждую неделю Андрю берет интересные интервью у крутых чуваков из deep learning и задает им насущные вопросы.
Я сейчас прохожу первый курс, и могу сказать, что даже не смотря на то, что многие вещи уже знаю, Андрю рассказывает все так, что все равно узнаешь что-то новое. Поэтому очень советую эту специализацию всем, кто сомневается в своих знаниях по теме, ну и новичкам конечно же тоже!
https://www.coursera.org/specializations/deep-learning
В этой группе https://vk.com/yandex4developers ребята транслируют субботние тренировки по машинному обучению. Там подробно разбирают задачи (с Kaggle например), можно послушать умных людей
Читать полностью…Еще один новый инструмент, который поможет программистам внедрять ML модели в их код - Gluon от Microsoft и Amazon. Это интерфейс для быстрого прототипирования и обучения нейронных сетей. AI в массы🍿
https://news.microsoft.com/2017/10/12/aws-and-microsoft-announce-gluon-making-deep-learning-accessible-to-all-developers/
Microsoft запускает много новых AI инструментов! Инструменты поддерживают популярные фреймворки, и не только от Microsoft
🔧Azure Machine Learning Experimentation и Azure Machine Learning Model Management - тренировать, деплоить и мониторить ML модели
🔧Azure Machine Learning Workbench - кросс-платформенное десктоп приложение для анализа данных, интегрированное с Jupyter, PyCharm, Visual Studio Code, позволяет строить модели на Python, PySpak и Scala
🔧Расширение для Visual Studio Code IDE для разработчиков, которых хотят внедрять в свой код ML модели (поддержка CNTK, TensorFlow, Theano, Keras и Caffe2)
🔧Расширение для Excel, которое позволяет вызывать AI функции прямо из spreadsheet (можно написать кастомные функции и предоставить для них API)
Официальный пост: https://azure.microsoft.com/en-us/blog/diving-deep-into-what-s-new-with-azure-machine-learning/
Techcrunch: https://techcrunch.com/2017/09/25/microsoft-launches-new-machine-learning-tools/
✨ Weekend Newsletter
📎 Парочка новых платформ для ML соревнований типа Kaggle: EvalAI evalai.cloudcv.org и российский Arktur arktur.io (но там еще мало соревнований)
📎 Возможно, в Монреале скоро будет новый AI hub https://www.fastcompany.com/40465968/facebooks-new-lab-bolsters-montreals-bragging-rights-as-an-ai-hub
📎 Еще одно рассуждение про ML vs Statistics от представителей обеих областей: http://www.kdnuggets.com/2017/08/machine-learning-vs-statistics.html
📎 Крутая карта метро, описывающая основные вещи, которые надо знать дата саентисту :) Каждая ветка означает специфичную область: http://nirvacana.com/thoughts/wp-content/uploads/2013/07/RoadToDataScientist1.png Начинать читать надо с левого нижнего угла "Fundamentals"
📎 Decision tree для того как выбирать ML алгоритм для решения задачи: первая картинка http://i.imgur.com/HnRwlce.png и вторая http://scikit-learn.org/stable/tutorial/machine_learning_map/index.html
📎 Почему можно бояться AI (в том числе потому, что Путин всех напугал) https://hackernoon.com/ai-scary-for-the-right-reasons-185bee8c6daa
📎 Как задавать вопрос SQL базе на естественном языке с помощью reinforcement learning https://techcrunch.com/2017/08/29/salesforce-is-using-ai-to-democratize-sql-so-anyone-can-query-databases-in-natural-language/ а вот сама статья https://einstein.ai/static/images/layouts/research/seq2sql/seq2sql.pdf
Интересная мысль про многомерное пространство: если взять случайную точку в единичном квадрате 1 x 1 , то вероятность того, что она будет находиться близко к границе (на расстоянии меньше, чем 0.001) будет около 0.4 %. Если взять случайную точку в 10 000 - мерном единичном гиперкубе, то эта вероятность станет больше, чем 99,99999% ! Большинство точек в многомерном пространстве находятся очень близко к границам (принимают экстремальные значения). Также, расстояние между 2 случайными точками в многомерном кубе гораздо больше, чем в двумерном, это значит, что данные в многомерном пространстве очень sparse (разреженные), а значит такие данные гораздо сложнее экстраполировать.
Это из книги “Hands-On Machine Learning with Scikit-Learn and TensorFlow”, глава Dimensionality reduction.
Отличный туториал по RNNs с теорией, математикой и кодом (сам блог тоже крутой):
PART 1 http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
PART 2 http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-2-implementing-a-language-model-rnn-with-python-numpy-and-theano/
PART 3 http://www.wildml.com/2015/10/recurrent-neural-networks-tutorial-part-3-backpropagation-through-time-and-vanishing-gradients/
PART 4 http://www.wildml.com/2015/10/recurrent-neural-network-tutorial-part-4-implementing-a-grulstm-rnn-with-python-and-theano/
Давно хочу поделиться ссылками на крутейшие книги, которые я читала недавно или читаю прямо сейчас:
1. Deep learning, Ian Goodfellow and Yoshua Bengio and Aaron Courville
Книга написана людьми, которые наверно лучше всех в мире понимают deep learning, потому что именно они одни из тех, кто его "основали".
Книга бесплатно распространяется авторами онлайн http://www.deeplearningbook.org/
Или можно купить на амазоне печатную красивую версию или киндл https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618
2. Hands-On Machine Learning with Scikit-Learn and TensorFlow, Aurélien Géron
Книга, в которой показано много классных примеров "best practice", а также интересные рассуждения автора про интуицию, которая стоит за методами (но и математики там тоже довольно много).
Вот упражнения из этой книги https://github.com/ageron/handson-ml
А вот она на амазоне: https://www.amazon.com/Hands-Machine-Learning-Scikit-Learn-TensorFlow/dp/1491962291
3. Python Data Science Handbook: Essential Tools for Working with Data, Jake VanderPlas
Хорошая книга, особенно для начинающих дата санетистов. В ней множество примеров и "best practice" для работы с pandas, numpy, sklearn, matplotlib.
Вот код https://github.com/jakevdp/PythonDataScienceHandbook
Вот книга: https://www.amazon.com/Python-Data-Science-Handbook-Essential/dp/1491912057
4. Clean Code: A Handbook of Agile Software Craftsmanship, Robert C. Martin
Внезапная книга в этом списке, но если вы ее прочитаете, то будете знать как писать нормальный код, а не портянку, которой невозможно пользоваться через месяц после написания. Этот навык очень пригодится и в machine learning проектах!
Вот ссылка: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882
5. The Art of Thinking Clearly, Rolf Dobelli
Просто клевая книга, в которой в каждой главе написано про какую-то человеческую когнитивную ошибку, ментальную ловушку. Мы можем думать, что мы дофига умные и логичные, но на деле мы просто люди, у которых в голове есть баги, про которые нужно знать :)
Вот книга: https://www.amazon.com/Art-Thinking-Clearly-Rolf-Dobelli/dp/0062219693
Вот хороший русский перевод (но в книге около 52 глав, а не 99) https://www.mann-ivanov-ferber.ru/books/territoriya_zabluzhdeniy/