Как стать автором
Обновить

Комментарии 31

Пользователю (а не исследователю) нейросети важно не где конкретно она ошибается, а насколько часто.

На самом деле не совсем верно. Пользователь обычно готов мириться с ошибками, где он их ожидает а не очень готов там, где он их не ожидает. Перефразируя пример с грузовиком, лучше если автоматическая машина не узнает грузовик в условиях, когда водитель из-за плохой видимости снизил скорость и перешёл на ручное управление, чеи когда он расслабился, поставил машину на полный автомат и хреначит 90 км/ч по пустой дороге.

Но в целом с выводом я согласен, нейросети понадобятся,
Если вы хотите научится стабильно отличать котиков от собачек на Ютюбе за год работы
а для более серьёзной работы стоит применять ччто-то более предсказуемое
поставил машину на полный автомат и хреначит 90 км/ч по пустой дороге


Я не очень разбираюсь в теме, но мне кажется, что тот же автопилот не анализирует дорогу по 1 кадру в минуту, даже секунду. И по большому количеству разных (отличающихся между собой) изображениях сможет гораздо точнее сказать грузовик впереди или нет. Тем более из-за относительно низких мощностей автопилот не гоняет на 90 км/ч, так как не успевает реагировать должным образом. И все же проблема с автопилотом раздута.
Ясно, что раздута. Это я просто иллюстрирую тезис, что
Пользователь обычно готов мириться с ошибками, где он их ожидает а не очень готов там, где он их не ожидает.
Ошибка как в обсуждаемой гугловской статье производят на пользователя заметно более сильное впечатление, чем ошибки на картинках, где непонятно, то, что нужно нарисовано, или нет.
Да и только по изображению автопилот тоже не ведёт — даже на обычных машинах стоит что-то типа радара или дальномера.
Спасибо за статью, а то предыдущую я прочел невнимательно и пришел к неправильным выводам.
Отличная статья, спасибо, все очень хорошо и точно изложено.
>>>Что здесь реально новость – это то, что искажения, приводящие к ошибкам, сохраняют свои свойства при переходе к другой архитектуре сетей и при смене обучающей выборки. Это действительно очень неожиданное открытие, и я надеюсь, что авторы в следующих работах найдут ему объяснение.

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

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

Пример такой элементарной задачи, которая по кодированию простейшая, а обратному декодированию сети почти не поддаётся я приводил в своей статье, которую упомянул в комментариях к предыдущей статье: habrahabr.ru/post/219647/
Там я привожу одну и ту же предельно элементарную задачу, но кодирую эту задачу разными способами. Перцептрон Руммельхарта со вторым способом кодирования справляется, а об первый способ ломает зубы точно так же как и у гугловцев. И на последней картинке в статье хорошо видно как конкретно он это делает. Если бы они вместо того чтобы подавать на вход огромную кучу непонятных данных подали бы что-нибудь на столько же простое, что и я, то пришли бы к тем же выводам на пол года раньше.

Короче думать нужно не только о том, существует ли решение, но ещё и о том, какие решения достижимы с какой вероятностью, и к какому решению можно прийти из начального состояния. А ребята из Гугла, как впрочем и многие другие до этой мысли ещё не дозрели. Видимо статью мою не читали. :))))
Хабронаселение во всей красе.
Человек поделился с ними знаниями, показал математику, лежащую в основе интересного обсуждения, а они ещё и нос воротят и минусуют. Причём по сути нечего возразить, да и вообще уверен, что минусующие не то что не смогли разобраться в статье, в части про неудобные функции, но одни даже, скорее всего, и букв то столько не осилили.
Поставил за первый комментарий плюс, за второй — минус, за нытье. Подумаешь прилетел минус в коммент, эка невидаль, а вы в каждом втором комментарии жалуетесь на злобное хабросообщество. Итого — один полезный, один жалобный, тьфу.
Ничего удивительного в этом не вижу — у нейронных сетей нет сознания, это просто умножение матриц, никакой магии. В процессе обучения, они выделяют какие-то признаки и усиливают их влияние. Если определить, что именно вносит больший вклад в принятие решения — конечно, можно создать примеры, в которых конкретно эти признаки незаметно уменьшены для человека, но сильно разгонятся в сети вплоть до ошибки.
UPD: Перечитал статью, про это и написано. Прошу прощения.
Это очень правильный комментарий. Человек тоже ошибается в распознавании образов, каждого, наверное, обманывали глаза, каждый говорил: «ух показалось». Но человек анализирует кучу информации, кроме изображения, включая предисторию его получения. Если человек увидит то что в этой ситуации он не ожидает увидеть, то мозг это отфильтрует, и обратно может дорисовать то чего нет. А нейронная сеть не может.
Не может, потому что не научили. А если вставить обратную связь с задержкой, как это, вероятно, сделано в мозгу? Тогда, вероятно, она сможет научиться упорствовать, что «это не грузовик, а облако»…
Предыстория тоже не только в нейросети, но и в любом классификаторе учитывается.
Фактически обучающая выборка и есть предыстория, на которой он(а) получает опыт.
В соответствие с байесовским подходом апостериорное распределение является вероятностным знанием о возможных вариантах, и вероятность 1.0 для нетривиальных случаев никогда не достигается. Всегда есть место для ошибки первого и второго рода (те самые глаза обманывают).
Чем больше обучающая выборка покрывает пространство событий, тем качественнее распознавание.
Так что дорисовать всё-таки может.
Не может сделать продукционный вывод (если из А получается Б, и из Б В, то при наличии А будет В).
Меня в нейронных сетях всегда воодушевляла та мысль, что за доказательством их потенциально безграничных возможностей не нужно далеко ходить. Главное доказательство находится между стулом и монитором :) Тем удивительнее было то, что некоторые биологические нейронные сети после ознакомления с предыдущей статьей поставили на нейронных сетях крест. Ок, попробую их переубедить.

Прежде всего, человек и искусственная нейросеть воспринимают образы по-разному. Эту разницу можно проиллюстрировать следующим образом. Возьмем как пример картинку с автомобилем:
1. Человек видит на картинке сцену и воссоздает ее в воображении как трехмерный образ. Далее он определяет доминирующий объект автомобиль (неочевидный шаг, на котором нейросеть может совершить ошибку и распознать здание на заднем плане), затем идентифицирует его. Заметим, что автомобиль может быть повернут любой стороной и трудностей у человека не возникнет.
2. Нейронная сеть воспринимает картинку, как целостный барельеф, условная высота которого соответствует вектору цвета и яркости. Распечатайте картинку на 3D-принтере и пощупайте ее руками. Примерно так ее воспринимает и нейросеть. Она как человек, который никогда не видел автомобили (например, слепой от рождения). Его можно научить узнавать рельефное изображение автомобиля, продемонстрировав ему несколько примеров. Но его легко сбить с толку, добавив туда неровностей или сгладив характерные признаки.

Нейросеть не имеет представления, что такое автомобиль и как он должен выглядеть. Поэтому ничего удивительного, что она намного чувствительнее к шуму, тем более к “оптимальному” шуму, подобранному специально.

Даже такая приблизительная аналогия на пальцах должна продемонстрировать, что результаты исследования не являются сенсацией, и уж конечно не объявляют «конец нейронауки». При этом они несомненно представляют теоретический и практический интерес, и поскольку проводились подразделением Google, могут повлиять на дальнейшие технологические решения, принимаемые в этой компании.
Да ещё и биологическая нейросеть — не одна, у нас их десятки, сотни, а может и десятки тысяч на каждую подзадачу, да и обучающая выборка представляет собой годы 120-мегапиксельного стереопотока (не считая остальных органов чувств и абстрактного анализа).
С другой стороны, наши «нейросети» обмануть весьма легко — см. например, эффект Тетчер
image
Здорово, хорошая (и слегка жутковатая) иллюстрация того, насколько узкоспециализированы механизмы нашего зрения.
вот это жесть! пришлось перевернуть ноутбук
там походу перевернутые рты и глаза
Вот что меня в этой ситуации сильно удивляет, это как многие переживают по поводу того, что гуглоавтомобиль сможет неправильно опознать грузовик. Ясно ведь, что вероятность того, что изображение испортится именно таким специальным образом, крайне мала. И так же ясно, что нет смысла от гугломобилей требовать 100% безопасности, надо лишь требовать безопасности более высокой, чем у обычных машин, управляемых людьми. Условно говоря, если вероятность попасть обычной машине в аварию, допустим, 10^-5 на километр пробега (цифра с потолка, но думаю, что плюс-минус пара порядков верна), а для гугломобиля эта цифра 10^-6, то гугломобиль намного лучше обычных автомобилей. И понятно, что вероятность такого синхронного изменения пикселей, как описано в статье, намного меньше этих 10^-6, поэтому эта ошибка фактически на безопасность не влияет.
Оба «открытия» напоминают что-то типа: мы старались-старались и у нас не получилось. Приводится информация как сильно старались исследователи, на разных типах нейронных сетей и разных изображениях, но какие выводы можно из этого сделать? Только те, что исследователи не научили свои сети распознавать образы с точностью, близкой к человеческой. Напоминает разговоры позапрошлого века о том, что невозможно создать летательный аппарат тежелее воздуха.
«Исследователи взяли очень переученную нейронную сеть – закономерно получили плохие результаты вне обучающей выборки» — нет, результаты которые они приводят показывают, что сети, которые они обучали, не были переучены. В частности, в статье есть результат работы сети на исходной выборке с добавленным случайным шумом, на котором нет никакого падения качества. При переобученной системе таких результатов не было бы.

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

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

Типичные пример такого «вызубривания не от хорошей жизни» можно увидеть опять же у меня в статье: beta.hstor.org/getpro/habr/post_images/998/a4c/f3b/998a4cf3b8fbc1ef3ec7b3ff92a18bb4.png

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

Да и по всей остальной области под функцией точек с ошибочной классификацией предостаточно.

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

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

P.S. Кстати, те нейронные сети, которые между стулом и монитором тоже частенько допускают такие ошибки, например верят в высшие силы управляющие громом и молнией или судьбой.
kraidiky, я извиняюсь, но может хватит уже изображать из себя д'Артаньяна переплюнувшего массу специалистов по нейросетям? Некрасиво выглядит, ей-богу.
Любая сколь-либо приличная нейросеть обучается на одной выборке, а тестируется на другой, это элементарные основы. В Вашем же примере Вы и обучаете и тестируете на одной и той же выборке. Если бы Вы удосужились проверить Вашу сеть на тестовой выборке, как это делают в приличных статьях, то «недостаточный уровень обобщения» достигнутый сетью немедленно всплыл бы, ибо, как Вы верно заметили, сеть у Вас просто «зазубрила» тестовую выборку.

Так вот: Гугл пишет о сетях которые проверялись на независимых тестовых выборках и показали на них отличную точность распознавания. Что, хм, немного намекает на то что «вызубривании обучающей выборки» речи идти не может. Вы же взяли изначально плохо работающую сеть и пытаетесь на основании того что Вы сделали хреновую по какой-то причине сеть (совершенно неочевидной причине, кстати — смахивает на элементарный баг) делать выводы что столь же хреновая сеть была использована Гуглом. Вообще, на данных столь низкой размерности как в Вашей статье (n=2) у нейросетей все очень и очень просто работает, гораздо интереснее существенно многомерная ситуация и гугловская статья рассматривает именно её. Дело в том что с точки зрения любой метрики в многомерном пространстве «окрестности» точки намного больше чем в двумерном и это дает нетривиальные и не всегда очевидные эффекты. Простые картинки этого не иллюстрируют никак (и картинки метания сети при обучении — тоже)
0serg, Вы не углядели, что сеть обучается на подвыборке, а тестируется (картинка рисуется) на полном наборе данных, включающем все возможные точки для данной задачи. На сколько поверхностны и все остальные претензии. Вы пишите о том что ошибки сети вызваны вызубриванием, но даже после прямого указания куда смотреть, не заметили что эффект ступеньки возникает не только на разных выборках, но даже и на таких разных сетях, как многослойные перцептроны и классический перцептрон Розенбладта. Хотя я много раз подчёркивал по тексту, что интересен не сам по себе эффект вызубривания, а возникающая при этом систематическая ошибка. Вы не обращаете внимание на то что и это решение проверялось, и показало хорошую точность, высокая вероятность ошибки возникает только в узкой области, обусловленной особенностью входных данных, а не особенностью сети.

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

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

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

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

Возможно как-нибудь потом на ругих примерах я постараюсь вам доказать, что д'Артаньянить и искать то что не нашли другие — может быть очень полезным времяпрепровождением. Даже если эти другие — очень именитые гугловцы. Тогда и вернёмся к этому разговору.
Вы вначале проверьте свои результаты, а потом рассуждайте о том что зелено-красная картинка может давать меньшую ошибку чем сине-зеленая.
Легко же сделать. Возьмите случайную тестовую выборку как это все делают и посчитайте процентики результата для каждой из сетей. Убедившись что для 2D сине-зеленая картинка сравнительно немного, но хуже чем красно-зеленая, повторите эксперимент в 3D. Убедитесь что разрыв стал больше. Задумайтесь что будет для размерности n > 1000.
По моему скромному мнению (вот некоторое время после прочтения статьи подумал и пришёл к выводам) главная проблема, которую подняли в этом исследовании — это качество признаков.

Когда делается классификатор, то для алгоритмов типа подобного нейросетям принимается гипотеза о компактности пространства признаков.
То есть, говоря по-простому, малое отклонение в значении признака не должно резко изменять результат классификации.
Мухи должны лежать в своей области значений признаков, а котлеты в своей.

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

Вопрос дальнейших исследований, скорее всего, заключается в поиске (автоматическом) признаков, которые дадут устойчивые границы компактных связных областей.
Написал на эту тему свою подробную статью с примерами, картинками и элементами блэкджека: habrahabr.ru/post/249031/
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.