Pull to refresh

Comments 124

Спасибо за статью. Несколько лет не следил за тематикой, со сверточными сетями все понятно, а рекуррентные сети ещё не начали в изображениях использовать? Я только знаю, что они в распознавании речи как-то работают.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А можно пруфы? А то «насколько я знаю», до недавних пор использовалась только строгая математика, а с внедрением сеток в автомобили экспериментировать начали совсем недавно.
Сетки в задаче детектирования пешеходов выстрелили только в 2015 году, до этого они проигрывали всяким DPM и традиционным методам машинного обучения. Ну и сейчас такие сетки даже на топовых GPU в реалтайме не работают, т.ч. на реальных автомобилях в ближайшие пару лет это вряд ли можно будет увидеть.
Так пишут, что алгоритм работает в 60 раз быстрее. Так что теперь они в реалтайме работают.

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

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

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

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

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

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

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

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

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

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

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

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

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

А вообще приведу пример одного исследования: взяли выборку (пару сотен людей, если правильно помню), у которых туберкулёз был задетектирован по слюне. Сделали флюорографию и показали трём врачам. Каждый врач по отдельности нашёл 84-88% случаев. А теперь внимание: суммарная точность «Хоть один нашёл» составила 92%.
Люди — она далеко неидеальны. И один человек может не видеть то, что видят другие. Даже, если он профессионал. Один врач лучше видит узелковый тип туберкулёза, второй — дисперсный. А вот правильно обученная машина будет видеть все.
Но да, всегда есть уникальные ситуации. Жена рассказывала, что однажды рентгенологи смотрели в ужасе на КТ мозга, не понимая как человек жив — весь мозг пророс опухолью. Но тут пришёл старый дядечка-рентгенолог и сказал, что всё ок, опухоль очень маленькая. Просто у человека очень специфическая структура сосудов, которая редко встречается.
Он пару раз в жизни такое видел. И запомнил. Так что теперь может принимать решения сам. А вот у нейронных сетей проблема по отдельным сэмплам обучаться.
UFO just landed and posted this here
Это довод к тому, что врач, который может дать диагноз точнее большинства — уникум и редкость. Таких нужно как-то поддерживать и воспитывать новых. А вот машина будет давать лучший результат, чем 95% врачей.
UFO just landed and posted this here
Пруф? Впрочем, даже если и так, там наверняка сравнивалась оценка фотографии и врач не мог ознакомиться ни с данными пациента, ни попросить сделать фото в другой проекции.
Со стр. 242. Часть исследований они сами делали на часть ссылались — lhncbc.nlm.nih.gov/system/files/2014_TMI_Automatic%20Tuberculosis.pdf
Пруф? Впрочем, даже если и так, там наверняка сравнивалась оценка фотографии и врач не мог ознакомиться ни с данными пациента, ни попросить сделать фото в другой проекции.

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

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

Когда я делаю флюорографию я врача не вижу, только медсестру. Врач знает: рост, вес, курю ли или нет. Тут то же самое. Разницы никакой. Вполне вероятно, что врачи в том тесте (когда показали 86% точности по отдельности и 92 вместе) тоже знали эти параметры. Просто врач — не идеален. Далеко не идеален.
Ох уж эти рентгенологи. 5 раз делал МРТ — все разное говорят. У хирургов разброс меньше, видимо опыт вскрытия того что видел на картинке сказывается.
UFO just landed and posted this here
Про победу в игру Го над человеком отвечу метафорой: эта победа равносильна победе целого войска над одним человеком.
Метафора применима к победе Deep Blue над Каспаровым в шахматы, но не в данном случае. AlphaGo не полагается на написанные гроссмейстерами эмпирические функции оценки позиций и не считает ходы вперёд дальше сильных профессионалов. Разработчики AlphaGo не умеют играть в го на этом уровне и вообще не понимают, почему она делает те или иные ходы и как именно она выигрывает. Так что это действительно реальный прорыв в области нейронных сетей.

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

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

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

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

Я извиняюсь, но зрительная кора находится в неокортексе.
Вначале заменятся дизайнеры и технические программисты — верстальщики, сборщики по шаблонам, конфигураторы систем. Точнее они преобразуются в квалифицированных учителей. Достаточно, ведь, решить задачу ранжирования получаемого решения по «хорошести» и «удовлетворительности».
UFO just landed and posted this here
Хорошая статья, отдельное спасибо за набор примеров со ссылками.

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

PS. А сам я хочу как-нибудь обучить рекуррентную нейросетку генерировать музыку, обучаясь хотя бы на midi файлах классики.
Классная статья. Особенно видюшки с тем, как сеть по номерам цифры ищет. Это очень близко к реальной физике глаза. Мне за это очень BRIEF и ORB нравился.
UFO just landed and posted this here
А вот средних и плохих программистов, на мой взгляд, уже лет через 5-10 начнут теснить системы автоматического программирования
то кто будет писать программы для робота-CRUDOлепа

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

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

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

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

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

Всякие вещи вроде autograd и TensorFlow у нас уже есть; шаг вперед по сравнению с ситуацией, когда производные приходилось считать руками. Следующий шаг, кмк, должен принести нам что-то еще более простое и автоматизированное, доступное каждому; что-то, что ограничивалось бы model.approximate(source, target). Не то чтобы это сильно обещает сингулярность, но по-моему, что-то даст.
А можно поподробней насчет autograd? Каким образом оно избавляет от ручного вычисления производных? Или это просто какой-то численный метод, который можно исопльзовать вместо аналитического взятия производных?
Никакой магии, обычный, э-ээ… вычислительный сахар) Допустим, у вас есть сложная функция типа 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, и дальше решала исходя из забитых в нее правил. И счастливый ленивый разработчик может просто написать «посчитай мне все производные для весов этой сети» одной строчкой, вне зависимости от того, что у него там за сеть)
Примеров есть тут.
А разве не также устроен caffe? Там ведь вроде бы тоже "производные" задаются для каждого типа слоев отдельно в виде Backward функции...
А, я просто не знал, видимо) Никогда им толком не пользовался. Тогда все, что было сказано выше, относится и к нему тоже.
Да и Theano вроде как умеет символьные вычисления)
Спасибо за ссылку на статью, интересная!
На мой взгляд интересны варианты с различной логической оптимизацией в конкретных слоях. Постобработка, или какой-то конкретный алгоритм обучения. Вот ту была статья как человек экспериментировал в первых слоях с получением свёрток через k-mean и SVM. Идея с тем, чтобы SVM в верхних уровнях вместо softmax делать вроде как тоже будоражит умы уже давно.
Сделать комбинацию из нескольких независимых сетей, или из сеть выдающая промежуточный результат + некоторая логика сверху тоже понятно как.
Мне кажется, что пока однозначного перехода всех задач в сети ещё нет, а нужно грамотно балансировать на том, где они могут решить задачу, а где проще написать оконный фильтр.

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

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

У всяких Caffe есть более серьезное преимущество в виде комьюнити, которое включает в себя в том числе и авторов статей по DL, которые в уже известные фреймворки запиливают самые свежие фичи… а в TensorFlow сообщество хилое и там либо самому все писать (смысла нет, т.к. библиотека все равно медленная) либо долго ждать, пока кому-то еще такие фичи понадобятся)
А откуда картинка "Суперазрешение"? Как решает такую задачу увеличения изображения нейронная сеть на сложенных стыках объектов?
Я пробовал применять принцип на подобии "свёрточного" алгоритма чтобы увеличивать фотографии в 10-100 раз. Это было сделано без нейронных сетей. Просто подбирался наиболее подходящий по текстуре уменьшенный образец эталонного изображения. На изображении 1024*1024 работало около часа (в 4 потока, пробовал использовать GPU но ускорения не заметил). На однородных поверхностях, таких как песок, или плитка простым подбором текстуры из набора масштабируемых образцов хорошо получается увеличивать (для сглаживания краёв использовал embedded-enfuse). А вот при неровной и сложной кромки стыка 2-х материалов в образцах не оказывалось подходящих зон (например еловые иголки на сложном фоне, увеличение деревьев).
Вот исходники — 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

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

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

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

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

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

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

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

Ну, как-то так...
то есть по-вашему изображения — не реальное применение?
Я, конечно, не эксперт, но задача, которую привели вы, решается не нейронками.
Природными "нейронками" очень даже решается. И если искусственные сейчас плохо справляются с управлением контекстами, то это не навсегда. Ну, при условии, что есть люди готовые браться за решение таких задач.
так добавьте ваши контрпримеры в выборку и дообучите, в чём проблема-то?
Sign up to leave a comment.

Articles

Change theme settings