Экстраординарные утверждения требуют экстраординарных доказательств
Продолжаем разговор про RL-рекомендации, начавшийся тут.
Чтобы доказать, что RL-алгоритм выполняет поставленную задачу - максимизирует ту награду, которую мы задаём в процессе обучения, нужно проводить аккуратный ablation study.
Что я хочу в нём увидеть?
В RL есть параметр Gamma, отвечающий за горизонт планирования. Если он равен 1, то это значит, что мы максимизируем всю будущую награду, а если 0, то только ближайшую - это по сути как в Supervised learning. Обычно в обучении используют гамму, близкую к 1, но итоговый результат измеряют с помощью награды, просуммированной на всём промежутке (то есть как будто Gamma = 1).
Я хотел бы, чтобы авторы обучали и тестировали дополнительную версию своей модели с единственным изменением - с Gamma, равной 0. Это лучший способ доказать, что учитывание последующих наград действительно приносит пользу и использование RL имеет смысл.
Кроме того, важным бейзлайном может быть модель, которая учитывает долгосрочные награды, но только связанные только с совершённым действием напрямую. Например, мы берём порекомендованный товар и учитываем все его покупки в будущем, которые были совершены, в качестве таргета. Это проверяет предположение о том, что можно обойтись аккуратным расчётом таргета для классического рекомендательного алгоритма, а не мучиться с RL.
Я не помню, когда последний раз видел подобное аккуратное сравнение, если видел вообще. В подавляющем количестве работ RL-алгоритм сравнивается с алгоритмом, который отличается в 10 местах, и из этого сравнения невозможно сделать качественный вывод о том, что влияет на результат.
@knowledge_accumulator
Продолжаем разговор про RL-рекомендации, начавшийся тут.
Чтобы доказать, что RL-алгоритм выполняет поставленную задачу - максимизирует ту награду, которую мы задаём в процессе обучения, нужно проводить аккуратный ablation study.
Что я хочу в нём увидеть?
В RL есть параметр Gamma, отвечающий за горизонт планирования. Если он равен 1, то это значит, что мы максимизируем всю будущую награду, а если 0, то только ближайшую - это по сути как в Supervised learning. Обычно в обучении используют гамму, близкую к 1, но итоговый результат измеряют с помощью награды, просуммированной на всём промежутке (то есть как будто Gamma = 1).
Я хотел бы, чтобы авторы обучали и тестировали дополнительную версию своей модели с единственным изменением - с Gamma, равной 0. Это лучший способ доказать, что учитывание последующих наград действительно приносит пользу и использование RL имеет смысл.
Кроме того, важным бейзлайном может быть модель, которая учитывает долгосрочные награды, но только связанные только с совершённым действием напрямую. Например, мы берём порекомендованный товар и учитываем все его покупки в будущем, которые были совершены, в качестве таргета. Это проверяет предположение о том, что можно обойтись аккуратным расчётом таргета для классического рекомендательного алгоритма, а не мучиться с RL.
Я не помню, когда последний раз видел подобное аккуратное сравнение, если видел вообще. В подавляющем количестве работ RL-алгоритм сравнивается с алгоритмом, который отличается в 10 местах, и из этого сравнения невозможно сделать качественный вывод о том, что влияет на результат.
@knowledge_accumulator
👍24🔥4😁2🤔2
И какой же вывод про RL в рекомендациях?
Учитывая посты, начиная отсюда, можно сделать ряд следующих выводов:
1) Статей на эту тему выходит достаточно много
2) Большая часть этих статей применяет метод без понимания того, зачем это нужно, какую проблему мы решаем, и чем при этом жертвуем
3) Большая часть оставшихся не содержит никакого тестирования на живых пользователях
Чтобы понять проблему оставшихся статей, нужно копнуть глубже.
В чём смысл исследований? Прежде всего, в поиске истины и построении модели мира. Когда у вас есть гипотеза о том, как устроен мир, вы пытаетесь проверять её на прочность, проводя эксперименты. Вы пытаетесь, что называется, prove yourself wrong - найти наблюдение, противоречащее вашей гипотезе. И вы делаете это усиленно, до тех пор, пока гипотеза не станет очень хорошо протестированной.
Утверждение "RL в рекомендациях превосходит классические подходы в чём-либо" - это гипотеза, которая точно не может считаться хорошо протестированной, но подвергнуть её серьёзной проверке практически не пытаются в исследованиях на данную тему. Добросовестный исследователь будет проводить дополнительные проверки, чтобы показать, что именно добавление RL-составляющей в пайплайн и только оно приносит значительную пользу.
К сожалению, практически все оставшиеся статьи не являются исследованиями в чистом смысле. Технические отчёты - да. Рекламные технические блоги - да. Но эти тексты публикуют как научные, они проходят ревью на уважаемых конфах, и потом их массово цитируют. Что с этим делать? Могу сделать только один неутешительный вывод - на слово нельзя верить даже научным статьям.
@knowledge_accumulator
Учитывая посты, начиная отсюда, можно сделать ряд следующих выводов:
1) Статей на эту тему выходит достаточно много
2) Большая часть этих статей применяет метод без понимания того, зачем это нужно, какую проблему мы решаем, и чем при этом жертвуем
3) Большая часть оставшихся не содержит никакого тестирования на живых пользователях
Чтобы понять проблему оставшихся статей, нужно копнуть глубже.
В чём смысл исследований? Прежде всего, в поиске истины и построении модели мира. Когда у вас есть гипотеза о том, как устроен мир, вы пытаетесь проверять её на прочность, проводя эксперименты. Вы пытаетесь, что называется, prove yourself wrong - найти наблюдение, противоречащее вашей гипотезе. И вы делаете это усиленно, до тех пор, пока гипотеза не станет очень хорошо протестированной.
Утверждение "RL в рекомендациях превосходит классические подходы в чём-либо" - это гипотеза, которая точно не может считаться хорошо протестированной, но подвергнуть её серьёзной проверке практически не пытаются в исследованиях на данную тему. Добросовестный исследователь будет проводить дополнительные проверки, чтобы показать, что именно добавление RL-составляющей в пайплайн и только оно приносит значительную пользу.
К сожалению, практически все оставшиеся статьи не являются исследованиями в чистом смысле. Технические отчёты - да. Рекламные технические блоги - да. Но эти тексты публикуют как научные, они проходят ревью на уважаемых конфах, и потом их массово цитируют. Что с этим делать? Могу сделать только один неутешительный вывод - на слово нельзя верить даже научным статьям.
@knowledge_accumulator
👍15🔥2😢2
Альтернативная парадигма для умной обработки данных
Сегодня поговорим об энергетических моделях, как о способе извлекать зависимости из данных. Я уже упоминал ранее про ЖЕПУ, так вот, это оно.
По сути, энергия - это другое название ошибки, а сама энергетическая модель получает на вход всё - параметры, данные, ответы, и выдаёт величину того, насколько все входные объекты друг с другом не согласуются. Чем ниже энергия, или функция ошибки, тем больше они согласуются.
Такая интерпретация позволяет с помощью оптимизации находить ответ на какую-то задачу в процессе применения модели. Например, если у вас есть модель, которая выдаёт вам энергию пары (картинка, класс), вы можете оптимизировать картинку и таким образом сделать картинку, которая будет близка к оригиналу, но похожа на определённый класс.
Энергетические модели можно применять для "решения задач" - обучив энергетическую модель, получающую "вход", "выход" и "решение", можно оптимизировать это самое решение. В теории это было бы супермощно, но мы пока что не умеем хорошо такие модели учить.
В данной статье обучают энергетическую модель, которая получает на вход данные совместно с концептами. Там всё весьма сложно, но идея в том, что можно из неразмеченных последовательностей данных извлекать концепты, которые кодируют динамику последовательности, и потом переприменять эту динамику к другим данным. Здесь можно посмотреть её обзор.
Основная сложность с такими алгоритмами в том, что если его применение включает в себя процесс оптимизации, то его затруднительно учить end-to-end с помощью back-пропа. Но ничего, прорвёмся!
@knowledge_accumulator
Сегодня поговорим об энергетических моделях, как о способе извлекать зависимости из данных. Я уже упоминал ранее про ЖЕПУ, так вот, это оно.
По сути, энергия - это другое название ошибки, а сама энергетическая модель получает на вход всё - параметры, данные, ответы, и выдаёт величину того, насколько все входные объекты друг с другом не согласуются. Чем ниже энергия, или функция ошибки, тем больше они согласуются.
Такая интерпретация позволяет с помощью оптимизации находить ответ на какую-то задачу в процессе применения модели. Например, если у вас есть модель, которая выдаёт вам энергию пары (картинка, класс), вы можете оптимизировать картинку и таким образом сделать картинку, которая будет близка к оригиналу, но похожа на определённый класс.
Энергетические модели можно применять для "решения задач" - обучив энергетическую модель, получающую "вход", "выход" и "решение", можно оптимизировать это самое решение. В теории это было бы супермощно, но мы пока что не умеем хорошо такие модели учить.
В данной статье обучают энергетическую модель, которая получает на вход данные совместно с концептами. Там всё весьма сложно, но идея в том, что можно из неразмеченных последовательностей данных извлекать концепты, которые кодируют динамику последовательности, и потом переприменять эту динамику к другим данным. Здесь можно посмотреть её обзор.
Основная сложность с такими алгоритмами в том, что если его применение включает в себя процесс оптимизации, то его затруднительно учить end-to-end с помощью back-пропа. Но ничего, прорвёмся!
@knowledge_accumulator
👍7😁3
Почему AlphaDev не перевернул всё вверх дном?
Поговорим о недавно вышедшей от Deepmind статье, в которой обучали нейросеть для поиска более быстрого алгоритма сортировки. Я уже рассказывал про статьи AlphaZero и AlphaTensor, использующих в сущности тот же самый метод (советую изучить)
Особенности данного случая:
1) Пишем программу на ассемблере, генерируя команды по одной. Команды (действия) это элементарные операции сравнения, присваивания и т.д.
2) "Состоянием" в каждый момент является программа, сгенерированная на данный момент, и результат исполнения этой программы.
3) Наградой агента является штраф за длину программы (или время финального исполнения) и за неправильность итогового алгоритма, измеряемую тестами.
Какой результат?
Мы решаем по отдельности задачи создания алгоритма для сортировки массивов фиксированной длины. Начиная с длины 3 и заканчивая 8, выигрыш AlphaDev у человека составил 1, 0, 4, 3, 2, 1 операций. Интуитивно, а также по опыту AlphaTensor, кажется, что при увеличении размера входа нейросеть должна наращивать преимущество по сравнению с человеком, т.к. человеку гораздо сложнее работать с большим количеством объектов.
Почему здесь не так круто? Напишу свои гипотезы, буду рад почитать ваши мысли:
1) Нейросети с их многоразмерными неинтерпретируемыми представлениями не так хорошо дружат с дискретными командами в программировании. Это в принципе усложняет поиск.
2) Нам нужно сгенерировать более длинную последовательность команд, которая должна быть согласована между собой и порождать строгий алгоритм. Это мешает на больших входах.
3) Человек в принципе достаточно силён в программировании по сравнению с матричными перемножениями, поскольку это более близкая к человеческому мышлению вещь. Поэтому на маленьких входах мы уже смогли создать близкий к оптимальному алгоритм.
@knowledge_accumulator
Поговорим о недавно вышедшей от Deepmind статье, в которой обучали нейросеть для поиска более быстрого алгоритма сортировки. Я уже рассказывал про статьи AlphaZero и AlphaTensor, использующих в сущности тот же самый метод (советую изучить)
Особенности данного случая:
1) Пишем программу на ассемблере, генерируя команды по одной. Команды (действия) это элементарные операции сравнения, присваивания и т.д.
2) "Состоянием" в каждый момент является программа, сгенерированная на данный момент, и результат исполнения этой программы.
3) Наградой агента является штраф за длину программы (или время финального исполнения) и за неправильность итогового алгоритма, измеряемую тестами.
Какой результат?
Мы решаем по отдельности задачи создания алгоритма для сортировки массивов фиксированной длины. Начиная с длины 3 и заканчивая 8, выигрыш AlphaDev у человека составил 1, 0, 4, 3, 2, 1 операций. Интуитивно, а также по опыту AlphaTensor, кажется, что при увеличении размера входа нейросеть должна наращивать преимущество по сравнению с человеком, т.к. человеку гораздо сложнее работать с большим количеством объектов.
Почему здесь не так круто? Напишу свои гипотезы, буду рад почитать ваши мысли:
1) Нейросети с их многоразмерными неинтерпретируемыми представлениями не так хорошо дружат с дискретными командами в программировании. Это в принципе усложняет поиск.
2) Нам нужно сгенерировать более длинную последовательность команд, которая должна быть согласована между собой и порождать строгий алгоритм. Это мешает на больших входах.
3) Человек в принципе достаточно силён в программировании по сравнению с матричными перемножениями, поскольку это более близкая к человеческому мышлению вещь. Поэтому на маленьких входах мы уже смогли создать близкий к оптимальному алгоритм.
@knowledge_accumulator
👍12👏1
Если вы зашли на мой канал и такие - "чёрт, я понимаю только мэмы и новости про ChatGPT, а эти статьи слишком сложные", то у вас есть возможность исправить эту ситуацию.
Техножрица недавно упаковала в презентации гайд по изучению этого вашего ИИ. Я обожаю самообразование и считаю, что это лучший способ изучить что либо.
В интернете полно бесплатных обучающих материалов, достаточно только, чтобы нашёлся добрый человек, который объяснит, куда смотреть.
Часть 1
Часть 2
Обязательно подписывайтесь на её канал! Но будьте осторожны, т.к. иногда там вас будут пытаться завлекать в топологию
Техножрица недавно упаковала в презентации гайд по изучению этого вашего ИИ. Я обожаю самообразование и считаю, что это лучший способ изучить что либо.
В интернете полно бесплатных обучающих материалов, достаточно только, чтобы нашёлся добрый человек, который объяснит, куда смотреть.
Часть 1
Часть 2
Обязательно подписывайтесь на её канал! Но будьте осторожны, т.к. иногда там вас будут пытаться завлекать в топологию
Telegram
Техножрица 👩💻👩🏫👩🔧
Люблю высокие технологии и кушать.
Добро пожаловать, если в сферу твоих интересов тоже входят математика, DL, NLP, программирование на Python, или тебе просто любопытно, о чем на досуге размышляют люди, занимающиеся разработкой и исследованиями в ML.
Добро пожаловать, если в сферу твоих интересов тоже входят математика, DL, NLP, программирование на Python, или тебе просто любопытно, о чем на досуге размышляют люди, занимающиеся разработкой и исследованиями в ML.
🔥11👍3
А что на противоположном фланге в синтезе программ?
Помимо AlphaDev, в которой ключевой компонентой является нейросеть, оптимизирующая поиск, существуют и принципиально другие направления исследований.
Я уже рассказывал ранее про DreamCoder - статья 2020 года о подходе, который заключается в том, что мы пытаемся постоянно решать рандомные задачи из большого класса задач, и потом на основе готовых решений синтезируем новые элементарные операции (абстракции), которые затем уже переиспользуются в переборе. Это открывает возможность в принципе синтезировать длинные программы.
Данное направление не стоит на месте, и в начале этого года вышла статья Top-Down Synthesis for Library Learning. Алгоритм из неё работает быстрее, чем DreamCoder, на несколько порядков. Основное нововведение состоит в альтернативном подходе к тому, как, имея датасет готовых программ, синтезировать новые операции?
DreamCoder использовал подход, близкий к полному перебору всевозможных абстракций. Авторы нового алгоритма Stitch формулируют задачу как поиск абстракций по дереву всевозможных вариантов. При поиске максимизируется "полезность" абстракции, измеряемая тем, насколько сократится длина всего датасета программ при её использовании. В перебор добавляют оптимизации из области методов решения NP-задач (например, Branch-and-bound). Этого хватает, чтобы совершить прорыв в скорости построения новых абстракций, к тому же более высокого качества.
Думаю, что это подтверждает, что весьма эффективным способом прогресса является правильная идентификация бутылочного горлышка системы, и анализ попыток решать похожие проблемы в других сферах.
Stitch способен решать куда более сложные задачи, чем DreamCoder, но мы всё ещё далеки от уровня человека. Однако, постановка решаемой задачи очень напоминает сферу доказательств теорем в математике. Ждём, когда это всё смогут масштабировать! А я буду держать вас в курсе.
@knowledge_accumulator
Помимо AlphaDev, в которой ключевой компонентой является нейросеть, оптимизирующая поиск, существуют и принципиально другие направления исследований.
Я уже рассказывал ранее про DreamCoder - статья 2020 года о подходе, который заключается в том, что мы пытаемся постоянно решать рандомные задачи из большого класса задач, и потом на основе готовых решений синтезируем новые элементарные операции (абстракции), которые затем уже переиспользуются в переборе. Это открывает возможность в принципе синтезировать длинные программы.
Данное направление не стоит на месте, и в начале этого года вышла статья Top-Down Synthesis for Library Learning. Алгоритм из неё работает быстрее, чем DreamCoder, на несколько порядков. Основное нововведение состоит в альтернативном подходе к тому, как, имея датасет готовых программ, синтезировать новые операции?
DreamCoder использовал подход, близкий к полному перебору всевозможных абстракций. Авторы нового алгоритма Stitch формулируют задачу как поиск абстракций по дереву всевозможных вариантов. При поиске максимизируется "полезность" абстракции, измеряемая тем, насколько сократится длина всего датасета программ при её использовании. В перебор добавляют оптимизации из области методов решения NP-задач (например, Branch-and-bound). Этого хватает, чтобы совершить прорыв в скорости построения новых абстракций, к тому же более высокого качества.
Думаю, что это подтверждает, что весьма эффективным способом прогресса является правильная идентификация бутылочного горлышка системы, и анализ попыток решать похожие проблемы в других сферах.
Stitch способен решать куда более сложные задачи, чем DreamCoder, но мы всё ещё далеки от уровня человека. Однако, постановка решаемой задачи очень напоминает сферу доказательств теорем в математике. Ждём, когда это всё смогут масштабировать! А я буду держать вас в курсе.
@knowledge_accumulator
👍13❤🔥2🤯2👏1
Cooperation is all you need [2023] - перспективный конкурент трансформера или трата времени?
Биология - это источник вдохновения для инженерных разработок. Почему так? Спроектировать систему - это задача на перебор, как, например, доказательство теорем, а биология - это справочник готовых систем. Но эволюция оптимизирует только результат, а не понятность и прочие характеристики качества. Поэтому мы ещё долго будем пытаться понять, как работает мозг. Хотя, возможно, смысла в этом не сильно больше, чем разбираться в том, как работает конкретная обученная нейросеть.
Так, о чём это я? Группа исследователей вдохновилась недавними открытиями в нейронауках и придумала ещё один аналог трансформера. Судя по графикам, работает гораздо лучше при том же кол-ве параметров при обучении на паре RL-задач, авторы цитируют свои же статьи с другими примерами превосходства.
В статье их модель Cooperator противопоставляется трансформеру в том, что, якобы, нейроны в их модели обращают внимание на контекст (другие входы), а не только на свои, чтобы решить, насколько сильно пропускать сигнал через себя. А в трансформере, вроде как, все сигналы обрабатываются в куче и никак не регуляризуется несогласованность выходов между собой.
На мой взгляд, это несправедливое утверждение, т.к. всего лишь вопрос того, как интерпретировать логику вычислений в модели. Обе модели учитывают контекст, но в Cooperator вместо attention используется контекстный "модулятор", который сначала считается от всех остальных нейронов, а потом уже влияет на выход данного нейрона.
Суммируя, я не согласен с претензией на концептуально новый подход к обработке информации, но если такая репараметризация позволяет без потери в производительности использовать сильно меньше параметров, то я, конечно, за.
@knowledge_accumulator
Биология - это источник вдохновения для инженерных разработок. Почему так? Спроектировать систему - это задача на перебор, как, например, доказательство теорем, а биология - это справочник готовых систем. Но эволюция оптимизирует только результат, а не понятность и прочие характеристики качества. Поэтому мы ещё долго будем пытаться понять, как работает мозг. Хотя, возможно, смысла в этом не сильно больше, чем разбираться в том, как работает конкретная обученная нейросеть.
Так, о чём это я? Группа исследователей вдохновилась недавними открытиями в нейронауках и придумала ещё один аналог трансформера. Судя по графикам, работает гораздо лучше при том же кол-ве параметров при обучении на паре RL-задач, авторы цитируют свои же статьи с другими примерами превосходства.
В статье их модель Cooperator противопоставляется трансформеру в том, что, якобы, нейроны в их модели обращают внимание на контекст (другие входы), а не только на свои, чтобы решить, насколько сильно пропускать сигнал через себя. А в трансформере, вроде как, все сигналы обрабатываются в куче и никак не регуляризуется несогласованность выходов между собой.
На мой взгляд, это несправедливое утверждение, т.к. всего лишь вопрос того, как интерпретировать логику вычислений в модели. Обе модели учитывают контекст, но в Cooperator вместо attention используется контекстный "модулятор", который сначала считается от всех остальных нейронов, а потом уже влияет на выход данного нейрона.
Суммируя, я не согласен с претензией на концептуально новый подход к обработке информации, но если такая репараметризация позволяет без потери в производительности использовать сильно меньше параметров, то я, конечно, за.
@knowledge_accumulator
👍14🔥4
Forwarded from Борис опять
# Корреляции, эффекты, интерпретации
Скотт Александр выложил отличный пост про такие инопланетные вещи как effect size и корреляция.
Да, у меня привычка репостить все, что он постит. Но контент слишком хорош, ничего не поделаешь.
Итак, попробуйте проверить свою интуицию. Сначала ответье на три вопроса для себя, потом вскрывайте спойлеры, т.к. телеграм откроет все спойлеры сразу.
Что коррелирует между собой больше?
1. IQ с оценками
2. Рост с весом
Ответ:IQ с оценками.
Снова: где больше корреляция?
1. GPA (средний балл) vs SAT (американский ЕГЭ)
2. Рост с весом
Ответ:рост с весом немного сильнее.
У чего больше статистический эффект?
1. Мужчины выше (ростом), чем женщины
2. Дети обучаемые индивидуально изучают больше, чем обучаемые в группе
Ответ:эффект индивидуального обучения сильнее.
Если исследование обнаружило, что женщины эмпатичнее мужчин с effect size 0.9, это много или мало?
Верного и абсолютного ответа нет. Было бы клево, если бы наука такая выдавала ответ: "да, женщины эмпатичнее" или "нет, все это фигня". Но в реальном мире наука выдает вместо ответа эксель табличку и делай с ней что хочешь.
Для интерпретации можно сравнить. Например, этот эффект более чем вдвое сильнее, чем у антидепрессантов в борьбе с депрессией, или у ибупрофена в борьбе с болью от артрита. Или этот эффект почти такой же, как у влияния курения на рак легких. Или он вдвое меньше, чем эффект того, что мужчины выше ростом, чем женщины.
С корреляциями все ещё хуже, потому что они обманчиво интуитивны. Любой дурак знает, что чем ближе к 1, тем сильнее связь. Так что корреляция в 0.22 может показаться не очень большой. Однако именно такая корреляция у социального класса родителей со школьными оценками их детей.
Интерпретация результатов это своего рода искусство. Скотт составил табличку примеров статистических эффектов и корреляций, к которой можно обращаться для сравнения.
Далее тсылаю к оригинальному посту:
https://astralcodexten.substack.com/p/attempts-to-put-statistics-in-context
Скотт Александр выложил отличный пост про такие инопланетные вещи как effect size и корреляция.
Да, у меня привычка репостить все, что он постит. Но контент слишком хорош, ничего не поделаешь.
Итак, попробуйте проверить свою интуицию. Сначала ответье на три вопроса для себя, потом вскрывайте спойлеры, т.к. телеграм откроет все спойлеры сразу.
Что коррелирует между собой больше?
1. IQ с оценками
2. Рост с весом
Ответ:
Снова: где больше корреляция?
1. GPA (средний балл) vs SAT (американский ЕГЭ)
2. Рост с весом
Ответ:
У чего больше статистический эффект?
1. Мужчины выше (ростом), чем женщины
2. Дети обучаемые индивидуально изучают больше, чем обучаемые в группе
Ответ:
Если исследование обнаружило, что женщины эмпатичнее мужчин с effect size 0.9, это много или мало?
Верного и абсолютного ответа нет. Было бы клево, если бы наука такая выдавала ответ: "да, женщины эмпатичнее" или "нет, все это фигня". Но в реальном мире наука выдает вместо ответа эксель табличку и делай с ней что хочешь.
Для интерпретации можно сравнить. Например, этот эффект более чем вдвое сильнее, чем у антидепрессантов в борьбе с депрессией, или у ибупрофена в борьбе с болью от артрита. Или этот эффект почти такой же, как у влияния курения на рак легких. Или он вдвое меньше, чем эффект того, что мужчины выше ростом, чем женщины.
С корреляциями все ещё хуже, потому что они обманчиво интуитивны. Любой дурак знает, что чем ближе к 1, тем сильнее связь. Так что корреляция в 0.22 может показаться не очень большой. Однако именно такая корреляция у социального класса родителей со школьными оценками их детей.
Интерпретация результатов это своего рода искусство. Скотт составил табличку примеров статистических эффектов и корреляций, к которой можно обращаться для сравнения.
Далее тсылаю к оригинальному посту:
https://astralcodexten.substack.com/p/attempts-to-put-statistics-in-context
Astral Codex Ten
Attempts To Put Statistics In Context, Put Into Context
...
👍13🤔3
Новая жизнь испанского кота [2023]
Сегодня мы поговорим о статье от Deepmind про алгоритм RoboCat - потомок алгоритма Gato (исп. кот), про него я уже говорил ранее. Система Robocat учится решать большое количество разных задач, связанных с манипуляциями объектами.
Как и в Gato, мы всё ещё тренируем трансформер на последовательностях токенов. В них содержатся токены действий, токены-эмбеддинги показателей датчиков, токенизированная картинка, которую видит робот, а также токенизированная "картинка-цель", задающая цель задачи.
Способ обучения - всё ещё просто предсказание следующего токена действия по всем предыдущим токенам. В этот раз ещё добавляется предсказание нескольких следующих токенов изображений, которые будет видеть робот.
Ключевое отличие работы от предка - теперь датасет для претрейна формируется в том числе с помощью самой модели итеративно:
1) Сначала мы претрейним модель на большом датасете с траекториями, как и Gato
2) На каких-нибудь новых задачах собираем датасет с "экспертными" траекториями
3) Файнтюним на нём модель, опять же, предсказывая токены
4) Итоговой моделью генерируем ещё больше траекторий на этой новой задаче
5) Все эти траектории добавляем в датасет для претрейна
В итоге мы получаем новый претрейн, на котором можно повторить весь процесс, в том числе заново обучить картиночный токенизатор.
Крайне сложно сделать вывод о влиянии тех или иных изменений на итоговый результат, потому что изменений в деталях слишком много. Научной пользы из этой статьи можно извлечь не очень много, но сам результат, как инженерный и "продуктовый", достаточно интересный.
@knowledge_accumulator
Сегодня мы поговорим о статье от Deepmind про алгоритм RoboCat - потомок алгоритма Gato (исп. кот), про него я уже говорил ранее. Система Robocat учится решать большое количество разных задач, связанных с манипуляциями объектами.
Как и в Gato, мы всё ещё тренируем трансформер на последовательностях токенов. В них содержатся токены действий, токены-эмбеддинги показателей датчиков, токенизированная картинка, которую видит робот, а также токенизированная "картинка-цель", задающая цель задачи.
Способ обучения - всё ещё просто предсказание следующего токена действия по всем предыдущим токенам. В этот раз ещё добавляется предсказание нескольких следующих токенов изображений, которые будет видеть робот.
Ключевое отличие работы от предка - теперь датасет для претрейна формируется в том числе с помощью самой модели итеративно:
1) Сначала мы претрейним модель на большом датасете с траекториями, как и Gato
2) На каких-нибудь новых задачах собираем датасет с "экспертными" траекториями
3) Файнтюним на нём модель, опять же, предсказывая токены
4) Итоговой моделью генерируем ещё больше траекторий на этой новой задаче
5) Все эти траектории добавляем в датасет для претрейна
В итоге мы получаем новый претрейн, на котором можно повторить весь процесс, в том числе заново обучить картиночный токенизатор.
Крайне сложно сделать вывод о влиянии тех или иных изменений на итоговый результат, потому что изменений в деталях слишком много. Научной пользы из этой статьи можно извлечь не очень много, но сам результат, как инженерный и "продуктовый", достаточно интересный.
@knowledge_accumulator
👍12
Что, если "сильный" интеллект в принципе нельзя спроектировать?
Создать интеллект в принципе возможно, и мы сами являемся доказательством этого. И вот уже десятки лет инженеры шаг за шагом развиваются в проектировании интеллектуальных систем. Они способны решать всё более впечатляющие задачи в заданных рамках, но мы так и не смогли получить систему, обобщающую и переиспользующую знания так же круто, как мы.
Мы давно отошли от идеи "экспертных систем", т.е. записывания знаний о мире вручную, так как поняли, что их слишком много, как и подводных камней. Теперь мы обучаем модели с помощью машинного обучения, имея только данные, создавая "программы", решающие, например, задачу классификации, не записывая правило вручную.
Но что, если это тоже тупиковый путь в вопросе создания более общего интеллекта? Что, если для нашего мозга спроектировать интеллект нашего уровня - либо невозможная, либо слишком объёмная задача? У нас нет оснований быть уверенным ни в этом, ни в обратном. Одно мы знаем точно - наш интеллект является именно продуктом оптимизации. Может быть, нам надо создать интеллект с помощью оптимизации?
Очевидные возражения здесь связаны с тем, что эволюции потребовались на это миллиарды лет, и пересимулировать данный процесс это слишком затратная задача. Но у меня есть основания для оптимизма:
1) Нам не нужно симулировать всё. Мало того, что жизнь не пыталась найти именно интеллект, она в основном была занята адаптацией жизни к постоянно меняющимся ограничениям физического мира, к его законам, и многими другими вещами, которые нам точно можно не эмулировать.
2) Эволюция нашла сам интеллект очень быстро. Он появился за время порядка сотни тысяч лет, т.е. за десятки тысяч итераций. Это значит, что, скорее всего, наш интеллект это результат небольшой пересборки системы из уже готовых механизмов, которые нужны для гораздо более простых задач.
То есть, всё, что нужно - это
1) Грамотная параметризация системы. Она может в корне отличаться от того, что обычно в ML, например, похожа на человеческую - т.е. кодировать параметрами поведение одного кусочка системы и то, как она строится с нуля.
2) Грамотный "план" обучения - то есть последовательный список усложняющихся задач, который позволит сначала "найти" общий функционал млекопитающих, потом всё умнее, умнее, и так до нас.
Вам интересна эта тема? Ставьте 👾, если экспериментируете с опасными ИИ-технологиями у себя в гараже, и вам нужны идеи для проверки.
@knowledge_accumulator
Создать интеллект в принципе возможно, и мы сами являемся доказательством этого. И вот уже десятки лет инженеры шаг за шагом развиваются в проектировании интеллектуальных систем. Они способны решать всё более впечатляющие задачи в заданных рамках, но мы так и не смогли получить систему, обобщающую и переиспользующую знания так же круто, как мы.
Мы давно отошли от идеи "экспертных систем", т.е. записывания знаний о мире вручную, так как поняли, что их слишком много, как и подводных камней. Теперь мы обучаем модели с помощью машинного обучения, имея только данные, создавая "программы", решающие, например, задачу классификации, не записывая правило вручную.
Но что, если это тоже тупиковый путь в вопросе создания более общего интеллекта? Что, если для нашего мозга спроектировать интеллект нашего уровня - либо невозможная, либо слишком объёмная задача? У нас нет оснований быть уверенным ни в этом, ни в обратном. Одно мы знаем точно - наш интеллект является именно продуктом оптимизации. Может быть, нам надо создать интеллект с помощью оптимизации?
Очевидные возражения здесь связаны с тем, что эволюции потребовались на это миллиарды лет, и пересимулировать данный процесс это слишком затратная задача. Но у меня есть основания для оптимизма:
1) Нам не нужно симулировать всё. Мало того, что жизнь не пыталась найти именно интеллект, она в основном была занята адаптацией жизни к постоянно меняющимся ограничениям физического мира, к его законам, и многими другими вещами, которые нам точно можно не эмулировать.
2) Эволюция нашла сам интеллект очень быстро. Он появился за время порядка сотни тысяч лет, т.е. за десятки тысяч итераций. Это значит, что, скорее всего, наш интеллект это результат небольшой пересборки системы из уже готовых механизмов, которые нужны для гораздо более простых задач.
То есть, всё, что нужно - это
1) Грамотная параметризация системы. Она может в корне отличаться от того, что обычно в ML, например, похожа на человеческую - т.е. кодировать параметрами поведение одного кусочка системы и то, как она строится с нуля.
2) Грамотный "план" обучения - то есть последовательный список усложняющихся задач, который позволит сначала "найти" общий функционал млекопитающих, потом всё умнее, умнее, и так до нас.
Вам интересна эта тема? Ставьте 👾, если экспериментируете с опасными ИИ-технологиями у себя в гараже, и вам нужны идеи для проверки.
@knowledge_accumulator
👾55👍9❤🔥2🔥2👏1🤓1
Tree of Thoughts [2023] - заставляем GPT исследовать чертоги своего разума
Поговорим о разных видах взаимодействия с LLM.
1) Базовый - составляем запрос с задачей в модель, получаем ответ на выходе
2) Chain of Thoughts - просим модель описывать пошагово ход решения задачи и рассуждения, и в конце ответ.
3) Iterative refinement - В течение нескольких запросов, просим модель критиковать и улучшать решение.
4) В случае, если нам нужен ответ на задачу, в которой применимо ансамблирование ответов, можно запускать предыдущие методы несколько раз и потом комбинировать их ответы в один финальный
В статье авторы изобретают ещё более хитрый способ заставить модель анализировать. Мы генерируем дерево мыслей. Корень - это изначальная задача, а дети любой вершины - это добавление к рассуждению какой-то мысли. Данное дерево можно растить, посылая в LLM запрос вида "придумай следующий шаг к решению", и подавая текущее состояние на вход.
Как оценивать качество вершины? Используем саму же LLM, веря, что модель с оценкой мыслей справляется лучше, чем с их генерацией. Таким образом, мы можем каким-нибудь алгоритмом обхода дерева с эвристиками искать в нём решение, в котором шаги решения будут высоко оценены моделью. Я думаю, что детали тут слишком быстро устареют и конкретный алгоритм нам не важен.
Что по результатам? Они не радикально выше, но, видимо, схема помогает решать некоторые задачи, в которых такое "поисковое мышление" уместно. Например, большой буст наблюдается в решении мини-кроссвордов, т.е. заполнении буквами сетку 5 на 5 согласно вопросам. Классический способ решения подразумевает как раз поиск по дереву, так что прирост от подхода ожидаем.
Возможно, что со временем мы придём к какой-то black-box абстракции над LLM, где схема промптинга станет частью скрытой от пользователя реализации, и подобные алгоритмы конструирования ответа станут весьма сложными. А вы как думали, сверхсильный-ИИ-GPT возьмёт и расскажет всё просто так?
Получасовой обзор статьи
@knowledge_accumulator
Поговорим о разных видах взаимодействия с LLM.
1) Базовый - составляем запрос с задачей в модель, получаем ответ на выходе
2) Chain of Thoughts - просим модель описывать пошагово ход решения задачи и рассуждения, и в конце ответ.
3) Iterative refinement - В течение нескольких запросов, просим модель критиковать и улучшать решение.
4) В случае, если нам нужен ответ на задачу, в которой применимо ансамблирование ответов, можно запускать предыдущие методы несколько раз и потом комбинировать их ответы в один финальный
В статье авторы изобретают ещё более хитрый способ заставить модель анализировать. Мы генерируем дерево мыслей. Корень - это изначальная задача, а дети любой вершины - это добавление к рассуждению какой-то мысли. Данное дерево можно растить, посылая в LLM запрос вида "придумай следующий шаг к решению", и подавая текущее состояние на вход.
Как оценивать качество вершины? Используем саму же LLM, веря, что модель с оценкой мыслей справляется лучше, чем с их генерацией. Таким образом, мы можем каким-нибудь алгоритмом обхода дерева с эвристиками искать в нём решение, в котором шаги решения будут высоко оценены моделью. Я думаю, что детали тут слишком быстро устареют и конкретный алгоритм нам не важен.
Что по результатам? Они не радикально выше, но, видимо, схема помогает решать некоторые задачи, в которых такое "поисковое мышление" уместно. Например, большой буст наблюдается в решении мини-кроссвордов, т.е. заполнении буквами сетку 5 на 5 согласно вопросам. Классический способ решения подразумевает как раз поиск по дереву, так что прирост от подхода ожидаем.
Возможно, что со временем мы придём к какой-то black-box абстракции над LLM, где схема промптинга станет частью скрытой от пользователя реализации, и подобные алгоритмы конструирования ответа станут весьма сложными. А вы как думали, сверхсильный-ИИ-GPT возьмёт и расскажет всё просто так?
Получасовой обзор статьи
@knowledge_accumulator
👍8🔥6
RL в квадрате [2016] - учим RL-алгоритм с помощью RL-алгоритма
Я в последнее время часто думаю о том, о чём говорил в посте выше - как нам обучить, а не спроектировать, алгоритм, который быстро обучается? Ближе всего из разделов ML к этому вопросу находится Meta Learning, и сегодня я бы хотел рассказать про одну из известных статей в этой области.
Чего мы хотим добиться? Мы хотим получить систему, которая быстро аккумулирует опыт и начинает круто работать на новой задаче. В отличие от этого, в классическом RL нас просто волнует производительность в конкретной среде.
Как ни странно, на самом деле между этими постановками достаточно маленькая разница.
1) При обучении мета-алгоритма у нас есть некое семейство задач, из которого мы сэмплируем при обучении. При этом, на самом деле, это семейство можно воспринимать как одну задачу, но со случайной скрытой различающейся динамикой.
2) Для того, чтобы перейти от производительности к обучаемости, нам надо всего лишь стереть грани между эпизодами. В этом случае мы будем учиться оптимизировать не только награду в течение текущего эпизода, но и в будущих эпизодах, то есть мы учимся в том числе и исследовать среду ради выгоды в следующих попытках. А в качестве входа алгоритм будет обрабатывать не только историю траектории в текущей попытке, но и весь полученный в прошлом опыт. Новые границы "эпизодов" теперь будут лежать между разными задачами.
В итоге весь подход статьи сводится к одному изменению поверх обычного RL - к стиранию границ между эпизодами. Эта абсурдная простота лично мне давит на мозг. Это заставляет задуматься - что такое на самом деле обучаемость? Как нам добиться именно адаптируемости к новому, а не учиться делать вообще всё одной моделью? Как именно человеческий мозг пришёл к этому? У меня есть всего лишь догадки, но про них как-нибудь в другой раз...
@knowledge_accumulator
Я в последнее время часто думаю о том, о чём говорил в посте выше - как нам обучить, а не спроектировать, алгоритм, который быстро обучается? Ближе всего из разделов ML к этому вопросу находится Meta Learning, и сегодня я бы хотел рассказать про одну из известных статей в этой области.
Чего мы хотим добиться? Мы хотим получить систему, которая быстро аккумулирует опыт и начинает круто работать на новой задаче. В отличие от этого, в классическом RL нас просто волнует производительность в конкретной среде.
Как ни странно, на самом деле между этими постановками достаточно маленькая разница.
1) При обучении мета-алгоритма у нас есть некое семейство задач, из которого мы сэмплируем при обучении. При этом, на самом деле, это семейство можно воспринимать как одну задачу, но со случайной скрытой различающейся динамикой.
2) Для того, чтобы перейти от производительности к обучаемости, нам надо всего лишь стереть грани между эпизодами. В этом случае мы будем учиться оптимизировать не только награду в течение текущего эпизода, но и в будущих эпизодах, то есть мы учимся в том числе и исследовать среду ради выгоды в следующих попытках. А в качестве входа алгоритм будет обрабатывать не только историю траектории в текущей попытке, но и весь полученный в прошлом опыт. Новые границы "эпизодов" теперь будут лежать между разными задачами.
В итоге весь подход статьи сводится к одному изменению поверх обычного RL - к стиранию границ между эпизодами. Эта абсурдная простота лично мне давит на мозг. Это заставляет задуматься - что такое на самом деле обучаемость? Как нам добиться именно адаптируемости к новому, а не учиться делать вообще всё одной моделью? Как именно человеческий мозг пришёл к этому? У меня есть всего лишь догадки, но про них как-нибудь в другой раз...
@knowledge_accumulator
👍18🤔7❤🔥2
Adaptive Agent (AdA) [2023] - текущий флагман Meta-RL
Сегодня расскажу вам о работе от Deepmind, применяющий описанную выше логику в современном масштабе.
1) В качестве задачи используется Xland 2.0 - это семейство из 10^40 задач. Это случайно генерируемые 3D-"площадки" со каким-то набором объектов, которые можно перемещать по площадке. Агент - это "существо" на площадке с видом от первого лица, которое может физически с объектами взаимодействовать. Объекты так же могут взаимодействовать в другими объектами согласно каким-то правилам (например, объект №1 и №4 при касании друг с другом исчезают / превращаются в объект №5). Агенту назначается награда за какое-то событие в этой среде (например, агент держит в руках объект №2).
2) В качестве модели используется полумиллиардный трансформер, который принимает на вход последние N событий из своей истории - вид от первого лица, награды и другую информацию. Как я уже говорил в прошлом посте, в постановке мета-обучения границы между эпизодами в одной задаче стёрты. Обучение занимает десятки миллиардов шагов.
3) Одним из ключей к успеху является Auto-curriculum learning. Мы регулярно сэмплируем пачку новых задач для обучения, но не учимся на всех подряд. Мы выбираем те задачи, которые для нас оптимальные по сложности - не слишком простые и не слишком сложные.
В результате у системы получается значительно обходить человека на Xland-задачах. При этом на графиках видно, что система умеет именно адаптироваться к новым задачам - производительность значительно растёт с каждой попыткой, и где-то на 10 попытке доходит до плато.
На мой взгляд, это очень интересное направление исследований. Однако, стоит заметить, что эти Xland-задачи не требуют интеллектуального поведения агентов, а ресурсов для обучения уже требуется столько, сколько в принципе сейчас способно на такое выделить человечество. Так что дальнейшее масштабирование втупую вряд ли даст нам огромное плоды. Будет очень интересно следить за дальнейшим развитием.
Видеообзор на полчаса.
@knowledge_accumulator
Сегодня расскажу вам о работе от Deepmind, применяющий описанную выше логику в современном масштабе.
1) В качестве задачи используется Xland 2.0 - это семейство из 10^40 задач. Это случайно генерируемые 3D-"площадки" со каким-то набором объектов, которые можно перемещать по площадке. Агент - это "существо" на площадке с видом от первого лица, которое может физически с объектами взаимодействовать. Объекты так же могут взаимодействовать в другими объектами согласно каким-то правилам (например, объект №1 и №4 при касании друг с другом исчезают / превращаются в объект №5). Агенту назначается награда за какое-то событие в этой среде (например, агент держит в руках объект №2).
2) В качестве модели используется полумиллиардный трансформер, который принимает на вход последние N событий из своей истории - вид от первого лица, награды и другую информацию. Как я уже говорил в прошлом посте, в постановке мета-обучения границы между эпизодами в одной задаче стёрты. Обучение занимает десятки миллиардов шагов.
3) Одним из ключей к успеху является Auto-curriculum learning. Мы регулярно сэмплируем пачку новых задач для обучения, но не учимся на всех подряд. Мы выбираем те задачи, которые для нас оптимальные по сложности - не слишком простые и не слишком сложные.
В результате у системы получается значительно обходить человека на Xland-задачах. При этом на графиках видно, что система умеет именно адаптироваться к новым задачам - производительность значительно растёт с каждой попыткой, и где-то на 10 попытке доходит до плато.
На мой взгляд, это очень интересное направление исследований. Однако, стоит заметить, что эти Xland-задачи не требуют интеллектуального поведения агентов, а ресурсов для обучения уже требуется столько, сколько в принципе сейчас способно на такое выделить человечество. Так что дальнейшее масштабирование втупую вряд ли даст нам огромное плоды. Будет очень интересно следить за дальнейшим развитием.
Видеообзор на полчаса.
@knowledge_accumulator
👍15
Как сделать систему, которая умеет обучаться чему угодно?
Расскажу обещанные ранее мысли по поводу того, как мета-обучать алгоритм, способный на всё. У меня в голове соединились следующие идеи:
1) Во-первых, система, уже умеющая решать высокоразмерные сложные задачи, сама должна быть сложной и содержащей много информации. Так или иначе, вы не сможете сделать маленькую модель, играющую в го, или управляющую телом. У вас слишком высокоразмерные входы и выходы. При этом вы хотите уметь решать всё, а не конкретную задачу, так что модели будут огромными.
2) Как происходит обучение системы на конкретной задаче? Перед началом обучения на тестовой задаче в системе уже зашито определённое количество информации. В случае AdA у нас обученный трансформер с огромным количество параметров, порядка сотен миллионов. Вы применяете его на новой задаче, он собирает какое-то дополнительное количество информации о задаче, необходимой для её решения, и решает её за несколько попыток.
3) Далее чистая спекуляция. Для того, чтобы решить какую-то задачу, нам нужно иметь в итоговой модели X информации. Доля той информации, которую модель извлекла в процессе обучения на новой задаче, от X, и есть характеристика обучаемости.
В случае AdA в модели зашиты сотни миллионов параметров, и она заточена под решение специфичного семейства задач. Для того, чтобы начать решать новую задачу, ей нужно всего лишь извлечь несколько бит информации о скрытой динамике конкретной задачи, чтобы её решать.
Человек устроен в корне не так! ДНК человека, кодирующая всю систему, содержит всего несколько миллиардов бит информации! По этому коду строится система, которая обладает на ~пять порядков большим объёмом параметров, и обучается уже в процессе.
То есть архитектура интеллекта человека кодируется небольшим количеством параметров. В процессе эволюции происходит оптимизация очень большой системы в очень сжатом пространстве параметров.
Давайте побрейнштормим!
Напишите в комментариях как можно больше различных сжатых параметризаций устройств обучающейся системы с большим количеством параметров.
@knowledge_accumulator
Расскажу обещанные ранее мысли по поводу того, как мета-обучать алгоритм, способный на всё. У меня в голове соединились следующие идеи:
1) Во-первых, система, уже умеющая решать высокоразмерные сложные задачи, сама должна быть сложной и содержащей много информации. Так или иначе, вы не сможете сделать маленькую модель, играющую в го, или управляющую телом. У вас слишком высокоразмерные входы и выходы. При этом вы хотите уметь решать всё, а не конкретную задачу, так что модели будут огромными.
2) Как происходит обучение системы на конкретной задаче? Перед началом обучения на тестовой задаче в системе уже зашито определённое количество информации. В случае AdA у нас обученный трансформер с огромным количество параметров, порядка сотен миллионов. Вы применяете его на новой задаче, он собирает какое-то дополнительное количество информации о задаче, необходимой для её решения, и решает её за несколько попыток.
3) Далее чистая спекуляция. Для того, чтобы решить какую-то задачу, нам нужно иметь в итоговой модели X информации. Доля той информации, которую модель извлекла в процессе обучения на новой задаче, от X, и есть характеристика обучаемости.
В случае AdA в модели зашиты сотни миллионов параметров, и она заточена под решение специфичного семейства задач. Для того, чтобы начать решать новую задачу, ей нужно всего лишь извлечь несколько бит информации о скрытой динамике конкретной задачи, чтобы её решать.
Человек устроен в корне не так! ДНК человека, кодирующая всю систему, содержит всего несколько миллиардов бит информации! По этому коду строится система, которая обладает на ~пять порядков большим объёмом параметров, и обучается уже в процессе.
То есть архитектура интеллекта человека кодируется небольшим количеством параметров. В процессе эволюции происходит оптимизация очень большой системы в очень сжатом пространстве параметров.
Давайте побрейнштормим!
Напишите в комментариях как можно больше различных сжатых параметризаций устройств обучающейся системы с большим количеством параметров.
@knowledge_accumulator
👍11👎1
Есть ли жизнь на других флангах обучающихся агентов?
Я зашёл в список статей, которые цитируют AdA, и наткнулся на забавную работу. Это хороший повод рассказать о в корне альтернативном способе обучения агентов на её примере.
Авторы пытаются позаимствовать из биологии следующий концепт - при обучении интеллектуальных систем у нас может не быть заданной извне награды, которую мы максимизируем каким-нибудь RL-алгоритмом. Вместо этого мы можем обучать агентов подобием генетического алгоритма, т.е. поддерживать популяцию параметров модели, и ввести какой-нибудь критерий отбора. Как же тут делают?
1) В качестве "среды" используется 2D-мир, в котором есть появляющаяся каким-то образом еда.
2) Наш агент - это "организм", параметризуемый нейронной сетью, принимающей на вход информацию об окружении агента и выдающей следующее действие.
3) У агента есть внутренний парамер "сытости". Он падает с каждым шагом, и поднимается, когда агент съедает что-нибудь.
4) Каждые X шагов агент, у которого сытость выше определённого уровня, размножается. Рядом с ним появляется ещё один агент с его весами и добавленным к ним нормальным шумом. Агент, у которого сытость меньше определённого уровня, исчезает.
Авторы наблюдают, что со временем агенты адаптируются к свойствам среды и обучаются тактикам работы в ней. В зависимости от разных параметров среды, например, общего количества ресурсов, агент может быть либо "кочевником" и постоянно искать новые места, либо наоборот, сторожить ресурсное место, которое он уже нашёл.
Конечно, это всё находится в весьма зачаточном состоянии. Мы всё ещё обучаем веса фиксированной архитектуры нейросети, а задача не способствует появлению какого-то интеллектуального поведения. Будем смотреть, получится ли из подобного подхода что-нибудь в будущем.
@knowledge_accumulator
Я зашёл в список статей, которые цитируют AdA, и наткнулся на забавную работу. Это хороший повод рассказать о в корне альтернативном способе обучения агентов на её примере.
Авторы пытаются позаимствовать из биологии следующий концепт - при обучении интеллектуальных систем у нас может не быть заданной извне награды, которую мы максимизируем каким-нибудь RL-алгоритмом. Вместо этого мы можем обучать агентов подобием генетического алгоритма, т.е. поддерживать популяцию параметров модели, и ввести какой-нибудь критерий отбора. Как же тут делают?
1) В качестве "среды" используется 2D-мир, в котором есть появляющаяся каким-то образом еда.
2) Наш агент - это "организм", параметризуемый нейронной сетью, принимающей на вход информацию об окружении агента и выдающей следующее действие.
3) У агента есть внутренний парамер "сытости". Он падает с каждым шагом, и поднимается, когда агент съедает что-нибудь.
4) Каждые X шагов агент, у которого сытость выше определённого уровня, размножается. Рядом с ним появляется ещё один агент с его весами и добавленным к ним нормальным шумом. Агент, у которого сытость меньше определённого уровня, исчезает.
Авторы наблюдают, что со временем агенты адаптируются к свойствам среды и обучаются тактикам работы в ней. В зависимости от разных параметров среды, например, общего количества ресурсов, агент может быть либо "кочевником" и постоянно искать новые места, либо наоборот, сторожить ресурсное место, которое он уже нашёл.
Конечно, это всё находится в весьма зачаточном состоянии. Мы всё ещё обучаем веса фиксированной архитектуры нейросети, а задача не способствует появлению какого-то интеллектуального поведения. Будем смотреть, получится ли из подобного подхода что-нибудь в будущем.
@knowledge_accumulator
👍22
Хотите разбавить рассуждения об интеллекте полезной информацией?
Мой бывший руководитель из Яндекса, ныне трудящийся в Microsoft - Миша Ройзнер - теперь ведёт свой телеграм-канал, в котором пишет про рекомендательные системы. Мне кажется, Миша занимался рекомендациями тогда, когда я ещё учился в школе, и в этой сфере разбирается на высшем уровне.
В последних постах он рассказывает про базовые фичи в рекомендательных моделях. С каждым постом фичи усложняются, спешите, пока ещё не поздно включиться!
Подписывайтесь!
Мой бывший руководитель из Яндекса, ныне трудящийся в Microsoft - Миша Ройзнер - теперь ведёт свой телеграм-канал, в котором пишет про рекомендательные системы. Мне кажется, Миша занимался рекомендациями тогда, когда я ещё учился в школе, и в этой сфере разбирается на высшем уровне.
В последних постах он рассказывает про базовые фичи в рекомендательных моделях. С каждым постом фичи усложняются, спешите, пока ещё не поздно включиться!
Подписывайтесь!
🔥11❤4👍3
Как параметризовать алгоритм обучения?
По всей видимости, мне нужно более понятно раскрыть эту тему, поскольку один из постов выше не вызвал никакого обсуждения, хотя, мне кажется, тема-то очень важная и интересная.
Итак, представим, что у нас есть система, обучающаяся чему-либо, например, классификации картинок. Чтобы оптимизировать обучаемость системы, нам нужно какое-то пространство для оптимизации, в котором мы будем изменять наши параметры в поиске лучшего алгоритма.
Самый известный способ параметризовать такой алгоритм - это программа на питоне, задающая архитектуру нейросети, трейнлуп, подсчёт ошибки и так далее. Оптимизацию в этом пространстве проводит человек почти вручную в рамках технологического прогресса. У этого есть 2 минуса:
1) Человечество - не самый лучший оптимизатор. Представьте, как если бы оно пыталось написать программу на питоне, которая берёт картинку и классифицирует по классам кошка/собака, без нейросетей.
2) Пространство "параметров" слишком структурировано. Человеческий интеллект задаёт ограничение на пространство алгоритмов, и то, что алгоритм состоит из длинной последовательности дискретных инструкций, в которой почти любая ошибка приводит к полной катастрофе, сильно затрудняет нам его оптимизацию автоматическими алгоритмами (например, генетическими). Иногда удаётся оптимизировать короткие программы, используя безумные ресурсы, как, например, в AutoMLZero, про который я писал пост.
Альтернативный способ параметризовать обучение системы - это, конечно же, ДНК. В нём закодировано поведение элементарной частицы, её деление, взаимодействие со своими копиями. Тот факт, что каждый кусочек ДНК влияет в разной степени на всю систему, не обязательно вызывая полный крах, и позволил эволюции оптимизировать адаптируемость человека к внешним вызовам, т.е. в том числе интеллект.
Как же я был приятно удивлён, когда обнаружил, что я не одинок в этих рассуждениях! Я нашёл статью, в которой авторы полностью переизобретают нейросети, не побоюсь этой фразы, и реально достигают успеха в мета-обучении. Об этом в следующем посте.
@knowledge_accumulator
По всей видимости, мне нужно более понятно раскрыть эту тему, поскольку один из постов выше не вызвал никакого обсуждения, хотя, мне кажется, тема-то очень важная и интересная.
Итак, представим, что у нас есть система, обучающаяся чему-либо, например, классификации картинок. Чтобы оптимизировать обучаемость системы, нам нужно какое-то пространство для оптимизации, в котором мы будем изменять наши параметры в поиске лучшего алгоритма.
Самый известный способ параметризовать такой алгоритм - это программа на питоне, задающая архитектуру нейросети, трейнлуп, подсчёт ошибки и так далее. Оптимизацию в этом пространстве проводит человек почти вручную в рамках технологического прогресса. У этого есть 2 минуса:
1) Человечество - не самый лучший оптимизатор. Представьте, как если бы оно пыталось написать программу на питоне, которая берёт картинку и классифицирует по классам кошка/собака, без нейросетей.
2) Пространство "параметров" слишком структурировано. Человеческий интеллект задаёт ограничение на пространство алгоритмов, и то, что алгоритм состоит из длинной последовательности дискретных инструкций, в которой почти любая ошибка приводит к полной катастрофе, сильно затрудняет нам его оптимизацию автоматическими алгоритмами (например, генетическими). Иногда удаётся оптимизировать короткие программы, используя безумные ресурсы, как, например, в AutoMLZero, про который я писал пост.
Альтернативный способ параметризовать обучение системы - это, конечно же, ДНК. В нём закодировано поведение элементарной частицы, её деление, взаимодействие со своими копиями. Тот факт, что каждый кусочек ДНК влияет в разной степени на всю систему, не обязательно вызывая полный крах, и позволил эволюции оптимизировать адаптируемость человека к внешним вызовам, т.е. в том числе интеллект.
Как же я был приятно удивлён, когда обнаружил, что я не одинок в этих рассуждениях! Я нашёл статью, в которой авторы полностью переизобретают нейросети, не побоюсь этой фразы, и реально достигают успеха в мета-обучении. Об этом в следующем посте.
@knowledge_accumulator
👍15🔥4❤1
VSML [2021] - встречайте настоящие искусственные нейронные сети
Авторы во многом мотивируются мыслями, похожими на мои предыдущие посты - раз, два, три.
1) Они бросают вызов фиксированному алгоритму обучения. Backprop, апдейт весов и всё прочее задаётся человеком вручную. Если мы сможем обучать эти вещи, оптимизируя обучаемость, мы получим Meta-Learning.
2) Авторы обращают внимание, что есть 2 размерности -
И тут, в отличие от меня, авторы смогли придумать подход.
Будем обучать рекуррентную сеть с ячейками памяти, типа GRU. Но обычно у нас количество весов в ней квадратично к размеру памяти. Поэтому будем обучать много таких GRU с пошаренными весами. Сделаем из них многослойную конструкцию со связями между разными слоями в обе стороны и внутри слоя, так, чтобы у модели в теории была возможность повторить backprop. В результате у всей модели 2400 весов, а память на 257000 чисел.
Далее применяем генетический алгоритм! Как будем оценивать образцы? Будем показывать этой системе объекты (например, картинки из MNIST), считывать предсказание из последнего слоя, подавать на вход ошибку, и так много раз. В конце будем тестировать её предсказания и таким образом оценивать обучаемость.
Самая потрясающая часть - это результаты сравнения с традиционным meta-rl-подходом. Когда мы сетку, обученную обучаться на MNIST, применяем на совсем другом датасете, она работает! Они обучали разные алгоритмы на 6 датасетах, тестировали на всех остальных, и везде абсолютно одинаковая картина - бейзлайн показывает ~0, а VSML работает на приличном уровне.
Я уверен, что это направление исследований и приведёт нас к настоящему интеллекту, когда идея будет отмасштабирована и применена на правильной задаче.
@knowledge_accumulator
Авторы во многом мотивируются мыслями, похожими на мои предыдущие посты - раз, два, три.
1) Они бросают вызов фиксированному алгоритму обучения. Backprop, апдейт весов и всё прочее задаётся человеком вручную. Если мы сможем обучать эти вещи, оптимизируя обучаемость, мы получим Meta-Learning.
2) Авторы обращают внимание, что есть 2 размерности -
V_M и V_L. V_M - это размерность заданного пространства обучающих алгоритмов. А V_L - это размерность пространства "состояний" алгоритма. В случае нейросетей это количество весов. Авторы пишут - чтобы мета-алгоритм не был переобучен под семейство задач, V_L должно быть гораздо больше V_M. И тут, в отличие от меня, авторы смогли придумать подход.
Будем обучать рекуррентную сеть с ячейками памяти, типа GRU. Но обычно у нас количество весов в ней квадратично к размеру памяти. Поэтому будем обучать много таких GRU с пошаренными весами. Сделаем из них многослойную конструкцию со связями между разными слоями в обе стороны и внутри слоя, так, чтобы у модели в теории была возможность повторить backprop. В результате у всей модели 2400 весов, а память на 257000 чисел.
Далее применяем генетический алгоритм! Как будем оценивать образцы? Будем показывать этой системе объекты (например, картинки из MNIST), считывать предсказание из последнего слоя, подавать на вход ошибку, и так много раз. В конце будем тестировать её предсказания и таким образом оценивать обучаемость.
Самая потрясающая часть - это результаты сравнения с традиционным meta-rl-подходом. Когда мы сетку, обученную обучаться на MNIST, применяем на совсем другом датасете, она работает! Они обучали разные алгоритмы на 6 датасетах, тестировали на всех остальных, и везде абсолютно одинаковая картина - бейзлайн показывает ~0, а VSML работает на приличном уровне.
Я уверен, что это направление исследований и приведёт нас к настоящему интеллекту, когда идея будет отмасштабирована и применена на правильной задаче.
@knowledge_accumulator
👍25🤯11🔥2❤1🤡1
Evolving Reinforcement Learning Algorithms [2021] - учим оптимальный RL-апдейт весов
После изучения предыдущей работы и осознания потенциала end-to-end обучения всего алгоритма целиком начинают очень сильно бросаться в глаза проблемы случаев, когда это делают не так.
Современные RL-алгоритмы это конструкции из большого количества костылей, подобранных человеком вручную для улучшения производительности. Но кое-что в них представляет собой то, что можно оптимизировать оптимизацией программы - это функция ошибки.
Традиционная DQN-ошибка:
Поэтому авторы решают представить ошибку в виде вычислительного графа (см. картинку) и оптимизировать её вычисление эволюционным алгоритмом. Мутации - это просто добавление / изменение рандомной вершины этого графа. Качество замеряют, обучая алгоритм с этой ошибкой.
На мой взгляд, проблемами такой параметризации является то, что в ней огромное количество функций это полный мусор, и то, что возможность локального подъёма к оптимальной функции в ней неясна. Их наличие подтверждается тем, что результат сильно лучше, если добавлять в популяцию уже существующие алгоритмы.
Тем не менее, в результате у них получаются довольно странные функции, которые работают лучше бейзлайна. Кожаные мешки в статье пытаются интерпретировать их, но они ещё не поняли, что пути оптимального алгоритма неисповедимы.
Всё это подтверждает 2 вещи, в которые я верю:
1) У человека явно есть сложности с тем, как применять RL-методы на реальных задачах
2) Мы получим алгоритм другого уровня, когда сможем оптимизировать весь RL-алгоритм, а не его кусочек
@knowledge_accumulator
После изучения предыдущей работы и осознания потенциала end-to-end обучения всего алгоритма целиком начинают очень сильно бросаться в глаза проблемы случаев, когда это делают не так.
Современные RL-алгоритмы это конструкции из большого количества костылей, подобранных человеком вручную для улучшения производительности. Но кое-что в них представляет собой то, что можно оптимизировать оптимизацией программы - это функция ошибки.
Традиционная DQN-ошибка:
L = (Q(s_t, a_t) − (r_t + γ ∗ max_a Q_t(s_{t+1}, a)))^2
имеет теоретические обоснование, но встречается с огромными проблемами на практике.Поэтому авторы решают представить ошибку в виде вычислительного графа (см. картинку) и оптимизировать её вычисление эволюционным алгоритмом. Мутации - это просто добавление / изменение рандомной вершины этого графа. Качество замеряют, обучая алгоритм с этой ошибкой.
На мой взгляд, проблемами такой параметризации является то, что в ней огромное количество функций это полный мусор, и то, что возможность локального подъёма к оптимальной функции в ней неясна. Их наличие подтверждается тем, что результат сильно лучше, если добавлять в популяцию уже существующие алгоритмы.
Тем не менее, в результате у них получаются довольно странные функции, которые работают лучше бейзлайна. Кожаные мешки в статье пытаются интерпретировать их, но они ещё не поняли, что пути оптимального алгоритма неисповедимы.
Всё это подтверждает 2 вещи, в которые я верю:
1) У человека явно есть сложности с тем, как применять RL-методы на реальных задачах
2) Мы получим алгоритм другого уровня, когда сможем оптимизировать весь RL-алгоритм, а не его кусочек
@knowledge_accumulator
👍5🤔3🔥2
Introducing Symmetries to Black Box Meta Reinforcement Learning [2021] - применяем VSML на RL-задачах
Одна из статей, про которую я рассказывал выше, понравилась мне настолько, что я решил прочитать все статьи её автора за последние годы, и там я нашёл кучу интересного на тему мета-обучения.
В данной работе в лоб применяют VSML + генетику (называют SymLA) в нескольких сериях экспериментов:
1) Классические элементарные RL-задачи с перемешиванием
Суть эксперимента в том, что мы обучаем модель обучаться на задаче, а затем мета-тестируем на той же задаче, но с перемешанными входами и действиями. Бейзлайн от этого плавится, а VSML в принципе инвариантна к перестановкам (на новой задаче), поэтому у неё всё хорошо
2) Лабиринт с капканом и сердечком
Агент управляет персонажем в маленькой координатной сетке, на которой есть положительная и отрицательная награда. Модель мета-обучают, а при мета-тестировании награды меняют местами.
Бейзлайн жёстко переобучается под сбор сердечка, и после того, как оно начинает давать отрицательную награду, он продолжает его собирать. У VSML кривые обучения в обоих случаях одинаковые, то есть она всю информацию извлекает в процессе мета-тестирования
3) Смена RL-задачи на радикально другую
Всё просто - модель обучают на Gridworld (задача из пункта 2), а применяют на CartPole - совсем непохожей задаче. Картина та же самая.
Вполне вероятно, что данная технология сейчас находится в положении нейросетей в конце 1990-х. На MNIST (снова) успешно применили, но на большей задаче применить пока нереально. Не знаю, какие тут нужны вычислительные ресурсы, и есть ли они хотя бы у Deepmind, но я думаю, тот, кто первый успешно применит это на Atari, начнёт новую эру в ML. У нас будут претренированные алгоритмы, которые все будут применять в своих нишевых задачах и получать сильный прирост к профиту.
Надеюсь, к этому времени не запретят заниматься ML без ярлыка отроскомнадзора святейших мудрецов.
@knowledge_accumulator
Одна из статей, про которую я рассказывал выше, понравилась мне настолько, что я решил прочитать все статьи её автора за последние годы, и там я нашёл кучу интересного на тему мета-обучения.
В данной работе в лоб применяют VSML + генетику (называют SymLA) в нескольких сериях экспериментов:
1) Классические элементарные RL-задачи с перемешиванием
Суть эксперимента в том, что мы обучаем модель обучаться на задаче, а затем мета-тестируем на той же задаче, но с перемешанными входами и действиями. Бейзлайн от этого плавится, а VSML в принципе инвариантна к перестановкам (на новой задаче), поэтому у неё всё хорошо
2) Лабиринт с капканом и сердечком
Агент управляет персонажем в маленькой координатной сетке, на которой есть положительная и отрицательная награда. Модель мета-обучают, а при мета-тестировании награды меняют местами.
Бейзлайн жёстко переобучается под сбор сердечка, и после того, как оно начинает давать отрицательную награду, он продолжает его собирать. У VSML кривые обучения в обоих случаях одинаковые, то есть она всю информацию извлекает в процессе мета-тестирования
3) Смена RL-задачи на радикально другую
Всё просто - модель обучают на Gridworld (задача из пункта 2), а применяют на CartPole - совсем непохожей задаче. Картина та же самая.
Вполне вероятно, что данная технология сейчас находится в положении нейросетей в конце 1990-х. На MNIST (снова) успешно применили, но на большей задаче применить пока нереально. Не знаю, какие тут нужны вычислительные ресурсы, и есть ли они хотя бы у Deepmind, но я думаю, тот, кто первый успешно применит это на Atari, начнёт новую эру в ML. У нас будут претренированные алгоритмы, которые все будут применять в своих нишевых задачах и получать сильный прирост к профиту.
Надеюсь, к этому времени не запретят заниматься ML без ярлыка от
@knowledge_accumulator
👍13
A Modern Self-Referential Weight Matrix That Learns to Modify Itself [2022] - поговорим о странном
Существуют совсем альтернативные обучающиеся системы, не использующиеся на практике. Эта концепция довольно забавная и будет использоваться в следующем посте, поэтому давайте о ней поговорим.
У нас есть матрица весов W. На каждом шаге она получает на вход какой-то вектор x. Результирующий вектор Wx разбивается на части y, k, q, b.
- y - это выход модели
- k, q и b - величины, использующиеся, чтобы обновить матрицу W. В расчётах там используется внешнее произведение векторов k и Wq, чтобы получить сдвиг для матрицы W, b используется в качестве learning rate. Всё немного сложнее в реальности, но примерно так.
Таким образом, в одной матрице зашито всё - и веса, и обучающий алгоритм этих весов. Всё будущее поведение системы задаётся только инициализацией матрицы W.
Вы спросите - нахрена это надо? Расскажу, как в принципе это может работать.
Данная матрица может быть полноценным few-shot learning алгоритмом. Чтобы её натренировать, мы сэмплируем из датасета с картинками N объектов из K классов, подаём эти N*K образцов и ответов в систему по одному, а затем учимся предсказывать тестовые сэмплы, бэкпропом пробрасывая градиенты и обновляя инициализацию матрицы W. Так делаем много раз, и со временем W на новой задаче начинает неплохо работать. Но не лучше топовых few-shot подходов.
Настоящий взрыв мозга с этой штукой я расскажу в следующем посте, а пока всем хороших выходных 😁
@knowledge_accumulator
Существуют совсем альтернативные обучающиеся системы, не использующиеся на практике. Эта концепция довольно забавная и будет использоваться в следующем посте, поэтому давайте о ней поговорим.
У нас есть матрица весов W. На каждом шаге она получает на вход какой-то вектор x. Результирующий вектор Wx разбивается на части y, k, q, b.
- y - это выход модели
- k, q и b - величины, использующиеся, чтобы обновить матрицу W. В расчётах там используется внешнее произведение векторов k и Wq, чтобы получить сдвиг для матрицы W, b используется в качестве learning rate. Всё немного сложнее в реальности, но примерно так.
Таким образом, в одной матрице зашито всё - и веса, и обучающий алгоритм этих весов. Всё будущее поведение системы задаётся только инициализацией матрицы W.
Вы спросите - нахрена это надо? Расскажу, как в принципе это может работать.
Данная матрица может быть полноценным few-shot learning алгоритмом. Чтобы её натренировать, мы сэмплируем из датасета с картинками N объектов из K классов, подаём эти N*K образцов и ответов в систему по одному, а затем учимся предсказывать тестовые сэмплы, бэкпропом пробрасывая градиенты и обновляя инициализацию матрицы W. Так делаем много раз, и со временем W на новой задаче начинает неплохо работать. Но не лучше топовых few-shot подходов.
Настоящий взрыв мозга с этой штукой я расскажу в следующем посте, а пока всем хороших выходных 😁
@knowledge_accumulator
👍13🔥4❤1🤝1