Для моей, на данном всё еще начальном этапе достаточно успешной IT-карьеры (я каждый день могу заниматься приложениями машинного обучения и основ искусственного интеллекта, и эта работа оплачивается), одной из важных частей была мечта и работа над ней. Я рассказал об этом, и некоторым людям это интересно. Карьере в IT предшествовала учеба в IT, которая, опять же, получилась во многом благодаря мечте и ее воплощению. Для того, чтобы «доводить дела до завершения» (GTD), нужна всё та же мечта и работа над ней.
Одна из самых важных мыслей, которую я осознал, это то, что создание искусственного интеллекта — это большая ответственность, так же как и быть родителем, например.
Спасибо большое. Это не секреты успеха, просто подумал, что кому-нибудь может быть интересно :). 12 человек занесли в закладки, значит, это было не зря.
Спасибо. Я считаю, что можно совмещать все эти направления. С помощью вероятностного программирования можно создать компьютерную программу (таким образом, текст), которая будет порождать другие компьютерные вероятностные программы (таким образом, модели нашего мира). Модель будет отражать и «обдумывать» часть мира. Для того, чтобы осознать мир, подобной модели обязательно будет необходимо строить в своей памяти копию нашего мира. Статистический вывод и оптимизация для такой модели может быть ускорена с применением нейронных сетей. Примерно месяц назад я представлял эту идею на конференцию по вероятностному программированию в Бостоне, в MIT: arxiv.org/pdf/1810.01190.pdf
Спасибо. Работаю в области порождающих вероятностных моделей, с использованием вероятностного программирования, в том числе с байесовскими сетями. Применяю нейронные сети для ускорения статистического байесовского вывода. Применял эти методы для анализа текстов и видео изображений. Сейчас использую эти направления с коллегами для медицины. Мои работы можно посмотреть в моем резюме: yuraperov.com/docs/YuraPerovCV.pdf
Ответственность за привычки, конечно, на самом человеке всегда. Близкие могут немного поддержать, но самое главное — это собственная сила воли и собственное осознание необходимости иметь «хорошие» привычки.
Что касается «Волка с Уолл Стрит»: мне кажется, что как раз чрезмерное увлечение главным героем эротического направления было одной из главных причин конечного провала его проекта. Поэтому, мне кажется, достаточно важным задумываться и воздерживаться от чрезмерного просмотра подобных материалов и от сильно частой «разрядки» с большим количеством партнером, и особенно в одиночку.
В моем случае плюс ставится за воздержание от просмотра подобных материалов, а не за их просмотр.
Что касается второго, то число не добавляется в количество плюсов, а просто собирается для личной статистики :). Я так и не понял, плюс это или нет (если без любимого партнера и нередко, то, скорее всего «минус», согласно моему текущему субъективному пониманию).
В Anglican основан на Scheme (хотя и без set!), и в нем можно задать любую функцию. Например, если бы не было геометрического распределения, его можно было бы очень просто задать функций
То есть практически любое распределение можно задать через его генератор.
Что же касается скорости, то скорость в общем случае будет ниже. Однако, например, Probabilistic C компилирует вероятностные программы, поэтому там скорость будет сравнима с обычной скоростью любого генератора, который можно написать на C/C++.
Вы правы, особенно с позиции человека, который профессионально занимается машинным обучением. Ничто не заменит собственное понимание, и чем оно больше, тем лучше результат.
Пока платформы вероятностных языков программирования очень медленные и громоздкие, и они не выигрывают ни при каком рассмотрении.
Мы рассчитываем, что для решения части задач в конечном счете будет быстрее использовать их, чем писать вывод самому, по крайней мере на первом этапе тестирования модели или при умеренном количестве наблюдений. Например, для приложений в бизнесе.
Здравствуйте! Спасибо Вам большое за комментарий и вопросы!
>>> Верно ли я понял, что «вероятностное программирование» — это именно такая реализация?
Грубо говоря, да. Вместо MCMC также используется SMC, например, и другие методы вывода. Но в основном обычно речь идет об MCMC.
>>> Если да, то применять MCMC к линейной регрессии — это очень странная идея, разве нет?
Я согласен, что это странная это идея с точки зрения эффективности. Зачем копать землю ложкой, если есть лопата, которой копать быстрее? Но с другой стороны, почему так много людей используют Python, если он значительно медленее, чем C++?
Пример линейной регрессии — это просто чтобы показать то, что можно делать, на самом простом возможном примере.
Как я отмечаю в комментарии ниже, сейчас движки вероятностного программирования в 5-1000 раз медленее, чем вручную реализованные алгоритмы вывода. 1000 — цифра пугающая. Но есть частично обоснованная надежда, что с помощью различных оптимизаций на большинстве моделей получится уменьшить эту цифру до 3-10 раз, а это уже будет хороший результат, мне кажется.
>>> В тех редких случаях, когда известные модели надо модифицировать, удобный язык описания моделей всё равно не сможет заменить понимания того, что там происходит.
Согласен, но ведь всегда вопрос (1) в степени понимания (например, все ли программисты понимают, как именно работает процессор? Мешает ли это им решать задачи?), (2) в том, как система помогает пониманию (например, можно разработать удобные и информативные методы отладки статистического вывода).
>>> Например, на простом фактор-графе без циклов будет ли он делать всё-таки message passing, как было бы логично? И если да, то как он поймёт, надо ли делать expectation propagation и если надо, то чем приближать?..
Venture/Anglican/Church в основном делают сейчас MCMC/SMC. Infer.Net позволяет работать с менее широким классом моделей, но при этом как раз реализует чаще более эффективные алгоритмы, как раз включая expectation propagation и message passing.
>>> Но если это всё, то не надо, наверное, таких громких слов про «новое программирование». :)
Название «вероятностное программирование» — это спорное название. Можно назвать направление «вероятностным моделированием с автоматически универсальным выводом», например. «Вероятностное программирование» — это не новое «программирование». Это просто игра слов, которую можно логически обосновать :).
>>> А что было бы супер-полезно — это хорошая стандартная библиотека базовых алгоритмов машобуча, как lapack/blas для линейной алгебры. То есть всё уже написано, конечно, но есть пока что ситуация «14 competing standards» в каком-то смысле, особенно если на разных языках посмотреть; а базовая библиотека должна быть единой и над ней уже должны быть обёртки для языков, как над lapack'ом.
Подскажите, пожалуйста, что Вы имеет в виду под уже написанными?
Здравствуйте! Благодарю Вас за интересные вопросы.
1) Я грубо предполагаю, что в Venture/Anglican это будет в 50-500 раз медленнее, чем в C.
Probabilistic-C, скорее всего, по выводу может быть в 3-10 раз медленее, чем C.
Спасибо за эту статью, записал себе в план протестировать, чтобы были точные результаты. В целом можно отметить, что сейчас движки вероятностных языков программирования очень значительно медленнее, чем вручную написанный вывод на C / Python. Мы надеемся, что с помощью различных оптимизаций (в том числе оптимизаций подобных оптимизациям при компиляции) мы нам удастся уменьшить различия в скорости в разы.
2) Пока заданных распределений очень мало. Но так как движки этих вероятностных языков программирования реализованы на обычных языках программирования (Clojure ("=>" Java), C++, Python), то добавить новое распределение — дело нескольких десятков минут или по крайней мере нескольких часов.
3) Это будет просто код на C++ / Python / Clojure. Вот, например, реализация нормального распределения; всего 17 строчек. Нужно указать функцию генерации элемента выборки и функцию плотности распределения.
Надеюсь, мои ответы немного полезны. Буду рад ответить более подробно или на другие вопросы.
Я надеюсь, что мои краткие ответы ниже не покажутся агрессивными, по крайней мере в них совсем нет попытки оскорбить. Это просто мои мысли в ответ на Ваши мысли.
>>> «Смешивание фактов и предположений в одну конструкцию...»
Я не знаю способов отличить факты от предположений. Для меня философски любой факт о мире — это предположение. Любая теория для меня — это предположение и предположение неточное.
>>> Вот мы к нему и подошли. Смотрите, NP-полнота требует вычисления всех предикатов, которые растут экспоненциально. К примеру, если делать медицинскую диагностику на такой логике (1000 болезней, 3000 симптомов в среднем по 10 в каждой), на вычисление уйдут ресурсы, сопоставимые с вечностью. А это не самая сложная задача…
А нужно ли вычислять все предикаты? Можно ли вычислить только часть предикатов и таким образом получить удовлетворительный, пусть и не самый лучший ответ? Ведь любой самый лучший врач, например, никогда не сможет постоянно давать самые лучшие ответы и будет иногда ошибаться, к сожалению. Я не совсем понимаю, в рамках какой модели мы говорим о 3000 симптомах и какой алгоритм для диагностики болезней предлагается использовать. Но что я пытаюсь спросить, а можем ли мы всегда рассчитывать на самый лучший ответ? Что вообще такое самый лучший ответ? Я не знаю ответа на этот вопрос…
Статистический вывод и другие методы машинного обучения дают хорошие ответы: мы пользуемся поиском Гугла, наша почта фильтруется на спам, распознаются номера на машинах, чтобы водители не превышали скорость, и так далее.
Я в этой статье и в комментариях к ней пытаюсь мыслить конкретно о том, необходимо ли вероятностное программирование как приложение методов машинного обучения, которые уже используются? Да, мне кажется, что необходимо, так как оно позволяет проще работать с порождающими «Байесовскими» вероятностными моделями, которые уже используются в машинном обучении. То есть какой-то хороший результат это нам даст и сделает прикладное машинное обучение немного проще.
Решит ли вероятностное программирование проблему «сильного» искусственного интеллекта? Скорее всего нет, по крайней мере само по себе не решит.
Я прошу прощения, что я не отвечаю на Ваш вопрос, и честно признаюсь, что я не знаю на него ответа. На сегодня я удовлетворен приблизительным решением проблем машинного обучения и необходимостью указывать априорные вероятности. Как обойтись без этого и/или решать проблемы точно? Я не знаю :).
Я планирую, что это будет отдельная, новая, немаленькая статья. Я аккуратно добавлю ссылку на нее в нужное место в этой статье, чтобы заинтересованные читатели могли сразу же найти ее.
Зачем жертвовать, когда можно не жертвовать? :)
Что касается «Волка с Уолл Стрит»: мне кажется, что как раз чрезмерное увлечение главным героем эротического направления было одной из главных причин конечного провала его проекта. Поэтому, мне кажется, достаточно важным задумываться и воздерживаться от чрезмерного просмотра подобных материалов и от сильно частой «разрядки» с большим количеством партнером, и особенно в одиночку.
Что касается второго, то число не добавляется в количество плюсов, а просто собирается для личной статистики :). Я так и не понял, плюс это или нет (если без любимого партнера и нередко, то, скорее всего «минус», согласно моему текущему субъективному пониманию).
Есть публикации, где используют вероятностные языки программирования, но это пока больше научные вещи, например:
Приложения в бизнесе это пока план, а не полученный результат :).
***
Да, например, есть OBSERVE-CSV: www.robots.ox.ac.uk/~fwood/anglican/language/
Реализовать что-то подобное для других форматов — дело нескольких часов.
Для Venture ввод данных можно осуществлять с помощью Python, подгружая Venture как модуль Python.
Но пока они по скорости (и часто асимптотически) уступают вручную написанному статистическому выводу.
По поводу вопроса про логистическую регрессию: извините, к сожалению, не знаю хорошего решения.
В Anglican основан на Scheme (хотя и без set!), и в нем можно задать любую функцию. Например, если бы не было геометрического распределения, его можно было бы очень просто задать функций
То есть практически любое распределение можно задать через его генератор.
Что же касается скорости, то скорость в общем случае будет ниже. Однако, например, Probabilistic C компилирует вероятностные программы, поэтому там скорость будет сравнима с обычной скоростью любого генератора, который можно написать на C/C++.
Вы правы, особенно с позиции человека, который профессионально занимается машинным обучением. Ничто не заменит собственное понимание, и чем оно больше, тем лучше результат.
Пока платформы вероятностных языков программирования очень медленные и громоздкие, и они не выигрывают ни при каком рассмотрении.
Мы рассчитываем, что для решения части задач в конечном счете будет быстрее использовать их, чем писать вывод самому, по крайней мере на первом этапе тестирования модели или при умеренном количестве наблюдений. Например, для приложений в бизнесе.
>>> Верно ли я понял, что «вероятностное программирование» — это именно такая реализация?
Грубо говоря, да. Вместо MCMC также используется SMC, например, и другие методы вывода. Но в основном обычно речь идет об MCMC.
>>> Если да, то применять MCMC к линейной регрессии — это очень странная идея, разве нет?
Я согласен, что это странная это идея с точки зрения эффективности. Зачем копать землю ложкой, если есть лопата, которой копать быстрее? Но с другой стороны, почему так много людей используют Python, если он значительно медленее, чем C++?
Пример линейной регрессии — это просто чтобы показать то, что можно делать, на самом простом возможном примере.
Как я отмечаю в комментарии ниже, сейчас движки вероятностного программирования в 5-1000 раз медленее, чем вручную реализованные алгоритмы вывода. 1000 — цифра пугающая. Но есть частично обоснованная надежда, что с помощью различных оптимизаций на большинстве моделей получится уменьшить эту цифру до 3-10 раз, а это уже будет хороший результат, мне кажется.
>>> В тех редких случаях, когда известные модели надо модифицировать, удобный язык описания моделей всё равно не сможет заменить понимания того, что там происходит.
Согласен, но ведь всегда вопрос (1) в степени понимания (например, все ли программисты понимают, как именно работает процессор? Мешает ли это им решать задачи?), (2) в том, как система помогает пониманию (например, можно разработать удобные и информативные методы отладки статистического вывода).
>>> Например, на простом фактор-графе без циклов будет ли он делать всё-таки message passing, как было бы логично? И если да, то как он поймёт, надо ли делать expectation propagation и если надо, то чем приближать?..
Venture/Anglican/Church в основном делают сейчас MCMC/SMC. Infer.Net позволяет работать с менее широким классом моделей, но при этом как раз реализует чаще более эффективные алгоритмы, как раз включая expectation propagation и message passing.
>>> Но если это всё, то не надо, наверное, таких громких слов про «новое программирование». :)
Название «вероятностное программирование» — это спорное название. Можно назвать направление «вероятностным моделированием с автоматически универсальным выводом», например. «Вероятностное программирование» — это не новое «программирование». Это просто игра слов, которую можно логически обосновать :).
>>> А что было бы супер-полезно — это хорошая стандартная библиотека базовых алгоритмов машобуча, как lapack/blas для линейной алгебры. То есть всё уже написано, конечно, но есть пока что ситуация «14 competing standards» в каком-то смысле, особенно если на разных языках посмотреть; а базовая библиотека должна быть единой и над ней уже должны быть обёртки для языков, как над lapack'ом.
Подскажите, пожалуйста, что Вы имеет в виду под уже написанными?
1) Я грубо предполагаю, что в Venture/Anglican это будет в 50-500 раз медленнее, чем в C.
Probabilistic-C, скорее всего, по выводу может быть в 3-10 раз медленее, чем C.
Спасибо за эту статью, записал себе в план протестировать, чтобы были точные результаты. В целом можно отметить, что сейчас движки вероятностных языков программирования очень значительно медленнее, чем вручную написанный вывод на C / Python. Мы надеемся, что с помощью различных оптимизаций (в том числе оптимизаций подобных оптимизациям при компиляции) мы нам удастся уменьшить различия в скорости в разы.
2) Пока заданных распределений очень мало. Но так как движки этих вероятностных языков программирования реализованы на обычных языках программирования (Clojure ("=>" Java), C++, Python), то добавить новое распределение — дело нескольких десятков минут или по крайней мере нескольких часов.
3) Это будет просто код на C++ / Python / Clojure. Вот, например, реализация нормального распределения; всего 17 строчек. Нужно указать функцию генерации элемента выборки и функцию плотности распределения.
Надеюсь, мои ответы немного полезны. Буду рад ответить более подробно или на другие вопросы.
>>> «Смешивание фактов и предположений в одну конструкцию...»
Я не знаю способов отличить факты от предположений. Для меня философски любой факт о мире — это предположение. Любая теория для меня — это предположение и предположение неточное.
>>> Вот мы к нему и подошли. Смотрите, NP-полнота требует вычисления всех предикатов, которые растут экспоненциально. К примеру, если делать медицинскую диагностику на такой логике (1000 болезней, 3000 симптомов в среднем по 10 в каждой), на вычисление уйдут ресурсы, сопоставимые с вечностью. А это не самая сложная задача…
А нужно ли вычислять все предикаты? Можно ли вычислить только часть предикатов и таким образом получить удовлетворительный, пусть и не самый лучший ответ? Ведь любой самый лучший врач, например, никогда не сможет постоянно давать самые лучшие ответы и будет иногда ошибаться, к сожалению. Я не совсем понимаю, в рамках какой модели мы говорим о 3000 симптомах и какой алгоритм для диагностики болезней предлагается использовать. Но что я пытаюсь спросить, а можем ли мы всегда рассчитывать на самый лучший ответ? Что вообще такое самый лучший ответ? Я не знаю ответа на этот вопрос…
Статистический вывод и другие методы машинного обучения дают хорошие ответы: мы пользуемся поиском Гугла, наша почта фильтруется на спам, распознаются номера на машинах, чтобы водители не превышали скорость, и так далее.
Я в этой статье и в комментариях к ней пытаюсь мыслить конкретно о том, необходимо ли вероятностное программирование как приложение методов машинного обучения, которые уже используются? Да, мне кажется, что необходимо, так как оно позволяет проще работать с порождающими «Байесовскими» вероятностными моделями, которые уже используются в машинном обучении. То есть какой-то хороший результат это нам даст и сделает прикладное машинное обучение немного проще.
Решит ли вероятностное программирование проблему «сильного» искусственного интеллекта? Скорее всего нет, по крайней мере само по себе не решит.
Я прошу прощения, что я не отвечаю на Ваш вопрос, и честно признаюсь, что я не знаю на него ответа. На сегодня я удовлетворен приблизительным решением проблем машинного обучения и необходимостью указывать априорные вероятности. Как обойтись без этого и/или решать проблемы точно? Я не знаю :).