← Об сопоставление вычислительной мощности мозга и современных нейронных сеток
Обсуждение
Читать и комментировать в ЖЖ ↗
// И слишком высоко на экспоненте висящие в 1983 году плоды могут оказаться низко висящими в 2015
Я тут немножко игрался с задачками на теорию чисел (ну там простые числа всякие) и удивился, насколько точно мой довольно хилый десктоп (двухядерник, четыре гига) без применения человеческого интеллекта (написал в лоб задачку, через час-другой получил ответ) попадает в рекорды 1980 года. Ну то есть поражает именно малость разброса: не 1975, не 1985, а именно 1980. С учётом того, что и железка у меня не сегодняшняя, на сегодняшних может быть как раз 1983.
... Press any key... No, no, no, NOT THAT ONE! ...
Комментарий
резюме:
"я про сетки ничего не понимаю, но ученые и человеческий мозг - это не про это!".
Мда-с...
Комментарий
интересно, а как применяют в сетках паттерны (или шаблоны)?
т.е. можно наделать готовых решений и собрать их вместе из разных сеток, решить проблему обучения типовым задачам. (но как всегда д.б. проблема с интерфейсам что сделано в одной сетке, сложно передать в другую.)
Комментарий
>технологический стек, где сидят программисты и математики, важен: он может дать (возвращаясь к теме поста) тот порядок или даже пару порядков (а иногда и три порядка) запаса вычислительной мощности
Увы, не может. Можно накосячить в реализации и недобрать несколько порядков мощности, но если не косячить, то резервов роста на одной видюшке нет.
Нейросетям действительно важны все соединения, это вам не Decision Tree. Единственное улучшение -- давно знакомый нам FFT, позволяет O(n^2) свести к O(n log n) (с большей константой), что на практике при n порядка 1000 даёт выигрыш скорости всего в 2-5 раз.
Поизучайте https://github.com/soumith/convnet-benchmarks . Как видите, конкуренты довольно близки.
Комментарий
И, кстати, вот как выглядит "FPGA революция" (точнее, её отсутствие): http://auvizsystems.com/products/auvizcv/ (картинка 2х-годичной давности, видимо, даже соотношением 1-к-1 похвастаться больше не получается)
http://auvizsystems.com/products/auvizdnn/ вообще ни с чем не сравнимы, и показывают, что рост неспециализированного FPGA железа очень медленный.
Комментарий
Накосячить в реализации и недобрать несколько порядков -- о да, это сплошь и рядом.
Я как раз говорю про вероятный отход от концепции "одной видюшки" (и как раз подразумеваю неадекватность архитектур этих видюшек задачам глубоких архитектур). Ну, и статьи от мэтров про их освоение в алгоритмах параллельно-массовых архитектур начали только-только появляться. Сейчас это экзотика ещё, а должно стать мейнстримом.
Комментарий
Один пример тут не пример. Плохо, что в сравнениях разных архитектур используются совсем разные показатели сейчас -- одни флопсы на ватты оценивают, другие производительность на MNIST, третьи ещё всякое разное.
Я давал уже несколько ссылок про FPGA эксперименты и добавлял, что пока не устаканится показатель сравнения, мало что будет происходить, "соревнование" будет дохлым. В http://ailev.livejournal.com/1204705.html я писал:
В http://cadlab.cs.ucla.edu/~cong/slides/fpga2015_chen.pdf есть какие-то ориентиры измерителей для организации "гонки нейрофлопс", хотя можно и упрощённые бенчмарки использовать, типа "As a proof of concept, we combined 128 identical neural cores together to build a handwritten digit recognition system using the MNIST database and achieved a recognition rate of 96.55%. The system is implemented on a state-of-the-art FPGA and can process 5.12 million digits per second" -- это из помянутой уже свеженькой http://arxiv.org/abs/1507.05695. Твори, выдумывай, пробуй! Быстрее, выше, сильнее! Можно также пойти альтернативным путём и поисследовать процессоры для суперкомпьютеров: тот же Intel Knights Landing Xeon Phi (там более 64 ядер, но это не GPU архитектура, а нормальные процессорные ядра -- и можно поиграться с самыми разнообразными архитектурами там) -- http://www.zdnet.com/article/intels-next-big-thing-knights-landing/. Но это, боюсь, не совсем класса "мейкеров", суперкомпьютер в хакспейсе не сделаешь. Хотя это хорошая "цель на вырост" ;)
Комментарий
Мне кажется, что этим сильно должны озаботиться в IBM Watson: сам тамошний подход подразумевает комплексирование разных солверов -- и буквально месяц назад они объявили, что берут солверы на нейронных сетках в свой оборот.
В принципе, сами нейронные сетки вполне себе архитектурно гибки:
-- обучение ведётся в них вполне послойно или покомпонентно (в этом и был прорыв: учить по слою за раз, а не все сразу), это даже не вопрос про комбинирование сеток
-- активно используются концепции претренинга, подбора начального состояния и т.д. Это в том же направлении
Вообще, каждый из типовых пакетов для нейронных сеток имеет какой-то язык их описания, в котором можно выражать желаемые архитектурные конструкции. С этим сейчас и играются, но эффективность очень часто предлагаемых решений низка. Типа "давайте добавим сюда слой вот такого типа и научим его так-то" -- в одной архитектуре и на одних данных это вдруг срабатывает и у всех счастье, а в другом очень похожем случае -- оказывается даже вредным.
Комментарий
http://nextbigfuture.com/2015/07/currently-quantum-computers-might-be.html -- “We did an analysis at Google recently in what it would take to implement a Grover’s algorithm for extremely hard problems where classical algorithms fail beyond 40 or 50 bits and with 70 bits you would not be able to do it. Grover’s algorithm is a search algorithm that provides a quadratic speedup for extremely hard problems; if you have 2n steps to find the solution on structured search, you would need only n/2 steps to find a solution with that algorithm on a quantum machine. For a problem of size 60, you would need about 3.5 billion qubits and it would take about three hours with a speed up over a single CPU of over 1.4 million times. For the problem of size 70, the speedup would be 34 million and you would need only a little bit more qubits at 5.9 billion. If it is about $1 per qubit, and you spend another $500 million to bid down the price, roughly with a $2 billion investment you would be able to build a decent supercomputer with several millions of CPUs.”
Все эти технологии идут по экспонентам, неудивительно, что никто никого догнать не может )))
Комментарий
Про сетки понимание как раз очень быстро накапливается, но учёные и человеческий мозг -- это не про это!
Комментарий
Порядок, а то и два всё-таки иногда делают: https://github.com/rbgirshick/fast-rcnn
Сейчас таких работ как дождик идёт, за всем не уследишь. А потом все таблички вдруг оказываются на другом уровне скоростей -- и опять "всё со всем сравнимо и одинаково".
Комментарий
У них это всю жизнь так и было -- Ватсон это вообще не что-то цельное, а просто огромный набор разнородного софта, который они за $200/час адаптируют для вашей задачи.
Они сами недавно горевали, что у них одновременно используется 50 (!) разных токенизаторов текста в разных компонентах для Ватсона (и, кстати, никакими онтологиями это не исправить -- процедурное знание крайне тяжко преобразовывать, даже при наличии автотестов)
Комментарий
Ну так я на ту писанину и ссылаюсь, собственно. А неплохой ориентир давно есть -- CNN, которые необходимы для анализа того же NSFW-контента (not-safe-for-view) и жрут столько флопсов, что мама не горюй. Ссылку на бенчмарк я давал: https://github.com/soumith/convnet-benchmarks
Уж не говоря о том, что для видео даже в 30 кадров в секунду нужно жрать ещё на порядок больше флопсов, т.к. сейчас быстродействие одной видюшки позволяет только 100мс на кадр (если при этом учиться)...
И сравнения вычислительной мощи Xeon Phi я тоже видел -- один Phi получался в два раза быстрее 16 ядер CPU. То есть всё равно одна десятая от видюшки ( http://devblogs.nvidia.com/parallelforall/wp-content/uploads/sites/3/2015/03/cuDNN_Perf_chart011.png ).
Комментарий
"Никакими онтологиями это не исправить" -- в Watson онтологии используются очень боком, только для улучшения качества ответа при подведении под сознательно маленький набор этих типов. Токенизаторы разные понятно почему: там идеологическая фишка такая, что для разных обработок нельзя текст прекодировать (например, разбивать на токены), потому как для разных вопросов любое сжатие (предобработка текста -- это его сжатие) теряет какую-то информацию, предположительно важную для ответа. Поэтому любая работа всегда с голым текстом. Отсюда и разные токенизаторы, особенно если учесть то, что они во всяких Jeopardy! вынуждены были учитывать разную игру слов, и поэтому с токенизаторами, которые могли бы отсекать эту игру слов, они осторожны заранее.
Насчёт преобразования процедурного знания, так и непроцедурное тоже тяжело преобразовывать, только по другим причинам. ))) Отлаживать непроцедурные экспертные системы тоже было тяжело, хотя и не нужно было точно знать точку в тексте, куда вставлять дополнительную продукцию. Даже при полностью аддитивном модульном декларативном знании есть проблема вставки махонького факта, который переворачивает всю систему этих знаний -- и все прекомпиляции нужно опять-таки выкидывать на помойку (https://en.wikipedia.org/wiki/Belief_revision).
CYC наиболее продвинулся в этом направлении, заведя механизм микротеорий, но там опять-таки пока ручное кодирование, а это уже очевидный тупик. Они это понимают, и пытались взлететь на самостоятельное чтение текстов для обучения программой, но воз и ныне там (план был выйти на это ещё в 2001 году).
Комментарий
>и как раз подразумеваю неадекватность архитектур этих видюшек задачам глубоких архитектур
Вы заблуждаетесь.
Видюшка оптимизирована под параллельные сложения и умножения. Именно они и нужны массово при перемножении матриц, которые и используются для задач глубоких архитектур. Вас смущает регулярность операций? Так это и есть те три порядка распараллеливания, которые дают видюшке фору: именно 3072 потоковых процессоров в видюшке и позволяют одновременно делать 3000 операций перемножения и сложения: 3072*1ггц*2 операции = 6,144 GFLOPS -- для Titan X. (И от механизма действия FPGA этот принцип не сильно отличается, кстати).
Нет какого-то способа уменьшить требования к производительности -- все элементы матрицы одинаково важны, сравните их со своим словарным запасом: какими слова из вашего лексикона вы готовы были бы пожертвовать? Даже если мы какие-то элементы занулим (пусть даже 3/4 матрицы), то нам потребуется 750 гораздо более сложных процессоров, которые будут управлять порядком вычислений, предсказывать переходы, и требовать разные данные (один посчитал быстрее, второй медленнее -- а значит, вспоминаем ограничения на произвольный доступ к памяти и почему L1, L2, L3 кеши всё ускоряют) -- и вместо роста производительности для несильно разреженной матрицы мы получаем большую просадку производительности.
Комментарий
Это не ускорение CNN, это переиспользование вычислений для повторяющихся частей задачи: одни и те же данные используются для разных частей изображения.
Я потому и говорю, что распознавание изображений с помощью CNN -- каноническая задача.
А тут задача другая: получить не один объект в выборке, а сотню. И сравнивается это с сотней вызовов старой функциональности (каждый старый вызов получает один объект).
Поэтому RCNN не будет работать быстрее, чем CNN, но может работать быстрее, чем в сто раз медленее, чем CNN.
Комментарий
А почему "на одной видюшке" нет резервов? Речь как я понимаю про то, что обучение медленный процесс, а применение модели быстрый. Ну так обучение с оптимизацией структуры сети может прекрасно идти изолировано на "миллионах видюшек". Какая тут проблема?
Комментарий
Я не очень вас понимаю. У вас есть одна видюшка, вы сможете ускорить что-либо?
Это и имелось в виду под отсутствием резервов.
Анатолий считает, что можно -- новыми алгоритмами или более эффективной реализацией на железе.
Ну а если у вас сто видюшек, то конечно, проблем считать в 100 раз быстрее нет -- просто давайте им разные картинки/другие данные, и пусть каждая своё считает.
(При попытке делить модель между ними возникают свои проблемы, но некоторое нелинейное ускорение тоже можно получить -- просто bandwidth большой и поэтому data locality имеет очень большое значение при подобном ускорении.)
Комментарий
>Токенизаторы разные понятно почему: там идеологическая фишка такая, что для разных обработок нельзя текст прекодировать (например, разбивать на токены), потому как для разных вопросов любое сжатие (предобработка текста -- это его сжатие) теряет какую-то информацию, предположительно важную для ответа
Да нет конечно -- для ответа информация не настолько важна -- теряется в разы больше информации, она важна для дальнейших методов обработки. Модели настраивать -- очень сложная задача. А теперь представьте, что одна модель построена и протестирована с запятыми, вторая без запятых, третья в нижнем регистре, четвёртая с апострофом присоединённым к левому слову, пятая точки добавляет, ещё в пяти стоп слова разные пропускаются, итп. Не уберёте запятые -- а в модели запятых нет -- и модель сломается или будет выдавать неправильные результаты. Можно было бы переучить/перенастроить, но это огромный труд. Поэтому я онтологии и припоминаю -- многие видели в них спасение от именно таких проблем с разными толкованиями, ведь вроде бы вместо (N)*(N-1) конвертеров можно написать по онтологии для каждого представления, а дальше компьютер сам между ними научится преобразовывать данные.
>CYC наиболее продвинулся в этом направлении
ага, обогнали своё время лет на тридцать.
Комментарий
вот я вижу, просто читая текст, что про сетки и вас сплошняком идет "нет понимания, нет понимания, нет понимания, неизвестно". Про wetware сетки, очевино (да-да, очевидно-преочевиднейше) - тоже нет понимания.
И при том вы говорите - "ученые и человеческий мозг - это не про то".
С одной стороны вещь, про которой пониманий нет, с другой нет (уже этого достаточно, не упоминая о том что "близость вещей очевидна", и "во второй точно решаются многие из "не понимаю как", заявленные здесь по отношению к первой"). И все "...это - не про то!".
Ну а рефлексия-то когда включится? Или все как у милновского ведмедя так и будет - "некогда думать, "бумкать" надо"?