Нейрореволюция в головах и сёлах

    В последнее время всё чаще и чаще слышишь мнение, что сейчас происходит технологическая революция. Бытует мнение, что мир стремительно меняется.



    На мой взгляд такое и правда происходит. И одна из главных движущих сил — новые алгоритмы обучения, позволяющие обрабатывать большие объёмы информации. Современные разработки в области компьютерного зрения и алгоритмов машинного обучения могут быстро принимать решения с точностью не хуже профессионалов.

    Я работаю в области связанной с анализом изображений. Это одна из областей которую новые идеи затронули сильнее всего. Одна из таких идей — свёрточные нейронные сети. Четыре года назад с их помощью впервые начали выигрывать конкурсы по обработке изображений. Победы не остались незамеченными. Нейронными сетями, до тех пор стоящими на вторых ролях, стали заниматься и пользоваться десятки тысяч последователей. В результате, полтора-два года назад начался бум, породивший множество идей, алгоритмов, статей.

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

    Кто лишится в ближайшие лет десять работы, а у кого будут новые перспективные вакансии.


    Нейронные сети


    Во главе происходящей революции стоит несколько типов алгоритмов. Флагманами являются нейронные сети. Про них и будет речь.



    Нейронные сети появились давно. Ещё в сороковых годах. Идея простая: лучшая машина принятия решений — человеческий мозг. Давайте его эмулировать. Идея действительно потрясающая и простая. Вот только всё спотыкается о реализацию. Нейронов в человеческом мозгу… Гхм. Много. Да и архитектура запутанная.

    Начиная с сороковых годов каждые пару лет приходил очередной прорыв в вычислительной технике или в понимании мозга. И сразу поднималась волна: "Наконец нейронные сети заработают!". Но, через пару лет волна шла на спад.
    Когда я учился на старших курсах (2007-2010) общепринятым мнением было: "Да достали вы своими нейронными сетями! Они не работают! Уже десять раз проверили. Возьмите SVM, Random Forest или Adaboost! Проще, понятнее, точнее". В особом почёте были чисто математические решения задач, когда всё можно было расписать через формулу правдоподобия (такое решение, безусловно, превзойти нельзя).

    Что же произошло, что к 2012 году нейронные сети сумели всех раскидать и вырваться на олимп? По-моему ответ простой. Ничего. Достаточно мощные видеокарты на которых можно программировать к тому моменту были уже лет 8-9. Идеи, которые произвели прорыв, были посеяны ещё в конце 80-х начале 90-х. Появилась CUDA, но были инструменты и до неё.



    Просто произошел планомерный рост. Идеи, которые в 90х ели слишком много вычислительных мощностей стали реальны. Писать под видеокарты стало проще. Слово за слово, статья за статьей, глаз за глаз. И вдруг, в 2012 году конкурс ImageNet выигрывает свёрточная нейронная сеть. При этом не просто выигрывает, а с отрывом от ближайшего преследователя в два раза.



    Что такое ImageNet


    Это такая большая-большая база слов и привязанных к ним картинок. Состоящая из всего: предметов, структур, существ. Картинок может быть десяток, а могут быть тысячи. В зависимости от сложности и распространённости понятия:



    Каждый год по ней проводится конкурс. Какой процент из понятий сможет распознать система. Условия конкурса немного меняются, но идея остаётся прежней.

    Вы, наверняка, видели картинки с распознанными объектами из этой базы:



    Что такое свёрточные сети?


    Тема длинная. Если интересно — лучше всего почитайте статьи: 1, 2, 3.

    Вкратце. Свёрточные сети, это такие нейронные сети, где основным элементом обучения являются «свёртки». Свёртки это маленькие картинки:3*3, 5*5, 20*20. И на каждом уровне сети их обучаются десятки. Кроме них ничего не обучается. Мы учим сеть находить такие «свёртки», которые максимизируют информацию о изображении. Вот так выглядит структура такой сети:



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



    Сами свёртки при этом будут, например, такими:



    Или такими:



    А в динамике процесс будет выглядеть вообще вот так:



    Критика


    Хорошая критика есть в статье rocknrollnerd. Или вот тут.
    Вкратце. Что видит сеть — мы не знаем. Она не «понимает», она «находит закономерности». Какими бы безумными они не были. Её просто обмануть, если эти закономерности вскрыть. Например вот это — цифры 1-2-3-4-5-6-7-8-9 с вероятностью 99.9%:




    Не похоже? А свёрточные сети считают иначе.

    Прорыв


    Всё что было выше — это вводная часть к статье. А теперь обещанная революция. Где случился прорыв и к чему он ведёт.



    Прорыв заключается в том, что люди начали анализировать и понимать что же такое эти «свёрточные сети». Как результат — задавать им правильные вопросы.

    Рассмотрим «устаревшие алгоритмы» (смешно говорить так про идеи, которым зачастую лет десять), которым производился поиск объектов на изображении. Например человека(HOG), лица (Haar), или каких-то более уникальных объектов (SIFT, SURF, ORB):



    По сути, используется выделение примитивов, характерных для рассматриваемого объекта, которые мы анализируем. Анализ может производить как какая-то автоматическая система принятий решений (SVM, AdaBoost), так и сам человек, расставив простые правила (через SIFT, SURF). Вот тут есть хорошая лекция ЛеКуна (автора свёрточных сетей).

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



    Получалось достаточно медленно + писать много логики.

    А не может ли свёрточная сеть найти объект за нас? Зачем мучиться с логикой, с окнами, с анализом?

    Оказывается может. И на мой взгляд это ОЧЕНЬ круто. В качестве примера мне нравится вот эта статья. В ней нейросеть обучается выдавать x,y,w,h объекта. Просто и со вкусом. Один прогон сети — все объекты в кадре найдены и отмечены. Не нужно запускать сеть по разным областям. И действительно, какая разница: обучать выдавать класс объекта, или обучать выдавать класс + параметры? Главное, чтобы для каждого класса было место в выходных нейронах, куда можно было бы положить ответ:



    На выходе сети объём размера ((Число классов)*2+5*2)*7*7. Если классов 10, то объём — 30*7*7. Тут 7*7 — это пространственная координата. По сути, такое уменьшенное изображение. Например точка 4*4 — это центр картинки. На каждую такую точку у нас есть 30 величин. 10 из них для обозначения объекта, который размещается в точке (класс этого объекта имеет значение 1, остальное — 0). Ещё 4 величины — x,y,w,h прямоугольника в точке, который определяет размер объекта, если он там есть. Ещё одна — коэффициент уверенности. Остальные 15 — это повторение всего того на случай, если в одном сегменте был центр двух объектов. Итого получается:



    На сайте проекта можно посмотреть достаточно много интересных видео:



    А можно ли подавать на вход сети априорную информацию, отличную от изображения? Конечно! Главное подобрать архитектуру сети, например так:



    Здесь на вход сети подают изображения, а так же примерную область где расположен интересный объект. Сеть учится выдавать точный кроп + сегментировать объект. Теперь ваша сеть кушает априорные данные, сама определяя что это вообще такое и что с ним делать.

    На мой взгляд эти идеи — это прорыв, который позволяет полностью уйти от старой идеологии алгоритмов. Раньше всё было отдельно: логические данные, изображения, связи. А теперь всё можно валить в общий котёл особо не думая (да вру я, вру, думать нужно много — над формированием базы, например). Главное понимать достаточность данных. Не нужно разбираться на какой стадии алгоритма оптимально что совместить. Сеть сама оптимизирует взаимодействие потоков данных.

    Сеть как фильтр


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

    Начнём с последней работы, которая вроде даже проскакивала в новостях. Сеть делает разметку видео с видеорегистратора по типу объекта: «дорога», «пешеходы», «знаки», «разметка», и.т.д.



    Данные, которые так получены могут быть поданы на вход ориентации автомобиля. Это принципиально новое решение, до сих пор системы классификации объектов для автоматических автомобилей были принципиально другими. Требовали лидаров или хотя бы стереокамер.

    Вы думаете эта система сложна и монструозна? Да нет, всего несколько обученных слоёв, настраивается за пару дней:



    Прямое преобразование данных в ответ. Кадры обрабатываются быстро. На ноуте четырёхлетней давности порядка секунды на кадр. На более-менее адекватном компе — realtime.

    Есть ещё несколько сетей, решающих аналогичные проблемы чуть другой архитектурой (многие из них были раньше чем SegNet, но в целом работали хуже): 1, 2, 3






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

    Стереосоответствие


    Наверняка многие из вас знают, что с двух камер можно восстановить трёхмерную картинку. Обучить сеть на её построение?



    Такой подход хорош тем, что сеть сама догадается в каких ситуациях лучше аппроксимировать плоскостью, а в каких ситуациях лучше не надо. Да и обучить такую сеть просто. Погулять пару дней со стереокамерой, набрать видео. И сетка не сильно сложнее тех, что выше:



    Оптический поток


    Оптический поток почти то же стереосоответвие, да? Только вот обучать решили компьютерными играми:



    Не знаю, насколько это работает на практике, но идея прикольна.

    Фильтрация


    Вы когда-нибудь использовали Canny фильтрацию в OpenCV? Наверняка знаете, что очень сложно подобрать её чувствительность, чтобы выделились именно границы, а не любой шум?



    Вот три статьи как это сделать по-другому, чтобы результат был одинаков и вас не смущал: 1, 2, 3



    Раскрась-ка


    Ну и да, куда же без этого. Пару недель назад проскакивала сеть по раскраске старых ЧБ фильмов:



    Не идеально, но забавно.

    Суперазрешение


    Мне кажется, что в ближайшее время фотошоп будет обзаводится рядом новых плагинов…



    Прочее из мира свёрточных сетей


    Это лишь малое число сетей и идей. Их число растёт каждый день. Сейчас происходит тотальный прорыв в медицине. Видели конкурсы на kaggle? О том как по сетчатке распознают болезни? А что происходит за кулисами — вообще страшно. Мы тут за неделю сделали наколенное распознавания флюорографий. Пусть и плохо, но оно работает. А вот ещё проект народ поднимает. Уверяют что могут всё распознать медицинское, лишь бы база была.

    А уж число приложений Just For Fun будет расти астрономически. Помните приложения которые по фотографии определяют сколько вам лет? Или вашу привлекательность? Вангую появление приложений в стиле «посмотри на себя с бородой» или «преврати меня в Зевса».

    А вообще свёрточных сетей и анализа изображений где только нет. Даже AlphaGo на их базе анализирует позиции в Go.

    Будущее


    Вы правда думаете, что машины вас не заменят? Что ваша область уникальна? Система Deep Mind появилась в 10 году. Пару лет спустя они начали заниматься решением задачи «игра ГО». Спустя четыре года решили и сейчас бросают вызов чемпиону мира. За четыре года даже ребёнка в Го не научить играть. Вы правда думаете, что ваша профессия в безопасности? Что сингулярность ещё не здесь?

    Все любят шутить про то, что через пару лет, как только появится автопилот для автомобилей таксисты начнут жечь машины- роботы как сегодня жгут машины «Uber». Поймите, до этого произойдёт много событий. Переводчики и юристы-помощники. Секретари. Ваша профессия в том, чтобы расшифровывать изображения? Врач-рентгенолог? Картограф? Нужны ли будут через пару лет специалисты по видеоаналитике, или гугл заменит их своими сервисами?

    Конечно, лучшие переводчики останутся. Так же как и лучшие секретари. Да и хорошие рентгенологи, конечно, будут нужны (должен же кто-то верифицировать диагноз). Останутся все, чья специальность — работа руками. Пока ещё механика далека не то, чтобы полностью заменить хирургов и массажистов (я думаю ещё лет 20-30 даже до водопроводчиков не доберутся!). Появятся профессии, которые будут управлять роботами и комплексами из роботов. Будет сильно больше людей, которые будут обучать системы и поддерживать их. А вот средних и плохих программистов, на мой взгляд, уже лет через 5-10 начнут теснить системы автоматического программирования.

    В любом случае, жить нам предстоит в интересные времена. И да, пока вы спали сингулярность уже здесь.
    Нууу, я немного сгущаю, но в целом всё так, для пятницы сойдёт.

    Немножко подвала


    Если вдруг тема заинтересовала, то советую пару мест, где инфы сильно больше, чем на хабре и пополняется регулярно.
    Во-первых, мне нравится вот это сообщество в контакте. Да, много мусора, но дельные вещи почти не пропускают.

    Во-вторых, где-то половину из перечисленного я брал отсюда. Информации тут сильно меньше, но зато самое ценно и интересное они не пропускают. Плюс хорошо структурируют.

    В-третьих, SKolotienko ещё подкинул хорошую ссылочку на реддит.

    И ещё. Чтобы не быть голословным мы с другом взяли одну из указанных здесь сетей и пару недель мучили, заставляя распознавать что только попадается под руку (благо баз много собралось). В течении недельки он выложит статью с кучей исходников и мануалов. Так что следите за Nikkolo. А ещё Vasyutka в течении пару недель хотел некоторые мысли опубликовать из той области где нейросети пересекаются с здравой логикой.
    Метки:
    Поделиться публикацией
    Комментарии 124
    • +1
      Спасибо за статью. Несколько лет не следил за тематикой, со сверточными сетями все понятно, а рекуррентные сети ещё не начали в изображениях использовать? Я только знаю, что они в распознавании речи как-то работают.

      Мне ещё казалось, что предобучение огр. машинами Больцмана тоже сыграло очень большую роль в недавнем «Neural Network Strikes Again», или я преувеличиваю?
      • +2
        Рекуррентные обычно используют для описания кадра или видео. На мой взгляд для какого-нибудь полезного применения оно пока не доросло, хотя кто знает, может скоро уже. По этой ссылке в конце много статей на эту тематику, например:
        cvlab.postech.ac.kr/research/dppnet
        arxiv.org/pdf/1410.1090.pdf
        arxiv.org/pdf/1412.4729.pdf

        Машины Больцмана я пробовал для изображений как-то использовать, но чего-то дельного не получилось. И сильных статей я не видел. Может в какой-то другой области ML, или я просто пропустил.
        • +1
          Так вроде бы машины больцмана уже списали после того, как глубокие сети доверия отправились на свалку истории.
          Сейчас они уже не актуальны, а народ на имплементацию сетей хопфилда замахивается вовсю.
      • +1
        «А теперь скажите, кто написал эту статью — человек, или...»

        Штирлиц знал, что запоминается последняя фраза.

        А если серьёзно — насколько мощным железом нужно располагать, чтобы заниматься исследованиями в этой области?
        • +1
          Главное чтобы CUDA была. Nikkolo запускал на Jetson, например. По производительности он как ноут 4х-летней давности. Там SegNet по 1.5 секунды на кадр тратил. Но это сеть в которой свёртка+развёртка реализована. И которая на вход ест 480*360 картинки, что достаточно крупно.
          Если запускать на каком-то профессиональном железе, или просто на современном, то всё значительно быстрее выходит.
          • +1
            Но это чтобы гонять готовые модели. Если «заниматься исследованиями», по-любому захочется что-нибудь обучить под свою задачу, а тут уже джетсона не хватит.
            • 0
              Да, есть такой момент. Jetson — это именно пример того, как сеть можно использовать. А на то же обучение памяти нужно сильно больше. Хотя методы типа BatchNormalization весьма радуют.
            • +3
              Проблема в том, что при обучении нужно ооочень много памяти у GPU'шки. Например, чтобы тренировать упомянутую вами сетку лекуна для стереоматчинга, необходимо 12Gb памяти на GPU, а тут из доступных карт только TitanX подходид (ну или лепить SLI массив из GTX980Ti). А чтобы все это тренировалось быстро, неплохо бы еще несколько GPU заиспользовать, а к ним и процессор нужен соответствующий и тд и тп… вообщем серьезное погружение в DL — довольно дорогое удовольствие. Причем через 1-2 года обязательно появится крутая статья, воспроизвести которую на крутом компьютере за миллион рублей уже не получится и придется либо апгрейдиться, либо отстатавать от прогресса. Т.ч. железяки — это сейчас один из самых серьезных ботлнеков при домашних изысканиях на тему глубокого обучения.
              • 0
                Отдельные статьи — да. Но всё же у большинства исследователей не будет пары тэсл в загашнике.Так что надежды на успех есть.
                И опять же, Nviidia очень живо реагирует на рынок. Jetson стоит всего 200 уе. Вполне возможно, что они выпустят видюхи разумной стоимости с большим числом оперативки на борту, когда это будет требоваться повсеместно.
                • 0
                  Но всё же у большинства исследователей не будет пары тэсл в загашнике.

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

                  Jetson стоит всего 200 уе.

                  TK1 да, а вот TX1 уже что-то в районе 500-600$ за штуку.

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

                  Ну это разумеется. Проблема только в том, что для исследователей железо нужно уже сейчас:) А DL развивается так быстро, что стоит выпасть из темы на пару лет, как можно считать себя новичком, т.к. все имеющиеся знания уже не актуальны)

                  Я вот как раз из-за недоступности железа в свое время забил на DL, когда появились всякие DBN, которые не на топовом, по тем временам, оборудовании за приемлемое время не тренировались, и сейчас снова погрузившись в тему ощущаю себя полнейшим нубом)
                  • 0
                    Про ТОП исследователей не спорю. Но если посмотреть на подборки статей, то именно «ТОП» исследователями делается процентов 10-20. Остальное самыми обычными. Малоизвестные вузы, команды из пары человек.
                    TK1 да, а вот TX1 уже что-то в районе 500-600$ за штуку.

                    Если что, TX1 не сильно лучше по производительности, процентов на 30 максимум, что бы там Nvidia не заявляла;)
                    и сейчас снова погрузившись в тему ощущаю себя полнейшим нубом)

                    Я сам этой темой не занимаюсь, просто стараюсь поверхностно следить и отдельные вещи пробовать. Но у меня складывается впечатление, что не нубом в ней быть очень сложно. Всё слишком быстро меняется и развивается. Хотя может просто я нуб и оправдываюсь:)
                    • 0
                      Про ТОП исследователей не спорю. Но если посмотреть на подборки статей, то именно «ТОП» исследователями делается процентов 10-20. Остальное самыми обычными. Малоизвестные вузы, команды из пары человек.

                      Даже мелкие ВУЗы сейчас себе умудряются выбить пару-тройки тесла карточек для изысканий)

                      Если что, TX1 не сильно лучше по производительности, процентов на 30 максимум, что бы там Nvidia не заявляла;)

                      Зависит от того, на каких задачах сравнивать. NVidia позиционирует TX1 как заточеную под DeepLearning… ну и плюс TX1 — это Maxwell, а там и набор атомиков вроде бы побольше, чем у Kepler карт.
              • 0
                А нельзя ли где-то в облаках арендовать мощности для DL?
                • 0
                  Можно в Amazon брать ноды с GPU, но это очень дорого.
            • 0
              Отличная статья, спасибо! В интересное время живем.

              А по поводу фотошопа: похоже через несколько лет можно будет решить каноничную задачу — развернуть девушку на фотографии лицом в камеру :)
              • 0
                И добавить соблазнительный взгляд.?
                • 0
                  А вот это кстати подозреваю что можно уже сейчас делать. Коррекция мимики, раствор глаз и т.д. Идея на миллион в общем-то. Загружаешь фоточку в инстаграмчик, тыкаешь галочки, крутишь эмоциональные шкалы и вуаля — готовая аватарочка для очередной ТП.
                  • +1
                    и потом весь инстаграм такой
                    image
                    • +4
                      А сейчас разве нет? Одни дакфейсы и жратва кругом.
                • 0
                  А ещё через несколько лет можно будет раздеть девушку на облачных мощностях.
                  И роскомнадзор запретит нейронные сети как педофильское поветрие.
                • 0
                  Когда мы начали в университете изучать нейронные сети, меня заинтересовал один вопрос. Биологические нейроны — они же не знают математики. Они не умеют вычислять производные сложных нелинейных функций, умножать матрицы, а обучение с учителем это сам по себе биологически неправдоподобный метод. Значит принцип работы у них немного другой. Почему в таком случае уделяется большое внимание большим сложным алгоритмам? Да, они дают какие-то результаты, но дальше распознавания пятен на шкуре леопарда почти ничего не продвинулось.

                  Мне кажется, лучше было бы изучать возможные принципы функционирования отдельных клеток и их взаимодействия. А то получается, что у нас «сеть сама распознаёт», а как именно это происходит, никто не знает.
                  • 0
                    Потому что главная проблема искусственного интеллекта — сделать что-то, что внешне работает как мозг, имея в качестве основы компьютер. Полное моделирование мозга на компьютере будет точным и эффективным аналогом интеллекта — но медленным, как тектоника. Фактически, то, что выглядит, как большие и сложные алгоритмы, ни что иное, как упрощённая модель работы мозга, созданная эмпирически. Собственно, в статье так и сказано — прогресс нейросетей связан с прогрессом вычислительной техники, иными словами — прогресс технологий, на которые опирались нейросети привёл к прогрессу нейросетей. Если бы прогрессировали технологии, поддерживающие иные методы, вроде чисто математических — был бы праздник на той улице.
                    Кстати, я уверен, что исследования принципов функционирования отдельных клеток тоже ведутся — но пока они не закончены, не стоять же остальным учёным на месте и не ждать? Лучше создать модель, посмотреть, как она работает, сделать на основе симуляции предположения о работе мозга, и проверить их.
                    • 0
                      Потому что главная проблема искусственного интеллекта — сделать что-то, что внешне работает как мозг
                      Подумалось вдруг, что мы не можем толком воссоздать на компьютере даже когнитивные способности насекомых, не то что млекопитающих. При этом постоянно говорим об Интеллекте, сравнимом с человеческим, который еще на порядка два-три сложнее.
                      • 0
                        Дело в том, что разница между интеллектом человека и насекомого меньше, чем отличия в технической базе между ними обоими и компьютером. А моделировать человека проще, так как людей мы знаем лучше, чем насекомых.
                        • +3
                          Аналогия, которая очень мне нравится и используется настолько часто, что всем уже надоела — это самолет) У нас до сих пор, по-моему, затруднения с тем, чтобы воссоздать птичьи крылья, но тем не менее, мы смогли понять принцип полета и с легкостью побить природу на этом поле.
                      • +3
                        Так просто так звезды сложились, что градиентными методами стало возможно обучить сети с большим числом параметров, и попутно появились огромные базы данных, благодаря которым получилось получить хорошее обобщение для ряда задач. Помнится Ян ЛеКун как-то охарактеризовал современный Deep Learning как «набор эвристик, которые случайно сработали… ну а потом пришлось формализовать полученые результаты» )
                        • +1
                          Я бы ещё добавил, что конкретно данный набор эвристик очень хорошо лёг на современные вычислители. Что во-многом обусловило то что оно выстрелило.
                        • 0
                          Мне кажется, лучше было бы изучать возможные принципы функционирования отдельных клеток и их взаимодействия.

                          Их тоже изучают, но полученные алгоритмы показывают не столь впечатляющие результаты. Самолеты не машут крыльями, так и в случае нейронных сетей возможно не эффективно копировать естественные нейроны и их алгоритм обучения, а достаточно лишь концептуального сходства.
                          • +1
                            Нейронные сети непредсказуемы. Они обучаются на конкретной выборке, а что выдадут для незнакомой картинки неизвестно. Тому даже примеры в статье автор привел.
                            Совсем не факт что надо искать именно биологически правдоподобный метод, эволюция не всегда может использовать оптимальный подход. Полностью смоделировать человеческий мозг пока невозможно, но может это и не надо? может есть способ проще?
                            Строгая математика тем хороша, что ее легко воспроизвести, можно предсказать результат на любых входных данных. Вы бы доверили свою жизнь нейронной сети управляющей автомобилем, которая неизвестно как отреагирует на незнакомую ситуацию?
                            • +5
                              Вы бы доверили свою жизнь нейронной сети управляющей автомобилем, которая неизвестно как отреагирует на незнакомую ситуацию?

                              Боюсь, что лет через 10 у нас просто не будет выбора:)
                              А вообще, чем вам человек не нейронная сеть? С некоторыми людьми мне очень страшно ездить в машине.
                              • 0
                                Вы бы доверили свою жизнь нейронной сети управляющей автомобилем, которая неизвестно как отреагирует на незнакомую ситуацию?
                                Далеко не факт, что человек отреагирует на нее лучше.
                                • –1
                                  человек может думать а нейронная сеть нет.вот и вся разница
                                  • 0
                                    А что такое «думать»? А то вы так категоричны…
                                    • +1
                                      приведу пример: в одной книге читал, что сегодняшний ИИ не сможет распознать кота если виден только его хвост, человек же без проблем справится с этим, потому что он понимает контекст ситуации в целом.Думаю что такая проблема осталась и в сегодняшнем мире «почти сингулярности»
                                • 0
                                  Что касается автомобилей, то там уже сейчас полно интеллектуальных штук, которые иногда отказывают (ABS, коробка-автомат и тд и тп) и никто особо уже не шумит по этому поводу… а в отношении сеток просто круто ворчать про ИИ, Скайнет и восстание машин, но по сути это будет такая-же «ABS'ка», и если сетки смогут пройти сертификацию, то вряд ли будут представлять опасность большую, чем другие узлы автомобиля.
                                  • +1
                                    В статье есть примеры что можно легко обмануть сетку если знать чему она внутри себя таки наобучалась.
                                    А если так придумать специальную картинку, показал ее автопилоту машины едущему по дороге — и он в ужасе свернул в обрыв…
                                    Хотя, наверно, такое и с человеком сработает :))
                                    В общем «нейронки» классная штука, но точная математика с аналогичным результатом лучше.
                                    • 0
                                      Ну так сейчас продуктовых решений то особо и нет на основе сеток, а исследователи что-то натренировали, получили интересные результаты и бегом бегут статьи писать… никто особо пока не заморачивается поиском экстремальных значений в поведении сети.
                                      • 0
                                        Как тут не вспомнить «Зенитные кодексы Аль-Эфесби» Пелевина. Очень в тему произведение будет.
                                    • +1
                                      А вот этот вопрос очень хорошо и ёмко расписан Юдковским. Он убедительно показывает все проблемы человеческого интеллекта, и является сторонником математического подхода.
                                      Но мне кажется, что результат, как и везде, будет компромиссным — сочетание нейронных сетей и чистой математики. Собственно, мне показалось, что СегНет именно такой — у них упоминается и нейросеть, и Байес.
                                      • 0
                                        Вы бы доверили свою жизнь нейронной сети управляющей автомобилем, которая неизвестно как отреагирует на незнакомую ситуацию?

                                        На сколько я знаю, все самоуправляемые автомобили используют нейронные сети. Так что все, кто соглашаются на них ездить, отвечают на этот вопрос утвердительно. Однако, нейронные сети лишь распознают объекты, а за управление отвечают уже обычные алгоритмы. Даже если человек не будет распознан по ошибке, управляющие алгоритмы все равно попытаются объехать препятствие.
                                        • 0
                                          На сколько я знаю, все самоуправляемые автомобили используют нейронные сети.

                                          А можно пруфы? А то «насколько я знаю», до недавних пор использовалась только строгая математика, а с внедрением сеток в автомобили экспериментировать начали совсем недавно.
                                          • 0
                                            These example images show Google’s deep learning system detecting pedestrians in different situations. The system performed 60 times faster than previous methods.

                                            spectrum.ieee.org/cars-that-think/transportation/self-driving/new-pedestrian-detector-from-google-could-make-selfdriving-cars-cheaper
                                            • 0
                                              Сетки в задаче детектирования пешеходов выстрелили только в 2015 году, до этого они проигрывали всяким DPM и традиционным методам машинного обучения. Ну и сейчас такие сетки даже на топовых GPU в реалтайме не работают, т.ч. на реальных автомобилях в ближайшие пару лет это вряд ли можно будет увидеть.
                                              • 0
                                                Так пишут, что алгоритм работает в 60 раз быстрее. Так что теперь они в реалтайме работают.

                                                DPM = Deformable Part Models? Не знаю, возможно они действительно использовались раньше.
                                                • 0
                                                  Ну если только быстрее чем предыдущие методы, основанные на DL. Это может звучать правдоподобно… но вот в то, что сетка будет работать в 60 раз быстрее какого-нибудь SoftCascade'а в ближайшее время не поверю.
                                      • +1
                                        Справедливости ради, это очень крутой результат, я не хотел тем постом его сильно преуменьшить) Лет пятьдесят назад, скажем, люди просто понятия не имели, как так сделать. И сам факт, что у нас это получилось, по-моему, сильно о чем-то сигнализирует.

                                        Насчет биологических нейронов, наверное, лучше сказать так: люди в какой-то момент решили, что сила их не в том, как работает отдельный нейрон, а в том, что их много и они связаны. Это называется коннекционизм — представление о том, что интеллект, разум и прочие феномены мышления возникают из больших сетей с дофигищем связей, который функционируют по определенным правилам.

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

                                        И в догонку, по-моему, тезис «природа всегда права, нужно делать один-в-один как в биологии» сам по себе небезупречен) Наши биологические нейроны, в конце концов, делались эволюцией, которая далеко не всегда производит идеально подходящий hardware — один возвратный нерв чего стоит. А вдруг половина механизмов в наших нейронах вообще низачем не нужна и просто тут болтается, пока ее естественный отбор не отсеял?)
                                        • 0
                                          Я не имел в виду, что надо имитировать биологические особенности с точностью до атомов. Я говорил про принципы, которые реализуются этими особенностями — как раз те правила, по которым функционируют связи. Но рассматривать их надо с позиций отдельных клеток, потому что обработка сигналов в процессе эволюции развивалась именно так, от простого к сложному.
                                          Если представить, что видит перед собой отдельная клетка, то идея глубокого обучения появляется сама собой. Клетка видит только предыдущий слой, значит обучение и распознавание идет по слоям, по данным из предыдущего слоя. Клетка не может соединяться со всеми нейронами сразу, значит входная область ограничена. Во входной области могут встречаться похожие паттерны, получается карта признаков. Постоянно выделять все более сложные признаки не получится, значит после какого-то уровня обработки алгоритм анализа входных данных должен принципиально поменяться.
                                          • +1
                                            Собственно, я пока не вижу в этой картине ничего сильно нового) Слои у нас есть. Каждый нейрон связан с каждым из предыдущего слоя — ну, это просто удобная конструкция для вычислений, чтобы веса можно было забить в прямоугольную матрицу (представьте себе, что некоторые веса там равны нулю, и соответствующие нейроны как раз «не связаны»).

                                            Ну и, по-моему, периодически люди уходят во всякие ответвления от классической схемы с обратным распространением. Вот, скажем, из довольно нового, Бенджио писал про more biologicaly plausible version of deep learning. Есть еще neuroevolution, где люди обучают сети генетическим алгоритмом — тоже вроде как не совсем то, что происходит в голове, но подход сильно отличаются. Проблема в том, что пока никто из них не просигнализировал, что вот оно, поперло настоящее AI, только успевай в мешки паковать.

                                            Когда я пытал всяких людей, занимающихся машинлернингом более профессионально, чем я, они даже шли на шаг дальше и говорили, что biological plausibility — это вообще не требование. Нас интересует вопрос о том, как работать с информацией, и мы собираемся изучать его языком теории вероятности и Байесовской статистики, а моделировать дендриты нам для этого совершенно не нужно. Это слегка не согласуется с идеями того же самого коннекционизма, но в принципе, мне кажется, мысль как минимум интересная.
                                      • +3
                                        Отличная статья, спасибо. Одна пометочка — Alpha GO ( детище Deep Mind ) победила не чемпиона мира, а чемпиона европы ( пусть и трёхкратного ) Фань Хуэя. У него 2й про дан, что кстати довольно низкий, однако признаюсь это немного пугает…
                                        • +1
                                          Спустя четыре года решили и сейчас бросают вызов чемпиону мира

                                          Игра с чемпионом мира у них вроде через пару месяцев заявлена
                                          • +5
                                            Дело в том что нету такого чемпионата по ГО ( чемпионата мира ). Сейчас есть 6 международных турниров. Раньше было 9. Ну если AlphaGo обыграет Ли Чхан Хо, 9 дан, ( 18 международных титулов ) или Ли Седола, 9 дан, ( 13 международных титулов ), то это будет просто взрыв в мире Го. Будем ждать. Партия против Фань Хуэя была далеко не самой интересной, и сам Фэнь Хуэй принимал опрометчивые решения. От 9х данов такого вряд ли мы увидим, так что я пока что буду болеть всё же за человечество ^_^
                                            • +2
                                              По результатам анализа партий этого матча AlphaGo отстаёт от Ли Седола примерно на один камень. В этот раз должно быть достаточно. Кроме того Ли Седол может найти и эксплуатировать слабости модели. Они есть, машина иногда делает сильные ходы, смысл которых не понимает, поэтому человек может отыграться.

                                              Другое дело что теперь уже точно ясно, что победа машины над человеком в го — вопрос времени, причём весьма небольшого. Пара лет.
                                          • 0
                                            Пускай мне вызов бросит. Только не на доске 19x19, а например на доске 19x18.

                                            Подозреваю, что эта самообучающаяся программа-почти чемпион после такого мелкого изменения не сможет даже пару ходов сделать, пока программисты её не перепишут с нуля.
                                            • 0
                                              В статье авторов AlphaGO было написано, что в качестве второго этапа обучения сетка училась на играх, которые проводила сама с собой. Так что не вижу особых проблем переучить сеть на игру с другой доской. Особенно если учесть, что и люди, которые всю жизнь играют на доске 19х19 могут делать ошибки на доске 19х18.
                                              • 0
                                                Я бы сказал, что никто из людей не сможет адекватно играть на 19*18, ибо там рушатся все написанные мануалы по стратегии.
                                                • 0
                                                  Нет, любой человек, умеющий играть в го, сможет играть на доске любого размера. 9x9 и 13x13 вообще стандартные размеры и используются для обучения и неформальных быстрых игр.

                                                  Обратите внимание на то, что я не бросаю вызов даже другому любителю игры в го, не говоря уже о профессионалах — мой уровень совсем низкий и шансов у меня не будет.
                                                  • 0
                                                    Играть на уровне ниже первого дана — да. А чтобы играть лучше — уже нужно смотреть партии, анализировать их, читать литературу. А всего этого не будет. Уровень игры сразу просядет. В принципе как и у машины.
                                                    • 0
                                                      Есть разница между «уровень просядет» и «не может играть вообще».

                                                      Это как сравнивать человека с поездом. Поезд может только по рельсам ездить, человек тоже может по рельсам, а может и в лесу по тропинке идти. Можно по тропинке рельсы проложить и тогда там поезд тоже проедет, только это не говорит о том, что поезд побил человека по проходимости.
                                                • 0
                                                  Вот только чтобы добраться до этапа самообучения нужно:

                                                  1. Отредактировать и заново отладить весь код грубого перебора с альфа-бета отсечкой. Там вряд ли достаточно изменить один #define.
                                                  2. Где-то найти огромное количество игр профессионалов на доске 19x18, чтобы на них натренировать нейронную сеть. Учитывая что таких игр скорее всего вообще нет в природе, это будет непросто.

                                                  В результате получится вообще другая программа.
                                                  • 0
                                                    Там у алгоритма прогностическая модель тоже очень хорошая. Он одной этой моделью играет на уровне высоком.
                                                    • 0
                                                      Прогностическая модель должна по крайней мере не прогнозировать ходы за пределы поля.
                                            • 0
                                              Не надо думать, что вы замените рентгенолога системой распознавания изображений. Врач оперирует знаниями об анатомии и физиологии, он привязывает данные на снимке к трехмерному расположению органов и биохимическим процессам, которые там происходят. Таким образом, распознавание изображений — это очень малая часть рентгенологии.
                                              • 0
                                                Помимо прорыва в области сеток, сейчас и экспертные системы развиваются неплохо(IBM Watson тому пример), которые могут оперировать куда большим объемом справочной информации, чем человек и в будущем, причем не самом отдаленном, таки могут заменить рентгенолога.
                                                • 0
                                                  Экспертная система, если она сможет линейно увеличивать свою сложность при росте количества данных — думаю, справится. Но это, конечно, будет не нейросеть.
                                                • +6
                                                  Если почитать статьи по флюорографии и машинному обучению, то там неплохо видно, что точности врачей и систем уже сравнялись. И это при том, что свёрточные сетки ещё туда не добрались.

                                                  А вообще приведу пример одного исследования: взяли выборку (пару сотен людей, если правильно помню), у которых туберкулёз был задетектирован по слюне. Сделали флюорографию и показали трём врачам. Каждый врач по отдельности нашёл 84-88% случаев. А теперь внимание: суммарная точность «Хоть один нашёл» составила 92%.
                                                  Люди — она далеко неидеальны. И один человек может не видеть то, что видят другие. Даже, если он профессионал. Один врач лучше видит узелковый тип туберкулёза, второй — дисперсный. А вот правильно обученная машина будет видеть все.
                                                  • +1
                                                    Но да, всегда есть уникальные ситуации. Жена рассказывала, что однажды рентгенологи смотрели в ужасе на КТ мозга, не понимая как человек жив — весь мозг пророс опухолью. Но тут пришёл старый дядечка-рентгенолог и сказал, что всё ок, опухоль очень маленькая. Просто у человека очень специфическая структура сосудов, которая редко встречается.
                                                    Он пару раз в жизни такое видел. И запомнил. Так что теперь может принимать решения сам. А вот у нейронных сетей проблема по отдельным сэмплам обучаться.
                                                    • +3
                                                      Эм, ну это скорее всего довод против, а не за.

                                                      Т.к. указывает на необходимость открытых медицинские базы данных, где в анонимизированной форме представляются истории болезней с анализами, снимками и т.п. информацией.
                                                      Даже очень опытный врач, ну за свою жизнь видел может 1к-10к снимков, не миллион же.
                                                      • 0
                                                        Это довод к тому, что врач, который может дать диагноз точнее большинства — уникум и редкость. Таких нужно как-то поддерживать и воспитывать новых. А вот машина будет давать лучший результат, чем 95% врачей.
                                                        • +4
                                                          Смысл поддерживать профессии, которых в принципе не должно быть.

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

                                                          Вообще, то что до сих пор кто-то принимает решение глядя на снимок это дичайшее варварство. Получается жизни людей зависят от количества кофеина в выпитой чашке кофе или наличия овулирующей самки рядом. Т.к. и то и другое способствует принятию необдуманных решений.
                                                    • 0
                                                      Пруф? Впрочем, даже если и так, там наверняка сравнивалась оценка фотографии и врач не мог ознакомиться ни с данными пациента, ни попросить сделать фото в другой проекции.
                                                      • 0
                                                        Со стр. 242. Часть исследований они сами делали на часть ссылались — lhncbc.nlm.nih.gov/system/files/2014_TMI_Automatic%20Tuberculosis.pdf
                                                        Пруф? Впрочем, даже если и так, там наверняка сравнивалась оценка фотографии и врач не мог ознакомиться ни с данными пациента, ни попросить сделать фото в другой проекции.

                                                        Ничто не мешает вводить в сеть возраст-рост-привычки. Она только лучше работать будет.
                                                        • 0
                                                          Благодарю. Как и ожидалось, проводился только анализ изображений, что не дает права говорить о замене навыков врача.

                                                          > Ничто не мешает вводить в сеть возраст-рост-привычки. Она только лучше работать будет.
                                                          — тут наоборот надо: каркас из логики, описывающей научно-практическую медицинскую базу и плюс распознавание отдельных элементов средствами статистики, в т.ч. нейросетевыми.
                                                          • +1
                                                            Благодарю. Как и ожидалось, проводился только анализ изображений, что не дает права говорить о замене навыков врача.

                                                            Когда я делаю флюорографию я врача не вижу, только медсестру. Врач знает: рост, вес, курю ли или нет. Тут то же самое. Разницы никакой. Вполне вероятно, что врачи в том тесте (когда показали 86% точности по отдельности и 92 вместе) тоже знали эти параметры. Просто врач — не идеален. Далеко не идеален.
                                                    • +3
                                                      Ох уж эти рентгенологи. 5 раз делал МРТ — все разное говорят. У хирургов разброс меньше, видимо опыт вскрытия того что видел на картинке сказывается.
                                                    • 0
                                                      Это все конечно так, но вот появление электронной почты не сильно повлияло на обычную почту. Лично у меня теперь почтовый ящик (реальный) забит куда сильнее чем в 90-е годы, хотя какой смысл в реальной почте если электронная почта — бесплатная, мгновенная, абсолютно защищенная от прочтения и подмены в случае шифрования. Более того, почти вся бумажная почта печатается с помощью компьютера.

                                                      Т.е. людям в принципе не нужен уже прогресс, они даже с удовольствием с ним борются, готовы запретить (или даже уже) — ГМО, биткойны, UDP-протокол, генераторы случайных чисел и т.д.

                                                      Нейронные сети тоже могут запретить вполне.
                                                      • +2
                                                        Про победу в игру Го над человеком отвечу метафорой: эта победа равносильна победе целого войска над одним человеком.
                                                        • +1
                                                          Метафора применима к победе Deep Blue над Каспаровым в шахматы, но не в данном случае. AlphaGo не полагается на написанные гроссмейстерами эмпирические функции оценки позиций и не считает ходы вперёд дальше сильных профессионалов. Разработчики AlphaGo не умеют играть в го на этом уровне и вообще не понимают, почему она делает те или иные ходы и как именно она выигрывает. Так что это действительно реальный прорыв в области нейронных сетей.

                                                          То же касается и людей. Если вы посмотрите анализ партий матча, там видно, где Фэнь Хуэй проводит «разведку боем» — намеренно делает излишне агрессивные ходы, пытаясь нащупать уязвимости. Пока не нащупал, но слабости там наверняка есть. Мой телефон играет сильнее меня в шахматы, но я знаю один дебют, в котором он всегда делает одну и ту же ошибку и в результате предсказуемо проигрывает.
                                                          • –1
                                                            Судя по комментарию, понять метафору Вы не сумели в полном объеме.

                                                            P.S.
                                                            Эта победа является ( правда, для особо одаренных, остальные и так понимают ) формальным доказательством того, человек — не машина. Больше ничего интересного.
                                                        • +4
                                                          А вот средних и плохих программистов, на мой взгляд, уже лет через 5-10 начнут теснить системы автоматического программирования

                                                          Крайне голословное утверждение, учитывая что статья в основном про достижение CNN, которые в свою очередь пытаются эмитировать работу зрительной коры мозга, в то время как «программирование» является проявлением высшей когнитивной функции.
                                                          • +1
                                                            Краски я действительно немного сгустил, но в целом всё равно так считаю. Простой вопрос: «А где вы видите проходит разница между высшей когнитивной функцией и зрительной корой?». Врач рентгенолог смотря на изображение не просто смотрит на знакомы примитив. Он оценивает где какие ткани, как повреждение локализуется, какие могут быть нормальные отклонения. Это логика и принятие решений. Оперирование с понятиями.
                                                            Да, программирование это конечно не CNN, но не только в CNN большие успехи. А на счёт когнитивной деятельности… Я видел прогеров которые прогать не умеют. Они гуглят в инете и из Ctrl-C Ctrl-V собирают программу.
                                                            • 0
                                                              А где вы видите проходит разница между высшей когнитивной функцией и зрительной корой?

                                                              Видимо, это неокортекс.
                                                              • +2
                                                                Видимо, это неокортекс.

                                                                Я извиняюсь, но зрительная кора находится в неокортексе.
                                                              • 0
                                                                Вначале заменятся дизайнеры и технические программисты — верстальщики, сборщики по шаблонам, конфигураторы систем. Точнее они преобразуются в квалифицированных учителей. Достаточно, ведь, решить задачу ранжирования получаемого решения по «хорошести» и «удовлетворительности».
                                                                • +3
                                                                  Давайте пойдем от противного. У нас есть программы которые могут рисовать картины, глядя на которые 90% людей на выставке не отличит рисовал их человек или компьютер. Казалось бы программирование тоже процесс творческий, который ведет к созданию чего-то нового. Хорошо, с картинами вроде как понятно — дается выборка и программа кормится ими вычленяя объекты, стили рисования, типовые композиции. А потом в случайном порядке это комбинирует и что-то получается.

                                                                  А что делать для обучения робота программиста? Во-первых просто случайный результат тут неприемлем. Во-вторых как обучать? Понятно что скармливать роботу ядро линукса и код ангуляра в надежде получить универсала — бесполезно. Тут вообще даже непонятно с чего начать. Максимум что можно получить — узкоспециализированный конструктор. В третьих — окупаемость, что дешевле писать год сеть которая клепает говносайты или нанять людей для создания говносайтов? В четвертых — область применения, в программировании постоянно появляются новые области и задачи, а значит нужно будет постоянно обучать ИИ, а на той стадии развития абстракции у ИИ что сейчас есть — это по сути равносильно созданию нового ИИ.

                                                              • 0
                                                                Хорошая статья, отдельное спасибо за набор примеров со ссылками.

                                                                Добавлю ссылку в подвал — подреддит про машинное обучение. Обычно там всегда проскакивают темы о новостях и трендах в этой области. www.reddit.com/r/MachineLearning
                                                                • 0
                                                                  Добавил:)
                                                                  Я сам не большой фанат реддита, как-то его структурировано сложно читать. Очень много треша, вопросов, мало относящихся к теме идей. Не хватает внимательности и наблюдательности.
                                                                • 0
                                                                  И ещё. Не совсем про изображения, зато про рекуррентные нейросетки: karpathy.github.io/2015/05/21/rnn-effectiveness
                                                                  Вкратце, автор сделал посимвольную рекуррентную нейросетку, которая могла обучиться генерить совершенно любой текст, в том числе исходный код на C++ или учебник в TeX формате. Конечно, в итоге получается полный бред, но выглядит правдоподобно.

                                                                  PS. А сам я хочу как-нибудь обучить рекуррентную нейросетку генерировать музыку, обучаясь хотя бы на midi файлах классики.
                                                                • 0
                                                                  А вот средних и плохих программистов, на мой взгляд, уже лет через 5-10 начнут теснить системы автоматического программирования.


                                                                  Что-то подобное я слышал лет 5-10 назад, когда говорили, что из-за появления CMS веб-программисты станут не нужны. Допустим робот-CRUDолеп будет писать CRUDы, то кто будет писать программы для робота-CRUDOлепа?
                                                                  • 0
                                                                    А вот средних и плохих программистов, на мой взгляд, уже лет через 5-10 начнут теснить системы автоматического программирования
                                                                    то кто будет писать программы для робота-CRUDOлепа

                                                                    Очевидно же — хорошие программисты.
                                                                  • 0
                                                                    Чем подход НС к восстановлению 3D сцены лучше классического метода с построением облака точек и его триангуляцией?
                                                                    • 0
                                                                      Тем что классическое облако точек сложно построить. Оно будет дырявым, если использовать методы на особых точках, или сильно неточным, если использовать корреляционные/потоковые методы. Когда хотят хорошую поверхность, то там вводят различные эмпирики, которые позволяют плоскостями аппроксимировать области с низкой достоверностью.
                                                                      В итоге построение 3д — это эмпирика на эмпирике. Не даром так просто обмануть наш мозг. А нейронки лучше всего учат именно эмпирики.
                                                                      Хотел ссылок добавить, но что-то не могу сейчас отыскать.
                                                                      • +1
                                                                        У того стереоалгоритма, что упоминается в статье, на самом деле не весь пайплайн внутри нейронной сетки считается.
                                                                        Идеятам следующая:
                                                                        1) Решается задача стереоматчинга для ректифицированной стереопары, а не 3D реконструкции в общем виде.
                                                                        2) Существует такой замечательный алгоритм как Semi-Global Matching, который на вход принимает CostVolume (тупо матчи между пикселями левой и правой картинки взятыми в соответствии с направлением эпиполярных линий) построенный при помощи, например, Census фич, ну или SIFT/SURF (хотя тут они избыточны), потом агрегирует этот кост объем при помощи сканлиний по различным направлениям и на выходе при помощи тупого argmin вглубь кост объема получается карта диспарностей.
                                                                        3) Так вот авторы (кстати, автор не кто иной, как Ян Лекун) взяли этот самый SGM и решили считать CostVolume при помощи сверточных сеток. Для этого они определенным образом тренируют две сетки(отдельно для левого и правого изображения) на патчах изображения, т.е. по сути сверточные сетки порождают генеративные дескрипторы для точек изображения. Ну а потом заполняют кост объем используя такие вот фичи.
                                                                        Т.ч. по сути это классический алгоритм, но использующий сетки. Ну и практика показывает, что генеративные фичи уделывают hand-crafted методы, что наглядно видно по тому, как такой стереоматчинг и на KITTI и на Middlebury находится на первых строчках (на китти правда время от времени на первую строку выполхает алгоритм, который заточили под датасет).
                                                                      • +1
                                                                        Отличная статья, на одном дыхании :)

                                                                        А вот подскажите пожалуйста. Что можно делать обычному быдлопрограммеру чтобы приобщиться к результатам прогресса машинного обучения? Скажем, я пишу на c# или java и хотел бы научить программу различать породы собак на фотографиях. Есть ли какие-то готовые библиотеки, которым можно скормить базу картинка-понятие, обучить, а затем вытаскивать результаты? Цель не соревноваться в алгоритмах, а именно банально применить в обиходе.
                                                                        • 0
                                                                          Так можно просто брать готовые натренированные на ImageNet модели и использовать. Скорей всего для «кухонного» применения в задачах аля «отличить кота от кошки» этого должно хватать.
                                                                          • 0
                                                                            Так эти модели применимы же только к сущностям, которые присутствуют в ImageNet? Там же нет пород кошек. Ну или паровозов. Нужно именно на своей базе обучить.
                                                                            • 0
                                                                              Да, конечно, базу нужно формировать свою.
                                                                          • 0
                                                                            Спасибо:)
                                                                            C# и Java, к сожалению, никто не поддерживает. Для конфигурации почти любой нейронной сети используется набор скриптов и Питон.С другой стороны — это обычно не сложно.
                                                                            Начать проще всего с захода на сайт, например:
                                                                            caffe.berkeleyvision.org — caffe
                                                                            deeplearning.net/software/theano — theano
                                                                            www.tensorflow.org — tensorflow
                                                                            Взять оттуда пример для распознавания изображений и начать с ним работать. Можно MNIST, можно ImageNet, можно что-то ещё.
                                                                            • 0
                                                                              Спасибо.

                                                                              А можно еще ламерский вопрос?

                                                                              Допустим я натренировал сетку и портировал библиотеку на java. Хватит ли ресурсов андроид-телефона (память/цпу) чтобы выдавать прогнозы по фотографиям? Речь для простоты о породах кошек, которых, например 1000 штук. А в обучающей выборке было по 100 фотографий каждой породы.
                                                                              • 0
                                                                                С тем, какие сетки и как работают на телефонах я вообще не знаток. Вроде как torch умеет (не знаю, есть ли в нём CNN) и tesorflow. Больше ничего не знаю.
                                                                                • 0
                                                                                  Caffe собирается под Android, но FPS'ы там не поражают воображения)
                                                                          • 0
                                                                            «Посмотри на себя с бородой»:
                                                                            www.maximonline.ru/guide/progress/_article/msqrd
                                                                            • 0
                                                                              Ну, это через активные модели внешнего вида делается. Я думал скорее про то, когда достраивается реальная борода, исходя из цвета волос, структуры лица и густоты роста:)
                                                                            • 0
                                                                              У меня возникла идея, может и бредовая:
                                                                              А что, если анализировать видео не по отдельным кадрам, а по трехмерным частям, т.е. вытягивать все предыдущие кадры по временной шкалу и вместо свертки по пикселям делать свертку по вокселям (трехмерных пикселям). Тогда, наверное, качество идентификации объектов получится лучше, хотя и вычислительная сложность тоже возрастет. Я просто вспомнил, что есть Seam Carving (Content-Aware Resizing) алгоритмы для видео, которые работают именно так. Возможно, что такие трех- и многомерные сверточные сети смогут использоваться и не только в видео (в том же Го?).
                                                                              • 0
                                                                                Проблема в объемах памяти. Даже обычная сетка ест очень много. А так да, можно. Но насколько увеличится точность — непонятно зависит от каждой конкретной задачи
                                                                                • 0
                                                                                  Задачу распознавания жестов так и решают при помощи сеток, ввода дополнительную ось по времени, перпендикулярную плоскости uv
                                                                                • 0
                                                                                  Спасибо. Отличная статья, познавательно со ссылками.
                                                                                  Однозначно +, жаль не могу голосовать «Недостаточно кармы...».
                                                                                  • +4
                                                                                    Я немного запоздало, но спасибо, да, здоровский обзор, и вообще да здравствует поднимание интереса к теме.
                                                                                    Мне вообще кажется, что нам предстоит немного переосмыслить происходящее и начать использовать эти аппроксиматоры, нейронные сети в том числе, как простые такие примитивы в задачах распознавания. Нужно построить трехмерную картинку по изображению? Нефиг искать опорные точки и выдумывать геометрический алгоритм — просто натренируйте на это нейронную сеть. Нужно локализовать объект на большой картинке? Лесом отправляются всевозможные гауссовы пирамиды, sliding windows и замороченные R-CNN — просто натренируйте на это нейронную сеть. Нужен плагин для фотошопа, который поправлял бы цвета? Не нужна еще-непонятно-как-сделанная подгонка картинки под цветовой профиль, который психофизиологически благоприятен юзеру — просто… ну, вы поняли.

                                                                                    Кстати, с локализацией объекта я немного игрался на последнем соревновании в Kaggle — любопытная штука. Начинает постепенно доходить, что аппроксиматор можно заставить выдавать буквально все, что тебе нужно в рамках поставленной задачи, необязательно привычное «да/нет».

                                                                                    Всякие вещи вроде autograd и TensorFlow у нас уже есть; шаг вперед по сравнению с ситуацией, когда производные приходилось считать руками. Следующий шаг, кмк, должен принести нам что-то еще более простое и автоматизированное, доступное каждому; что-то, что ограничивалось бы model.approximate(source, target). Не то чтобы это сильно обещает сингулярность, но по-моему, что-то даст.
                                                                                    • 0
                                                                                      А можно поподробней насчет autograd? Каким образом оно избавляет от ручного вычисления производных? Или это просто какой-то численный метод, который можно исопльзовать вместо аналитического взятия производных?
                                                                                      • +3
                                                                                        Никакой магии, обычный, э-ээ… вычислительный сахар) Допустим, у вас есть сложная функция типа f(g(h(j(k(l(x))))), и вам надо посчитать производную по x. В соответствии с chain rule вам надо написать df/dg * dg/dh * dh/dj * dj/dk * dk/dl * dl/dx и дальше с проклятьями и ругательствами писать для каждой из этих производных формулу (проклятья умножаются на количество слоев — представьте, что их несколько сотен). Ладно еще если они однотипные — обратное распространение дает нам алгоритм, и мы можем просто втупую расписать много одинаковых производных; а если мы хотим заморочиться и вставить в сеть что-нибудь этакое: subsampling-слой, upsampling-слой, или еще чего-нибудь? В общем, все решабельно, никакой трагедии, просто неудобно.

                                                                                        Тогда мы делаем следующее: забиваем в библиотеку производные для всех простых аналитических функций типа полинома, экспоненты или логарифма, и пишем туда правило, как конструировать chain rule, чтобы она символьно выписывала все эти df/dg, и дальше решала исходя из забитых в нее правил. И счастливый ленивый разработчик может просто написать «посчитай мне все производные для весов этой сети» одной строчкой, вне зависимости от того, что у него там за сеть)
                                                                                        Примеров есть тут.
                                                                                        • +1
                                                                                          А разве не также устроен caffe? Там ведь вроде бы тоже "производные" задаются для каждого типа слоев отдельно в виде Backward функции...
                                                                                          • 0
                                                                                            А, я просто не знал, видимо) Никогда им толком не пользовался. Тогда все, что было сказано выше, относится и к нему тоже.
                                                                                            • 0
                                                                                              Да и Theano вроде как умеет символьные вычисления)
                                                                                      • 0
                                                                                        Спасибо за ссылку на статью, интересная!
                                                                                        На мой взгляд интересны варианты с различной логической оптимизацией в конкретных слоях. Постобработка, или какой-то конкретный алгоритм обучения. Вот ту была статья как человек экспериментировал в первых слоях с получением свёрток через k-mean и SVM. Идея с тем, чтобы SVM в верхних уровнях вместо softmax делать вроде как тоже будоражит умы уже давно.
                                                                                        Сделать комбинацию из нескольких независимых сетей, или из сеть выдающая промежуточный результат + некоторая логика сверху тоже понятно как.
                                                                                        Мне кажется, что пока однозначного перехода всех задач в сети ещё нет, а нужно грамотно балансировать на том, где они могут решить задачу, а где проще написать оконный фильтр.

                                                                                        Если я правильно помню решение той задачи с китами, то победители так и делали. Сеть для поиска головы кита — > оптимизация — > сеть для распознавания (могу путать, давно читал)

                                                                                        Да, а в чем тотальное преимущество TensorFlow? У меня пока до него руки не дошли. Он что-то позволяет делать кардинально по-другому, чем Caffe и Theano? Читал где-то его обзоры, все ругались на низкую производительность. Так и не понял в чём его преимущество:)
                                                                                        • +1
                                                                                          Я имел в виду примерно все вот эти современные символьные библиотеки — Theano, Torch, и Caffe, как выясняется, тоже) Конкретно от TensorFlow я пока тоже немного шарахаюсь, результаты бенчмарков настораживают, но у него большое потенциальное преимущество, наверное — Google в качестве разработчика.
                                                                                          • 0
                                                                                            но у него большое потенциальное преимущество, наверное — Google в качестве разработчика.

                                                                                            У всяких Caffe есть более серьезное преимущество в виде комьюнити, которое включает в себя в том числе и авторов статей по DL, которые в уже известные фреймворки запиливают самые свежие фичи… а в TensorFlow сообщество хилое и там либо самому все писать (смысла нет, т.к. библиотека все равно медленная) либо долго ждать, пока кому-то еще такие фичи понадобятся)
                                                                                      • 0
                                                                                        А откуда картинка "Суперазрешение"? Как решает такую задачу увеличения изображения нейронная сеть на сложенных стыках объектов?
                                                                                        Я пробовал применять принцип на подобии "свёрточного" алгоритма чтобы увеличивать фотографии в 10-100 раз. Это было сделано без нейронных сетей. Просто подбирался наиболее подходящий по текстуре уменьшенный образец эталонного изображения. На изображении 1024*1024 работало около часа (в 4 потока, пробовал использовать GPU но ускорения не заметил). На однородных поверхностях, таких как песок, или плитка простым подбором текстуры из набора масштабируемых образцов хорошо получается увеличивать (для сглаживания краёв использовал embedded-enfuse). А вот при неровной и сложной кромки стыка 2-х материалов в образцах не оказывалось подходящих зон (например еловые иголки на сложном фоне, увеличение деревьев).
                                                                                        • 0
                                                                                          Вот исходники — http://mmlab.ie.cuhk.edu.hk/projects/SRCNN.html можете проверить:)

                                                                                          А вот ещё три статьи про другие методы — http://arxiv.org/pdf/1511.04587v1.pdf http://brml.org/uploads/tx_sibibtex/281.pdf http://arxiv.org/pdf/1511.04491v1.pdf

                                                                                          Я думаю, что тут просто сеть обучается как действовать в разных ситуациях. Как градиент корректно преобразовывать, в том числе когда несколько объектов.

                                                                                          на подобии «свёрточного» алгоритма

                                                                                          Поверьте, это сильно не одно и то же. Тут не поиск "одинакового участка". Тут преобразование по той же логике, по которой человек бы от руки перерисовывал картинку. Это другое. Сети обучаются простым логическим правилам, а не поиску "подобного"
                                                                                        • –1
                                                                                          Изображения — это прикольно. А как насчет более реального применения. Скажем есть некое e-commerce API (Amazon например), которое по текстовому запросу выдает какие-то результаты. API для нас — черный ящик. Какими алгоритмами можно на основе выборки обучающих данных присваивать произвольному запросу категорию?

                                                                                          Например, имеем выборку:

                                                                                          ipad 32 gb -> планшеты
                                                                                          nike air jordan -> кроссовки
                                                                                          macbook pro -> ноутбуки

                                                                                          А теперь на вход приходит запрос от пользователя:

                                                                                          apple ipad 64gb new -> алгоритм должен отнести это в категорию "планшеты"
                                                                                          apple ipad case -> "аксессуары для планшетов"

                                                                                          Ну, как-то так...
                                                                                          • +1
                                                                                            то есть по-вашему изображения — не реальное применение?
                                                                                            Я, конечно, не эксперт, но задача, которую привели вы, решается не нейронками.
                                                                                            • 0
                                                                                              Природными "нейронками" очень даже решается. И если искусственные сейчас плохо справляются с управлением контекстами, то это не навсегда. Ну, при условии, что есть люди готовые браться за решение таких задач.
                                                                                            • 0
                                                                                              так добавьте ваши контрпримеры в выборку и дообучите, в чём проблема-то?

                                                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.