Pull to refresh

Comments 68

Ох… Чувствую скоро начнется формирование принципов обучения без ученика…
причем параметры этой сети (в частности, число слоев и межсоединений) приблизительно соответствуют биологическим значениям

Ну формировать принципы конечно можно (если я правильно понимаю — это чисто математическая задача), но вот применять пока сложно. До тех пор, пока не придумают дешевый аналог нейрона.
Кстати… Это же первое приближение к созданию искуственного разума! :)
Потрясающе, конечно! Аж как-то завидно становится, когда смотришь, чем люди занимаются в университетах Калифорнии.
Я ради того перевожу такие статьи, чтобы народ проснулся. Разбудите Герцена!
Вы знаете, с учетом интернета в каждой мобилке и простоты доступа к информации, те кто могли, уже проснулись, а остальные, боюсь, уже и не проснутся никогда…
Не надо столь пессимистично. Вот эта тема не требует особых инвестиций, капитальных затрат. чистая математика (то есть грязная прикладнуха). Сиди себе и ковыряйся. Вот почитают PHP-кодеры и займутся на досуге, не все же CSS-стили равнять.
Я очень люблю искусственный интелект и имею некоторый опыт привлечения людей на ИИ проекты, даже оплачиваемые, не говоря уже о «ради интереса». Многим оно просто не интересно. Не хотят разбираться, не вдохновляются перспективами. Как-то так.

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

С тем же успехом должен был появиться нейрон, который определяет, например, кота?

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

Да, именно. Если количество котов на выборке было бы достаточно большое, такой нейрон появился бы.
Именно так, и именно кота! В оригинале статьи посмотрите — «лицо кота» было вторым по значимости концептом, который выявила эта сеть. Это связано с тем, что в инете много изображений котов.

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

Тут главное понять, что изначально мы не задаем жесткую привязку выходным нейронам — «этот кошка, а этот — собака». Сеть в процессе самоорганизации сама выделяет информационно наиболее выгодные обобщения.
Число выходных нейронов там берется с запасом и, насколько я понимаю, не отделается данными. Просто начиная с определенного момента они не очень осмысленны.
Как бы мне хотелось изучить сформированную таким образом сеть, ведь распознавание лиц — это лишь несколько из выходных нейронов, думаю пареллельно сеть нашла множество (тысячи и тысячи) других объединяющих факторов изображений — на других выходных нейронах.
Родилась идея организации распределенной сети на компьютерах добровольцев (по аналогии с проектами @Home), которая непрерывно бы обучалась на случайных картинках из интернета и могла отвечать выдавать матрицу сигналов выходны нейронов по запросу для опредеделенной картинки и проводить обратное преобразование с максимизацией для конкретного выходного нейрона, думаю результаты были бы еще более впечатляющими.
Пусть одна система на 16-ядерном проце будет у нас давать 100Gflops(Если кто-то знает более точные значения — поправьте)
Тогда суммарная мощность 1000x100Gflops = 100Tflops почитали эту задачу за 3 дня.

Теперь, для примера — 118Tflops суммарная мощность Rosetta@HOME одного из самых мощных РВ проектов(причем, если я не ошибаюсь, там как раз только процессорные мощности, видюхи не используются). Это 340 тысяч пользователей, миллион компов.

По идее, если разбить решение этой задачи на год, то получается более-менее вменяемое количество компов в 10 тысяч. Такие мощности(порядка терафлопса) — достаточно легко набрать при должном оформлении и популяризации проекта.
Нужно только определить цели проекта. Очевидно, перепроверить результаты Стэнфорда — не канает. Если мы заставляем 10000 человек скачать программу и кормить ее видеопотоком, то мы должны им сказать, что они взамен получат. Например: «За год мы с вами воспитаем гомункулуса».
Как насчет «За год мы воспитаем гомункулуса, который сможет искать смешные фотки котов! »:)

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

Кем проверяется? — Теми 10 тысячами пользователей? Тогда они становятся коллективным «родителем» или воспитателем гомункулуса.
Кстати, срок воспитания наверняка совпадет со сроком воспитания ребенка от новорожденного до того состояния, когда оно научится правильно классифицировать картинки. И это я не критикую, а излагаю фундаментальный закон наподобие сохранения энергии. ИИ если и будет создан, то его воспитание и обучение будет занимать не меньше времени, чем воспитание и обучение человеческих детенышей.
Я немного не то имел в виду.
Скажите пожалуйста, нет ли в статье цифр следующего рода:
1. Сколько по времени проводилась «визуализация обученной сети двумя методами.»
2. Сколько времени и мощностей занимает распознавание одного изображения.

«ИИ если и будет создан, то его воспитание и обучение будет занимать не меньше времени, чем воспитание и обучение человеческих детенышей. » — человеческий детеныш ограничен пропускной способностью естественных каналов получения информации. Ну, и количеством нейронов. И то и другое со временем буду выше у ИИ(по крайней мере все к этому идет)…
Визуализация первым методом как бы ничего не занимает, просто нужно вести учет «топ 100» образов, которые дают наибольший отклик. Про время, затраченное на визуализацию 2 ничего не сказано. Поскольку число параметров там 40 000 (200 х 200), а обучение миллиарда параметров заняло 3 дня, можно прикинуть, что визуализация 2 займет около 1 секунды (это конечно наивный расчет, но порядок секунд наверное можно предположить).

Распознавание одного изображения можно оценить 10-100 мкс. Опять-же, рассчитываю исходя из того, что методом градиентного спуска за 3 дня обработали 10 млн. изображений, взял 10000 итераций с потолка.
вполне возможно, что это фундаментальное ограничение
И это я не критикую, а излагаю фундаментальный закон наподобие сохранения энергии. ИИ если и будет создан, то его воспитание и обучение будет занимать не меньше времени, чем воспитание и обучение человеческих детенышей.

Далеко не факт, по-моему. У ребёнка всё же достаточно ограниченное количество картинок обычно перед глазам (хотя они и более динамичны и трехмерны), а сеть вон за три дня десять миллионов проанализировала. Если считать, что мозг вместе с глазами способны хоть как-то обрабатывать 24 картинки в секунду, то это 2 млн. картинок в сутки, 5 дней (без сна и отдыха) понадобится ребёнку только чтобы их увидеть. Как-то сомневаюсь, что у него сформируются какие-то связи на распознавание лиц, кошек и т. п.
Боюсь, что вы неправы. У вас ведь сформировались связи?
Как мне кажется за большее время чем 3 дня я научился распознавать конкретные лица как абстрактное лицо.
А почитайте мой предыдущий перевод habrahabr.ru/post/136483/ — там про развитие детского восприятия лиц есть инфа.

А причем здесь 3 дня?
Как насчет звука. Получить фонетический алфавит. Задача почти аналогичная, скорее всего достаточно оригинальная. За год можно научится распознавать букву «О».
Делали уже аналогичным образом те же авторы (Ng). Даже визуализируют как изображение: по оси X — время, по Y — спектрограмма. Получаются симпатичные буквы «О» в виде кружков (яркость пиксела соответствует амплитуде в спектре).
Возьмите в команду спеца по ИИ, он подскажет, как сделать быстрее ;-)

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

Обучать сеть год — это бессмысленно совершенно.
Людей по 20+ лет обучают и жалуются на низкое качество…
Здесь речь про асинхронный стохастический градиентный спуск. Он достаточно быстр, в меру точен и масштабируется почти линейно по числу машин. Не слышал про применение для крупномасштабного машинного обучения генетики.
На видюхах, наверное, можно еще быстрее подсчитать, раз задача так хорошо параллелится. По опыту биткоина — быстрее порядка на два.
Согласен — надо бы собраться и сделать. Вообще, из России мало приходит интересных опесорсных проектов. Я бы предложил модуль математики на графкартах для Питона, совместимый по данным с numpy. Думаю, популярность была бы бешеной. И уже в рамках такого модуля можно настрогать реализации для нейрнных сетей, линейной алгебры и прочего.
У них получилось порядка 60К концептов, среди которых, например, круги на воде, решетки, облака и.т.п.
А все же, почему нейрон, отвечающий за конкретный образ или структуру должен обязательно появиться? Я не специалист в нейронных сетях, но есть ощущение что он совсем не обязан возникнуть. Более того, вполне возможно что это не один нейрон, а какая-то группа (реализующая функцию распознавания лиц/котов). Поясните плз.
Он конечно не обязан появиться. Но эксперименты показывают, что появляется, вернее «может появиться». Это го достаточно для подтверждения гипотезы.

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

Так вот, если самообучающаяся система «неглубокая», то в ней формируются нейроны, отличающие простейшие признаки, такие как короткие отрезки и точки (см. здесь) Интересно, что эти признаки обнаруживают и искусственные нейронные сети, и область V1 зрительной коры головного мозга. Можно предположить, что из этих примитивных элементов в следующих областях мозга синтезируются образы более сложные (например, квадратик из четырех отрезков под 90 градусов). Так что здесь вы правы — в коре V1 на квадратик откликнутся, грубо говоря, 4 нейрона. В высшем отделе на эти четыре нейрона откликнется один нейрон, отвечающий за распознавание квадратика такого размера.

В описанном же здесь эксперименте удалось построить 9-слойную сеть. Она уже смогла сформировать нейроны, распознающие сложные «концепции» типа лиц, человеческих фигур и т.п. Аналогично, другие математические методы (например, метод главных компонент, чистая линейная алгебра) способны сформировать отклики на обобщенное лицо, обобщенного кота и т.п.
«См. здесь»? У вас, кажется, ссылка не вставилась.
Он конечно не обязан появиться. Но эксперименты показывают, что появляется, вернее «может появиться». Это го достаточно для подтверждения гипотезы.

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

Так вот, если самообучающаяся система «неглубокая», то в ней формируются нейроны, отличающие простейшие признаки, такие как короткие отрезки и точки (см. здесь) Интересно, что эти признаки обнаруживают и искусственные нейронные сети, и область V1 зрительной коры головного мозга. Можно предположить, что из этих примитивных элементов в следующих областях мозга синтезируются образы более сложные (например, квадратик из четырех отрезков под 90 градусов). Так что здесь вы правы — в коре V1 на квадратик откликнутся, грубо говоря, 4 нейрона. В высшем отделе на эти четыре нейрона откликнется один нейрон, отвечающий за распознавание квадратика такого размера.

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

А сколько всего нейронов у вас в выходном слое?
Если бы у нас…

В статье нет прямого ответа на этот вопрос, есть схема сети. Не могу ответить на этот вопрос.
Просто интересно, раз появился нейрон, который распознаёт лица, значит должно быть еще много нейронов которые распознают что-то еще. Например наличие порно на картинке (возможность автоматической фильтрации для видео-хостингов) и много других интересных индикаторов. Я всё правильно понял?
Да, если обучить на соответствующих изображениях.
Разве? Я так понял, что нужна просто достаточная большая репрезентативная выборка фото/видео, чтобы сформировался нейрон, реагирующий именно на порно. Грубо говоря, если подавать на вход одно порно, то сформируются нейроны квалифицирующие порно, но не способные распознать порно это вообще или нет, отнесут нейтральную картинку к «лёгкому порно» и всё.
Самообучающаяся сеть работает не совсем как классификатор. Это мы интерпретируем ее как классификатор порно или лиц. На самом деле она пытается закодировать изображение более экономным способом, чем попиксельно. Она находит часто повторяющиеся фрагменты на многих изображениях, и кодирует их одним нейроном вместо целого поля пикселов (это я упрощаю). Например, если часто бывают сиськи, то сформируются нейроны «сиськи». Поэтому, чтобы они сформировались, сети нужно показать как можно больше порнухи. Я думаю, если будет только порнуха в обучающей выборке, система может испльзоваться как фильтр, потому что если на изображении нет сисек, ни один нейрон не возбудится (!) и в целом фильр выдаст суждение «нет признаков порно».

Другой вопрос — производительность такого фильтра. Все-таки описываемая сеть имеет 1 млрд. связей и реализована на 169 компьютерах (один экземпляр).
Интересно, а почему моя нейронная сеть (в голове которая) квалифицирует входной паттерн как однозначно мужское лицо, причём с намёком на спортивный и/или криминальный образ жизни?
Это усредненное лицо из ютюба, значит таких лиц больше. Криминал — эффект растяжения 200х200 наверное
а кто-нибудь обратил внимание на список авторов работы?
Quoc V. Le xx@cs.stanford.edu
Marc’Aurelio Ranzato xx@google.com
Rajat Monga xx@google.com
Matthieu Devin xx@google.com
Kai Chen xx@google.com
Greg S. Corrado xx@google.com
Jeff Dean xx@google.com
Andrew Y. Ng xx@cs.stanford.edu

из стэнфорда всего два человека, а остальные из корпорации добра…
Ng тоже в гугле работает. А где бы они 1000 компов взяли (и трафик на 10 млн ютюбовских роликов).
В статье «Чему нас не научил профессор Ng», вы описываете работу т.н. автоэнкодера. У меня вопрос: там замечательная идея «добиться того, что входной вектор признаков вызывал отклик сети, равный входному вектору» — собственно ничего более интересного (отличительного от других) в этом и нет.

Да, что-то там сеть себе запомнила. Много лирики о том как хорошо обучение без учителя. Но — что же нам будет выдавать эта сеть? А ничего — только то, что и сами же подали… классификация где?
Ответ на этот вопрос содержится в этой статье. На выходе многослойного автоэнкодера формируется нейрон, чувствительный к обобщенному образу лица. Попробую пересказать ту статью. Автоэнкодер — это двухслойная сеть. Число входов равно числу выходов. Но в первом слое нейронов меньше. Обучаем эту сеть по критерию максимального подобия выхода входу. Получается, что информация проталкивается через узкое горлышко первого слоя нейронов, т.е. объем информации уменьшается, т.е. происходит сжатие.

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


(Взято из источника, любезно подсказанного +1 dtestyk)

Когда такую сеть делают многослойной (как в данной статье), она начинает обучаться более сложным образам. Например, появляются нейроны, способные выделять обобщенные лица людей. Можно считать, что если к выходу описываемой 9-слойной сети прибавить отброшенный выходной слой автоэнкодера, то мы бы получили изображение, близкое к исходному. Но это изображение получилось бы не из 40 000 входных пикселов, а из 400 нейронов, один из которых создавал бы на изображении обобщенное лицо, а остальные навешивали по бокам волосы, небо, шею и т.д. Грубо говоря, конечно.
Ну, допустим, «второй слой просто отбрасывают, и оставляют веса только первого слоя». Где этот первый слой в данной 9-слойной сети? Тоже первый? Как тогда обучают (настраивают) остальные? BackProp? А первый слой больше не трогают?
В оригинале статьи прочитайте. Я краткое изложение дал.
В сети три одинаковых по структуре «суперслоя» — в каждом есть слой энкодера (линейный фильтр), пулинга и нормализации. Так что 1-й, 4-й и 7-й слои являются «первыми».

Обучали вроде глобально все веса, без обратного распространения. В 9-слойной сети обратное распространение не работает на практике.

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

> Обучали вроде глобально все веса, без обратного распространения.

Не понял — это как?

> В 9-слойной сети обратное распространение не работает на практике.

Откуда такой вывод?

ммм… у них что свой алгоритм обучения?
Там реально много букв, я своими словами неубедительно перескажу )))

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

Насчет обучения без обратного распространения — я наверное лажанулся. Обучали послойно, как я только что сказал, но добавили асинхронный глобальный спуск из-за масштабов задачи. Насколько я понял, берется мини-выборка из 100 изображений, берутся текущие параметры с сервера параметров, проводится обучение автоэнкодера, как положено, получаются градиенты весов. Градиенты передают на сервер параметров. Обновленные параметры становятся доступны всем остальным параллельно работающим обучающимся сетям. В этом градиентный подход заключается.
> Важнейшей особенностью данной структуры является локальная связность между нейронами. Первый подуровень использует рецептивные поля 18х18 пикселов, а второй подуровень объединяет фреймы по 5х5 пересекающихся соседних областей.

Чем это отличается от сверточных нейросетей Ле Куна? По мне — ничем!
А ну собственно ничем, они так и пишут, что использовали идею Ле Куна
Там несколько отличий:
1. Не использование свертки. Они это выставляют как преимущество, мол ближе к биологии и позволяет учится другим инвариантам. Я с этим не согласен. (Подробнее в моем комментарии к статье). Сам подход впервые был описан в статье про Topographic Independent Component Analysis.
2. Т.н. L2-pooling в котором они берут корень квадратный из суммы квадратов.
3. Функцию ошибки задают как в TICA. У ЛеКуна для разряженных автоенкодеров используются методы predictive sparse decomposition.
Приятно находить все больше людей в русском интернете, которых тоже интересует эта тема.
По поводу оригинальной статьи есть ряд мыслей.
Авторы утверждают, что несверточный характер сети имеет преимущества — большую инвариантность детекторов фич. Собственно они на это указывают еще в статье про TiledCNN. Я пока не видел работ, которые бы прямо это доказывали. Да, есть страница на которой они показывают инвариантность к поворотам и масштабированию. Но это обязательно должно быть свойством pooling слоя. Почему бы эту задачу не решить следующему слою.
Кроме того, архитектура, когда локальные рецептивные поля не имеют связанных весов может привести к отсутствию независимости детектора от положения внутри входного изображения. Т.е. если в сверточном случае все ядра одинаково выделяют признаки вне зависимости от их расположения на входном изображении. То в случае TiledCNN тот же самый признак в углу картинки и в середине будет по разному выделен.
Only those users with full accounts are able to leave comments. Log in, please.