О когнитивном смещении и о полезной предвзятости

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Сейчас нейросети распознают картинки примерно так же хорошо, как и люди. По крайней мере на том датасете, на котором их обучали. Но нейросети, да и другие виды машинного обучения, крайне плохо справляются с задачей "выучить правило с малого числа примеров". Например, если дать человеку ряд: 1, 2, 4, 8, 16... И попросить продолжить. Чем продолжит человек? Не скажу за всех, но многие люди увидели бы здесь экспоненту и сказали бы, что следующее число 32.

А машинное обучение в подавляющем большинстве случаев 32 не выдаст.

Почему человек может, а программа - нет?

Для этого надо понять, что значит "уловить закономерность". У обучающегося агента есть строительные блоки, из которых он собирает искомую закономерность. Список функций, которые можно как-то комбинировать и строить из них разные правила. Например, у линейной регрессии есть всего одна функция: y = k1*x1 + k2*x2 + ... + b. У решающего дерева есть базовый блок "если x1>a1, то перейти к развилке 1, иначе к развилке 2". Решающее дерево может из этих базовых блоков собирать очень сложные зависимости, но оно всё ещё не может решить нашу задачу "продолжи ряд". Решающее дерево может в табличном виде описать экспоненту - не всю, а какой-то её участок. Всё, что окажется за пределами этого участка - описать не выйдет. То есть если дерево получило на вход такую статистику: 0:1, 1:2, 2:4, 3:8, 4:16 и 5:?, то оно продолжит так: 5:16.

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

Проблема решена?

Нет.

Вот создали мы такой универсальный подбиратель функций и сказали ему: x=0:y=0, x=1:y=1, x=2:y=2, x=3:y=?

А он отвечает: 0. Почему?! Да потому, что через заданные точки проходит бесконечно много закономерностей. Например, закономерность: x=1:y=1, x=2:y=2, иначе 0. Почему эта закономерность должна быть хуже, чем y=x, которую достроил бы человек?

Специалисты по философии науки сказали бы, что всё дело в бритве Оккама: не стоит плодить лишних сущностей, из нескольких подходящих правил надо брать то, которое проще. Человек просто нашёл более простое правило.

Но тут мы вспоминаем пример с экспонентой. 1, 2, 4, 8, 16...

И у нас есть два конкурирующих правила:

1) y = 1,

y заменить на (y умножить на 2),

повторять шаг 2 x раз

2) x=1:y=2, x=2:y=4, x=3:y=8, x=4:y=16, иначе y=0

Какое из правил короче? Это неочевидно, это зависит от способа записи. Есть ещё 3-ий вариант:

3) y=2^x

Он очевидно самый короткий. Но это же просто сокращённая запись правила (1)? Мы могли бы придумать способ сокращённо записать правило (2). И тогда бритва Оккама снова склонила бы нас к неверному выводу.

Дело в том, что ответ на вопрос "что проще" зависит от языка, на котором мы записываем, от понятийного аппарата.

И это и есть проблема машинного обучения! Ребёнку можно показать 2-3 птицы, и он правильно распознает 4-ую. Да, скажет он, это птица. А вон то, пушистое с усами - не птица.

Чтобы нейросеть научилась решать такую задачу с нуля, ей надо много, тысячи птиц и тысячи не-птиц.

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

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

Чтобы сделать машинное обучение эффективным на тех задачах, где человек явно лучше, надо, чтобы мы могли менять область специализации для нашего машинного обучения. Было бы здорово, если бы был инструмент, которому передаёшь список задач, на которых ИИ должен быть хорош, и он что-то делает с нейросетью, так что она "продаёт" свою эффективность на неважных задачах в обмен на эффективность на "важных".

Один из таких инструментов - автоэнкодер. Это такая специальная нейросеть, которая принимает на вход что-то (например, фото котика), и на выходе выдаёт то же самое (тоже фото того же котика). Но один из её промежуточных слоёв содержит мало нейронов, туда явно не поместится целое фото. То есть чтобы нейросеть смогла на выходе нарисовать котика, ей придётся его сжимать. Выделять важные черты, по которым его можно потом нарисовать. То есть в этом "узком слое" будут данные вида: какой цвет у котика? В какой он позе? Где пятна и какие? Как он освещён? Насколько пушистый? Что вокруг?

Так вот, если взять это сжатое описание котика, то по нему можно быстро обучить решающее дерево или маленькую нейросеть, отвечающие на разные вопросы, вроде "а мой ли это кот?", "а какой он породы?".

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

Я хотел сделать инструмент, который превращает видеозапись в сжатое представление. Пусть он по маленькому кусочку видео предсказывает следующий маленький кусочек - а в "узком слое" тогда сформируются списки объектов, схемы освещения и прочие вещи, которые нужны, чтобы сжато передать видео.

К сожалению, я не смог сделать конвертер "из видео в видео" - памяти не хватило. Поэтому нейросеть по видеоряду предсказывала усреднение следующих нескольких кадров. Усреднение - значит, кадр будет смазанный, на нём будут видны направления движения.

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