А не пробовали засекать количество слов в минуту обычным и перевернутым способом? В принципе, конечно, в таком восприятии нет ничего невозможного — немного практики по чтению таких текстов, и перевернутая буква становится такой же распознаваемой картинкой, чем обычная. Но зеркальный текст, например, я читаю очень медленно — перевернутый еще куда ни шло)
Так и есть, да. Насчет масштаба и прочих пространственных трансформаций мне наиболее многообещающей кажется идея с transforming autoencoder (уже выше мелькала ссылка). Смысл в том, что в параметры картинки вкладывается не только ее пиксельное содержимое, но и информация о, допустим, масштабе, с которым глаза/камера смотрит на объект. На выходе ваша модель должна, аналогично, предсказывать масштаб, с которым изображен объект, который, по его мнению, он нашел.
Откуда брать эту самую изначальную информацию о масштабе? Нам, видимо, нужен какой-то супервайзинг — либо вы должна сами руками проставить на тренировочной выборке нужные значения, либо можно попробовать считерить и генерировать тренировочную выборку с помощью условной камеры с зумом — когда вы знаете, что зум вперед/движение вперед означает изменение в масштабе.
Вот еще конспект лекции на тему, там несколько более доступно написано. К сожалению, коварный Хинтон нигде не приводит примера этих своих пространственных капсул, так что приходится фантазировать из общей идеи.
Эта статья по первой ссылке подняла неслабый хайп, да) Тоже хотел что-нибудь про нее написать, но остерегся, потому что не читал оригинал — а переложения и комментарии какие-то слишком панические — например, по вашей первой ссылке, когда я ее читал, мне показалось, что та же проблема может быть вызвана обычным оверфиттингом, и бегать с криками «спасите, нейронные сети не работают» как-то рано.
Про разложение — спасибо за замечание, надо было отдельно оговорить, что нас интересует именно overcomplete basis.
Согласен, впечатляет) Причем если скачать датасет и посмотреть на примеры, впечатляет еще сильнее — там полно картинок типа «фигура человека во весь рост и маленький, еле заметный котик на руках». Примеры в посте как раз оттуда, но не самые показательные.
А про капчи — идею с собачками всегда можно развить чуть дальше)
Вот на этой картинке, между прочим, с треском ломается вся логика про много уровней фич — тут даже контура нет! Победители челленджа, наверное, пользовались какими-то другими подходами — интересно, что у них бы получилось здесь.
Тут, между прочим, могут найтись интересные грабли, потому что вообще говоря, фичи с разным масштабом и углом поворота — «не invariant, а equivariant» (Хинтон лидирует по объемам цитирования в этом посте и комментах)). То есть мы-то, конечно, понимаем, что кошка, перевернутая вверх ногами — та же самая кошка, что и не перевернутая, но у нас при этом появляется дополнительная информация о том, что она все-таки перевернутая. И вообще говоря, мы не должны распознавать их как одно и то же. Косвенным подтверждением того, что наш с вами мозг не всегда с легкостью вращает и масштабирует увиденное, может быть mental rotation — тот факт, что мы не можем читать текст вверх ногами, не делая неких осознанных усилий по переворачиванию букв.
В качестве многообещающего подхода на этот счет я там выше приводил ссылку на transforming autoencoders — к сожалению, маловато демонстративных данных пока, но то что есть, выглядит круто. Если доберусь до следующего поста по теме, обязательно напишу про это.
Я вас понял, да) Про сверточные сети, к сожалению, вообще ничего не знаю и не могу сориентировать. Про «выделение компонент» — здесь мы решаем задачу разложения матрицы на линейную сумму составляющих, и решаться она, на самом деле, может кучей разных способов:
— PCA, который вы упомянули — вполне подходит
— автоэнкодеры, машины Больцмана, прочая традиционная атрибутика из области unsupervised feature learning
— … внезапно, даже K-means
Есть, правда, важная деталь. Компоненты должны обладать парой условий: должны хорошо генерализоваться (то есть нам нужно не идеальное разложение одной картинки, а какое-никакое приемлемое, но чтобы подходило для всех), и они должны сами по себе иметь какой-то смысл с точки зрения распознавания. Именно для этого мы устраиваем всю возню с разными уровнями и выделением границ — потому что, например, в случае с лицами ничто не мешало нам прогнать вот эти две строчки кода сразу для больших картинок и получить что-нибудь похожее на eigenfaces.
Иногда к компонентам еще выставляют какие-то требования — например, что они должны быть разреженными, или топографически ориентированными (примерно вот так, то есть соседи каждого компонента по линейной сумме очень на него похожи с небольшим отклонением в какую-то сторону).
А вот когда вы эти компоненты получили — насколько я очень смутно понимаю, потом уже в ход идет сверточность. Допустим, знаем, что где-то на изображении 800x600 спрятано лицо размера 160x160. Чтобы понять, где именно, возьмем наш лицо-компонент и начнем проходиться им по всей картинке с шагом в один пиксель, постоянно проверяя, не найдется ли хорошего совпадения — это, собственно, и есть свертка. Результат прохода добавим себе в выборку для следующего этапа обучения, и когда таких наберется прилично — будем учиться искать среди фильтрованных картинок те, где свертка дала хороший результат (то есть в процессе прохода мы-таки наткнулись на лицо). Это, справедливости ради, очень туманное представление, которое у меня где-то есть про сверточные сети, и очень возможно, что я неправ)
Спасибо за подробный отзыв) Конечно, это условно-обзорный пост, который оставляет за занавеской много деталей — в том числе то, что происходит под капотом DictionaryLearning, и чем всякие там orthogonal matching pursuit отличается от lasso-lars. Очевидно, писался он скорее для людей не в теме) Про Kaggle немного света пролить могу: например, победитель челленджа — некто Pierre Sermanet из группы Яна ЛеКуна, использовавший свою штуку под названием OverFeat, которая позиционируется как natural feature extractor и использует сверточные сети (куда без них).
Про третий пункт — это да, было такое лирическое отступление. Вся эта идея dictionary learning была взята совершенно из сторонней темы и других источников — просто так уж вышло, что мы можем приспособить ее для обучения признакам, из которых потом будем составлять иерархию (вот тут уже появляется глубокость). Вместо этого мы могли использовать какую-нибудь RBM с тем же успехом. Наверное, стоило об этом уточнить подробнее — потому что про линейное кодирование картинки можно много увлекательного рассказать самого по себе.
Вот вы будете смеяться, но он так в русской википедии назван) Я не знаток транслитерации корейского, но:
1) на форуме курса Machine learning как-то был вопрос, как правильно читать эту фамилию, и присутствующие носители языка сказали, что мол, носовое «н», как в слове England.
2) один Ким Чен с такой фамилией в медиа уже присутствует. Хотя на самом деле последний слог в его фамилии — «ун» ( Kim Jong Un в латинице). В общем, темная вещь этот хангыль)
Спасибо, надеюсь, что их будет. Мне иногда кажется, что большая часть материалов по этой теме страдает какой-то демонстративной научностью — много математики, тумана, непонятно, что эти нейросети вообще умеют, и где там AI уже.
Совершенно логичная мысль) На этот счет есть фраза, кажется, того же Джоффри Хинтона (первоисточник уже не нашел), про то, что «Computer vision is inverse computer graphics». То есть если в трехмерной графике у нас есть модель, которая поворачивается и демонстрируется на экране разными сторонами, то для компьютерного зрения тоже должна существовать какая-то трехмерная модель абстрактного котика, куда будут «укладываться» все проекции, которые мы видим.
По поводу прикладного использования — навскидку, можно почитать статью про transforming autoencoders. Идея там такая — вместе с картинкой для обучения кладем в алгоритм еще и информацию о том, где она находится, а на выходе заставляем алгоритм эту информацию предсказывать — так, чтобы он, увидев распознанный объект, мог сделать предположение о том, какой стороной он повернут.
Откуда брать эту самую изначальную информацию о масштабе? Нам, видимо, нужен какой-то супервайзинг — либо вы должна сами руками проставить на тренировочной выборке нужные значения, либо можно попробовать считерить и генерировать тренировочную выборку с помощью условной камеры с зумом — когда вы знаете, что зум вперед/движение вперед означает изменение в масштабе.
Вот еще конспект лекции на тему, там несколько более доступно написано. К сожалению, коварный Хинтон нигде не приводит примера этих своих пространственных капсул, так что приходится фантазировать из общей идеи.
Про разложение — спасибо за замечание, надо было отдельно оговорить, что нас интересует именно overcomplete basis.
А про капчи — идею с собачками всегда можно развить чуть дальше)
Вот на этой картинке, между прочим, с треском ломается вся логика про много уровней фич — тут даже контура нет! Победители челленджа, наверное, пользовались какими-то другими подходами — интересно, что у них бы получилось здесь.
В качестве многообещающего подхода на этот счет я там выше приводил ссылку на transforming autoencoders — к сожалению, маловато демонстративных данных пока, но то что есть, выглядит круто. Если доберусь до следующего поста по теме, обязательно напишу про это.
— PCA, который вы упомянули — вполне подходит
— автоэнкодеры, машины Больцмана, прочая традиционная атрибутика из области unsupervised feature learning
— … внезапно, даже K-means
Есть, правда, важная деталь. Компоненты должны обладать парой условий: должны хорошо генерализоваться (то есть нам нужно не идеальное разложение одной картинки, а какое-никакое приемлемое, но чтобы подходило для всех), и они должны сами по себе иметь какой-то смысл с точки зрения распознавания. Именно для этого мы устраиваем всю возню с разными уровнями и выделением границ — потому что, например, в случае с лицами ничто не мешало нам прогнать вот эти две строчки кода сразу для больших картинок и получить что-нибудь похожее на eigenfaces.
Иногда к компонентам еще выставляют какие-то требования — например, что они должны быть разреженными, или топографически ориентированными (примерно вот так, то есть соседи каждого компонента по линейной сумме очень на него похожи с небольшим отклонением в какую-то сторону).
А вот когда вы эти компоненты получили — насколько я очень смутно понимаю, потом уже в ход идет сверточность. Допустим, знаем, что где-то на изображении 800x600 спрятано лицо размера 160x160. Чтобы понять, где именно, возьмем наш лицо-компонент и начнем проходиться им по всей картинке с шагом в один пиксель, постоянно проверяя, не найдется ли хорошего совпадения — это, собственно, и есть свертка. Результат прохода добавим себе в выборку для следующего этапа обучения, и когда таких наберется прилично — будем учиться искать среди фильтрованных картинок те, где свертка дала хороший результат (то есть в процессе прохода мы-таки наткнулись на лицо). Это, справедливости ради, очень туманное представление, которое у меня где-то есть про сверточные сети, и очень возможно, что я неправ)
Про третий пункт — это да, было такое лирическое отступление. Вся эта идея dictionary learning была взята совершенно из сторонней темы и других источников — просто так уж вышло, что мы можем приспособить ее для обучения признакам, из которых потом будем составлять иерархию (вот тут уже появляется глубокость). Вместо этого мы могли использовать какую-нибудь RBM с тем же успехом. Наверное, стоило об этом уточнить подробнее — потому что про линейное кодирование картинки можно много увлекательного рассказать самого по себе.
1) на форуме курса Machine learning как-то был вопрос, как правильно читать эту фамилию, и присутствующие носители языка сказали, что мол, носовое «н», как в слове England.
2) один Ким Чен с такой фамилией в медиа уже присутствует. Хотя на самом деле последний слог в его фамилии — «ун» ( Kim Jong Un в латинице). В общем, темная вещь этот хангыль)
По поводу прикладного использования — навскидку, можно почитать статью про transforming autoencoders. Идея там такая — вместе с картинкой для обучения кладем в алгоритм еще и информацию о том, где она находится, а на выходе заставляем алгоритм эту информацию предсказывать — так, чтобы он, увидев распознанный объект, мог сделать предположение о том, какой стороной он повернут.