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

Пара вопросов:
1) А не переизобрели ли вы сеть Кохонена или даже kernel trick? Ну, грубо говоря, считаем расстояние от входного изображения до шаблонов (усреднённых образов классов) и выбираем например номер шаблона, который даёт наименьшее расстояние.
2) Когда вы обучали "классическую" сеть на MNIST, предусмотрели ли в ней выход "не цифра" и обучали ли сеть на "не цифрах"?


Ну и вообще, странно пытаться улучшить перцептрон, когда картинки уже принято распознавать свёрточными сетями.

Ну и вообще, странно пытаться улучшить перцептрон

Это просто другой вид деятельности. Я в своё время переизобретал перцептрон, и знаете что? На некоторых синтетических задачах мой перцептрон рвал общепринятые существующие как стоячих. Так что если вам нужна быстрая коммерциализация — берите тензорфлоу и кучу суперкомпьютеров, но если вы хотите качественно изменить ситуацию, надо переизобретать перцептрон, правда у вас, скорее всего, не получится. Не все мы Хинтоны, потому что.

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

  1. Нет. Фактически это потребовало бы расширения набора MNIST. Мы показали результаты в сопоставимых условиях.

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

Получается, что так. Мы обкатали классическую персептронную сеть с 2-мя скрытыми слоями как это и положено на MNIST: обучили на тренировочном множестве, проверили на тестовом. А потом подали на вход технически идентичные, но содержащие другие образы изображения, отдельные результаты чего и показаны в тексте. Так мы, собственно, ещё раз указали на, возможно и спорный, но недостаток сепарационного подхода к классификации с обучением по методу спуска — локальность получаемого решения, его непереносимость. Схожее по причинам поведение описывается здесь https://m.habr.com/ru/post/225095/ (там же есть и ссылка на оригинальную работу). Разработанная нами сеть вообще не склонна реагировать на "что-то не то", и в статье мы постарались указать на объективность получаемых ею решений.

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

Я слабо знаком с NLP, мне приходилось сталкиваться в основном с картинками.


И меня очень удивляет описанное в статье использование нейросети, т.к. я вижу в описании обучение 10 бинарных классификаторов "1-vs-234567890" (отличает единицу от остальных образцов чисел), "2-vs-134567890" (отличает двойку от остальных образцов чисел),…, "0-vs-123456789" (отличает ноль от остальных чисел). А потом на вход классификаторов, натренированных на числах, подают букву "А". Что выдаст первый классификатор, обученный выдавать 1 на образе "1", и 0 на образах из "234567890"? Какое-то случайное значение. "А" не принадлежит ни множеству образов "1", ни множеству образов "234567890", поэтому классификатор выберет что-то максимально близкое из двух возможных для него значений. Множество образов "234567890", соответствующее нулю классификатора "1", недостаточно велико, чтобы путём обобщения включить в него и "А", и "j", и прочие буквы. Нейросеть, обученная таким образом, скорее "выберет" что-то максимально похожее из известного ей, чем выдаст нули по всем классам. Да, есть такой недостаток данной конфигурации обучения, который (частично) можно обойти более продвинутой выборкой, содержащей не числа. Но авторы статьи вместо просто другой выборки данных изобрели новый способ обучения. Результат интересный, но, возможно, это излишне.


Или в NLP ситуация иная?

Затяжная вводная про перцептрон, а про самое интересное и по существу, — применённый генетический алгоритм и устройство собственного нейрона ни слова. Понимаю, коммерция и всё такое. «У меня есть посылка, но я вам её не отдам». Ок. Думаю, я знаю её содержимое (фотоаппарат для Шарика) устройство вашего нейрона.

Термин «гипотеза» использован неслучайно, полагаю авторы знакомы со статьями А. Редозубова про комбинаторные пространства. Признаковое (ака комбинаторное) пространство разбивают на множество мелких подпространств (насколько мелкие видно на картинке, порядка нескольких единиц размерностей, до десятка), которые и у Редозубова и в этой статье называются «гипотезой». Другое употребляемое название подпространства — комбинаторная точка. Результат разбиения можно представить как облака низкоразмерных точек в высокоразмерном пространстве.

Далее генетическим алгоритмом многократно отбрасываются и «сливаются» гипотезы, чтобы избавиться от корреляций между отдельными размерностями и разными нейронами (содержащими список своих гипотез) и снизить количество гипотез общее и по нейронам. Частотность точки переходит в её вес (значимость при распознавании).

«Бинарный триггер гипотезы» срабатывает при распознавании, когда подпространство гипотезы (это вектор) сильно или полностью пересекается с входным вектором. Тогда учитывается вес этой гипотезы. Ну и как сказано, потом перемноженные на триггеры веса суммируются, и сумма проверяется на превышение порога.

Сама по себе гипотеза не говорит ни о чём. Она может, например, отслеживать один единственный пиксель (см. картинку с цифрой 3). Но вместе они формируют некий «скелет» обобщения формы цифры. Плюс «мясо» вокруг, ограничивающее допустимое положение горящих пикселей.

Думаю, как-то так…

С работами Резодубова не знакомы, скорее за основу брались упомянутые выше в комментариях сети Кохонена и идеи, положенные в их основу. И, да, в общих чертах вы правы. Есть несколько заметных отличий: во-первых, разбиение пространства происходит без какой-либо комбинаторной случайности, а по непосредственному захвату шаблонов из обучающих входных данных, во-вторых, мы рассматриваем, скорее, не подпространства, но области, если угодно, окрестности значащих точек как в сетях Кохонена, и, в-третьих, отбор идет не на уменьшение количества гипотез, а на увеличение (можно позволить себе аналогию с развитием многообразия видов в эволюции животного мира).

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

Свёрточные сети имеют гораздо меньше параметров и гораздо легче обучаются, чем полносвязные сети-перцептроны. Именно поэтому они и "взлетели".

Введите 11-й класс "не знаю" и обучите ему.


Неправильно требовать от датасета решения той задачи, для которой он не предназначен.

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

А откуда возникает это «не знаю»? Ведь ваши гипотезы у нейрона — это те же сепараторы. Можно подобрать паттерн/вход, который приведёт к ложному срабатыванию нейрона, вместо «не знаю».

Например взять два варианта одной цифры. Для каждой выделить группу максимально сработавших гипотез. Собрать их вместе и обратно сгенерировать по ним изображение, в котором естественным образом окажутся куски от обоих исходных вариантов. Нейрон на такую «химеру» ответит максимально.
Видимо, мы должны сказать, что класс «не знаю» — это наше вольное упрощение из проблематики в распознавании образов известной как Open Set Recognition. Посмотреть можно, например, здесь: arxiv.org/pdf/1511.06233.pdf
Вы меня не поняли. В статье описываете недостатки «традиционной» сети на «сепараторах» и далее предлагаете как бы совершенно другую сеть якобы без этих недостатков. Но по факту ваша сеть построена на подобных же сепараторах, которая точно также будет ошибаться на «левых» входных образах, как ошибалась сеть на TensorFlow, с которой сделали в конце статьи сравнение.

Строго математически любое решение по классификации можно свести к сепарированию признакового пространства. Следует различать сепараторы, делящие это пространство на две сравнимые по объему области и, соответственно, на компактную замкнутую область и "всё остальное". Гипотезы, о которых мы говорим ограничивают компактные области (см. трехмерную визуализацию в статье), размерность которых комбинируется в ходе отбора при контроле уровня ошибок типа "ложная тревога". То есть эти гипотезы склонны пропустить цель, когда она есть, нежели детектировать её, когда нет, и это не зависит от того, что вы для них сгенерируете: сгенерируете "3" — либо распознают, либо нет, сгенерируете абракадабру — ничего не произойдет.

Гипотезы, о которых мы говорим ограничивают компактные области (см. трехмерную визуализацию в статье),

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

kernel trick увеличивает размерность, отображая распознаваемые данные в пространство большей размерности так, чтобы в высшем пространстве отображение оказывалось по-прежнему линейно разделимым на две некомпактные области… Но никто и не спорит, методов множество и общего между ними много и, в целом, их объединяет математика — у нас одна из компиляций, а не магическое заклинание. Но это наш первый опыт статьи здесь, получилось размазано и скомкано, кажется, мы ошибочно недооценили аудиторию. В следующие разы исправимся.

kernel trick увеличивает размерность

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

Нейрон не способен распознавать инварианты по положению?

Если вы про положение цифры на картинке, то в узком смысле — да, не способен. С другой стороны, это повод для дискуссии об установлении инвариантности. Насколько в том или ином случае она интринсивна или определена внешним правилом?

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