Комментарии 46
Конечно, далеко не все изображения подошли
Потому что это были не лица, не фронтальные или неподходящие эмоции? Я так понял, что из 30к изображений осталось 2.5к, совсем мало.
Вот по поводу последнего есть вопрос. В продакшене тоже будет много лиц "с непонятными эмоциями". Выкидывая их из датасета не получим ли мы низкое качество определения (условно, случайную эмоцию) именно на таких сложных случаях?
Человек может оперировать лишь моделью сети, что почти не влияет на логику принятия решения, а скорее на качество/скорость, либо датасетом, тобишь входом системы.
Да, вход зачастую можно подкорректировать исходя из того что происходит внутри. Иногда можно исходя из внутреннего процесса подкорректировать loss-функцию. Но это не делает происходящего не чёрным ящиком:)
Строго говоря, черный ящик — это модель, полностью неопределенная.
В случае с НС — это скорее модель, определенная с точностью до структуры. Т.е. с параметрической неопределенностью.
Другое дело, что очень часто назначение конкретного участка структуры неизвестно из-за того, что назначается она "от балды".
С другой стороны, те же сверточные слои вполне имеют известное назначение и роль.
П.С. по сути, обычная мат. модель с неопределенными параметрами является такого же уровня неопределенности, как и НС. Различие заключается в числе параметров (в мат.модели это обычно не так много, а в НС — это тысячи и десятки тысяч со всеми вытекающими).
по сути, обычная мат. модель с неопределенными параметрами является такого же уровня неопределенности, как и НС.Обычные программы с аналитикой или распознаванием основанные на каких-либо мат. моделях тоже можно считать «нейронными» сетями. Только в них параметры подгоняются разработчиком в ручную, то есть фактически обучение берет на себя разработчик, так как готовой процедуры обучения нет. Так же параметры модели в этом случае могут иметь осмысленные значения.
Интересно удастся для нейросетей проделать такой финт. После обучения, просканировать состояние всех весов, и зная структуру сети, построить оптимальную мат. модель входных данных, максимально сократив число переменных и параметров, в сравнении с нейросетью. Как это делает человек, когда после анализа данных подбирает для них наилучшую мат. модель. На вид модели не накладывается никаких ограничений. Конечно параметры этой модели будут неопределенными, и лишь проанализировав их, возможно некоторым можно будет приписать смысл, то есть интерпретировать их в контексте входных данных. Причем проделать это автоматически, запустив процедуру сканирующую любую нейросеть. Для любых типов данных, а не только изображений, и любой размерности. Если можно, то можно будет утверждать, что эти нейросети не «черные ящики», ну или хотя бы «серые».
Никто не реализует нейросеть, чтобы сложить два числа.
Не факт. FizzBuzz на TensorFlow вот решают: habr.com/post/301536
Так что может кто-то и числа нейросетью складывает.
Нейронные сети остаются всего лишь решением сложной задачи оптимизации.
Достаточно спорное утверждение. Нейронная сеть это модель, оптимизация всего лишь один из способов задать ее параметры.
А с точки зрения математики, там конечно не только оптимизация. Конечно если в каждой можели мы видим функцию потерь, ее частные производные для движения к оптимуму модели легко назвать это оптимизацией, но это ответ на вопрос «как», а не «зачем».
Да и еще — что значит более ососзнанные сети? :) Скорее визуализация — возможность человеку осознать как устроена сеть и увидеть как можно ее оптимизировать.
"Нейронные сети остаются всего лишь решением сложной задачи оптимизации. Но даже простейшие карты внимания сети вносят долю прозрачности в эти дебри. Данный подход можно использовать наравне с обычным ориентированием на функцию потерь, что позволит получать еще более осознанные сети.
Если вспомнить про риторический вопрос из начала статьи, то можно сказать, что использование карт внимания вместе с итоговым откликом сети уже несет в себе определенное человекопонятное объяснение, которого так не хватало."
Вот тут уж точно не "человекопонятное", а узкоспециализированно понятное.
А вы не могли бы раз уж на хабре — написать код, как-то рассказать про keras-vis, а то выглядит несерьезно.
А «Surprised» смотрит на форму рта и левое(!) приподнятое веко — пора бы начать признавать и правое.
А что если сети дополнительно отдавать на проверку зеркальные варианты всех изображений? Интересно, какой у сети окажется процент противоречий самой себе.
Возможно ли заставить сеть смотреть на обе брови, если датасет увеличить вдвое через добавление зеркальных дубликатов?
Ведь при малом числе измерений вероятность 0.5 — это далеко не 0.5 =)
Это не совсем интуитивно, но может быть сеть права и нужно смотреть только на одну сторону? Для меня, например, совсем не очевидно что в естественных условиях будут встречаться оба варианта с хотя бы примерно одинаковой частотой. Или может быть левое веко все равно отличается. Было бы интересно посмотреть на процент ошибок разных родов с незеркальными относительно центральной оси признаками.
К сожалению, даже меняя различные параметры функций, от Lime не удалось получить достаточно человекопонятного отображения. На принадлежность к классу «angry» почему-то влияет правая половина лица.
В двух предложениях — описание черного ящика. Визуализация зависит от правильного подбора параметров этой самой визуализации, я знаю тысячу способов построить карту активации и везде мы получим разные картинки. Дальше, интерпретация вот этого всего — это проблема, «почему-то влияет правая половина лица» — на «самом деле» может это левая бровь внесла больший вклад в результат или просто цвет лица или вообще фон картинки, и таких интерпретаций = бесконечность.
Думаю написать в ближайшем будущем статью про выбор способа построения карты активации и параметров. Чем больше активаций с одними параметрами мы построим, тем больше сократим число возможных интерпретаций! Если, конечно, сеть хоть как-то сошлась.
Если же на большом числе полученных карт не будет виден тренд, то у нас плохая сеть =)
Чем больше карт вы построите, тем больше простора для воображения, но это никак не приблизит к одному единственному правильному объяснению, которое выглядит как-нибудь банально: 14-й, 88-й, и 146-й пиксель сделали весь праздник, а мы тут ищем высокоуровневые признаки, о которых знаем только мы — «пол лица», бровь, нос.
Попробуйте one pixel attack и увидите, как всего один пиксель в нужном месте сломает вам и нейронку, и все интерпретации. arxiv.org/abs/1710.08864
Обожаю визуализацию данных, но считаю с НС это путь в никуда, единственно верный вариант здесь — ну очень тонко понимать математику. Наверное такие люди есть, зато нет ни одного такого, кто бы смог объяснить, что и как эта нейронка делает.
Повторюсь, что учитывая связь данной темы с биологией, есть смысл в том, чтобы считать идеалом совпадение собственного и нейросетевого восприятий. Можно посмотреть, например, на визуализацию слоёв VGG и увидеть, что высокоуровневые признаки — это реальная, практически объективная сущность.
«14-й, 88-й, и 146-й пиксель сделали весь праздник» — кажется, мы именно противоположному и учим сеть, создавая большие датасеты и добавляя аугментацию
>14-й, 88-й, и 146-й пиксель
Эта фраза является хорошим примером малозаметного, но очень важного признака, который однако же не все поймут.
… ничто не выдавало в нем русского разведчика: ни рация за спиной, ни волочащийся сзади парашют
вы перепутали сайт со своим свинарником
но разве подгонка результата под то, каким образом эксперементатор воспринимает проблему, является достаточным основанием для того, чтобы раскрыть проблему черного ящика?
Почему визуализация, а точнее ее восприятие экспериментатором является достаточным основанием для того чтобы влиять на сеть? Не кажется ли Вам что в данном случае вы создаете сеть, которая, в некотором роде, является копией вашего восприятия, а не понимаете почему именно такие решения для нее (сети) являются правильными?
в результате, вы получаете сеть, которая распознает то, каким образом лично Вы имитируете эмоций. Подчеркиваю, не распознает эмоции, а узнает ваши имитации.
И вы не столько раскрываете черный ящик, сколько создаете условия при которых открыв его, вы увидите там то что хотите увидеть.
Иными словами, то что вы положили внутрь ящика яблоко, не дает вам оснований утверждать что вы понимаете почему это именно яблоко, и почему лично вы это считаете это яблоком.
Вам это даете только право утверждать, что с высокой долей вероятности, ваша сеть скажем вам то, что вы и так знали — вы положили туда яблоко. Но вы так и не поймете почему сеть поняла что это именно яблоко и что оно лежит именно там.
«Вы получаете сеть, которая распознает то, каким образом лично Вы имитируете эмоций» — конечно же, предполагается, что активации нужно смотреть на максимально широком пространстве(т.е. не только на моих фотографиях). И только тогда можно будет говорить о какой-то объективности результатов.
Один из вариантов — создать отдельную валидационную выборку, подсчитать на каждом изображении в ней активации и затем отобразить средние значения
Насколько я понимаю, можно еще делать «от обратного». Закрываешь разные части картинки черными квадратами и смотришь, — какие части начинают влиять на выбор класса.
Почему хватит считать нейронные сети черным ящиком?