← Доклад "Интеллект-стек: как создаётся Deus ex Machina"
Обсуждение
Читать и комментировать в ЖЖ ↗
Огромное спасибо, было очень интересно!
Комментарий
Касательно ссылки на Хабр по поводу необходимости больших данных. Это переход от экстраполяции к интерполяции за счет практически полного заполнения всего пространства состояний.
Комментарий
и еще раз спасибо вам! из всех отзывов, которые я, как один из организаторов, слышала, больше всего мне понравились те, которые были с мыслью "теперь понятно, что эту тему не получится игнорировать, и надо искать в ней свое место". и спасибо, что не стали настаивать и дали провести кусочек с обсуждением "сумеют ли заменить", мне кажется, это сделало тему более близкой, хотя, возможно, я и ошибаюсь)
Комментарий
Восхитительное выступление получилось! Это был, наверное, первый раз, когда два с половиной часа слушал доклад не теряя интереса.
Комментарий
Да, эту тему не получится игнорировать и нужно к ней как-то прислоняться )))
Комментарий
по поводу цены входа в 20 тыщ (GTX 970) - это есть misleading
GPU для нейросеток не обязателен - он может существенно ускорить некоторые операции, а может и нет, в зависимости от (еще ведь нужно данные закачать в GPU а это может нивелировать выигрыш) - в частности, GPU актуален для CNN (ибо картинки - это оооочень много данных)
к примеру, я тренил 6ти или 7ми слойную нейросетку на Октаве под виртуалкой (мягко говоря, не самый оптимальный конфиг) и не жужжул - кулер, правда, жужжал :)
я бы сказал цена входа:
- нормальный комп (подороже 20 тыщ скорее всего, но скорее всего уже есть :))
- матан, линалгебра, немного теорвера и статистики - хорошего знания стандартных вузовских должно хватить
- желательно, выпуклую/математическую оптимизацию
- немного программирования
я лично в универе несколько халявно учился, в частности, линалгебру освоил явно недостаточно :)
а без нее в машин лёрнинге далеко не уползёшь, впрочем по ходу дела разобрался
Комментарий
Без GPU обучение большх сеток будет очень медленно. GPU дает прирост скорости на 1-2 порядка по сравнению с CPU.
Вот здесь есть рекоммендации по выбору компонентов компьютера и по выбору GPU, с разбором требований для некоторых видов задач, и аналзом разных характеристик (типа GPU memory bandwidth, который может быть важнее чем скорость работы самого GPU)
https://timdettmers.wordpress.com/2015/03/09/deep-learning-hardware-guide/
https://timdettmers.wordpress.com/2014/08/14/which-gpu-for-deep-learning/
Комментарий
Мой поинт не в том, что GPU не нужны для нейросеток (понятно что порой очень даже нужны). А в том, что GPU не есть цена входа. Может в какой-то области (типа для участия в соревнованиях по распознаванию каких-то картинок) цена входа включает и GPU (а скорее кластер из multi-GPU машин).
Но для входа именно в нейросетки хватит и обычного достаточно мощного компа. А вот некий минимальный набор знаний по матану/линалгебре/теорверу/оптимизации необходим (если охота не просто туториал запустить). Ну и пока его освоишь плюс специфику нейросеток, там уже какие-то новые GPU появяться :).
Комментарий
А для какого из уровней интеллект-стэка эти требования? Матан и линалгебра наверное очень важны на уровне 3 (обучающиеся алгоритмы) и наверное 4 (вычислительные библиотеки). Для других уровней требования будут отличаться.
Комментарий
ну я "цену входа" в целом рассматриваю
если касательно стэка, то мне думается что уровень 2 (когнитивная архитектура) тоже требует глубокого понимания лёрнинга, которое в свою очередь требует матана/алгебры и проч
а так, конечно, если скажем верхние уровни рудиментарные (например, стоит задача прогнать туториал по Theano/Torch/что-то другое, ну или чутка адаптировать их под свои данные), то там матан/алгебра вобщем-то и не нужны
Комментарий
На уровне 1 матан наверное не так важен, но и простого туториала не хватит. Там появляется необходимость понимать какой алгоритм выбрать под конкретную задачу, как настраивать гиперпараметры, как инжинирить features, как чистить данные, как их собирать и т.п.
Комментарий
Там на каждом уровне своя тусовка, и немаленькая. И знания смежных уровней нужны, но не так уж сильно.
Как меня учили когда-то, "знать, как работает машинный код нужно, и ты будешь писать программы явно лучше, чем не знающие ассемблера коллеги. Но для программирования как такового знать машинный код непринципиально". Вот с этими уровнями всеми так.
Комментарий
ну вот чтобы в этом разобраться, матан и нужен :)
в смысле, разбираться конечно надо в другом, но другое на языке матана, линалгебры, теорвера, статистики и оптимизации
т.е. наверное поначалу не нужен, но шибко дальше туториала не уедешь
собственно, если говорить в контексте "интеллект-стэка", то чтобы четта интеллектуальное делать, а не просто данные пошарахать, то разбираться в более низких уровнях требуется
конечно, есть всякие библиотеки для майнинга/лёрнинга, и можно даже сделать сервис, который будет прогонять нейросетку на загруженных данных, делая какой-нить простенький препроцессинг и автоматически варьируюя гиперпараметры
т.е. такой ящег глубокого чорного цвета, но мне все равно кажеццо, что юзер, который не понимает, что внутри твориццо, далеко не уедет
Комментарий
в принципе, гиперпараметры на данный момент не есть проблема
есть скорее всего уже сервисы, которые автоматически их варьируют и прогоняют нейросетку
ну т.е. юзер там может какие-то ограничения на конфиги или диапазоны вводить, а мета-алгоритм обучения будет случайно/байесовски сэмплировать пространство гипер-параметров
только это может быть довольно дорого :)
ну и надо на вход все же подать пре-процессенные фичи (понятно что стандартную а внормализацию/PCA/ZCA такой сервис тоже без проблем сделает)
ну и надо в выходе разобраться
вобщем, я как-то сильно уверен, что нейросетки не могут быть глубоко чорным ящиком для юзеря - т.е. могут конечно, но толку с этого мало
если взять к примеру линейные модели, то и там уже нужно заботиться о том чтобы правильные данные на вход подавать (регуляризация, мультиколлинеарность, фичи). да, в простых случаях, стандартный статистический блэкбокс все посчитает, но скажем если данных много или очень, то он будет медленным
вобщем, даже в рамках казалось бы простых линейных моделей столько вариантов, что ой-ой-ой
Комментарий
правда, возможно в америке сейчас бум на лёрнеров, ну и они там особо не разбираются в деталях, т.е. вполне возможно, что прокатит если не знаешь даже основ теорвера/оптимизации, но даже там думаю придется линалгербру поучить, а производные кагбэ по любому надо знать
Комментарий
не совсем согласен что знания смежных не сильно нужны
т.е. это так во многом конечно
но к примеру я хотел применить лёрнинг (а когда-то датамайнинг) к одной своей задаче (точнее у задачи целая куча вариантов применения лёрнинга), ну и несколько встал в тупик
точнее применить-то можно
но кагбэ не всегда можно замапить данные в стандартную форму, чтобы подать на вход алго
а если мапить прямолинейно, то алго замучается считать
ну или там функции негладкие
т.е. алго лёрнинга - это часть проблемы, в моем понимании, но чтобы создать какую-то систему в целом, нужно прям-таки стратегию лёрнинга сочинить (см. к примеру рассказы Л.Ботту про граф-трансформеры)
может это конечно лично моя заморока, но я читаю статьи всякие и там тоже порой нетривиальные ходы делаются чтобы замапить предметную область на задачу лёрнинга
т.е. для меня это целое направление творчества, ну и оно требует достаточно глубокого понимания принципов лёрнинга, а иногда и особенностей железячной архитектуры - чтобы туда ловко замапить задачу
ну т.е. конечно есть разделение на какие-то уровни/слои, есть специализация, но на мой взгляд разработчикам каких-то конкретных применений лёрнинговых алго к практическим проблемам, зачастую надо глубоко понимать базовые основы
хотя порой решения могут быть и простыми, легко отображаемыми в тот формат, который можно подать на вход алго
т.е. применение алго лёрнинга как неких глубоко чорных боксов вполне возможно, но четта кажется мне очень ограниченным :)
Комментарий
подумалось, что мою мыслю короче высказать как "в машин лёрнинге также требуется системный подход к лёрнингу" :)
а точнее даже есть целая куча смежных дисциплин (статистика, датамайнинг, машин лёрнинг, эконометрика, систем идентификейшн, обработка сигналов и пр) опирающихся на одну и ту же парадигму
и мне кажется важно понимать эту парадигму
Комментарий
Есть единственный способ решать сложные задачи -- separation of concerns, разделение труда. Нужно всю эту деятельность разбить на какие-то поддеятельности с более-менее внятными интерфейсами, и организовывать командную работу. Другого пути борьбы со сложностью пока не придумали. Сложность -- это как раз необходимость иметь в одной голове а) бесконечно большое число предметных знаний, быть знакомым с нюансами и типовыми ошибками и б) крутить для каждого (учебного, научного) предмета огромного размера по числу задействованных элементов задачу.
Раньше была профессия "вебмастер", она просуществовала лет пять. Потом на её месте появился пяток других профессий -- веб-дизайнер, программист веб-движков, верстальщик, редактор, контент-менеджер, сисадмин, модератор и т.д.. Думаю, то же самое ждёт representation learning: уж больно разные тусовки разрабатывают тамошнее знание, одна голова это очень хорошо, но вряд ли будет справляться.
Комментарий
Мысль интересная, потому как learning занимает промежуточное место между инженерией и исследованиями. Системный инженер -- это понятно, что такое. А вот системный исследователь -- это непонятно, что такое, такого не бывает. Исследования всегда дисциплинарны, и "междисциплинарность" обычно означает занятия порождением новых дисциплин, "методологию".
С representation learning я согласен, что есть общее основание (например, нужно понимать хотя бы http://rinuboney.github.io/2015/10/18/theoretical-motivations-deep-learning.html) и дальше хитро дробить знание так, чтобы был шанс разложенное по разным мозгам и инструментам знание склеить вместе. Понятно, что произвольным образом раздробленное знание имеет мало шанса склеиваться. А говорить, что "на основании общих принципов -- системного подхода и математики -- всё само склеится" -- это самонадеянно.
Там есть и ещё один аспект того же самого: transfer learning (learning-in-the-small и learning-in-the-large) -- как разные языки программирования могут поощрять или не поощрять модульность и распределённую разработку, создание фреймворков и библиотек (помним, что php победил всех, как и perl -- оказались удобны для программирования-в-большом), так и парадигма лернинга может поощрять или не поощрять перенос знаний из одного проекта в другой. Так что у этой парадигмы кроме математических оснований может приключиться много других оснований при её создании.
Но задача интересная: понять, какие там есть сейчас специализациии и нарезать дисциплины на разные специализации в рамках лёрнинга, сделать соответствующие этим дисциплинам инструменты (помним про развитие веб-инструментария по сравнению с HTML первой версии и тогдашними веб-серверами образца 1994 года).
Комментарий
вообще-то есть еще один способ решать сложные задачи - поменять представление, так чтобы задача стала простой :)
более того, разделение труда как парадигма зашла в тупик
т.е. я ни в коем случае не хочу сказать, что она перестала работать
но она пришла в район насыщения, когда отрицательные эффекты сравнимы или могут превышать положительные
грубо говоря, издержки на коммуникацию/синхронизацию начинают доминировать
особливо, учитывая ограниченность земного шарика
а если еще принять внимание нарастающую конфронтацию (что уменьшит глобальное разделение труда), то кагбэ, на мой взгляд, парадигма "разделения труда" есть уже неперспективная (в том смысле, что прогресс она не дает)
а прогресс есть в смене представлений, которые позволили бы одному человеку - ну или маленькой команде - делать ту же работу, что и маленькая (большая) команду. ну или даже реализовывать более крутые/инновационные идеи, которые раньше были невозможными
т.е. я имею в виду не то, что разделение труда перестанет играть роль, а его необходимо дополнить гибкостью мозга, способностью быстро перестраивать мышление (и коммуникацию), представления о реальности
предметной области
т.е. конечно это требует запихать в одну голову много всего, но без кучи ньюансов, т.е. только лишь сведения, релевантные проблеме (ну и добавлять новых по мере необходимости)