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
Eliminating Meta Optimization Through Self-Referential Meta Learning [2022] - подражаем жизни в оптимизации
Мы все слышали о ДНК и генетических алгоритмах, но суровая правда в том, что жизнь сложнее. Процесс оптимизации ДНК в ходе эволюции сам по себе закодирован в нём самом, и это не просто рандомные зашумления кода. Например, какие-то части ДНК более подвержены мутированию, чем другие. Нюансов море.
То есть жизнь - это не ДНК-параметризация + алгоритм оптимизации. Это единая сущность, оптимизирующая свою выживаемость и копирование в окружающей среде. Всё остальное - это только ограничения мира, которые кислота не выбирает. Позаимствовать эту идеологию и отказаться даже от ручного алгоритма мета-оптимизации предлагают авторы данной работы.
1) Выбираем архитектуру из самомодифицирующихся матриц весов из прошлого поста. Это может быть цепочка из 3 таких, т.е. 3-х слойная нейросеть.
2) Выбираем какую-нибудь задачу для этой сети. Это может быть в принципе что угодно, допустим, RL-задача. Задаём objective модели, например, суммарная награда в задаче.
3) Поддерживаем least-recently-used пул из N экземпляров весов. Изначально там один рандомный вектор.
4) Просто сэмплируем набор весов из пула с вероятностью, пропорциональной набранной им награде. Этим набором играем в среде N шагов, и модифицированную копию кладём обратно в пул, записывая собранную награду.
Эта абсолютно безумная схема как-то работает! Но на весьма простых задачах. Её в теории можно использовать для мета-мета-обучения, мета-мета-мета-обучения, и не упираться ни в какие человеческие алгоритмы оптимизации. Отвечаю на вопрос самых внимательных - в алгоритме нет рандома, и расхождение весов в разные стороны происходит засчёт рандома задачи.
Однако, мир ещё не готов и не нуждается в таких технологиях, потому что их время придёт тогда, когда потенциал обычных мета-алгоритмов будет исчерпан. Тем не менее, в идее подражать жизни и самой её сути есть что-то очень притягательное...
@knowledge_accumulator
Мы все слышали о ДНК и генетических алгоритмах, но суровая правда в том, что жизнь сложнее. Процесс оптимизации ДНК в ходе эволюции сам по себе закодирован в нём самом, и это не просто рандомные зашумления кода. Например, какие-то части ДНК более подвержены мутированию, чем другие. Нюансов море.
То есть жизнь - это не ДНК-параметризация + алгоритм оптимизации. Это единая сущность, оптимизирующая свою выживаемость и копирование в окружающей среде. Всё остальное - это только ограничения мира, которые кислота не выбирает. Позаимствовать эту идеологию и отказаться даже от ручного алгоритма мета-оптимизации предлагают авторы данной работы.
1) Выбираем архитектуру из самомодифицирующихся матриц весов из прошлого поста. Это может быть цепочка из 3 таких, т.е. 3-х слойная нейросеть.
2) Выбираем какую-нибудь задачу для этой сети. Это может быть в принципе что угодно, допустим, RL-задача. Задаём objective модели, например, суммарная награда в задаче.
3) Поддерживаем least-recently-used пул из N экземпляров весов. Изначально там один рандомный вектор.
4) Просто сэмплируем набор весов из пула с вероятностью, пропорциональной набранной им награде. Этим набором играем в среде N шагов, и модифицированную копию кладём обратно в пул, записывая собранную награду.
Эта абсолютно безумная схема как-то работает! Но на весьма простых задачах. Её в теории можно использовать для мета-мета-обучения, мета-мета-мета-обучения, и не упираться ни в какие человеческие алгоритмы оптимизации. Отвечаю на вопрос самых внимательных - в алгоритме нет рандома, и расхождение весов в разные стороны происходит засчёт рандома задачи.
Однако, мир ещё не готов и не нуждается в таких технологиях, потому что их время придёт тогда, когда потенциал обычных мета-алгоритмов будет исчерпан. Тем не менее, в идее подражать жизни и самой её сути есть что-то очень притягательное...
@knowledge_accumulator
👍19🔥3🤨2❤1🥴1
General-Purpose In-Context Learning by Meta-Learning Transformers [2022] - экспериментальный анализ феномена мета-обучения
В данной работе пытаются пронаблюдать различные типы поведения мета-обученных моделей в зависимости от условий. В каких случаях модель просто запоминает трейнсет задач, а в каких обучается обучаться новым задачам?
1) В каждой задаче мета-датасета будем как-то рандомно трансформировать MNIST. Каждый "мета-сэмпл" состоит последовательности пар "объект-метка" - обучающего датасета, и одного объекта без метки. Мета-трансформер должен посмотреть на эту последовательность и в конце предсказать метку для последнего объекта в последовательности. То есть он должен за 1 forward pass выучить классификатор на "датасете" и тут же его применить.
2) Создадим мета-тренировочный сет задач D, состоящий из
3) Будем обучать мета-трансформер с размером скрытого слоя
Если использовать достаточно большую модель и достаточно большой сет задач, то модель обучается обучаться на новых задачах. Если задач недостаточно, то модель просто запоминает мета-трейнсет. А если у модели слишком мало параметров, то у неё возникают трудности даже на мета-трейнсете. Этот эффект повторяется и при мета-тестировании на FashionMNIST.
Интересно было бы помучить Аду на предмет out-of-distribution работы, поскольку там как раз и модель большая, и задач много, но это всё-таки RL. Вообще, эта интуиция о том, как форсить обучаемость у мета-моделей, нам ещё понадобится.
@knowledge_accumulator
В данной работе пытаются пронаблюдать различные типы поведения мета-обученных моделей в зависимости от условий. В каких случаях модель просто запоминает трейнсет задач, а в каких обучается обучаться новым задачам?
1) В каждой задаче мета-датасета будем как-то рандомно трансформировать MNIST. Каждый "мета-сэмпл" состоит последовательности пар "объект-метка" - обучающего датасета, и одного объекта без метки. Мета-трансформер должен посмотреть на эту последовательность и в конце предсказать метку для последнего объекта в последовательности. То есть он должен за 1 forward pass выучить классификатор на "датасете" и тут же его применить.
2) Создадим мета-тренировочный сет задач D, состоящий из
X рандомно трансформированных MNIST-подзадач. Кроме того, сделаем мета-тестовый сет задач с другими трансформациями. Можно брать и не MNIST.3) Будем обучать мета-трансформер с размером скрытого слоя
H
Авторы обучают огромный набор мета-трансформеров с разными значениями X и H, и смотрят на поведение модели на мета-тренировочном датасете и на мета-тестовом. И что же они видят?Если использовать достаточно большую модель и достаточно большой сет задач, то модель обучается обучаться на новых задачах. Если задач недостаточно, то модель просто запоминает мета-трейнсет. А если у модели слишком мало параметров, то у неё возникают трудности даже на мета-трейнсете. Этот эффект повторяется и при мета-тестировании на FashionMNIST.
Интересно было бы помучить Аду на предмет out-of-distribution работы, поскольку там как раз и модель большая, и задач много, но это всё-таки RL. Вообще, эта интуиция о том, как форсить обучаемость у мета-моделей, нам ещё понадобится.
@knowledge_accumulator
🔥7👍5🤔4
Вчера пришла радостная весть о том, что мне одобрили британскую Global Talent визу!
Таким образом, мой период без определённого места жительства подходит к концу.
Долго радоваться, однако, я не смог, потому что в этот же день Алексея Навального приговорили к особому режиму заключения на безумный срок.
В общем, продолжаем развиваться, впереди долгий путь к светлому будущему.
P.S. Канал вёл не ради визы, с ним будет всё, как прежде 😁
Таким образом, мой период без определённого места жительства подходит к концу.
Долго радоваться, однако, я не смог, потому что в этот же день Алексея Навального приговорили к особому режиму заключения на безумный срок.
В общем, продолжаем развиваться, впереди долгий путь к светлому будущему.
P.S. Канал вёл не ради визы, с ним будет всё, как прежде 😁
🎉49❤13🤡8🤮7😁3😢1
Adversarial Policies Beat Superhuman Go AIs [2023] - учимся унижать сверхчеловеческие нейросети
Оказывается, AlphaZero-подобные нейросети можно надурить! Причём, не разработав более сильного агента, а натренировав его специально против конкретного алгоритма. В то же время, этот агент будет проигрывать всем остальным, даже новичкам-людям, что показывает нетранзитивность сравнения уровня систем.
Для тренировки нам нужен доступ к нейросети-жертве - возможность получить её выход на любой вход, сами веса не нужны. Схема обучения почти такая же, как в AlphaZero - мы садим играть нейросеть против противника и учим её предсказывать исход игры и результат поиска более оптимального хода по дереву вариантов. Это итеративно улучшает качество её работы.
Отличие в том, что в данном случае противником выступает не сам обучаемый агент, а нейросеть-жертва. То есть противник и его стратегия являются полноценной частью среды с точки зрения агента, и он учится к нему приспосабливаться.
Авторы обнаружили, что нейросеть-жертва в некоторых ситуациях просто начинает пасовать, думая, что уже выиграла, хотя на самом деле на "её" территории остаётся камень противника и поэтому территория не засчитывается жертве (на картинке справа). Другая уязвимость заключается в том, что из камней можно нарисовать такой узор, от которого жертву начнёт глючить, и она проигрывает (на картинке слева). В статье много подробностей и картинок. Также интересно то, что уязвимости переносятся на другие системы, т.к. процессы тренировки и архитектуры нейросетей у современных алгоритмов во многом похожи.
Интересно, конечно, возможно ли сделать устойчивый к атакам алгоритм, модифицировав схему обучения, или это фундаментальная проблема ввиду размера пространства состояний игры.
@knowledge_accumulator
Оказывается, AlphaZero-подобные нейросети можно надурить! Причём, не разработав более сильного агента, а натренировав его специально против конкретного алгоритма. В то же время, этот агент будет проигрывать всем остальным, даже новичкам-людям, что показывает нетранзитивность сравнения уровня систем.
Для тренировки нам нужен доступ к нейросети-жертве - возможность получить её выход на любой вход, сами веса не нужны. Схема обучения почти такая же, как в AlphaZero - мы садим играть нейросеть против противника и учим её предсказывать исход игры и результат поиска более оптимального хода по дереву вариантов. Это итеративно улучшает качество её работы.
Отличие в том, что в данном случае противником выступает не сам обучаемый агент, а нейросеть-жертва. То есть противник и его стратегия являются полноценной частью среды с точки зрения агента, и он учится к нему приспосабливаться.
Авторы обнаружили, что нейросеть-жертва в некоторых ситуациях просто начинает пасовать, думая, что уже выиграла, хотя на самом деле на "её" территории остаётся камень противника и поэтому территория не засчитывается жертве (на картинке справа). Другая уязвимость заключается в том, что из камней можно нарисовать такой узор, от которого жертву начнёт глючить, и она проигрывает (на картинке слева). В статье много подробностей и картинок. Также интересно то, что уязвимости переносятся на другие системы, т.к. процессы тренировки и архитектуры нейросетей у современных алгоритмов во многом похожи.
Интересно, конечно, возможно ли сделать устойчивый к атакам алгоритм, модифицировав схему обучения, или это фундаментальная проблема ввиду размера пространства состояний игры.
@knowledge_accumulator
🔥14👍8❤🔥1
Reinforcement Learning from Passive Data via Latent Intentions [2023] - учимся жить, смотря ютуб
Сегодня у нас будет расслабляющий обзор статьи без глубоких философских рассуждений, как в старые времена.
Ютуб такой огромный и разнообразный, в нём столько данных, что придумывать разные способы извлекать знания из него можно бесконечно. Я уже писал ранее про то, как он был использован для предобучения агента игре в майнкрафт. А какие есть более общие подходы?
Если формализовать данные с ютуба, у нас есть только цепочки траекторий состояний в каких-то средах, т.е. кадры из видео, неизвестные награды и неизвестные совершённые действия. Нужен способ как-то обрабатывать именно такой вид данных.
Авторы этой работы делают смелое предположение: состояния S', встретившиеся после состояния S, с большей вероятностью можно считать целью агента в момент этой траектории, чем прочие состояния.
Основываясь на этом предположении, мы учим специальную функцию под названием Intent-Conditioned Value Function, которая показывает, насколько вероятно агент достигнет состояния S2 при нахождении в состоянии S1 и имея какую-то цель Z. Более подробно можно посмотреть в этом обзоре.
Пока всё это применяется на конкретном домене, т.е. модель учится на видеоиграх, например, Atari, и потом играет в них сама. По словам авторов, это работает лучше, чем бейзлайны, которые используют другую параметризацию и функции для обучения. Посмотрим, куда нас приведут подобные алгоритмы пассивного обучения.
@knowledge_accumulator
Сегодня у нас будет расслабляющий обзор статьи без глубоких философских рассуждений, как в старые времена.
Ютуб такой огромный и разнообразный, в нём столько данных, что придумывать разные способы извлекать знания из него можно бесконечно. Я уже писал ранее про то, как он был использован для предобучения агента игре в майнкрафт. А какие есть более общие подходы?
Если формализовать данные с ютуба, у нас есть только цепочки траекторий состояний в каких-то средах, т.е. кадры из видео, неизвестные награды и неизвестные совершённые действия. Нужен способ как-то обрабатывать именно такой вид данных.
Авторы этой работы делают смелое предположение: состояния S', встретившиеся после состояния S, с большей вероятностью можно считать целью агента в момент этой траектории, чем прочие состояния.
Основываясь на этом предположении, мы учим специальную функцию под названием Intent-Conditioned Value Function, которая показывает, насколько вероятно агент достигнет состояния S2 при нахождении в состоянии S1 и имея какую-то цель Z. Более подробно можно посмотреть в этом обзоре.
Пока всё это применяется на конкретном домене, т.е. модель учится на видеоиграх, например, Atari, и потом играет в них сама. По словам авторов, это работает лучше, чем бейзлайны, которые используют другую параметризацию и функции для обучения. Посмотрим, куда нас приведут подобные алгоритмы пассивного обучения.
@knowledge_accumulator
👍13🤔2
Простите, был неправ
За почти полгода ведения канала я перечитал около сотни статей, и за это время мои взгляды на большую картину происходящего в ML изменились.
Меня в первую очередь интересует изобретение интеллекта, превышающего человека. Приложения типа генерации красивых картинок, текстов, рекомендации - это интересно, но настоящая революция произойдёт тогда, когда научно-инженерный прогресс начнёт двигаться с помощью того, что не упирается в человеческие лимиты. Важно, что я говорю только о научно-инженерном прогрессе, а не о тотальной власти роботов, т.к. идеи коммунизма отвергаются при первой же попытке трезво взглянуть на реальность.
Что не изменилось за полгода? По-прежнему я не верю в языковые модели. Да, у них есть ряд интересных приложений, но они не обретут сверхчеловеческий интеллект, сколько не файнтюнь их на полайканные диалоги. Но у этого LLM-помешательства есть выгодополучатели - паникёры, стартаперы, а также желающие зачистить рынок от конкурентов с помощью насилия. Поэтому этот хайп может продолжиться вплоть до того, что какую-то из языковых моделей объявят AGI, а потом скажут, что она не захватила мир только потому, что на тестирование её "безопасности" потратили 2 миллиарда долларов.
Держа в голове это, я искал другие подходы. Я писал про них серии постов, много часов просто думал, и в конце концов пришёл к печальной мысли - вполне вероятно, интеллект слишком сложно (для человечества) спроектировать. Наша инженерия пользуется принципами, противоположными тому, как устроен человеческий мозг. Пытаться спроектировать интеллект - это как пытаться написать программу на C++, которая только с помощью ифов пытается отличить кошку от собаки на фотографии. И я сильно заблуждался, пытаясь изучать разные способы это сделать.
Сейчас я думаю, что мы можем создать интеллект только с помощью оптимизации, но такие подходы находятся в зачаточном состоянии, и ими мало кто занимается. Но я буду теперь более пристально следить за прогрессом в мета-обучении. Надеюсь, вам тоже это интересно.
@knowledge_accumulator
За почти полгода ведения канала я перечитал около сотни статей, и за это время мои взгляды на большую картину происходящего в ML изменились.
Меня в первую очередь интересует изобретение интеллекта, превышающего человека. Приложения типа генерации красивых картинок, текстов, рекомендации - это интересно, но настоящая революция произойдёт тогда, когда научно-инженерный прогресс начнёт двигаться с помощью того, что не упирается в человеческие лимиты. Важно, что я говорю только о научно-инженерном прогрессе, а не о тотальной власти роботов, т.к. идеи коммунизма отвергаются при первой же попытке трезво взглянуть на реальность.
Что не изменилось за полгода? По-прежнему я не верю в языковые модели. Да, у них есть ряд интересных приложений, но они не обретут сверхчеловеческий интеллект, сколько не файнтюнь их на полайканные диалоги. Но у этого LLM-помешательства есть выгодополучатели - паникёры, стартаперы, а также желающие зачистить рынок от конкурентов с помощью насилия. Поэтому этот хайп может продолжиться вплоть до того, что какую-то из языковых моделей объявят AGI, а потом скажут, что она не захватила мир только потому, что на тестирование её "безопасности" потратили 2 миллиарда долларов.
Держа в голове это, я искал другие подходы. Я писал про них серии постов, много часов просто думал, и в конце концов пришёл к печальной мысли - вполне вероятно, интеллект слишком сложно (для человечества) спроектировать. Наша инженерия пользуется принципами, противоположными тому, как устроен человеческий мозг. Пытаться спроектировать интеллект - это как пытаться написать программу на C++, которая только с помощью ифов пытается отличить кошку от собаки на фотографии. И я сильно заблуждался, пытаясь изучать разные способы это сделать.
Сейчас я думаю, что мы можем создать интеллект только с помощью оптимизации, но такие подходы находятся в зачаточном состоянии, и ими мало кто занимается. Но я буду теперь более пристально следить за прогрессом в мета-обучении. Надеюсь, вам тоже это интересно.
@knowledge_accumulator
👍41👏6🔥5🌚4👎2😁2🤡1🌭1🍌1
Нам нужен не просто Meta-Learning
Чтобы система обрела автономность уровня человека, ей недостаточно оптимально обучаться на случайной задаче из какого-то распределения, даже если мета-алгоритм успешно работает на заданиях не из обучающего распределения.
Нам нужен алгоритм, который умеет переиспользовать знания, полученные при решении предыдущих задач, чтобы быстро учиться чему-то новому. Но, в отличие от классического transfer learning и других few-shot подходов, она должна уметь переносить знания на задачи, радикально отличающиеся от того, что было до этого.
То есть нам нужен meta-meta-learning - обучение обучаться новым задачам после обучения старым. Похожие мысли высказывает и автор статьи Learning to acquire novel cognitive tasks with evolution, plasticity and meta-meta-learning [2021], указывая на необходимые 4 уровня вложенности цикла в таком процессе, если применять его в RL - итерации алгоритмов, задач для каждого алгоритма, эпизодов внутри задач и таймстэмпов внутри эпизодов.
В названии статьи есть небольшой обман - автор называет meta-meta-learning-ом обычный meta-learning, применённый в RL. Так что подробно мы её разбирать не будем, там грустная версия того, что было в этом посте.
Самое классное - это то, что на практике добавить этот цикл вложенности просто - нужно прогонять каждый экземпляр алгоритма в процессе его оценки не на 1 задаче, а на N задачах, и оценивать результат по кумулятивной награде по всем задачам. Но на это, конечно, нужно ещё больше вычислительных ресурсов. Когда ресёрчеры перестанут тратить миллиарды долларов на разработку костылей для языковых моделей, может быть, руки дойдут и до этого.
@knowledge_accumulator
Чтобы система обрела автономность уровня человека, ей недостаточно оптимально обучаться на случайной задаче из какого-то распределения, даже если мета-алгоритм успешно работает на заданиях не из обучающего распределения.
Нам нужен алгоритм, который умеет переиспользовать знания, полученные при решении предыдущих задач, чтобы быстро учиться чему-то новому. Но, в отличие от классического transfer learning и других few-shot подходов, она должна уметь переносить знания на задачи, радикально отличающиеся от того, что было до этого.
То есть нам нужен meta-meta-learning - обучение обучаться новым задачам после обучения старым. Похожие мысли высказывает и автор статьи Learning to acquire novel cognitive tasks with evolution, plasticity and meta-meta-learning [2021], указывая на необходимые 4 уровня вложенности цикла в таком процессе, если применять его в RL - итерации алгоритмов, задач для каждого алгоритма, эпизодов внутри задач и таймстэмпов внутри эпизодов.
В названии статьи есть небольшой обман - автор называет meta-meta-learning-ом обычный meta-learning, применённый в RL. Так что подробно мы её разбирать не будем, там грустная версия того, что было в этом посте.
Самое классное - это то, что на практике добавить этот цикл вложенности просто - нужно прогонять каждый экземпляр алгоритма в процессе его оценки не на 1 задаче, а на N задачах, и оценивать результат по кумулятивной награде по всем задачам. Но на это, конечно, нужно ещё больше вычислительных ресурсов. Когда ресёрчеры перестанут тратить миллиарды долларов на разработку костылей для языковых моделей, может быть, руки дойдут и до этого.
@knowledge_accumulator
👍16👏4😁1
AI-GAs: AI-generating algorithms, an alternate paradigm for producing general artificial intelligence [2019] - 3 столпа успеха
Я далеко не одинок в своих рассуждениях по поводу потенциала выученных, а не спроектированных AI-алгоритмов. Наткнулся на статью на прошлой неделе и был удивлён количеством схожих мыслей у нас с автором.
Он обращается к ресёрчерам - если бы вы вернулись на 15 лет назад с текущими знаниями, вы бы посоветовали людям исследовать фичи HOG и SIFT для задач компьютерного зрения (знаете, что это?) или заниматься алгоритмами, которые учат фичи самостоятельно?
Но не будем особо останавливаться на этом. Автор пишет, что обучаемые AI-алгоритмы держатся на 3 столпах:
1) Обучение архитектур - это про Neural Architecture Search и всё вокруг
2) Обучение алгоритмов обучения - это Meta-Learning
3) Эффективная среда для обучения
Первый пункт исследуется активно, второй чуть менее активно. Существуют способы даже объединить их в одну вещь, как делают в моём любимом VSML.
А вот с третьим пунктом пока сложно. Автор рассуждает о разных аспектах обучающих сред для meta-learning систем. Непросто задизайнить среду, которая будет стимулировать агента именно обучаться обучаться, а не запоминать, чтобы при этом она была разнообразной и подходящей сложности. Вполне возможно, мы разработаем какое-то параметризуемое огромное пространство задач, и параметры будут оптимизироваться автоматически параллельно с алгоритмом, чтобы задачи были оптимальные по сложности и разнообразию.
Некоторые аспекты этого присутствуют в обучении AlphaZero (self-play), другие в Ada (огромное пространство параметров задач), но, на мой вкус, пока что прям удачного решения придумано не было. До этого мы пока ещё не доросли.
@knowledge_accumulator
Я далеко не одинок в своих рассуждениях по поводу потенциала выученных, а не спроектированных AI-алгоритмов. Наткнулся на статью на прошлой неделе и был удивлён количеством схожих мыслей у нас с автором.
Он обращается к ресёрчерам - если бы вы вернулись на 15 лет назад с текущими знаниями, вы бы посоветовали людям исследовать фичи HOG и SIFT для задач компьютерного зрения (знаете, что это?) или заниматься алгоритмами, которые учат фичи самостоятельно?
Но не будем особо останавливаться на этом. Автор пишет, что обучаемые AI-алгоритмы держатся на 3 столпах:
1) Обучение архитектур - это про Neural Architecture Search и всё вокруг
2) Обучение алгоритмов обучения - это Meta-Learning
3) Эффективная среда для обучения
Первый пункт исследуется активно, второй чуть менее активно. Существуют способы даже объединить их в одну вещь, как делают в моём любимом VSML.
А вот с третьим пунктом пока сложно. Автор рассуждает о разных аспектах обучающих сред для meta-learning систем. Непросто задизайнить среду, которая будет стимулировать агента именно обучаться обучаться, а не запоминать, чтобы при этом она была разнообразной и подходящей сложности. Вполне возможно, мы разработаем какое-то параметризуемое огромное пространство задач, и параметры будут оптимизироваться автоматически параллельно с алгоритмом, чтобы задачи были оптимальные по сложности и разнообразию.
Некоторые аспекты этого присутствуют в обучении AlphaZero (self-play), другие в Ada (огромное пространство параметров задач), но, на мой вкус, пока что прям удачного решения придумано не было. До этого мы пока ещё не доросли.
@knowledge_accumulator
👍13
Discovering Reinforcement Learning Algorithms [2020] - out-of-distribution meta-RL из древней эпохи
Не так давно мне в комментариях порекомендовали эту статью, где авторы мета-обучают RL-алгоритм на простых задачах, а затем его в меру удачно применяют на более сложных.
1) У нас есть модель агента, выдающая по состоянию s вероятностную стратегию pi и какой-то вектор y.
2) Кроме этого, у нас есть "сеть-учитель", которая и является мета-моделью. Применяется она так: после того, как агент сгенерировал траекторию из pi и y в среде, мы подаёт их в мета-модель, причём в обратном порядке. На выходе мета-модель генерирует таргеты для обучения модели.
3) Агента просто обучают с помощью ошибки между его выдачей и выданными таргетами.
4) Мета-модель обучается с помощью обычного RL. Производительность берётся у агента после его обучения, а производная берётся у действий самого агента в конце обучения. То есть нужно делать бэкпроп через весь процесс обучения агента, чтобы посчитать градиенты мета-модели.
5) Это всё не влезает в память и нестабильно работает, поэтому частично обрубают градиенты и регуляризуют обучение.
В результате модель обходит человека в ~20% игр, обходит также и некоторые классические алгоритмы в части игр, хотя мета-модель обучали только на игрушечных задачах.
Мне кажется, что само понимание, что нужно учить мета-алгоритм, который не затачивается под домен (потому что получает на вход только историю действий и какие-то вспомогательные векторы) - это круто, авторы упоминают второй столп из предыдущего поста, но выбранная мета-архитектура и параметризация вызывает огромное количество вопросов.
@knowledge_accumulator
Не так давно мне в комментариях порекомендовали эту статью, где авторы мета-обучают RL-алгоритм на простых задачах, а затем его в меру удачно применяют на более сложных.
1) У нас есть модель агента, выдающая по состоянию s вероятностную стратегию pi и какой-то вектор y.
2) Кроме этого, у нас есть "сеть-учитель", которая и является мета-моделью. Применяется она так: после того, как агент сгенерировал траекторию из pi и y в среде, мы подаёт их в мета-модель, причём в обратном порядке. На выходе мета-модель генерирует таргеты для обучения модели.
3) Агента просто обучают с помощью ошибки между его выдачей и выданными таргетами.
4) Мета-модель обучается с помощью обычного RL. Производительность берётся у агента после его обучения, а производная берётся у действий самого агента в конце обучения. То есть нужно делать бэкпроп через весь процесс обучения агента, чтобы посчитать градиенты мета-модели.
5) Это всё не влезает в память и нестабильно работает, поэтому частично обрубают градиенты и регуляризуют обучение.
В результате модель обходит человека в ~20% игр, обходит также и некоторые классические алгоритмы в части игр, хотя мета-модель обучали только на игрушечных задачах.
Мне кажется, что само понимание, что нужно учить мета-алгоритм, который не затачивается под домен (потому что получает на вход только историю действий и какие-то вспомогательные векторы) - это круто, авторы упоминают второй столп из предыдущего поста, но выбранная мета-архитектура и параметризация вызывает огромное количество вопросов.
@knowledge_accumulator
👍17
Сегодня у меня для вас потрясающее видео вместо статьи.
Не стоит переоценивать разницу интеллекта у человека и остальных обезьян. Как я уже писал ранее, эволюции потребовалось не так много времени, чтобы доработать интеллект от того, который требуется для выживания животных в природе, до того, который есть у нас. Наслаждайтесь 😄
Ставь 🙊, если хотел бы когда-нибудь потусить с Канзи!
https://youtu.be/UKpFoYqN9-0
Не стоит переоценивать разницу интеллекта у человека и остальных обезьян. Как я уже писал ранее, эволюции потребовалось не так много времени, чтобы доработать интеллект от того, который требуется для выживания животных в природе, до того, который есть у нас. Наслаждайтесь 😄
Ставь 🙊, если хотел бы когда-нибудь потусить с Канзи!
https://youtu.be/UKpFoYqN9-0
YouTube
I Taught an Ape How to Play Minecraft
🕹️Break up with basic browsers. Get Opera GX here: https://operagx.gg/ChrisDaCow Sponsored by Opera GX!
GET KANZI MERCH ❤️🎉https://www.apeinitiative.org/store
▼ Watch UNCUT Kanzi Footage ▼
https://www.patreon.com/chrisdacow
🎬 Behind the Scenes & Extra…
GET KANZI MERCH ❤️🎉https://www.apeinitiative.org/store
▼ Watch UNCUT Kanzi Footage ▼
https://www.patreon.com/chrisdacow
🎬 Behind the Scenes & Extra…
🙈7🙉7🙊7
Как выживать при таком количестве статей?
Точнее, меня интересует следующее - как извлекать конкретные статьи/идеи из массы текстов? Пока не будем говорить о структурировании того, что вы уже прочитали.
Языковые модели
Кажется, что они очень натурально вписываются в эту задачу. Я их обычно и рассматриваю как способ искать по контенту в интернете с языковым интерфейсом, но на моей практике искать статьи получалось плохо. То модель не может вытянуть статью по намёку на неё, то выдумывает правдоподобные названия статей, которых не существует.
Общаться с людьми
На мой взгляд это крутой способ, потому что человек по человеческим меркам неплохо извлекает знания из сырых данных и потом умеет про это разговаривать, поэтому если вы понимаете, что ваша идея / запрос лежит в области специализации какого-то человека, идите к нему. Проблема, однако, возникает, если у вас своя атмосфера и ваши идеи никому вокруг неинтересны (😭)
Специальные сервисы
Вполне вероятно, что комбинация языковых моделей с костылями, а также с социальной составляющей позволит решить проблему. Грамотный поиск, рекомендательная система статей и т.д. Не так давно мне писал разработчик сервиса https://synthical.com/, и мне кажется, это шаг в правильном направлении. Среди фичей есть LLM-упрощалка статей, similarity search статей, простые рекомендации. Я искренне хочу, чтобы качественный уровень абстракции над arxiv-ом таки появился и прошу по возможности участвовать в тестировании таких инноваций. Фидбек, ваши пожелания, если есть, пишите прямо @mixedenn.
И вообще, буду рад вашим мыслям на эту тему в комментариях!
Точнее, меня интересует следующее - как извлекать конкретные статьи/идеи из массы текстов? Пока не будем говорить о структурировании того, что вы уже прочитали.
Языковые модели
Кажется, что они очень натурально вписываются в эту задачу. Я их обычно и рассматриваю как способ искать по контенту в интернете с языковым интерфейсом, но на моей практике искать статьи получалось плохо. То модель не может вытянуть статью по намёку на неё, то выдумывает правдоподобные названия статей, которых не существует.
Общаться с людьми
На мой взгляд это крутой способ, потому что человек по человеческим меркам неплохо извлекает знания из сырых данных и потом умеет про это разговаривать, поэтому если вы понимаете, что ваша идея / запрос лежит в области специализации какого-то человека, идите к нему. Проблема, однако, возникает, если у вас своя атмосфера и ваши идеи никому вокруг неинтересны (😭)
Специальные сервисы
Вполне вероятно, что комбинация языковых моделей с костылями, а также с социальной составляющей позволит решить проблему. Грамотный поиск, рекомендательная система статей и т.д. Не так давно мне писал разработчик сервиса https://synthical.com/, и мне кажется, это шаг в правильном направлении. Среди фичей есть LLM-упрощалка статей, similarity search статей, простые рекомендации. Я искренне хочу, чтобы качественный уровень абстракции над arxiv-ом таки появился и прошу по возможности участвовать в тестировании таких инноваций. Фидбек, ваши пожелания, если есть, пишите прямо @mixedenn.
И вообще, буду рад вашим мыслям на эту тему в комментариях!
Synthical
Synthical | AI-powered research environment
Check out the latest papers about Machine Learning, Biology, Physics, and more.
👍24❤2🤔2
Paired Open-Ended Trailblazer (POET) [2019] - обучаем задачи и агентов одновременно
Подобрать оптимальную задачу для обучения алгоритма - это сложно, и в разные моменты подходит разная задача. В данной статье рассматривают open-ended сценарий обучения - т.е. мы хотим, чтобы у нас была популяция агентов, решающих разнообразные сложные задачи.
1) Определим пространство задач - это "полоса с препятствиями", которую проходит "робот" (2-D bipedal-walker). На полосе 5 видов препятствий, и параметры среды определяют их "сложность" - высоту пня, ширину ямы и т.д., эти параметры и есть "вектор задачи".
2) Инициализируем популяцию пар [среда, агент] одной парой [пустая полоса, рандомный агент]
3) Во каждой паре среда-агент в популяции обучаем агента на своей среде, обновляем его параметры (алгоритм не важен, в данном случае ES).
4) Раз в несколько итераций среды мутируют - из каждой среды появляются K детей (копия + шум), и к ним в пару прикрепляется лучший агент из всей популяции. Фильтруем пары - задача не должна быть слишком простой или слишком сложной, отсекаем по награде. Если в итоге сред больше, чем M, оставляем M максимально далёких друг от друга в пространстве сред.
5) Иногда делаем "трансфер" - проверяем на каждой среде из популяции каждого агента и заменяем агента в паре на самого лучшего.
В результате наблюдаем интересные феномены:
1) Если после обучения взять случайную задачу из популяции и попытаться выучить алгоритм с нуля, то не получится - из-за высокой сложности извлечь полезный сигнал не получается.
2) Даже если учить не с нуля, а попробовать "вручную" двигать параметры от инициализации до целевой задачи, результат всё равно получается хуже. Непонятно, каким образом нужно двигаться к задаче для оптимального обучения на ней.
На мой взгляд, работа крайне интересная, хотя весь алгоритм довольно сложно устроен и в нём много гиперпараметров. Буду изучать, что есть в более новых работах на эту тему, после этого уже будем делать большие выводы.
@knowledge_accumulator
Подобрать оптимальную задачу для обучения алгоритма - это сложно, и в разные моменты подходит разная задача. В данной статье рассматривают open-ended сценарий обучения - т.е. мы хотим, чтобы у нас была популяция агентов, решающих разнообразные сложные задачи.
1) Определим пространство задач - это "полоса с препятствиями", которую проходит "робот" (2-D bipedal-walker). На полосе 5 видов препятствий, и параметры среды определяют их "сложность" - высоту пня, ширину ямы и т.д., эти параметры и есть "вектор задачи".
2) Инициализируем популяцию пар [среда, агент] одной парой [пустая полоса, рандомный агент]
3) Во каждой паре среда-агент в популяции обучаем агента на своей среде, обновляем его параметры (алгоритм не важен, в данном случае ES).
4) Раз в несколько итераций среды мутируют - из каждой среды появляются K детей (копия + шум), и к ним в пару прикрепляется лучший агент из всей популяции. Фильтруем пары - задача не должна быть слишком простой или слишком сложной, отсекаем по награде. Если в итоге сред больше, чем M, оставляем M максимально далёких друг от друга в пространстве сред.
5) Иногда делаем "трансфер" - проверяем на каждой среде из популяции каждого агента и заменяем агента в паре на самого лучшего.
В результате наблюдаем интересные феномены:
1) Если после обучения взять случайную задачу из популяции и попытаться выучить алгоритм с нуля, то не получится - из-за высокой сложности извлечь полезный сигнал не получается.
2) Даже если учить не с нуля, а попробовать "вручную" двигать параметры от инициализации до целевой задачи, результат всё равно получается хуже. Непонятно, каким образом нужно двигаться к задаче для оптимального обучения на ней.
На мой взгляд, работа крайне интересная, хотя весь алгоритм довольно сложно устроен и в нём много гиперпараметров. Буду изучать, что есть в более новых работах на эту тему, после этого уже будем делать большие выводы.
@knowledge_accumulator
👍7🔥6
Generative Teaching Networks: Accelerating Neural Architecture Search byLearning to Generate Synthetic Training Data [2019]
Когда мы оптимизируем архитектуру нейронной сети, существует проблема - чтобы оценить архитектуру, нам нужно прогнать её обучение, и в случае какого-нибудь ImageNet это проблематично.
Данная работа предлагает заменить обучение на всех тренировочных данных обучением на специально сгенерированном маленьком датасете, который содержит "оптимальные" сэмплы для обучения нейросети.
Как обучаем датасет?
1) Берём какую-нибудь свёрточную архитектуру и ваш тестовый датасет
2) Фиксируем, что наш синтетический датасет состоит из N батчей по K образцов.
3) Вместо того, чтобы учить напрямую N*K картинок, как параметры, мы учим генеративную сеть и N*K векторов шумов, которые в неё будут подаваться. Таким образом кол-во параметров становится гораздо меньше.
4) Обучаемся, пробрасывая "мета-градиенты" - считаем ошибку модели, которую прогнали на всех тренировочных данных, и потом применили на тестовых данных. Пробрасываем градиенты бэкпропом через весь процесс обучения до каждого шума и генеративной сети (см. картинку).
Далее этот датасет можно заморозить и гонять на нём нейросеть во время поиска нейронной архитектуры. Авторы сравнивают с baseline-ом, в котором берётся N*K реальных картинок, получается лучше.
Идея интересная, но есть 2 вопроса:
1) Какая здесь интуиция? Что именно мы делаем, обучая этот датасет? Какую именно информацию мы в него записываем, что это помогает быстрее учиться? На языке вертится, но сформулировать не могу, буду рад почитать, что вы про это думаете.
2) Насколько эта идея опирается на то, что это поиск параметров архитектуры для нейросетей определённого вида? Во многом вопрос связан с предыдущим. Интересно было бы, например, обучить датасет для свёрточной сети, а потом обучить на нём визуальный трансформер. И можно ли этот подход применять при обучении алгоритма "произвольной формы".
@knowledge_accumulator
Когда мы оптимизируем архитектуру нейронной сети, существует проблема - чтобы оценить архитектуру, нам нужно прогнать её обучение, и в случае какого-нибудь ImageNet это проблематично.
Данная работа предлагает заменить обучение на всех тренировочных данных обучением на специально сгенерированном маленьком датасете, который содержит "оптимальные" сэмплы для обучения нейросети.
Как обучаем датасет?
1) Берём какую-нибудь свёрточную архитектуру и ваш тестовый датасет
2) Фиксируем, что наш синтетический датасет состоит из N батчей по K образцов.
3) Вместо того, чтобы учить напрямую N*K картинок, как параметры, мы учим генеративную сеть и N*K векторов шумов, которые в неё будут подаваться. Таким образом кол-во параметров становится гораздо меньше.
4) Обучаемся, пробрасывая "мета-градиенты" - считаем ошибку модели, которую прогнали на всех тренировочных данных, и потом применили на тестовых данных. Пробрасываем градиенты бэкпропом через весь процесс обучения до каждого шума и генеративной сети (см. картинку).
Далее этот датасет можно заморозить и гонять на нём нейросеть во время поиска нейронной архитектуры. Авторы сравнивают с baseline-ом, в котором берётся N*K реальных картинок, получается лучше.
Идея интересная, но есть 2 вопроса:
1) Какая здесь интуиция? Что именно мы делаем, обучая этот датасет? Какую именно информацию мы в него записываем, что это помогает быстрее учиться? На языке вертится, но сформулировать не могу, буду рад почитать, что вы про это думаете.
2) Насколько эта идея опирается на то, что это поиск параметров архитектуры для нейросетей определённого вида? Во многом вопрос связан с предыдущим. Интересно было бы, например, обучить датасет для свёрточной сети, а потом обучить на нём визуальный трансформер. И можно ли этот подход применять при обучении алгоритма "произвольной формы".
@knowledge_accumulator
👍12🤔4
Evolving Curricula with Regret-Based Environment Design [2022] - другой подход к автогенерации уровней
В одном из недавних постов я разобрал работу по автогенерации задач для оптимального обучения RL-агентов, и сегодня мы разберём её довольно непохожую альтернативу, чтобы у вас сложилось впечатление о том, в насколько зачаточном состоянии пока находится эта область.
1) Вместо популяции агентов у нас есть теперь один агент, которого мы обучаем решать сразу большое разнообразие задач.
2) Поддерживаем популяцию задач. Но теперь мы не обучаем их, а просто сэмплируем из генератора и выбираем те, что подходят.
3) Как понять, что среда нам подходит? В этом моменте происходит что-то странное. В статье, которую они цитируют и которую вроде как копируют в этом моменте, используется сумма модулей ошибки в RL-обучении на этой среде, это имеет свою логику. Но в данной работе используется "positive value loss", то есть вместо модулей берётся сумма только позитивных ошибок. Смысл это махинации я не совсем понял, но авторы пытаются это объяснить с помощью теории игр.
4) На каждой итерации берём рандомную среду из популяции и обучаем агента на ней каким-нибудь RL-алгоритмом. Если среда стала "плохой" по критерию из п.3, её можно выкинуть
В результате засчёт того, что агент всего один, вроде как, получается достичь того же уровня сложности решаемых задач, что и в POET, но гораздо меньшими вычислительными затратами.
На самом деле, глядя на всё это, у меня сложилось впечатление, что конструировать вручную алгоритм подбора задачи - это тупиковый путь. Что я бы предложил взамен?
1) Сформулировать правило выбора задачи, как параметрическую модель. Например, чтобы модель выдавала вектор параметров среды, которую она сейчас хочет порешать, и мы бы конструировали по нему задачу. Она должна принимать на вход всю историю обучения.
2) Оптимизировать её той же генетикой, оценивая способность агента решать задачи определённого уровня сложности через X шагов / компьюта / времени.
Да, это раздувает затраты ресурсов, но, на мой взгляд, цель исследователей как раз будет найти такие эвристики и параметризацию, которые смогут ускорить процесс мета-оптимизации. Буду искать, кстати, есть ли уже работы с похожей идеей.
@knowledge_accumulator
В одном из недавних постов я разобрал работу по автогенерации задач для оптимального обучения RL-агентов, и сегодня мы разберём её довольно непохожую альтернативу, чтобы у вас сложилось впечатление о том, в насколько зачаточном состоянии пока находится эта область.
1) Вместо популяции агентов у нас есть теперь один агент, которого мы обучаем решать сразу большое разнообразие задач.
2) Поддерживаем популяцию задач. Но теперь мы не обучаем их, а просто сэмплируем из генератора и выбираем те, что подходят.
3) Как понять, что среда нам подходит? В этом моменте происходит что-то странное. В статье, которую они цитируют и которую вроде как копируют в этом моменте, используется сумма модулей ошибки в RL-обучении на этой среде, это имеет свою логику. Но в данной работе используется "positive value loss", то есть вместо модулей берётся сумма только позитивных ошибок. Смысл это махинации я не совсем понял, но авторы пытаются это объяснить с помощью теории игр.
4) На каждой итерации берём рандомную среду из популяции и обучаем агента на ней каким-нибудь RL-алгоритмом. Если среда стала "плохой" по критерию из п.3, её можно выкинуть
В результате засчёт того, что агент всего один, вроде как, получается достичь того же уровня сложности решаемых задач, что и в POET, но гораздо меньшими вычислительными затратами.
На самом деле, глядя на всё это, у меня сложилось впечатление, что конструировать вручную алгоритм подбора задачи - это тупиковый путь. Что я бы предложил взамен?
1) Сформулировать правило выбора задачи, как параметрическую модель. Например, чтобы модель выдавала вектор параметров среды, которую она сейчас хочет порешать, и мы бы конструировали по нему задачу. Она должна принимать на вход всю историю обучения.
2) Оптимизировать её той же генетикой, оценивая способность агента решать задачи определённого уровня сложности через X шагов / компьюта / времени.
Да, это раздувает затраты ресурсов, но, на мой взгляд, цель исследователей как раз будет найти такие эвристики и параметризацию, которые смогут ускорить процесс мета-оптимизации. Буду искать, кстати, есть ли уже работы с похожей идеей.
@knowledge_accumulator
👍12
Поговорим про горький урок
Внесу свои 5 копеек по поводу эссе Ричарда Саттона, одного из крупнейших исследователей в ИИ.
Вкратце, эссе о том, что исследователи потратили тонны ресурсов на использование экспертных знаний для решения задач или улучшения алгоритмов, но в итоге лучший результат показывают алгоритмы, которые полезно применяют большие вычислительные ресурсы и полагаются на оптимизацию.
У этого эссе есть и возражения, касающиеся того, что не так уж и мало "экспертных знаний" дошло до нас - например, базовые блоки нейросетей - свёртки, функции активаций, а также алгоритмы обучения - это человеческие идеи. К тому же, всё это работает на инженерной инфраструктуре, которая была спроектирована людьми - операционные системы, процессоры и т.д.
Что могу сказать?
1) Важно разделять инфраструктуру и алгоритмы. Инфраструктура обеспечивает возможность оперировать абстракциями и надёжно проводить расчёты, она может быть как спроектирована, так и придумана человеком, но результат расчётов будет тот же самый.
2) Я бы не стал переоценивать "человеческую экспертизу" в современном ИИ. Если мы говорим о строительных блоках архитектур, так это наоборот, демонстрация нашей ущербности. Мало того, что 99.9% придумывается и выкидывается на помойку, так то, что работает - это предельно простые штуки. Как показывает AutoMLZero - дай тупому брутфорсу перебрать программы из матрично-векторых простейших операций, и он тебе придумает нейросеть. А уж про простоту идеи трансформера вы и так знаете.
3) Говорят, в немалой части задач необходимым фактором успеха был какой-нибудь экспертный костыль вроде симметричных аугментаций. Но причиной этому является то, что алгоритм обучения придуман человеком. Если бы алгоритм был оптимизирован на решаемой задаче, он бы выучил все необходимые костыли самостоятельно, и сделал бы это гораздо эффективнее нас.
На сегодняшний день я полностью согласен с Саттоном, но трактовать его надо максимально широко. Самый неправильный вывод, который тут можно сделать - "нужно просто бесконечно увеличивать трансформер, и это даст любой желаемый результат". Но на самом деле расти должна совместная параметризация архитектуры и алгоритма обучения, оптимизируемая под обучаемость новым задачам. Так мы и придём к успеху.
@knowledge_accumulator
Внесу свои 5 копеек по поводу эссе Ричарда Саттона, одного из крупнейших исследователей в ИИ.
Вкратце, эссе о том, что исследователи потратили тонны ресурсов на использование экспертных знаний для решения задач или улучшения алгоритмов, но в итоге лучший результат показывают алгоритмы, которые полезно применяют большие вычислительные ресурсы и полагаются на оптимизацию.
У этого эссе есть и возражения, касающиеся того, что не так уж и мало "экспертных знаний" дошло до нас - например, базовые блоки нейросетей - свёртки, функции активаций, а также алгоритмы обучения - это человеческие идеи. К тому же, всё это работает на инженерной инфраструктуре, которая была спроектирована людьми - операционные системы, процессоры и т.д.
Что могу сказать?
1) Важно разделять инфраструктуру и алгоритмы. Инфраструктура обеспечивает возможность оперировать абстракциями и надёжно проводить расчёты, она может быть как спроектирована, так и придумана человеком, но результат расчётов будет тот же самый.
2) Я бы не стал переоценивать "человеческую экспертизу" в современном ИИ. Если мы говорим о строительных блоках архитектур, так это наоборот, демонстрация нашей ущербности. Мало того, что 99.9% придумывается и выкидывается на помойку, так то, что работает - это предельно простые штуки. Как показывает AutoMLZero - дай тупому брутфорсу перебрать программы из матрично-векторых простейших операций, и он тебе придумает нейросеть. А уж про простоту идеи трансформера вы и так знаете.
3) Говорят, в немалой части задач необходимым фактором успеха был какой-нибудь экспертный костыль вроде симметричных аугментаций. Но причиной этому является то, что алгоритм обучения придуман человеком. Если бы алгоритм был оптимизирован на решаемой задаче, он бы выучил все необходимые костыли самостоятельно, и сделал бы это гораздо эффективнее нас.
На сегодняшний день я полностью согласен с Саттоном, но трактовать его надо максимально широко. Самый неправильный вывод, который тут можно сделать - "нужно просто бесконечно увеличивать трансформер, и это даст любой желаемый результат". Но на самом деле расти должна совместная параметризация архитектуры и алгоритма обучения, оптимизируемая под обучаемость новым задачам. Так мы и придём к успеху.
@knowledge_accumulator
👍18🤔5❤1
Поговорим про инвестирование
Мир забавно устроен. В некоторых сферах жизни истина крайне проста, но понять и принять её ты можешь, только если хорошо понимаешь вопрос. А когда ты его не понимаешь, интуитивно поверить в простой ответ ты не хочешь. На этом невежестве построена огромная индустрия, но зато это позволяет извлечь больше выгоды тем, кто знает "секрет".
Итак, 2 простые истины:
Зарабатывать инвестированием очень просто, и на это почти не нужно тратить время
Для этого всего лишь нужно открыть счёт у известного брокера (не в РФ!) и вложиться в 2 штуки:
- Продукт, основанный на широком индексе акций (типа S&P500) (пример)
- Продукт, основанный на широком индексе облигаций (пример)
Балансируете их по вкусу, индекс акций это долгосрочная волатильная доходность, индекс облигаций это стабильная доходность. Если планируете жить ещё как минимум 20 лет, берите акции на >80%.
Исторически, в среднем, если инвестировать в S&P500 50% своего дохода (если он не меняется) в течение 12 лет и реинвестировать проценты, то доход от инвестиций начнёт покрывать ваши расходы на жизнь! Да, это реально так и работает. Если не увеличивать расходы, и инвестировать "излишки" вашей растущей зарплаты, этот момент наступит ещё быстрее.
Не существует более выгодного способа
Покупка недвижимости, венчурные инвестиции, p2p кредитование, покупка золота, инвестиционные фонды, покупка отдельных акций, попытки угадать курс валют, всё это работает хуже!
Если у вас нет инсайдерской информации (см. Pelosi Index), то вы не заработаете на этом больше денег с таким же маленьким уровнем риска. Разумеется, кому-то везёт и он инвестирует в кока-колу на раннем этапе, но я говорю про математическое ожидание доходности с учётом волатильности. Иногда можно и в казино выиграть.
Я довольно долго и давно изучаю эти вопросы, и если вам интересны пруфы по каким-то отдельным аспектам, с радостью сделаю отдельные посты.
@knowledge_accumulator
Мир забавно устроен. В некоторых сферах жизни истина крайне проста, но понять и принять её ты можешь, только если хорошо понимаешь вопрос. А когда ты его не понимаешь, интуитивно поверить в простой ответ ты не хочешь. На этом невежестве построена огромная индустрия, но зато это позволяет извлечь больше выгоды тем, кто знает "секрет".
Итак, 2 простые истины:
Зарабатывать инвестированием очень просто, и на это почти не нужно тратить время
Для этого всего лишь нужно открыть счёт у известного брокера (не в РФ!) и вложиться в 2 штуки:
- Продукт, основанный на широком индексе акций (типа S&P500) (пример)
- Продукт, основанный на широком индексе облигаций (пример)
Балансируете их по вкусу, индекс акций это долгосрочная волатильная доходность, индекс облигаций это стабильная доходность. Если планируете жить ещё как минимум 20 лет, берите акции на >80%.
Исторически, в среднем, если инвестировать в S&P500 50% своего дохода (если он не меняется) в течение 12 лет и реинвестировать проценты, то доход от инвестиций начнёт покрывать ваши расходы на жизнь! Да, это реально так и работает. Если не увеличивать расходы, и инвестировать "излишки" вашей растущей зарплаты, этот момент наступит ещё быстрее.
Не существует более выгодного способа
Покупка недвижимости, венчурные инвестиции, p2p кредитование, покупка золота, инвестиционные фонды, покупка отдельных акций, попытки угадать курс валют, всё это работает хуже!
Если у вас нет инсайдерской информации (см. Pelosi Index), то вы не заработаете на этом больше денег с таким же маленьким уровнем риска. Разумеется, кому-то везёт и он инвестирует в кока-колу на раннем этапе, но я говорю про математическое ожидание доходности с учётом волатильности. Иногда можно и в казино выиграть.
Я довольно долго и давно изучаю эти вопросы, и если вам интересны пруфы по каким-то отдельным аспектам, с радостью сделаю отдельные посты.
@knowledge_accumulator
👍43🔥7❤3👎3💯1
Hardware lottery, или проблема технологического небоскрёба
Посмотрел на выходных статью и обзор на неё. Ключевая мысль статьи заключается в том, что то, выстреливает ли какая-нибудь алгоритмическая идея, во многом зависит не от "крутости" идеи, а от того, можно ли её эффективно реализовать на текущем железе.
В качестве примера в статье приводится то, что до распространения GPU люди не применяли нейронные сети, поскольку на CPU они ложатся плохо (хотя спорно, что это было самым важным фактором). Помню ещё пример - в одном из подкастов Илья Суцкевер говорил, что одним из ключевых факторов успеха трансформеров стало то, что они очень эффективно утилизируют видеокарты.
Критика этой работы заключается в основном в том, что подобная "лотерейная" ситуация совершенно неуникальна и не требует отдельного обозначения. Дело в том, что все используемые идеи и технологии базируются на каких-то более базовых идеях и технологиях. Кроме hardware есть ещё и языки программирования и фреймворки, и если вашу новую гениальную идею нельзя реализовать на существующих фреймворках, то ей придётся туго.
Кроме того, есть эффект от уже вложенных ресурсов в какие-то "ветки" развития. Например, в нейросети уже вложили миллиарды долларов, и если бы была более сильная альтернатива, она должна бы была продемонстрировать своё превосходство с гораздо меньшими затратами. Всё это является демонстрацией того, что технологический прогресс человечества - это локальная оптимизация. И прыгнуть в глобальный оптимум без промежуточных шагов мы не можем, поскольку это бы потребовало слишком много затрат на неудачные проверки.
Эффект, однако, можно сгладить. Во-первых, технологические этажи нашего здания должны быть как можно более общего назначения, а не заточены только под текущие сценарии применения. Во-вторых, нужно не забрасывать альтернативные направления исследований. Необходимый уровень здесь является делом вкуса, но на мой взгляд, кстати, не вижу совсем уж катастрофы по ним.
@knowledge_accumulator
Посмотрел на выходных статью и обзор на неё. Ключевая мысль статьи заключается в том, что то, выстреливает ли какая-нибудь алгоритмическая идея, во многом зависит не от "крутости" идеи, а от того, можно ли её эффективно реализовать на текущем железе.
В качестве примера в статье приводится то, что до распространения GPU люди не применяли нейронные сети, поскольку на CPU они ложатся плохо (хотя спорно, что это было самым важным фактором). Помню ещё пример - в одном из подкастов Илья Суцкевер говорил, что одним из ключевых факторов успеха трансформеров стало то, что они очень эффективно утилизируют видеокарты.
Критика этой работы заключается в основном в том, что подобная "лотерейная" ситуация совершенно неуникальна и не требует отдельного обозначения. Дело в том, что все используемые идеи и технологии базируются на каких-то более базовых идеях и технологиях. Кроме hardware есть ещё и языки программирования и фреймворки, и если вашу новую гениальную идею нельзя реализовать на существующих фреймворках, то ей придётся туго.
Кроме того, есть эффект от уже вложенных ресурсов в какие-то "ветки" развития. Например, в нейросети уже вложили миллиарды долларов, и если бы была более сильная альтернатива, она должна бы была продемонстрировать своё превосходство с гораздо меньшими затратами. Всё это является демонстрацией того, что технологический прогресс человечества - это локальная оптимизация. И прыгнуть в глобальный оптимум без промежуточных шагов мы не можем, поскольку это бы потребовало слишком много затрат на неудачные проверки.
Эффект, однако, можно сгладить. Во-первых, технологические этажи нашего здания должны быть как можно более общего назначения, а не заточены только под текущие сценарии применения. Во-вторых, нужно не забрасывать альтернативные направления исследований. Необходимый уровень здесь является делом вкуса, но на мой взгляд, кстати, не вижу совсем уж катастрофы по ним.
@knowledge_accumulator
👍20🔥3
EfficientZero [2021] - "data-эффективный" RL
Я давно обозначал проблему большинства методов RL - чудовищная требовательность к объёму данных в связи с необходимостью извлекать зависимости между наблюдениями в разных временных точках. Фундаментально от неё никуда не деться, если мы пытаемся учить общий RL-алгоритм на задаче с нуля, но на практике "data-эффективность" ухудшается ещё сильнее из-за несовершенства методов. Сегодня поговорим об EfficientZero - алгоритме, занимающим первое место в обучении играм Atari за 100к кадров обучения.
Алгоритм базируется на MuZero, про который я писал ранее. Этот метод обучает "модель" среды, но предсказывает не сами будущие состояния, а только будущие награды и действия самого же агента в следующих шагах. Это облегчает задачу и избавляет от ненужной задачи генерации следующего состояния. Далее по дереву этих подобий "состояния" (назовём их эмбеддингами состояния) делается поиск, как в AlphaZero. Обсудим улучшения, которые привели к победе над конкурентами.
1) Self-Supervised Consistency Loss
Это способ использовать информацию о будущем состоянии при обучении, не пытаясь его предсказать. У нас есть энкодер текущего состояния в эмбеддинг, а также сетка, которая по эмбеддингу предсказыват эмбеддинг на следующем шаге. Так вот, эта регуляризация требует, чтобы энкодер + переход от текущего состояния выдавал то же, что и энкодер от следующего. Вполне логичное требование.
2) Model-Based Off-Policy Correction
Используемый RL-метод изначально предполагает, что мы собираем данные какой-то стратегией, обновляем её и выбрасываем все данные на помойку. В связи с распределённой и асинхронной природой обучения метода на большом кластере, это нарушается, и в метод добавляются различные компенсирующие костыли. Идея этого в том, что на "предсказания будущего" агента опираются тем меньше, чем более "старая" траектория используется для обучения.
3) End-To-End Prediction of the Value Prefix
При подсчёте таргета используется предсказанная в будущем сумма наград на k шагов вперёд. Теперь мы предсказываем всю сумму одновременно, а не награды по отдельности, чтобы потом просуммировать.
Проще объяснить эти нововведения невозможно, к сожалению, за подробными объяснениями лучше обратиться к статье или обзору. Итоговый метод с очень большим отрывом побеждает всех остальных конкурентов, с чем авторов и поздравляем.
@knowledge_accumulator
Я давно обозначал проблему большинства методов RL - чудовищная требовательность к объёму данных в связи с необходимостью извлекать зависимости между наблюдениями в разных временных точках. Фундаментально от неё никуда не деться, если мы пытаемся учить общий RL-алгоритм на задаче с нуля, но на практике "data-эффективность" ухудшается ещё сильнее из-за несовершенства методов. Сегодня поговорим об EfficientZero - алгоритме, занимающим первое место в обучении играм Atari за 100к кадров обучения.
Алгоритм базируется на MuZero, про который я писал ранее. Этот метод обучает "модель" среды, но предсказывает не сами будущие состояния, а только будущие награды и действия самого же агента в следующих шагах. Это облегчает задачу и избавляет от ненужной задачи генерации следующего состояния. Далее по дереву этих подобий "состояния" (назовём их эмбеддингами состояния) делается поиск, как в AlphaZero. Обсудим улучшения, которые привели к победе над конкурентами.
1) Self-Supervised Consistency Loss
Это способ использовать информацию о будущем состоянии при обучении, не пытаясь его предсказать. У нас есть энкодер текущего состояния в эмбеддинг, а также сетка, которая по эмбеддингу предсказыват эмбеддинг на следующем шаге. Так вот, эта регуляризация требует, чтобы энкодер + переход от текущего состояния выдавал то же, что и энкодер от следующего. Вполне логичное требование.
2) Model-Based Off-Policy Correction
Используемый RL-метод изначально предполагает, что мы собираем данные какой-то стратегией, обновляем её и выбрасываем все данные на помойку. В связи с распределённой и асинхронной природой обучения метода на большом кластере, это нарушается, и в метод добавляются различные компенсирующие костыли. Идея этого в том, что на "предсказания будущего" агента опираются тем меньше, чем более "старая" траектория используется для обучения.
3) End-To-End Prediction of the Value Prefix
При подсчёте таргета используется предсказанная в будущем сумма наград на k шагов вперёд. Теперь мы предсказываем всю сумму одновременно, а не награды по отдельности, чтобы потом просуммировать.
Проще объяснить эти нововведения невозможно, к сожалению, за подробными объяснениями лучше обратиться к статье или обзору. Итоговый метод с очень большим отрывом побеждает всех остальных конкурентов, с чем авторов и поздравляем.
@knowledge_accumulator
👍13🔥4❤1
Не покупайте то, что не движется
Продолжаем эпопею об инвестировании - сегодня в меню недвижимость. Почему же это не такая хорошая идея, как кажется? В дальнейшем я буду употреблять термин "квартира", но подразумеваю при этом объекты недвижимости в целом.
Рассмотрим квартиру как генератор дохода с помощью сдачи в аренду.
Получить верхнюю оценку доходности квартиры очень просто - берём месячную стоимость аренды, умножаем на 12, делим на стоимость квартиры и умножаем на 100 - получается доходность объекта в процентах. Вот данные по разным городам США. В России результаты похожие.
Числа не впечатляют - несколько процентов годовых, меньше индекса акций. А это ведь это мы ещё не учли издержки обслуживания квартиры: затраты на ремонт, поиск клиентов, налоги и т.д. Также на всё это уходит ваше время, которое вы не тратите на заработок денег в другом месте.
Доходность посуточной сдачи гораздо выше, но это просто компенсация сильно возрастающих издержек, например, на поиск клиентов.
А что, если купить квартиру и потом дороже продать?
Обычно недвижимость - ликвидный актив, и поэтому подчиняется тому же правилу, что и любая ценная бумага - цена отражает не "сегодняшнюю" цену, а среднее ожидание этой цены в будущем.
Но специфика тут в том, что цена связана не столько с самой квартирой, сколько с тем, что вокруг - обстановка в стране, в городе, в районе, потому что это влияет на спрос. Тут, как и с ценными бумагами, вряд ли вы много раз угадаете лучше других, поэтому покупать стоит широкий актив - хотя бы индекс акций каких-нибудь девелоперов. Не забывайте только, что недвижимость, как индустрия, имеет отдельные риски.
Есть и другие опасности. Если вы покупаете квартиру в ещё несуществующем доме - она дешевле просто потому, что дом с какой-то вероятностью не построят. В России есть ещё и валютные риски - зачем нужна рублёвая доходность в 30%, если на них можно будет купить в 1.5 раза меньше долларов? Ну и самое главное - игнорируйте рекламу инвестиций в недвижимость, выгодные инвестиции не ищут инвестора!
@knowledge_accumulator
Продолжаем эпопею об инвестировании - сегодня в меню недвижимость. Почему же это не такая хорошая идея, как кажется? В дальнейшем я буду употреблять термин "квартира", но подразумеваю при этом объекты недвижимости в целом.
Рассмотрим квартиру как генератор дохода с помощью сдачи в аренду.
Получить верхнюю оценку доходности квартиры очень просто - берём месячную стоимость аренды, умножаем на 12, делим на стоимость квартиры и умножаем на 100 - получается доходность объекта в процентах. Вот данные по разным городам США. В России результаты похожие.
Числа не впечатляют - несколько процентов годовых, меньше индекса акций. А это ведь это мы ещё не учли издержки обслуживания квартиры: затраты на ремонт, поиск клиентов, налоги и т.д. Также на всё это уходит ваше время, которое вы не тратите на заработок денег в другом месте.
Доходность посуточной сдачи гораздо выше, но это просто компенсация сильно возрастающих издержек, например, на поиск клиентов.
А что, если купить квартиру и потом дороже продать?
Обычно недвижимость - ликвидный актив, и поэтому подчиняется тому же правилу, что и любая ценная бумага - цена отражает не "сегодняшнюю" цену, а среднее ожидание этой цены в будущем.
Но специфика тут в том, что цена связана не столько с самой квартирой, сколько с тем, что вокруг - обстановка в стране, в городе, в районе, потому что это влияет на спрос. Тут, как и с ценными бумагами, вряд ли вы много раз угадаете лучше других, поэтому покупать стоит широкий актив - хотя бы индекс акций каких-нибудь девелоперов. Не забывайте только, что недвижимость, как индустрия, имеет отдельные риски.
Есть и другие опасности. Если вы покупаете квартиру в ещё несуществующем доме - она дешевле просто потому, что дом с какой-то вероятностью не построят. В России есть ещё и валютные риски - зачем нужна рублёвая доходность в 30%, если на них можно будет купить в 1.5 раза меньше долларов? Ну и самое главное - игнорируйте рекламу инвестиций в недвижимость, выгодные инвестиции не ищут инвестора!
@knowledge_accumulator
👍28
Почему не бывает хороших и плохих статей
Наткнулся на статью об эксперименте, проведённом организаторами NeurIPS в 2014 году.
Случайные 10% статей, 166 штук, отправили на ревью не к одной комиссии, а к двум, причём первая набиралась из одной случайной половины людей, а вторая из другой. Получили следующий результат:
1) 22 статьи были приняты обеими комиссиями
2) 43 статьи были приняты только одной комиссией (по 22 и 21)
3) 101 статья была не принята ни одной комиссией
Так что половина статей на топовой конференции по ML попадает туда рандомно.
Спустя эти годы, организаторы посчитали цитируемость принятых статей с этой конференции (как логарифм от кол-ва цитат) и посчитали её корреляцию с разными оценками ревьюеров. Смотрели 3 вещи - оценка качества; предсказание того, что статья принесёт большой вклад; уверенность ревьюера в выданной оценке. Самая большая корреляция - аж 0.25! - у последнего.
К чему это я? На мой взгляд, идея того, что можно придумать процедуру, которая "объективно" отбирает хорошие статьи, изначально ошибочна. Это не значит, что все они одинаково полезные, они полезные каждому по-разному. И на большое количество статей сообщество могло бы отвечать более качественно, чем "выбрать 3 случайных желающих специалистов и поставить оценку".
А может быть, в ML статьи вообще не нужны?
1) Более прикладные исследования, нацеленные на результат, отлично можно оценивать с помощью вещей типа paperswithcode или kaggle, в зависимости от временного горизонта. Когда мы оцениваем результат, это нужно делать не с помощью метода "каждый сам у себя делает табличку и сравнивает себя с конкурентами". И, кроме того, прикладное исследование без публикации кода полезно примерно на 20%. Даже крупному бизнесу так было бы в рекламных целях интересно спонсировать "команды" - по сути как в киберспорте, и все бы ориентировались на результат, а не тупые отчёты.
2) Обмен идеями в процессе фундаментальных (теоретических) исследований с помощью статей - это доисторический формат, соответствующий письмам в конвертах и голубиной почте. Интернет позволяет исследователям по всему миру совместно работать, брейнштормить, спорить. Часто возникшая полезная мысль может быть написана как один твит. Уверен, что если бы исследователи не пытались высасывать из себя статьи без перерыва, а просто общались открыто в интернете и обсуждали идеи и темы, в которые искренне верят, даже 90% времени тратя просто на споры, брейнштормы и размышления, прогресс шёл бы гораздо быстрее.
А вы что думаете?
@knowledge_accumulator
Наткнулся на статью об эксперименте, проведённом организаторами NeurIPS в 2014 году.
Случайные 10% статей, 166 штук, отправили на ревью не к одной комиссии, а к двум, причём первая набиралась из одной случайной половины людей, а вторая из другой. Получили следующий результат:
1) 22 статьи были приняты обеими комиссиями
2) 43 статьи были приняты только одной комиссией (по 22 и 21)
3) 101 статья была не принята ни одной комиссией
Так что половина статей на топовой конференции по ML попадает туда рандомно.
Спустя эти годы, организаторы посчитали цитируемость принятых статей с этой конференции (как логарифм от кол-ва цитат) и посчитали её корреляцию с разными оценками ревьюеров. Смотрели 3 вещи - оценка качества; предсказание того, что статья принесёт большой вклад; уверенность ревьюера в выданной оценке. Самая большая корреляция - аж 0.25! - у последнего.
К чему это я? На мой взгляд, идея того, что можно придумать процедуру, которая "объективно" отбирает хорошие статьи, изначально ошибочна. Это не значит, что все они одинаково полезные, они полезные каждому по-разному. И на большое количество статей сообщество могло бы отвечать более качественно, чем "выбрать 3 случайных желающих специалистов и поставить оценку".
А может быть, в ML статьи вообще не нужны?
1) Более прикладные исследования, нацеленные на результат, отлично можно оценивать с помощью вещей типа paperswithcode или kaggle, в зависимости от временного горизонта. Когда мы оцениваем результат, это нужно делать не с помощью метода "каждый сам у себя делает табличку и сравнивает себя с конкурентами". И, кроме того, прикладное исследование без публикации кода полезно примерно на 20%. Даже крупному бизнесу так было бы в рекламных целях интересно спонсировать "команды" - по сути как в киберспорте, и все бы ориентировались на результат, а не тупые отчёты.
2) Обмен идеями в процессе фундаментальных (теоретических) исследований с помощью статей - это доисторический формат, соответствующий письмам в конвертах и голубиной почте. Интернет позволяет исследователям по всему миру совместно работать, брейнштормить, спорить. Часто возникшая полезная мысль может быть написана как один твит. Уверен, что если бы исследователи не пытались высасывать из себя статьи без перерыва, а просто общались открыто в интернете и обсуждали идеи и темы, в которые искренне верят, даже 90% времени тратя просто на споры, брейнштормы и размышления, прогресс шёл бы гораздо быстрее.
А вы что думаете?
@knowledge_accumulator
👍39🔥5👎2🤷2🤔1🥴1