?

Log in

No account? Create an account
Лабораторный журнал -- Day [entries|friends|calendar]
Anatoly Levenchuk

[ website | Лабораторный журнал ]
[ userinfo | livejournal userinfo ]
[ calendar | livejournal calendar ]

Интеллект-стек: что новенького? [29 Aug 2015|01:28am]
Я обсуждаю интеллект-стек как стек платформенных протоколов для всех этих smart и intellectual приложений, которые начали появляться повсеместно. Тут два ключевых слова:
-- стек протоколов/технологий (платформенность-модульность, опора на стандарты. Ситуация примерно та же, какая была в момент появления стека протоколов TCP/IP -- конкурировали и построенные по семиуровневой модели OSI сети, и неведомые частные сети, и сети отраслевых консорциумов и отдельных университетов. Ситуация с пониманием стека протоколов интернета вещей и то лучше -- там уже договорились о том, что должен быть именно стек протоколов, не могут пока договориться, какой именно стек будет превалировать -- https://www.google.com/search?biw=990&bih=1537&tbm=isch&sa=1&btnG=Search&q=IoT+protocol+stack).
-- повсеместность. Это прямое указание на что-то инфраструктурное. Интеллект-из-машины становится повсеместным, значит он превращается в инфраструктуру. Инфраструктура, чтобы стать повсеместной, должна опираться на какой-то стандарт. Качественная инфраструктура опирается на лучшие из конкурирующих реализаций хороших стандартов.

Я обсуждаю технологии глубокого обучения как методолог системной инженерии, поэтому опираюсь в обсуждении этих технологии именно на платформенную архитектуру, которая будет задаваться стеком стандартных протоколов. Стек протоколов структурирует как инженерное мышление, так и проектную деятельность -- можно структурировать и планировать работы по экспериментам с реализациями стандартов, а также работы по стандартизации с оглядкой на такой стек. Всякие roadmaps пишутся с оглядкой именно на такое архитектурное структурирование -- что "наблюдательные" roadmaps окологосударственных "институтов развития", что реальные roadmaps компаний и их консорциумов.

Конечно, в области обсуждения всего интеллект-стека не так много работ, а обсуждение когнитивных архитектур тут лишь маленький кусочек всего стека. Например, похожее рассмотрение в IBM Cortical Learning Center, причём с меньшим числом платформенных уровней, ибо там явно не "платформенности" и множества поставщиков для каждой платформы хотят добиться, а просто создать универсальное собственное решение. Так что уровней там всего по факту три -- "приложение пользователя", "универсальные алгоритмы", "специализированное железо"-- http://nice.sandia.gov/documents/2015/NICE3talkwwwFinal-NO%20VIDEOS.pdf (и чуть словесных объяснений в http://www.technologyreview.com/news/536326/ibm-tests-mobile-computing-pioneers-controversial-brain-algorithms/).

Но всё одно "обозревать" тут почти нечего, и приходится самому влезать в шкуру архитектора. Ну, я и не отказываюсь, я даже какую-то свою (хотя мне кажется, что там немного своего) нарезку на платформы уже недавно давал -- http://ailev.livejournal.com/1207520.html. В этом посте я:
-- добавлю новые ссылки, ибо дождик новых работ превращается уже в ливень. Пузырь-то продолжает надуваться, и к работам по интеллект-стеку подключаются новые и новые тысячи людей. В то же время среди "прорывных технологий" профессиональные "футуристы" обсуждают до сих пор IoT, BigData, Clouds и т.д., но не deep learning -- это они зря, интеллект-стек тем самым подкрался незаметно.
-- добавлю отдельно уровень когнитивной платформы (когнитивной архитектуры)
-- не буду пока обсуждать раскладку стека между облаком и локальными вычислительными ресурсами. Хотя для реализаций это важный вопрос: разные ответы на него дадут в том числе и разную нарезку на уровни и разные предпочтительные протоколы связи уровней стека.
-- пока не буду обсуждать стандартизацию (то есть выпячивать то, что интеллект-стек это стек протоколов). Пока до "войны интеллектов" (войны ИскИнов) нужно дожить. "Война браузеров" в www-части стека протоколов интернета случилась тоже даже не в первый год появления стандарта HTML и первого браузера на его основе. XML как доработка SGML тоже появился много позже, а веб-сервисы так и вообще по историческим меркам совсем недавно. В области компьютерного интеллекта всё будет, конечно, быстрее (интернет помогает новым идеям и их программным реализациям распространяться по миру буквально за ночь) -- но всё-таки не так быстро. Пропитка мозгов разработчиков идеями и тестовый период конкуренции реализаций идей на рынке занимает некоторое время.

Вот мой текущий интеллект-стек:
1. Прикладной уровень
2. Когнитивная архитектура
3. Обучающиеся алгоритмы
4. Вычислительные библиотеки
5. Вычислительные языки программирования
6. Аппаратное ускорение вычислений

На верхних (ближе к пользователю) уровнях архитектуры новации (а поскольку они довольно быстро выходят на рынок, то они же становятся инновациями) идут уже более чем плотным потоком. Нижние же уровни архитектуры начинают потихоньку разворачиваться в сторону обслуживания переспективных архитектур верхнеуровневых платформ -- то есть разворачиваются в сторону deep learning, хотя и достаточно медленно, они ведь дальше всего от потребительских денег и поэтому на их переориентирование на поддержку интеллект-стека инвесторы выделяют деньги не так быстро, как на развитие прикладного уровня интеллект-стека. Но в конечном итоге денег хватит всем, потребительские деньги дойдут до самого дна интеллект-стека.

Итак:

1. Прикладной уровень.
Это целевая система, использующая когнитивную ("соображающую") подсистему -- using system для всего остального стека. Эта целевая система хорошо осведомлена о целевой предметной области, все интерфейсы к пользователю и данным именно тут.

Всё чаще и чаще этот прикладной уровень выступает в форме "интеллектуального помощника", с которым можно поддержать беседу. Так что от когнитивной системы требуется не только умение решать целевые прикладные задачи, но и поддерживать речевой диалог на естественном языке, а то и генерировать реалистичный аватар для этой цели.

Прикладной уровень, по-хорошему, должен быть "слугой", который знает хозяина лучше самого хозяина и ориентируется в ситуации в своей предметной области (а, желательно, и в ситуации в целом) тоже лучше своего хозяина.

Социальный ли прикладной уровень (знают ли друг друга когнитивные прикладные агенты-слуги, каждый из которых хорошо знает своего принципала-хозяина) -- это обсуждается, разговоры про privacy и "нельзя позволить Гуглю знать о нас всё" как раз тут.

Основное на этом уровне -- собрать достаточно данных для обучения и понять, как учить. Ибо прикладной уровень занимался своими пользователями и данными предметной области и не знал, что вместо программирования вдруг нужно будет учить программы на специально подготовленных данных -- и хрен обучения оказывается в целом не слаще редьки программирования. Хотя да, результаты могут впечатлять больше.

Амазонский механический турок становится при этом всё более и более востребованным и всё чаще и чаще поминается в статьях (https://www.mturk.com/mturk/welcome). Для воспитания ИскИнов нужны толпы вполне естественных интеллектов. Впрочем, к естественным интеллектам это тоже относится (Маугли ведь даже разговаривать не умеют), просто это как-то незаметно и бесплатно (хотя и очень даже платно, если учить серьёзно), а тут вот нужно приготовиться платить даже за пустяки.

Facebook тут настолько крут, любопытен и богат, что посадил команду людей на сбор данных для тренировки своего "умного помощника" -- http://www.wired.com/2015/08/how-facebook-m-works/ (там идея в том, что часть задач решается сейчас классическим искусственным интеллектом, а часть специально нанятыми людьми с накоплением примеров решения задач, потом глубокая нейронная сетка обучается на этих примерах и заменяет классические методы с резким ростом качества, а люди переключаются на накопление примеров для обучения следующей версии нейронной сетки -- и так постепенно осваиваются всё новые и новые группы задач). Сейчас эксперимент идёт с несколькими сотнями пользователей фейсбука в Калифорнии.

Конечно же, полно приложений, где никаких диалогов не требуется, а нужно "всего лишь" распознать изображения, как-то оценить текст и т.д.. Но задача поддержания диалога на прикладном уровне вырывается на первый план. Это Святой Грааль, ибо позволяет автоматизировать колл-центры, продавцов всех мастей, консультантов-эрудитов (врачей, юристов, спецов по чайным церемониям и т.д.). Люди разговаривают друг с другом, и если на том конце "интеллект", то ожидается, что он поймёт задачу на естественном языке и ответ тоже даст на естественном языке. И переписка тут не главный канал общения (хотя и возможный -- чаты между людьми ведь процветают!), а главный -- устный диалог с одновременным показом картинки на экране и тыканья в картинку пальцами естественного и искусственного интеллекта для уточнения предмета разговора (то есть одновременно речь+жесты). С людьми если говорить, то нужно учитывать их людскую природу. Например, для людей нужно иметь возможность нарисовать глаза и смотреть ими в правильную сторону -- если приложение робототехническое, то это "строить глазки" сильно облегчает взаимодействие (Meet me where i'm gazing: how shared attention gaze affects human-robot handover timing -- http://doi.acm.org/10.1145/2559636.2559656), одного голоса мало, а письменный текст неуместен вообще.

Там несколько задач (из них только часть задач пересекаются с традиционными "развлекательными ботами", проходящими тест Тьюринга):
-- распознавать и генерировать живую речь в real time диалога (по факту эта задача решена)
-- удерживать тему диалога и добиваться цели (сейчас идёт постановка задачи и накопление учебных данных, ибо "добиться цели в диалоге" это слишком расплывчатая формулировка. Работы идут типа Rating Dialogue Success with Neural Networks for Reinforcement Learning in Spoken Dialogue Systems, http://arxiv.org/abs/1508.03386).
-- делать логические выводы, рассуждать (inference, см. ниже).
-- оперировать гигантскими объемами информации, уметь доставать из баз данных и Сети нужное, а не любое (тема внимания и памяти, см.ниже)
-- использовать тело робота или нарисованное тело/лицо виртуального аватара (типа цитированной работы по правильно позиционируемому взгляду), но пока "по одёжке встречают" ещё не является главным критерием. Тупой робот, "которого бы хотелось лизнуть", не является проблемой. Проблемой является интеллект этого робота.
-- правильно выбрать уровень стервозности (помним исследования MS Research, которые были сделаны для определения характера Cortana -- там быстро выяснили, что интеллектуальный ассистент не должен быть бесстрастен как утюг, а должен обладать независимым характером, чтобы нравиться людям: http://news.microsoft.com/stories/people/cortana.html, http://time.com/3960670/windows-10-cortana/).
-- ... тут всего много: общечеловеческое в силу необходимости коммуникации и сугубо предметное, ибо на то он и прикладной уровень, чтобы к чему-то прикладываться.

Напомню, что начиналось всё очень невинно: сначала решили задачи распознавания, которые были манифестированы в знаменитой картине Tasks (http://xkcd.com/1425/):

Вот об этом презентация, вспомнить, как всё начиналось, "задача на один день работы с библиотекой Caffe" (DIY Deep Learning for Vision: a Hands-On Tutorial with Caffe): https://docs.google.com/presentation/d/1UeKXVgRvvxg9OUdh_UiC5G71UMscNPlvArsWER41PsU/

Этот мой пост практически не касается задач распознавания, это уже "проехали", это уже в каждом смартфоне, это уже не интеллект. И это уже работает круче людей. Так, в задаче "миллион лиц" (http://megaface.cs.washington.edu/) нужно уже не просто миллион лиц правильно распознавать, нужно это делать в условиях шума -- побеждает тот, кто будет распознавать зашумленные изображения. Большинство алгоритмов это делают пока похуже человека, но есть уже такие, которые в разы и разы более устойчивы к шумам, чем человеки -- http://megaface.cs.washington.edu/results/identification.html. Но эти новости уже не с первых полос газет, к этим новостям уже привыкли, это уже не "искусственный интеллект". В принципе, сверхчеловеческую результативность получают уже "расчётно". Например, для задач обработки изображений можно увеличить глубину нейронной сетки, слоёв эдак до 19. И если иметь достаточно данных для научения этих слоёв и понимать недостатки человеческого зрения (чтобы их преодолевать целенаправленно), то вот она, сверхчеловеческая результативность -- http://arxiv.org/abs/1508.03929.

Всё, что понятно как делать, немедленно выскакивает из определения интеллекта: когда компьютер не умел играть в шахматы, это было круто и "искусственным интеллектом", а сейчас это просто "шахматы на компьютере". Когда компьютер не умел распознавать изображения и речь, это было "искусственным интеллектом". Сегодня это просто "распознавание изображения и речи". Интеллект-стек тем самым всегда будет не про то, что уже у компьютера получается, а про то, что пока не получается. После этого это будет просто "ускоритель распознавания", "процессор диалога", "платформа нейровычислений" безо всяких подчёркивающих смекалку и сообразительность компьютера эпитетов типа smart, cognitive, intelligent. Хотя маркетологи этому будут сопротивляться. Смартфон так и остался "умным телефоном", хотя сообразительности в нём поначалу, да и сейчас, было не так уж много.

И, конечно, именно на этом прикладном уровне идут демонстрации силы нейронных сеток там, где традиционно пытались "алгеброй гармонию поверить" -- нейронные сетки "интуитивно схватывают" стиль, алгебра идёт лесом, поэтому художественные приложения рулят и пропагандируют использование интеллект-стека среди тех, кто в других предметных областях ничего не понимает, но любит зато помузицировать или посочинять стихи. Лидером последней недели тут серия статей, ведущая к получению "Марша глубокого обучения" (та ещё музычка! её сочинил компьютер в сотрудничестве с человеком на базе народных мелодий, в этом и фишка -- с традиционным вопрошанием: кто тут автор. Народ? Сетка? Композитор, внёсший какие-то правки в результат? -- послушайте, там не слишком тривиально (https://soundcloud.com/sturmen-1/the-march-of-deep-learning):


Интересные объяснения, как получили композицию и другие примеры: часть 1 в https://highnoongmt.wordpress.com/2015/08/11/deep-learning-for-assisting-the-process-of-music-composition-part-1/, часть 2, часть 3, часть 4).

А вот A Neural Algorithm of Artistic Style -- http://arxiv.org/abs/1508.06576, in light of the striking similarities between performance-optimised artificial neural networks and biological vision, our work offers a path forward to an algorithmic understanding of how humans create and perceive artistic imagery. В самой работе демонстрируют, как "читают стиль" с какой-то известной картины при помощи нейронной сетки, а потом применяют его к какой-то фотографии -- получают картину из фотографии (картина дана в уголочке каждой "стильно художественной фотографии", а без картины приведено оригинальное фото):
neuroart


2. Когнитивная архитектура
Укрепляется подход, основывающийся на хитрой обвязке алгоритмов глубокого обучения (а не на логики экспертных систем, в том числе и нечёткой логики, логики высоких порядков на мультиграфах, фреймовых вычислений, онтологий и семантических сетей, решениях традиционных задач планирования и прочих подходов "классического AI 80-х" -- т.е. упор делается не на хитро программируемый и настраиваемый "решатель", solver, а на более-менее автоматическое "обучение"). Мелкое обучение (кластерный анализ, метод главных компонент и прочие простейшие методы одноуровневой, неиерархической работы с данными) уже рассматривается только по инерции, уже слабо трепыхается (и вышло несколько работ, которые теоретически показывают, что глубокие архитектуры лучше -- забивают последние гвозди в крышку мелкого гроба, например http://arxiv.org/abs/1508.04924).

В принципе, лучшие теоретические достижения мелкого обучения сейчас стремительно обогощают deep learning -- то, что связано со сменой парадигмы солверов и пруверов на "обучение" берётся, отдельные алгоритмы тоже берутся как основа "слоя", но в новую глубокую жизнь прорывается отнюдь не всё (чуть-чуть я об этом писал в "машинное обучение и трудные вопросы к инженерии и науке" -- http://ailev.livejournal.com/1207563.html, и там же см. комментарии по поводу "гибридного вывода", ибо обучение обучением, а эффективный логический вывод лучше делать прямо на логических гейтах и в архитектуре фон Неймана, нежели эмулировать логический вывод в нейронной сетке. Не удивлюсь, если лет через десять будет уже не "нейронный ускоритель для фон-неймонавского компьютера", а "фон-неймановский ускоритель для нейроморфного компьютера").

Тренд сегодняшнего момента: повышение универсальности предлагаемых алгоритмов -- декларируется, что один и тот же алгоритм должен сработать на самых разных данных, в самых разных задачах при общей сдержанности риторики в части "похожести на человека", "самообучаемости", "возможностей саморазвития", "сознания" и т.д.. Да, как в старые добрые времена, когда появлялись шапкозакидательные имена алгоритмов типа General Problem Solver (GPS, 1959 год, https://en.wikipedia.org/wiki/General_Problem_Solver).

Вот типичные ссылки:
-- http://aideus.com/research/research.html (там прямо говорится о strong artificial intelligence и универсальных алгоритмах, но без придыхания).
-- https://www.maxima.com/press/ (тут демонстрируется general purpose artificial intelligence, но по факту это просто один и тот же обучающийся алгоритм, который учили на разных данных)
-- https://en.wikipedia.org/wiki/MANIC_%28Cognitive_Architecture%29, http://arxiv.org/abs/1508.00019 -- пример "нечеловеческой" (сознательно не основанной на идеях копирования человека) обучаемой когнитивной архитектуры -- MANIC, a minimal architecture for general cognition.

Никакого "тёплового лампового интеллекта", никаких AGI в части "осознанных роботов". Нет, современная когнитивная архитектура направлена на решение узких задач, как это и развивалось раньше в weak AI. Только подчёркивается, что эти самые разные "узкие задачи" прикладных областей могут быть решены одной и той же когнитивной архитектурой, без перепрограммирования или замены алгоритмов -- только переобучением.

С другой стороны, этот уровень -- явный стык скользкой тематики AGI (artificial general intelligence, strong AI) и чисто алгоритмического уровня weak AI (что реализуется обычно одним "алгоритмом", а не алгоритмической архитектурой, так что у меня это платформенным уровнем ниже). Так что тут фанфары уже убраны, но больше абстрактных заявок, чем реальных результатов. Все результаты сводятся к тому, что "наш общий алгоритм умеет решать разные классы задач не хуже, чем их решали специализированные для этих задач алгоритмы" -- эти результаты пока не столько про архитектуру, сколько про отдельные удачные находки в алгоритмах глубокого обучения.

Почему я выделил слой когнитивной архитектуры отдельно, а обучающиеся алгоритмы отдельно? Потому как хороший обучающийся алгоритм просто используется когнитивной архитектурой (он часть когнитивной системы), а архитектура может использовать несколько обучающихся алгоритмов и варьировать обучение с учителем и без учителя, подстройки своих гиперпараметров. Вспоминаем тут Грегори Бейтсона с его вниманием к эпистемологии и уровнями обучения -- и пытаемся понять, как от онтологических/логических уровней классификации перейти к эпистемологическим уровням обучения (http://core.ac.uk/download/pdf/101767.pdf):
-- Learning IV `…would be change in Learning III, but probably does not occur in any adult living organism on this earth.’
-- Learning III …is change in the process of Learning II, e.g. a corrective change in the system of sets of alternatives from which choice is made.
-- Learning II …is change in the process of Learning I, e.g. a corrective change in the set of alternatives from which choice is made, or it is a change in how the sequence of experience is punctuated.
-- Learning I …is change in specificity of response by correction of errors of choice within a set of alternatives.
Learning 0 …is characterised by specificity of response, which – right or wrong - is not subject to correction.
Именно на этом уровне можно рассматривать всё, что связано с возможностью обучать алгоритмы, а не программировать их вручную или генерировать к ним код. Именно тут вопросы embodied intelligence, именно на этом уровне можно рассматривать обучение без учителя, на этом уровне обсуждается организация рефлексии (например, используя теории схемы внимания http://ailev.livejournal.com/1193568.html).

3. Обучающиеся алгоритмы
Как правило, на сегодня это алгоритмы глубокого обучения на нейронных сетках и их модификациях (архитектура Numenta при этом тоже относится к глубоким, хотя они себя любят отличить от общей тусовки deep learning -- кроме уже приведённой ссылки из доклада IBM см. https://github.com/numenta/nupic/wiki/Hierarchical-Temporal-Memory-Theory).

Чаще и чаще начинают использовать различия в названиях: кортикоморфные (по мотивам живых нейронов и организации мозга, т.е. с советами от нейрофизиологов) архитектуры противопоставляются нейроморфным (где уже не ожидается бионики, нейрофизиологов в глаза никто не видел, и поэтому результат не слишком напоминает мозг -- но успешно работает, и даже иногда понятно, почему). Но терминология пока не устоялась, плюс кроме "учёных" (которые пытаются тут попсеть уж как могут: они разговаривают ведь с использованием этих слов уже не только между собой, но и с грантодателями -- а те уже не вдаются в подробностями) эту терминологию начинают использовать и инженеры, и даже отдельные клочки этой терминологии уже вовсю пропагандируют журналисты. В итоге получится как с BigData -- обзовут "маркетинговым словом", ничего особенного "нейро" обозначать не будет, кроме "мы тут на переднем крае", а "кортико" -- будет означать "мы тут бионикой балуемся, вдруг наш махолёт выгорит?".

Тем не менее связь живого и неживого "нейро" -- это горячая тема. Вот только несколько ссылок на эту тему (большая дискуссия была тут: https://www.facebook.com/groups/nevronet/permalink/535381206628205/?hc_location=ufi). Правильные тут слова biologically plausible/inspired
-- Biologically Inspired Cognitive Architectures Society (BICA society, http://bicasociety.org/ -- в 2017 году будет конференция в Москве, а 22-24 апреля 2016 в Москве школа -- намекают, что она изменит вашу жизнь: http://school.bicasociety.org/),
-- Random feedback weights support learning in deep neural networks, http://arxiv.org/abs/1411.0247
-- Towards Biologically Plausible Deep Learning, http://arxiv.org/abs/1502.04156 (это февраль 2015, и тут хороший обзор литературы, формулировки проблемы и предложение путей решения. Проблема простая: Neuroscientists have long criticised deep learning algorithms as incompatible with current knowledge of neurobiology. Для меня лично это не проблема. С чего бы нейрофизиологам жаловаться, что занимающиеся нейронежитью не дают им ничего полезного? Мало ли кто им не даёт ничего полезного! Но нейрофизикологи -- назову их пока так за неимением лучшего слова -- почему-то отзываются и берутся вместо улучшения своих алгоритмов подгонять их под осуществимые на живых нейронах, "реагируют на критику". Хотя потом они замечают, что для улучшения работы нейроморфных архитектур эти результаты тоже сгодятся -- типа предложение для реактивного самолёта принципов полёта, совместимых с принципами полёта птичек поможет и самолётам. Ну да, ну да. Может и помочь, чего в жизни не бывает. Но я бы не обольщался).

Интересный сдвиг технологий последних пары-тройки месяцев -- в побуквенную работу с текстами (после крышесносительного блог-поста Karpathy -- даже не статьи! статьи становятся теперь важны не для дела, а только для денег-грантов-должностей), особенно для языков с флексиями. Если с текстами работать побуквенно, то сетки можно делать более маленькие (с меньшим числом параметров, т.е. быстрее работающие и быстрее научаемые) и получать результаты лучше, чем при пословной работе -- http://arxiv.org/abs/1508.06615 (Character-Aware Neural Language Models). Более того, если перейти на уровень букв, то можно нейронной сеткой распознавать речь с большими словарями на непрерывном входном потоке без предварительной обработки -- и отказаться от скрытых марковских моделей при резком росте качества и скорости -- http://arxiv.org/abs/1508.04395. Я и сам был в изумлении от того, как сетки учатся синтезировать правильные слова из букв.

Направление основного удара в алгоритмах сегодня -- это внимание и память. При этом слово "память" (равно как и внимание) может использоваться совсем не так, как ожидается: например, нейронная сетка "забывает" о том, что было в начале предложения по мере продвижения в переводе к концу предложения. А поскольку языки типа немецкого могут неожиданно вынести какое-то слово (или даже часть слова) из словосочетания в начале предложения в его конец, то качество перевода падает на длинных предложениях.

И тут-то пригождается "память" и "внимание" -- любой механизм, который позволяет "не забыть, что было в начале предложения" и "удерживать внимание на обрабатываемом кусочке"! Например, можно одновременно читать предложение задом наперёд и комбинировать чтение вперёд и чтение назад -- что забыл "вперёдчитатель" как раз хорошо помнит "назадчитатель", и они не теряют внимания -- не путают начало предложения с его концом. И да, качество перевода предложений с использованием такой памяти резко поднимается: https://drive.google.com/file/d/0B16RwCMQqrtdNUptOGtDeDhxZ0E/view (Neural Machine Translation: Progress Report, Kyunghyun Cho -- там эффектная концовка, предлагающая использовать все те же методы для описания изображений: переводить "визуальный язык" на естественный язык, с ипользованием внимания и памяти).

"Внимание" означает просто нарезку входной информации на маленькие кусочки -- если у тебя огромная книжка на входе, то её может переработать только огромная нейронная сетка. Но если сетка маленькая, то можно от этой входной книжки за один раз откусывать только маленький кусочек, это и есть "внимание" к чему-то маленькому, выделенному из большого (или другими словами, внимание -- выделение фигуры из фона, части входной информации из обширного входного потока). Теперь уменьшите "книжку" до предложения длиной 100 слов -- это будет правильное понимание сегодняшнего масштаба бедствия, до книжек пока дело не доходит чисто по объему (в том числе до длинных диалогов), с вниманием на масштабе одного предложения или пары реплик длиной 100 слов бы справиться с нынешними вычислительными ресурсами и известными алгоритмами! В конечном итоге это всё про то, как меньшими вычислительными ресурсами и меньшим объемом обучающих данных получить лучшие результаты, ибо всё содержательное сейчас болтается в районе 100 слов, а бОльший контекст вычислительно недоступен. Попсовое объяснение этого в Unsupervised learning, attention, and other mysteries. How to almost necessarily succeed: An interview with Google research scientist Ilya Sutskever. -- http://radar.oreilly.com/2015/08/unsupervised-learning-attention-and-other-mysteries.html

Темы памяти, внимания и вывода настолько важная, что ей посвящён отдельный семинар (организаторы все из Facebook AI Research), который будет 12 декабря 2015 с суперзвёздным составом докладчиков -- http://www.thespermwhale.com/jaseweston/ram/ (и на этой странице смотри большой список свежей и не очень свежей литературы). Этот семинар будет сразу после Deep Learning Symposium -- https://sites.google.com/site/nips2015deeplearnings/, где соберётся "весь цвет".

Всё это главным образом работа с текстами: "распознавания текстов" (как распознавания изображений и распознавания речи) нет такого, но очень осторожно уже начинают говорить про "понимание текстов" -- при этом вполне в духе конструктивизма предполагая, что ежели компьютер что-то "понял" про текст, то он должен уметь отвечать на вопросы по этим текстам и делать какие-то выводы (reasoning).

Вот, например фейсбуковский bAbI проект -- так и говорят про "понимание текста и рассуждение" (text understanding and reasoning). На тамошней страничке предлагают набор 20 задач для тестирования: тысяча вопросов для обучения, тысяча вопросов для тестирования в каждой задаче -- https://research.facebook.com/researchers/1543934539189348. Задачи -- это истории, в ходе рассказа которых нужно контролировать, что нить повествования не утеряна и текст понимается (помним при этом, что у сеток сейчас проблема с "вниманием" и "памятью"). Вот пример:
1 Mary moved to the bathroom.
2 John went to the hallway.
3 Where is Mary? bathroom 1
4 Daniel went back to the hallway.
5 Sandra moved to the garden.
6 Where is Daniel? hallway 4
7 John moved to the office.
8 Sandra journeyed to the bathroom.
9 Where is Daniel? hallway 4
10 Mary moved to the hallway.
11 Daniel travelled to the office.
12 Where is Daniel? office 11
А вот новый корпус текстов для глубокого обучения в части вывода: главное отличие в том, что он вдесятеро больше по объему, чем обычно используется для бенчмарка вывода в традиционной лингвистике. Тут нужно учить, а не просто тестировать запрограммированный вывод. Этот объем (570тыс. пар предложений, связанных отношениями contradiction, neutral, entailment) впервые дал возможность нейронным сеткам систематически обходить в бенчмарках традиционные лингвистические алгоритмы вывода: http://arxiv.org/abs/1508.05326

Но главная работа последнего времени -- это Towards Neural Network-based Reasoning, http://arxiv.org/abs/1508.05508. Потому как cначала они ругают за простоту только что помянутые 1 Mary moved to the bathroom. 2 John went to the hallway. 3 Where is Mary? bathroom 1 -- чтобы перейти к самым сложным задачам из предлагаемых bAbI. И далее пишут, что Our empirical studies show that Neural Reasoner can outperform existing neural reasoning systems with remarkable margins on two difficult artificial tasks (Positional Reasoning and Path Finding) proposed in [bAbI]. For example, it improves the accuracy on Path Finding(10K) from 33.4% [6] to over 98%. Что такое Path Finding? Вот такое:
1.The office is east of the hallway.
2.The kitchen is north of the office.
3.The garden is west of the bedroom.
4.The office is west of the garden.
5.The bathroom is north of the garden.
How do you go from the kitchen to the garden? south, east, relies on 2 and 4
How do you go from the office to the bathroom? east, north, relies on 4 and 5
Про эксперименты с базами данных субтитров (взять рекуррентную сетку и натренировать её на диалогах из фильмов. После чего давать ей какую-то строчку и просить сгенерить продолжение -- потом развлекаться "диалогом") я молчу, сейчас этим занимаются все подряд. Мне это кажется тупиковым (хотя тут надеются, что можно научить сетку на диалогах из реальных записей колл-центров и протоколов хелп-десков, но я думаю, что это не получится: сетка просто не обладает сегодня нужной памятью и вниманием, чтобы не выдать вам кусок помощи для одного кейса в разговоре про другой кейс -- особенно, если эти кейсы плохо различимы, типа помощь в настройке телефонов близких моделей но с каким-нибудь хитрым отличием. Клиент называет модель в самом начале диалога, это нужно запомнить и каким-то чудом вытащить потом фразу помощи для фичи именно для этой модели уже в конце диалога, при том что диалог во всём остальном похож на диалог для другой модели -- отличаются они какой-то одной кнопочкой, и это различие нужно помнить. С памятью же в рекуррентных сетках сегодня без специально принимаемых мер плохо. И с количеством примеров, на которых это тонкое различие может проявиться: нынешние сетки не умеют учиться пока на малом количестве примеров. Так что эксперименты с субтитрами из фильмов и диалогами из художественной литературы -- это баловство, развлечение, художественное творчество).

Мечта -- это "обучение без учителя", unsupervised learning. Идея в том, что если ты поиграешься сам с входной информацией, изучишь мир как-то сам, то потом тебя можно будет быстрее чему-нибудь в этом мире научить. Но это только мечта, про это сегодня говорит каждый, результатов пока особых нет. И обратите внимание, что есть и прямо обратная тема, поднимаемая Вапник сотоварищи: "обучение с умным учителем", ибо сегодняшнее "обучение с учителем" -- это обучение с тупым роботом, который не обращает на тебя внимания, просто даёт известные ему ответы. Умный учитель понимает, чего ты не понимаешь, и это позволяет давать такие примеры, по которым можно научиться быстрее, сэкономить время. И я бы больше ставил сегодня на вапниковское intelligence learning, чем на прорывы в unsupervised learning.

Ну, и полным полно работ по повышению эффективности и предложению новых вычислительных архитектур, в том числе с выходом на максимально массово-параллельные вычисления, уменьшение числа параметров при сохранении качества, замены пропуска данных их зашумлением (dropout меняют на dither -- и говорят, что становится сильно лучше, http://arxiv.org/abs/1508.04826),

Результаты оформляются в виде библиотек, библиотеки выкладываются в github, или не выкладываются, а под них берутся деньги и организуется очередной завоёвывающий мир стартап -- о многих работах в этой области мы пока не знаем. Вот тут пытались собрать некоторое количество ссылок на библиотеки -- http://vk.com/topic-44016343_29211791, но этих библиотек с разными особенностями море разливанное, тысячи их, всех не соберёшь, не упомянешь.

Из новостей
-- появилась библиотека Strada на Julia (по факту это Caffe, mocha.jl там тоже учтена, но в этой есть даже рекуррентные сетки): https://github.com/pcmoritz/Strada.jl
-- начался рефакторинг самого Caffe (Caffe2 -- https://github.com/Yangqing/caffe2)
-- питоновский Theano-Lights включает алгоритмические новинки -- https://github.com/Ivaylo-Popov/Theano-Lights
-- порт примеров использования deeplearning4j из Scala -- https://github.com/kogecoo/dl4j-0.4-examples-scala (и помним, что есть ещё просто Scala wrapper for deeplearning4j https://github.com/deeplearning4j/deeplearning4s)
-- ...этих библиотек, портов, wrappers выходит каждую неделю по много штук. А старые пополняются новыми алгоритмами, которые выходят в arXive тоже по многу штук в неделю.

4. Вычислительные библиотеки
Тут никаких пока особых новостей нет. Библиотеки "научных вычислений" (главным образом такого или сякого умножения матриц) пухнут, пытаются как-то эффективно использовать все возможности нижележащих в интеллект-стеке языков программирования и вычислительных ускорителей, чтобы вышележащие по интеллект-стеку алгоритмы обучения нейронных сеток работали быстро. Тем не менее, сетки работают медленно, крайне медленно.

Времена поменялись, и теперь вместо классического обсмеивания традиционной долгой "компиляции" (http://xkcd.com/303/):


сегодня хихикают над долгим "обучением" (http://pekalicious.com/blog/training/ -- обратите внимание, это картинка ещё апреля 2011 года, и её актуальность никуда не пропала, вычисления по-прежнему идут с черепашьей скоростью, суперкомпьютерные задачи пытаются решать на десктопах, тут уж ничего не поделаешь):


Нужно ещё отметить, что вычислительных библиотек обычно несколько для каждого языка (они существенно языкозависимы, хотя тут можно обсуждать варианты -- типа использования сишных вычислительных/"научных" библиотек из других языков, на которых пишут собственно нейроалгоритмы), каждая из них неполна и узконаправлена, так что сам язык относится к отдельному уровню платформы.

Подробней я про вычислительную математику писал в http://ailev.livejournal.com/1207520.html -- и не буду повторяться, сногсшибательных новостей тут новых не появилось, всё инфраструктурно и медленно.

5. Вычислительные языки программирования.
По факту, сегодня в интеллект-стеке играют C++, Lua, Python. А все остальные (Java, Julia и т.д.) пока маргинальны. Почувствуйте разницу со старинным "искусственным интеллектом", в котором главными были Lisp и Prolog.

Я уже много раз писал про Julia (http://julialang.org), как язык, к которому в этом плане нужно присмотреться: его дизайн-цель как раз обеспечить быстрые вычисления. Языков с такой целью мало, так что шансы Julia занять существенное место в интеллект-стеке довольно велики -- если на нём кто-нибудь возьмётся организовать написание чего-то типа JuliANN. Именно организовать написание, написать такие вещи кому-то одному обычно не получается и качественно, и в обозримое время.

Опять же, никаких особых новостей, ибо в языкостроительстве быстро вообще ничего не бывает -- новые новости ещё не созрели.

6. Аппаратные ускорители вычислений
Мейстрим стремительно уходит в FPGA. Очередная новость трёхдневной давности: LeCun told The Platform that Google is rumored to be building custom hardware to run its neural networks and that this hardware is said to be based on FPGAs -- http://www.theplatform.net/2015/08/25/a-glimpse-into-the-future-of-deep-learning-hardware/. Майкрософт это давно делает -- http://www.theplatform.net/2015/08/27/microsoft-extends-fpga-reach-from-bing-to-deep-learning/ (вот тут я писал подробней, какие там используют хитрые чипы, это не совсем обычные FPGA -- http://ailev.livejournal.com/1207933.html).

Из забавностей -- появление китайских FPGA, пока на чудовищных проектных нормах, маленьких и относительно дешёвых. Мейкеры их уже обсуждают, но с deep learning пока никто их не ассоциирует: http://hackaday.com/2015/08/24/two-new-fpga-families-designed-in-china/. Мне в этом важен тренд: FPGA из сугубо эзотерической чисто промышленной технологии потихоньку превращается в чуть-чуть более попсовую технологию. Хотя суть тамошнего обсуждения -- "запредельно сложно, вряд ли мейкеры массово начнут этой технологией пользоваться".

Пока же слайд LeCunn наиболее информативен в части аппаратного ускорения:


Последние тренды в GPU (текущий мейнстрим) показывают прогресс в три раза по скорости за последние 9 месяцев -- мало кто такой прыти ожидал от оптимизаторов: https://github.com/soumith/convnet-benchmarks/issues/56#issue-103818583
29 comments|post comment

Игра на нервах [29 Aug 2015|03:43pm]
Похоже, западная и восточная медицины таки начали склеиваться. Все эти "акупунктуры" и "остеопатии" потихоньку обретают твёрдую почву под руками (pun intended). Вряд ли отдельные группы исследователей знают о работах друг друга, но понимание того, что через раздражение нервов как-то можно влиять на клеточные процессы в тех или иных органах, растёт:

1. Висцеральная теория сна (http://ailev.livejournal.com/1117514.html) и её трактовка иглорефлексотерапии (http://ailev.livejournal.com/1124869.html). Суть: мозг во время сна производит вычисления по оздоровлению организма -- и для этого он связан с телом большим количеством нервов. Воздействуя на эти нервы в разных местах и разными способами, можно в какой-то степени подавать сигналы мозгу для активизации исправления тех или иных органов.

2. Можно стимулировать нерв (например, нейроимплантом), чтобы снимать воспаление. Нервы таки влияют на клеточные процессы!

There's a single nerve that connects all of your vital organs — and it might just be the future of medicine -- http://www.businessinsider.com/vagus-nerve-stimulation-2015-6.

Это оказывается целым трендом, появляется веб-проект Stimulating Peripheral Activity to Relieve Conditions (SPARC) -- http://commonfund.nih.gov/sparc.

Ещё в 2014 в Nature опубликован roadmap биоэлектронных лекарств (bioelectronic medicines): Realizing the vision of a new class of medicines based on modulating the electrical signalling patterns of the peripheral nervous system needs a firm research foundation. Here, an interdisciplinary community puts forward a research roadmap for the next 5 years. -- http://www.nature.com/nrd/journal/v13/n6/full/nrd4351.html

3. Триггерные точки миофасциального релиза и акупунктурные точки оказались одним и тем же! Этому посвящено довольно много работ: http://www.jpain.org/article/S1526-5900%2809%2900010-8/abstract

Миофасциальные триггерные точки (myofascial trigger point, это которые болят, ежели в них ткнуть пальцем, но бывает и так, что они просто болят уже без тычка пальцем -- https://en.wikipedia.org/wiki/Myofascial_trigger_point) в какой-то момент попытались обезболивать, вкалывая в них обезболивающее. А потом обнаружили, что эффект есть и в том случае, если туда колоть "сухой иглой" (она же игла для акупунтуры) -- http://www.ncbi.nlm.nih.gov/pubmed/20673246

Триггерные точки вполне себе "есть" и инструментально обнаружимы в активном виде -- Active trigger points consist of multiple contraction knots within a muscle, and they can develop due to injury, musculoskeletal dysfunction and overuse. Active trigger points impair a person’s ability to lengthen, strengthen or contract the muscle. As a result, the muscle shortens and compresses the structure around it, causing pain. -- http://www.ptplus.com/trigger-point-dry-needling/.

Так что появились вполне респектабельные статьи, где колят акупунктурными иглами под приборным визуальным контролем. Вот, например, статья даже на русском языке (2010г., Использование "сухого" иглоукалывания триггерных точек под ультразвуковым контролем в лечении дисфункции височно-нижнечелюстного сутстава. Первичный опыт. Клиническая иллюстрация и обзор литературы): http://www.researchgate.net/publication/256089585_Dry_needling_of_trigger_points_under_ultrasound_guidance_for_treatment_of_of_the_temporomandibular_joint_dysfunction._Primary_experience_clinical_illustration_and_literature_review

Результат: лицензированные остеопаты (занимающиеся миофасциальным релизом) и лицензированные иглорефлексотерапевты вошли в конкуренцию друг с другом и обратились к защите государства друг от друга -- вот, например, позиция ассоциации иглорефлексотерапевтов (а вы думаете, что они обрадовались?!): "сухое иглоукалывание" они называют "нелегальной и небезопасной практикой акупунктуры" и требуют для практикующих получения именно лицензии иглорефлексотерапевта: http://acupuncturewisconsin.org/dry-needling-10-facts-you-should-know-2/, это позиция иглорефлексотерапевтов Висконсина. Вот чуть более мягкая позиция у австралийцев: http://www.acupuncture.org.au/Health_Services/Dry_Needling.aspx

Ну, у миофасциальщиков тоже есть своя ассоциация, http://www.myofascialtherapy.org/, вполне западный подход к медицине, и за ними ответы не ржавеют. Они сливаются с остеопатами, которые, похоже задействуют в своих методах очень похожие механизмы связи нервной системы и органов (а поскольку остеопаты ещё и мышцами и костями интересуются, то любят добавить "механическую проблему лекарством не уберёшь" -- ибо если какой-то нерв защемляется, то это механическая проблема, а проявляться она может и на клеточном уровне в определённых органах). Литературы и методов там хватает, есть немного и по-русски: http://osteoway.com/osteopaticheskie-techniki.html

Пока миофасциальщики защищаются от того, чтобы их путали с акупунктурщиками: Although they use the same thin filament needles, acupuncture and dry needling are two very different treatments. In contrast to most schools of acupuncture, dry needling is strictly based on Western medicine principles and research. Acupuncture is used to treat Traditional Chinese Medical diagnoses of visceral and systemic dysfunction, while dry needling is used to assess and treat myofascial pain. Dry needling relieves pain by inactivating trigger points within muscles. Acupuncture achieves pain relief through the release of endorphins and creating balance in the body’s energy levels. Through the release of cortisol, acupuncture can also have an anti-inflammatory effect on the body. At PT Plus, our physical therapists are not licensed acupuncturists and do not practice acupuncture. Trigger Point Dry Needling and other physical therapy procedures are based on scientific neurophysiological and biomechanical principles. -- http://www.ptplus.com/trigger-point-dry-needling/. Но если этих миофасциальщиков порасспросить, они нехотя расскажут, что болят первичные точки и отражённые -- и боль надёжно проходит, только если тыкать иголкой в первичную точку, а не отражённую. Ну, разве что про "каналы" не рассказывают, объясняя связи между отражёнными пусковыми/триггерными точками и первичными.

Но совпадение карт триггерных точек и акупунктурных точек уже найдено, долгосрочные и влияющие на состояние внутренних органов эффекты тоже подтверждены, и продолжать отнекиваться, что "мы тут только местный мышечный спазм снимаем и местное воспаление" миофасциальщики долго не смогут -- а исследования по биоэлектронным лекарствам дадут им новые аргументы и новые инструменты (раздражать нерв иголкой это всё-таки не так хорошо, как раздражать нерв специально разработанным имплантом, или даже действовать на нерв каким-то неинвазивным методом -- типа тех, что используют в приборах магнитного воздействия на нейроны фирмы http://brainsway.com/).

Так что нас ждёт большая игра на нервах -- их будут стимулировать механически руками и иголками, теплом от полынных сигар, электронно и магнитно, и всяко-разно. Главное, становится всё понятней и понятней, как и где эти нервы стимулировать и почему от этой стимуляции в одном месте происходят изменения в органах, расположенных в других местах.

Я как-то получил несколько лет иглорефлексотерапии у плохо говорящего по-русски (ну, или наоборот, хорошо говорящего -- если сравнить с другими китайцами) китайца-даоса, потомственного врача. Так что у меня за всеми этими строчками и ссылками имеются не только чисто читательские впечатления, но и вполне физиологичный личный опыт. Я хорошо помню, что чувствуется, когда в тебя тычут иголкой или тыкают больно пальцем. И этот опыт вполне согласуется с тем, что можно прочесть по ссылкам в этом посте.
6 comments|post comment

Мейкеры делают EM-drive [29 Aug 2015|04:03pm]
Я от оч.умелых ручек мейкеров в изумлении. Мейкеры теперь смело берутся за проекты, которые раньше казались доступными только промышленным гигантам и университетским лабораториям.

Так, мейкеры сегодня делают EM-drive -- https://hackaday.io/project/5596-em-drive (идея в том, чтобы резко поднять частоту излучения, и тяга должна стать вполне ощутимой).

А вот сканирующий туннельный микроскоп -- https://hackaday.io/project/4986-scanning-tunneling-microscope, разрешение атомного уровня в домашних условиях (идея в том, как использовать дешёвый пьезоэлектрик вместо дорогого в сканере -- и она сработала).

Там таких проектов море: https://hackaday.io/ -- а ведь это только один из сайтов, поддерживающих мейкеров!
6 comments|post comment

Об "курс робототехники" и чему в нём учат "проекты" [29 Aug 2015|08:29pm]
Опять ввязался в фейсбуке в разговор про то, что такое "курс робототехники" -- https://www.facebook.com/alx.kornilov/posts/1666426850235544 (пост Алексея Корнилова). Там обсуждалась табличка компетенций программиста (их было много таких, типа http://sijinjoseph.com/programmer-competency-matrix/, но год назад была сделана новая инкарнация, на базе европейской классификации уровней владения языками -- http://science.raphael.poss.name/programming-levels.html).

Дальше обсуждение пошло по линии "всё, что нужно программисту, нужно робототехнику", и "ну и как программирование гироскопа в леговском EV3 продвигает движение студента по этим уровням?", "в чём образовательная фишка курса робототехники"?

Тут я и ввязался с парой комментов, которые я сюда вытащу и лишь чуток отредактирую (более обстоятельно этот вопрос я обсуждал в других местах, прежде всего доклад "Непрерывное инженерное образование. Итоги 2014 года и планы", видео и слайды в http://incose-ru.livejournal.com/50538.html. Разъяснение про "практика=дисциплина + технология" дано в учебнике "системноинженерное мышление", http://techinvestlab.ru/systems_engineering_thinking).

Ключевое различение для ответа на вопрос "где тут образование, если студента учат программировани гироскоп в EV3" следует из формулы "практика = дисциплина + технология". "Гироскоп вообще" -- это понятие (учебной) дисциплины, и пока не определили, что это такое и из какого учебного предмета это понятие, и в каком объеме эти сведения про "гироскопы вообще" нужно изучить и мыслительные операции с "гироскопами вообще"нужно освоить, совершенно бессмысленно обсуждать "гироскоп в EV3" и бессмысленно программировать его -- образовательных следствий такое программирование не имеет.

По большому счёту проектная работа (а робототехника сегодня известна нам чисто своим проектным лицом) нужна в образовании именно как поставщик примеров накладывания теоретической действительности "из учебника" на какую-то технологию "из жизни". Поэтому (учебная, научная, инженерная) дисциплина прописывается в учебных планах образования, а проектная работа включает в себя не только образование, но и какой-то технологический тренинг.

Дисциплины, "гироскопы вообще" -- это образование. Проекты и "гироскопы EV3" -- это не образование, это по факту тренинги (при этом хорошего образования без этих тренингов не получится, будет оторванное от жизни знание теории и неумение решать задачи -- то есть неумение отождествить теоретические объекты с объектами из жизни).

Чем хороша таблица компетенций программиста, приведённая топикстартером в фейбуке? Она в терминах дисциплины и применима к любой технологии (понятие "код", "функция" и т.д. это из дисциплины software engineering), а вот если бы там была Visual Studio и С++ это было бы про конкретные технологии.

Дальше помянули два потенциальных проекта робототехники:
1. Робот-теннисист (см. мой большой текст с описанием возможных дисциплин курса и видео самого робота в http://ailev.livejournal.com/1159346.html),
2. Робот-гимнаст, я просто привёл его видео (там целый канал с этими видео -- http://www.youtube.com/channel/UCYQDHzSrOA6sFVk7gPjnRWg):



Теперь можно пообсуждать: какие знания нужно загрузить в голову студентов, чтобы их можно было использовать в обоих проектах, использующих абсолютно разную элементную базу -- и гимнаста, и теннисиста (а также, по возможности, и всех остальных робототехнических проектов)? Эти знания и будут необходимые образовательные дисциплины. А то, что в этих проектах что различается -- эти знания будут про технологии (типы моторчиков, варианты 3D принтеров или обрабатывающих центров с их инструкциями эксплуатации, умение держать в руках отвёртку или паяльник или паяльную станцию или программатор конкретной фирмы -- это всё технологии, они на каждом производстве, у каждого предприятия разные. А дисциплина, она должна быть из ВУЗа, одна для всех возможных вариаций технологий, надёжно загружена в голову и натренирована на использование с самыми разными поддерживающими эту дисциплину технологиями).

Дальше вопрос был про системотехнику: типа как "это ж отдельная профессия, не робототехника. Студентам нужно чего-то попроще". Мой ответ был в том, что пока не будет надёжно понято, чем системная инженерия отличается от (советской) системотехники -- то ничего вообще не получится. Системная инженерия как раз про создание чего-то законченного ("успешной системы", как сказано в определении системной инженерии), при этом коллективом инженеров, маленьким или большим коллективом это важно, но не приципиально важно. При обучении студентов системной инженерии они как раз законченный проект делают (иногда и в соревнованиях участвуют). Но! Они не просто "целенаправленно, много и тяжело трудятся" (как это обычно понимается при обычном сейчас в России "проектном подходе к обучению"), они рефлексируют этот свой труд в свете образовательной дисциплины, они выполняют всё "по норме", дисциплинированно и независимо от технологии самого проекта.

Так, они реально разрабатывают требования и понимают, что это требования, и записывают их не абы как, а, например, используя форму "из учебника" -- "я как _стейкхолдер_ хочу _свойства-системы_ для того чтобы _польза_. Типа "я как архитектор хочу использовать в коммуникационном модуле протоколы WiFi, чтобы потом мне не мучиться с нестандартными чипами и нестандартным софтом и для беспроводного быстрого подключения целевой системы к операционному окружению в жилой квартире". Для надёжности можно спросить студента, где и как был использован системный подход в таком описании, что этот системный подход даёт. И сурово снизить оценку, если эта теория была не использована в проекте. Ну, или пусть продемонстрируют другую практику работы с требованиями. Но точно будет незачёт при работе "по наитию", "на чистой смекалке", "на коленке" -- зачёт будет только при демонстрации практики (знания дисциплины и владения технологией), имеющей отношение к системному подходу.

Какие знания нужно давать инженерам, кроме специфических дисциплин (ТАУ, электроники, software engineering и т.д.), чтобы они могли справиться с коллективным проектом? Курс системноинженерного мышления (мой учебник, например -- http://techinvestlab.ru/systems_engineering_thinking), курс системноинженерных практик (у меня это второй семестр, во второй версии учебника это скрыто в обзорах литературы по соответствующим практикам) и предметные знания типа тех, что давались в посте для робота-теннисиста (вот они могут быть раскиданы по разным людям). Плюс обязательно системоменеджерские практики, например Lean 2.0 и kanban -- работы ведь нужно как-то планировать и выполнять. Ну, и инфраструктура для всего этого (моделеры, issue tracker). "Инфраструктура" -- это технология, конечно. Ибо опробовать теорию можно только на базе какой-то технологии, не абстрактно.

Я уже столько раз об этом и говорил и писал (и коротко, и толстыми учебниками), прямо как попугай уже одно и то же повторяю. Опять же, все эти толстые учебники и опыт работы со студентами в режиме комментов в фейсбуке или даже обширных постов в ЖЖ не передашь.

Системная инженерия стремительно сейчас проникает во все другие инженерии, часто рваными кусками и под другими названиями, с использованием другой терминологии. Во всех самых разных инженериях сейчас внимательно относятся к требованиям, управляют конфигурацией, разрабатывают архитектуру, проводят не только проверку (verification), но и приёмку (validation) -- хотя ещё пару десятков лет назад этим вопросам уделяли много меньше внимания.

Так что я не согласен с постановкой вопроса про обучение инженерным специальностям без преподавания им основ системной инженерии. Ещё я не согласен, что системная инженерия это обязательно профессиональная деятельность (см. также про развал понятия "профессия" в последние годы технологий "полнотекстового поиска" -- пост "об профессии и их атласы", http://ailev.livejournal.com/1209566.html). Есть какой-то набор мыслительных и деятельностных знаний и навыков, а также компетенций (например, личностная компетенция честно прочекивать чеклист до конца, и не скипать пункты. Компетенция думать о системе не только по состоянию на момент её разработки, но и про то, что в какой-то момент система будет изготавливаться, а в какой-то момент ещё и эксплуатироваться -- то есть компетенция удерживать в голове весь жизненный цикл, а не зацикливаться только на своей стадии и своей практике). Это и есть системная инженерия, совсем необязательно это должно стать профессией. Я вот пишу практически каждый день, но профессия у меня отнюдь не "писатель". То же и к системной инженерии относится: компетенции по системной инженерии у инженеров есть, и они используются. Но необязательно эти инженеры именно системные инженеры, как необязательно все пишущие -- писатели.

Если человек умеет работать с требованиями, то он системный инженер по определению -- в тот момент, когда работает с требованиями. Это его функциональная роль "инженер по требованиям", подроль системного инженера, но не факт, что это "профессия" (и не факт даже, что у этого человека вообще есть какая-то "профессия" традиционно понимаемая, опять сошлюсь на http://ailev.livejournal.com/1209566.html).

Скучная была дискуссия, по кругу про одно и то же... Неинтересно было отвечать на вопросы. Скажем, на лекции открытой (которая и была когда-то записана на видео аж в 2012 году, сутки рассказа -- http://video.techpred.ru/lecturer/LevenchukAI/), а также в моём курсе сейчас (который отражён в учебнике http://techinvestlab.ru/systems_engineering_thinking) меня меньше всего заботят студенческие учебные проекты. У моих студентов обычно не учебные, а вполне боевые рабочие проекты, в которых они участвуют (подробней я писал о том, как это получается в межвузовских инженерных школах, тут: http://ailev.livejournal.com/1181065.html). Можно обсуждать, плохо это или хорошо, для образования (есть мнение, что для начала нужно тренироваться на игрушечных проектах, и только потом тебя можно будет пускать в проекты реальные), но это так. И ничего, образование работает и с таким подходом: "требования" те же нужно уметь отличать от "планов испытаний" и для спичечных коробков, и для лазеров, и для софта. Дело-то не в размере проекта и не в типе целевой системы! Дело в том, чтобы в любом проекте понималось, что без требований нельзя, без планов испытаний нельзя, и что существует связь между требованиями и планами испытаний. И испытания проверки и приёмки, и не делать испытания приёмки низззя! Это должно оставаться от учебного курса, в голове должна оставаться дисциплина: не делать испытания приёмки низзя! не писать требования хоть по какой-то методе, просто перечисляя что-то на бумажке -- низзя! Образование должно выдавать на-гора дисциплинированного инженера! Дисциплина должна быть натренирована в паре-тройке конкретных технологических инфраструктурах!

В университете Лафборо для системных инженеров курс системного мышления 150 часов, архитектуры тоже 150 часов, инженерный проект -- 600 часов. Я даю сегодня курс системноинженерного мышления 32 часа + ещё 36 часов для практик (всех скопом -- архитектуры, требований, испытаний, управления конфигурацией и т.д., буквально по нескольку часов на каждую практику). И больше часов не предусмотрено, хотя это и универсальное знание, которое обеспечивает целостность инженерного проекта в части объединения знаний всех других дисциплин. Вот и делайте выводы: почему электронщики и программисты, менеджеры и специалисты по ТАУ не могут сформулировать требования, поделить работу на части и собрать результаты, забывают испытать систему, не имеют слов для обсуждения вида жизненного цикла -- и жизненный цикл остаётся необсуждённым.

Часть студентов после этого краткого курса интересуется и дальше занимаются самостоятельно до освоения на очень приличном уровне. Часть просто пропускают материал мимо ушей (я проверял: материал других преподавателей они точно так же пропускают мимо ушей, это не только моему предмету так везёт). Часть осваивают ровно в объеме этих 32+36 часов, но не факт, что используют эти знания потом в работе. На практике в группе примерно по трети каждой категории. Опять же, вопрос такой же, как к курсу математики: какой объем давать инженеру матана? Особенно в эпоху, когда Mathematica берёт аналитически любой интеграл? Тут вопросов на часы и способ обучения математике не возникает, а в отношении системного подхода почему-то возникает! Хотя меня тут же в дискуссии фейсбуковской поправили, что такой же нервный разговор про матан, как и разговор про системную инженерию.

Но если рассматривать то, чему учить именно робототехников, есть много более насущные и сложные вопросы. Скажем, без глубоких нейронных сеток через год (а то и прямо сейчас) робототехника уже не робототехника будет вообще. Когда глубокие нейронные сетки пришли на соревнования kaggle.com, то все другие виды алгоритмов проиграли. На соревнованиях робототехников будет то же самое, в рыночной кокуренции робототехников (по английски тут будет то же слово, что наши "соревнования" -- competition) будет то же самое -- без нейронных сетей роботы будут проигрывать роботам с нейровнными сетями. Всё будет быстро.

Но с deep learning сегодня засада в части инженерного образования. Инженерия нейронных сетей недоопределена, там куча особенностей по сравнению с программной инженерией. Как учить тому, что даже названия ещё не имеет, непонятно, но не учить нельзя: нейронные сетки и дисциплина, и целый букет уже технологий (поглядите на описание интеллект-стека, для робототехников это весьма и весьма актуально: http://ailev.livejournal.com/1210678.html). Вот такое нужно робототехникам для вставки в учебные программы и учебные проекты срочно обсуждать, а не фигнёй маяться по поводу "как совместить курс ТАУ и знания о существовании системного подхода": проблематизацию вообще понимания науки и инженерии и их связи http://ailev.livejournal.com/1207563.html (и раньше я поднимал этот вопрос странного типа инженерии, который появляется при работе с нейронными сетками в http://ailev.livejournal.com/1205999.html).
3 comments|post comment

Антиципация по-русски -- на английском [29 Aug 2015|10:20pm]
На английском вышла книжка про советский и российский вклад в антиципацию (anticipation -- предвосхищение, предугадывание, упреждение). В философии и психологии это область исследований про то, как человек предвосхищает будущие ситуации, а в искусственном интеллекте это ровно про то же самое, только занимается этим не только человек, а "и человек тоже" -- агент (https://en.wikipedia.org/wiki/Anticipation_%28artificial_intelligence%29).

Вот книжка: http://www.springer.com/us/book/9783319194455 -- "Anticipation: Learning from the Past. The Russian/Soviet Contributions to the Science of Anticipation", Editor: Mihai Nadin.

Вот ещё в 2014 году вышел спецвыпуск International Journal of General Systems по антиципации -- http://www.tandfonline.com/toc/ggen20/current, там тоже есть работа по советскому и российскому вкладам --
"From Russia with Love / Russian experimental and empirical contributions informed by an anticipatory perspective" by Mihai Nadin & Andres Kurismaa, pages 615-620 -- http://www.tandfonline.com/doi/full/10.1080/03081079.2015.1032074

Вопрос реактивного и проактивного поведения, необходимости иметь модель себя и окружения ровно для того, чтобы предвидеть последствия своего действия или бездействия -- этот вопрос стоит и перед биологами, и перед психологами, и перед когнитивистами, и перед представителями нейронаук, и перед разработчиками систем управления, а сегодня так и вообще перед системными инженерами (особенно, если мы хотим делать resilient system, которая выживет там, где другая система просто сломается). Работ в этой сфере много (в статье в Википедии упор на работу Розина 1985 года, но занимались этим ведь давно -- в русскоязычной статье википедии про антиципацию начинают с "впервые ввёдшего термин в оборот" В.Вундта, но поминаются даже стоики и эпикурейцы как первопроходцы). Конечно, это всё история науки и инженерии (в той мере, в которой AI относится к инженерии), но я знаю, что некоторые мои читатели не только занимаются настоящим и будущим, но и очень любят историю. Им, думаю, будет любопытно.
1 comment|post comment

Делёжка статистической силой, обучение без учителя и вероятностные языки программирования [29 Aug 2015|11:56pm]
Когда говорят sharing statistical strength, то имеют ввиду перенос обучения из одной модели на одних задачах в другую модель, которая должна работать с другими задачами. Это словосочетание часто используется в тусовке deep learning. Что-то типа "образования", education (вместо "обучения", training) -- нахождение хороших репрезентаций, пригодных для многих типов задач.

"Statisticians sometimes refer to this phenomenon of inference in hierarchical models as "sharing of statistical strength": it is as if the sample we observe for each bag also provides a weaker indirect sample relevant to the other bags. In machine learning and cognitive science this phenomenon is often called learning to learn or transfer learning. -- http://projects.csail.mit.edu/church/wiki/Hierarchical_Models. Удивительно, но люди в deep learning говорят как статистики, а не как спецы по machine learning или cognitive science -- во всех тьюториалах там именно sharing statistical strength, а не transfer learning или learning to learn. Но пользователи программных пакетов всё чаще изобретают свои собственные имена для этого, с упором не на теорию и результат (знание, статистика), а на метод (т.е. с акцентом именно на "обучение") -- см. дискуссию в http://vk.com/topic-44016343_29508229

Обсуждается это обычно в ситуациях претренинга, все эти unsupervised learning, semi-supervised learning. Но вот определение и объяснение sharing statistical strength находится больше в работах по вероятностным моделям мышления (и связанных с ними работам по вероятностным языкам программирования), а не в работах по deep learning. Глубокосетевики лишь используют это определение, причём у них с этим unsupervising learning больше хотелок и вопросов, чем каких-то результатов (намёк на результаты был лет пять назад и sharing statistical strength до сих пор поминается во всех тьюториалах), но этот намёк так и не был реализован в полной мере). Так что пока никакой делёжки статистической силой не происходит, но идея в массах живёт и ждёт своего часа -- про важность unsupervised learning поминают все, хотя возятся с ним немногие, с supervising learning ведь ещё не наигрались, там результаты проще пока получаются.

В любом случае, это вроде как онтологический язык (поделиться найденной upper ontology -- найденными фичами, которые пригодятся в самых разных ситуациях), а с другой стороны в рамках чисто эпистемологического разговора ("как узнать", про обучение и передачу результатов обучения). Вот этот уход от онтологии (она "какая получилась, такая получилась -- не будем вдаваться в подробности, там просто какие-то коэффициенты, их много, пусть себе живут, фичи есть, работают и нечего на них смотреть") к эпистемологии (как мы получаем эти коэффициенты и что потом с ними делаем -- вот это важно, давайте обсуждать) мне очень симпатичен. Я давно интересовался эпистемологией (http://ailev.livejournal.com/661094.html), потихоньку это начало реализовываться, хотя и немного странно.

Интересно, что обсуждают делёжку статистической силой люди, которых интересуют вероятностные модели мышления -- и далее они идут по линии классического AI и предлагают средства программирования, планирования, вывода: статистические языки программирования, точно так же, как предлагали логические и функциональные языки программирования. Опора на те же онтологии, только вероятностные. Почувствуйте разницу с подходом с опорой на эпистемологию, где интеллект не вероятностно программируется, а вероятностно обучается!

Вот несколько ссылок по теме:
-- иерархические модели в вероятностных моделях мышления: http://projects.csail.mit.edu/church/wiki/Hierarchical_Models (в том числе подробненько про абстракцию как подъем по иерархии, включая вычислительные примеры на Church).
-- книжка по вероятностным моделям мышления ("Probabilistic Models of Cognition" by Noah D. Goodman and Joshua B. Tenenbaum), https://probmods.org/
-- основное гнездо вероятностного программирования: http://probabilistic-programming.org/
-- вероятностный язык программирования Church, http://projects.csail.mit.edu/church/wiki/Church
-- вероятностное программирование (вернее, его пока отсутствие) в Julia -- https://groups.google.com/forum/#!topic/julia-stats/b9koPYTW3os ("A lot of people have worked on ideas for probabilistic programming in Julia, but no one seems to have time to work on it much at the moment" -- главный вывод дискуссии).
-- запрос в Гугле, который выдаёт самые разные тьюториалы по deep learning с shared statistical strength разделом: https://www.google.com/search?&q=%22sharing+statistical+strength%22+deep+learning

Мутно это всё, конечно, но через некотрое время будет важно.
post comment

navigation
[ viewing | August 29th, 2015 ]
[ go | previous day|next day ]