All streams
Search
Write a publication
Pull to refresh
124
0
Send message

Это все тот же BERT, только обученный сразу на нескольких задачах. И поэтому лучше оригинального BERT на 1-2% (в абсолютных значениях). Это давно известный факт, что мультизадачные нейросети показывают немного лучший результат, чем однозадачные. По-моему, впервые это было обнаружено года три назад на переводчиках. Когда одна сеть переводила на несколько языков, результат был чуть лучше, чем когда для каждого языка своя сеть.

Бородатая шутка ML специалистов: Моя нейросеть каждый раз предсказывает неизбежный конец человечеству. Скажите пожалуйста, она недоучена или переобучена?

Но не умнее его. Сами собирать данные, и делать из них логические выводы они не способны?

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


Я взял строчку из статьи: "hello = привет, dog = собака, wind = ветер, cat = " и вбил ее в уменьшенную 117М версию этой нейросети.


И она выдала: "hello = привет, dog = собака, wind = ветер, cat = собакра, heifer = вете, biryani = граков, really = русской, soul = собаков, leaven = режде, can = ходдеч?"


Смотрите, даже урезанная кастрированная версия этой нейросети определила структуру текста и продолжила его. В виде пар "english = русский". Да, вместо настоящего перевода выдала случайные наборы букв. Но заметьте, русских букв! Возможно, она просто не знает перевода конкретно этих слов, но старается имитировать. По-моему, это потрясающе. Ребенок сделал бы точно так же.


И возвращаясь к вашему вопросу, в данном случае нейросеть сделала логический вывод, что после пар "english=русский" и последней части "cat = " надо написать перевод на кириллице? Или на основании чего она поступила именно так? Имхо, такие вопросы требуют более глубокого изучения, чем простой ответ "да" или "нет".

Спасибо за критический взгляд. Я, как и многие фанаты развития ИИ, часто переоцениваем новости. Выдавая желаемое за действительное.
Кстати, вот вопрос: разрабатываются ли параллельно с прямой задачей машиной генерации текстов обратные задачи определения степени «человечности» автора текста?

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

Генерация текста еще не достигла таких высот, чтобы требовалась обратная задача. Удачные примеры есть только по узким областям. Например, было что-то про генерацию отзывов на книги в Амазоне. Но видимо исследователи считают, что это проблемы только Амазона. Хе-хе. Наивные.
Подозреваю, что под давлением общественности они все же выложат полную модель. Она несовершенна, в блоге говорится что хороший текст получается только на популярные темы. А на редкие или по узкоспециализированным предметам прорыва не случилось. Поэтому это еще очень далеко от общего ИИ, которому можно задавать любые вопросы. Хотя и выражают надежду, что при увеличении выборки и вычислительной мощности результаты улучшатся.
Пожалуй, да. Сейчас добавлю ссылки. И перечитав, замечаю много стилистических ляпов и ненужных повторов. Первоначально это не планировалось как статья, а как короткая заметка как запустить доступную версию GPT-2 с 117М параметрами через Google Colab. Еще не все привыкли, что практически все новейшие нейросетки можно запускать в браузере (даже на смартфонах) через этот сервис. А тут так удачно сделано, что не пришлось ничего дописывать, достаточно следовать инструкции в несколько строчек с официального гитхаба.

На образцы генерируемого полной моделью текста прямая ссылка: https://blog.openai.com/better-language-models/#sample1 (вверху полоски переключателя на 8 историй).

Также есть огромный 2.4 Mb текстовый файл со случайно сгенерированными образцами: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-samples.txt

И еще один, 2.27 Мб, с другими настройками случайности: https://raw.githubusercontent.com/openai/gpt-2/master/gpt2-topk40-samples.txt

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

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

Все пакеты для обучения с подкреплением включают в себя возможность использовать CNN сети, а значит явно пытались обучать сразу сверточную сеть. Но насколько я знаю, больших успехов добились именно на крохотных простых FeedForward сетках. На тех же Atari играх разрешение обычно снижают до 84х84 пикселя, с чем нормально справляются сети прямого распространения, в сверточных большой нужды нет. А сверточные иногда используют для преобразования картинки в короткий вектор признаков, который уже подается на FeedForward или LSTM, которые обучаются с помощью RL.


Про использование XGBoost мне неизвестно, но например в World Models (одна из первых сетей, активно использовавшая при обучении воображение — аналог наших снов) сверточная сеть преобразует картинку в вектор признаков, а сам контроллер (т.е. "мозг") обучался простым эволюционным алгоритмом CMA-ES.


В любом случае, использовать RL для короткого латентного вектора признаков — набирающая популярность тенденция в RL. Раз на больших размерностях оно не работает, хе-хе… Из новейших примеров это PlaNet от Google. Это Model-Based подход, но сетка учится не просто текущую картинку преобразовать в короткое латентное представление (вектор признаков, hidden state), а из него обратно в картинку для следующего шага. А еще учится из латентного вектора сразу предсказывать награду. И последующий выбор оптимальных действий делается чисто на основе латентных векторов, без прогнозирования картинок.


"Выбор оптимальных действий" это громко сказано. Это классический Model-Based подход, здесь нейросеть не учится предсказывать оптимальные действия. А учится только симулировать окружающую реальность на несколько шагов вперед. Включая какая будет награда. А "выбор действий" заключается в том, что внешне создают порядка 10000 случайных действий, и каждое из них прогоняют через нейросеть как через симулятор реальности. И смотрят в каком случае ожидается наибольшая награда. Поэтому там в ролике движения такие корявые, случайно все возможные варианты не переберешь.


image


На высоких размерностях и длинных последовательностях действий такой подход не работает. Биологический мозг, как и Model-Free подходы, сразу предлагает оптимальные действия. А в PlaNet вся оптимизация заключается в том, что меньше расчетов.

Ну, математики такой хэш точно не ищут, потому что классическая задача для хэша — это получить уникальный идентификатор. Поэтому даже очень похожие объекты должны иметь различающиеся хэши.

Но есть задача нахождения перцептивных хэшей — в этом случае наоборот, у похожих объектов должны быть одинаковые хэши. У похожих картинок должен быть одинаковый перцептивный хэш, если мы хотим сделать поиск по картинкам. Или у похожих гневных комментариев должен быть одинаковый хэш, если хотим найти все гневные комментарии на странице.

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

Мозг примерно так и работает. Другое дело, что пока никому не удалось создать такой эффективный механизм ассоциаций, который есть у биологического мозга. А эта идея хэшировать все подряд и чтобы ассоциации строились на общих частях хэшей, возникла чисто случайно. Как пример альтернативной реализации ИИ, у которой будут такие же черты, какие есть у биологического: снижение размерности (за счет хэширования), обобщение и ассоциации (за счет общих частей хэшей), память (если по хэшу можно будет восстановить точку в истории). Но я сильно сомневаюсь, что это сработает. Хотя идея красивая.
Добавлено: написал все таки отдельный пост по GPT-2 от OpenAI. Там же туториал как запустить ее в браузере через Google Colab: habr.com/ru/post/440564
Вообще, с классификаторами в генерации текстов в NLP все сложно и запутано… Какая-то предобработка текстов в любом случае нужна. Но она же оказывает влияние на результат.

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

При этом Алиса со стороны вполне себе разговорный бот, а благодаря таком подходу гарантированно не использует оскорбительных фраз. Кроме тех, что пропущены при сборке базы, хе-хе. Или получившимися таким из-за контекста, вроде знаменитой: «Выхода нет» — «Выход всегда есть. В окно»
Там не полные страницы использовались, а куски текстов, выбранные какой-то разработанной ими эвристикой. Изначально это было 45 млн ссылок, из которых удалили дубликаты, совпадающие тексты с википедией, чтобы избежать ее формализованного языка и так далее. В итоге осталось чистого текста на 40 Гб из примерно 8 млн интернет-страниц.

Как именно отбирались куски текста из страниц в работе толком не описано, но судя по использованию слов «Dragnet» и «Newspaper content extractors», они прогоняли текст со страниц через какие-то классификаторы новостей и разговорной речи. Из-за этого в генерируемом тексте так много цитат, а стиль напоминает новостные сайты. Но это только догадки…
Про OpenAI GPT-2? Уверен, что статья на хабре о ней появится в ближайшее время, если еще не появилась. Эта сетка сейчас на всех зарубежных новостных сайтах, а значит и перевод скоро будет. OpenAI подкинули хайпа, впервые отказавшись выкладывать в общий доступ предобученную полную модель (ту, что способна генерировать целые страницы связного текста с сохранением контекста, см. сайт OpenAI). Якобы, с ней будет слишком большой соблазн генерировать фейковые новости и отзывы в магазинах, неотличимые от настоящих.

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

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

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

Это может быть очень интересная профессия в будущем — получать ответы у ИИ, правильно формулируя вопросы для него. Супер-google, так сказать ).
Дело в том, что когда ИИ научится выдавать результат в разговорной форме, то есть сможет поддерживать диалог, отвечая на уточняющие вопросы по выданному им результату, то он сможет объяснить, как и почему он пришел к этому результату. По тем же естественным причинам, как это делают люди.

Вот пример: новейшая разработка от OpenAI Better Language Models and Their Implications обучена просто предсказывать следующее слово в предложении. Отличие этой нейросети от предыдущих в том, что это самая гигантская модель (1.5 млрд связей, сравните с предыдущей самой крутой BERT-Large c ее 340 млн, а так обычно в подобных языковых моделях используется ~100 млн параметров). И обученная на огромном корпусе 40 Gb отфильтрованного текста (например, брались страницы, у которых были звездочки на реддите, т.е. которые пользователи отметили как содержащие какую-то полезную информацию).

И удивительным образом, такая простая нейросеть смогла добиться state-of-the-art результатов сразу на нескольких задачах, вообще не дообучаясь под конкретные задачи! Просто путем правильного формулирования вопроса для нейросети.

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

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

Первое, что приходит на ум — некоторое противоречие. Сначала вы сказали, что сеть не умеет делать выбор из большого числа возможных вариантов, теперь — что умеет, но варианты задает разработчик.

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

В примере выше сеть не может сама сформулировать понятие «бежать», чтобы использовать его.

А вот нейросети из Reinforcement Learning как раз могут! Формулируют и используют. Но почему-то не масштабируются свыше размерности в единицы степеней свободы. А на такой низкой размерности и случайный поиск выдает такие же результаты за это время.

Т.е. классифицировать/опознать/найти место в модели.

Так опознать место в модели — это и есть система принятия решений. Алгоритм поиска. Подниматься вверх по дереву абстракций, если на текущем уровне нет решений это хорошая мысль. Все упирается в то, как создать такую модель и по какому алгоритму по ней подниматься/опускаться между уровнями абстракций.

Третье. Да почему же вы не хотите применить логику сверточных сетей к другим областям той же науки! ;)

Почему же не хочу? Это первое что я попробовал. И в RL это активно используется. Например, картинка с камеры с помощью сверточной сети преобразуется в вектор из 512 чисел (это последний слой сверточной сети, по сути снижение размерности до 512). А уже эти 512 чисел подаются на вход второй нейрости, обученной по Reinforcement Learning. Или вообще, каким-нибудь эволюционным алгоритмом, без всяких нейросетей. А выход с нее отправляется на третью систему — ПИД контроллер, которые уже управляет моторами. Все как вы описываете: здесь сверточная сеть — это зрительная кора, вторая RL нейросеть это неокортекс, выдающае общие команды, а ПИД контроллер (или моторная третья сеть) — двигательные мышцы.

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

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


Мозг как-то снижает эту размерность до всего нескольких лучших кандидатов.


Подозреваю, что небольшое число лучших кандидатов мозгу нужно для того, чтобы потом их тупо последовательно перебрать. Пропустить через Model-based реального мира. Что будет, если я сделаю вот так? А если вот так? А если так? И вот этих "если" всего несколько штук, для удобства их последовательного перебора (а точнее, видимо чтобы успеть их перебрать, пока тебя не съели).


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


Я так понимаю, вы хотели бы разработать такую модель мира, которая из своей структуры, из своих принципов, автоматически выдавала бы эти несколько лучших вариантов. Собственно, это и было бы разумом, тут вы абсолютно правы. Просто пока никто не знает как построить такую модель (ну а я ее разделяю на две части: саму модель мира, которая уже успешно строится нейросетями, и систему принятия решений на основе этой модели, которую неизвестно как сделать).

Это в обучении с подкреплением уже используется, такой вариант называется стохастическая политика (stochastic policy). Когда на выходе нейросети есть сразу несколько вариантов действий и для каждого указаны проценты, насколько нейросеть считает этот вариант удачным.


Но если использовать такую нейросеть как модель мира, то выбор все равно делает не нейросеть! Решение какой из предложенных сетью вариантов выбрать, приходится принимать разработчику. Например, можно всегда выбирать действие с максимальными процентами. Но чаще действия выбирают пропорционально их вероятности, т.к. они обычно уже нормированы по softmax. Например если для трех разных действий сеть выдает такие вероятности: 10%, 70%, 20%. Чем выше проценты, тем чаще выбираем это действие. Здесь второе будет выбрано в 70% случаев, третье в 20%, а первое лишь в 10% случаев.


Плюс стохастической политики в том, что она позволяет автоматически проводить исследование окружающей среды, так как иногда выбираются непопулярные действия. Но при этом остается довольно логичной — чем больше сеть уверена в правильном ответе, тем с большей вероятностью выберет его. А если нет предпочтительного варианта, например когда варианты: 33%, 33%, 33%, то будет выбрано случайное из них с равной вероятностью.


Проблема тут все та же — сеть (модель) не предлагает новые варианты! А всего лишь классифицирует известные. Это равносильно как задать сети столько вопросов, сколько выходов у сети. И для каждого вопроса сеть ответит, насколько конкретно этот вариант хорош. Как видите, сеть (модель мира) сама не принимает решений и не ищет новые решения, как это делает настоящий разум.


Вы можете подумать — вот есть у человека 700 мышц (а для виртуальной модели человека достаточно 17-25 "мышц", т.е. степеней свободы). Пусть нейросеть для каждой мышцы выдает такое вероятностное распределение сокращений. И это покроет все возможные действия человека. А значит будет включать оптимальное поведение, предсказанное и предлагаемое моделью мира.


Но нет, это так не работает. Это будет вероятностью для одного действия. Например, для действия "ходьба" в текущий момент времени нужно с вероятностью 70% сократить такую-то мышцу, и с вероятностью 45% сократить другую. Чтобы получить вероятности для разных действий, например чтобы сеть выдавала, что чтобы спастись от хищника нужно с 70% "бежать" и с 30% "идти", нужно эти действия как-то заранее выделить, кластеризовать. Чтобы можно было потом из них выбирать. Мозг это делает автоматически, потому что биология работы нейронов подобрана эволюционно. Но ни одна искусственная система (ни нейросети, ни любые другие) на данный момент не умеют выделять такие кластеры (понятия) из своего обычного повседневного жизненного опыта, сравнимого по сложности с жизненным опытом животного или человека.


P.S. Алгоритмы обучения с подкреплением (reinforcement learning) так устроены, что как раз кластеризуют и выдают эти новые действия, а не просто являются моделью мира. Они по-настоящему принимают решения и являются самым настоящим разумным ИИ. Только существующие алгоритмы RL работают на настолько удручающе низких размерностях (буквально единицы), что разглядеть там разумность очень сложно. За такое время расчета и на таких низких размерностях и случайный поиск выдает схожие результаты. Мне кажется, проблема в том, что все современные RL алгоритмы повторяют по сути одну и ту же архитектуру, которая похоже тупиковая. Нужен какой-то другой, кардинальный прорыв в архитектуре, как это произошло со сверточными сетями. Я попытался это описать в статье https://habr.com/ru/post/437020, но не знаю насколько понятно удалось выразить что хотел сказать (подозреваю, что не очень ;).

Не совсем. Она не даст ответ. Она вообще ответ не дает. Она просто есть. Она — строится. Просто сам по себе вопрос — это нестыковка в модели. Ее надо устранить.

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

Потому что существующие нейросети не универсальный инструмент, как многим представляется. А тонко настроенный на конкретные условия. К примеру, если вы пытаетесь распознавать котиков, но котик у вас попадается только на 1 из 20 картинок, то нейросеть никогда не обучится. Дисбаланс классов. Надо искусственно пересортировать картинки, чтобы коты и пустые картинки попадались примерно в равных пропорциях. И таких нюансов там сотни.

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

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

Другие, которые хорошо строят взаимосвязи между отдаленными во времени событиями (построенные на механизмах внимания, например), чисто по своей структуре из-за этого механизма внимания не могут принимать на вход длинные последовательности. Максимум пару сотен шагов истории. Чего для нормальной памяти мало. Это всего несколько секунд при 30 кадрах/сек.

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

Information

Rating
Does not participate
Registered
Activity