Оригинал Эвана Хубинджера.
***
«Взлом градиента» – это термин, который я в последнее время использую для описания явления, когда обманчиво согласованный меса-оптимизатор обладает способностью намеренно действовать так, чтобы заставить градиентный спуск обновить его определённым образом. В Рисках Выученной Оптимизации, мы указали на эту возможность в сноске:
Кроме того, обманчиво согласованный меса-оптимизатор будет мотивирован создать систематическую склонность, предотвращающую изменение меса-цели базовым оптимизатором. В контексте локальных оптимизационных процессов обманчивый меса-оптимизатор может «взломать» свой собственный градиент (например, сделав себя более «хрупким» при смене цели), чтобы удостовериться, что базовый оптимизатор подправит его так, чтобы оставить его меса-цель нетронутой.
Однако, за пределами этой сноски особого обсуждения этого явления не было, я думаю – зря, к нему определённо стоит присмотреться.
К примеру, вот история о взломе градиента, которой я особенно обеспокоен. Предположим, вы обучаете модель, и она стала обманчивой. Вас это не беспокоит, потому что у вас есть удовлетворительные инструменты прозрачности, и вы уверены, что они могут засечь любое обманчивое мышление, которое может выполнять модель. Если она думает о том, как вас обмануть, то ваши инструменты это заметят, и вы будете знать, что надо выкинуть модель и начать заново. Однако, ваши инструменты прозрачности весьма затратны в применении, так что вы можете себе позволить применить их только один раз, и планируете сделать это после обучения и перед развёртыванием модели. Если ваша модель обманчива, то она может всё это знать – в частности, она может знать, что если она останется обманчивой, то будет поймана.
Всё же есть кое-что, что она может сделать в этой ситуации, чтобы быть способной предать вас и способствовать тому, что она хочет, чтобы произошло при развёртывании. Конкретно: она может взломать свой собственный градиент и вызвать появление новой модели, которая всё ещё выполняет всё то же обманчивое поведение, но не совершая никакого детектируемого обманчивого мышления. Например, новая модель исполняет обманчивое поведение не потому, что она пытается действовать обманчиво, а просто потому, что это жёстко закодированная часть её алгоритма, или потому, что у неё плохая прокси-цель, или из-за ещё какого-нибудь дефекта, который может быть сложнее заметить, чем обычную обманчивость.
Как такая обманчивая модель может совершить такой взлом градиента? Ну, я не думаю, что это в самом деле так уж сложно, если она уже дошла до рассмотрения этого как стратегии. Во-первых, заметим, что раз градиентный спуск – это локальный оптимизационный процесс, ей нет нужды изменять глобальный минимум, или даже локальный – её просто надо создать в ландшафте функции потерь овраг, который направит градиент в нужном ей направлении.
В сноске приводился один пример этого, в котором модель проверяет, удовлетворяет ли её цель некоему критерию, и работает очень плохо, если это не так. Если модель дойдёт до того, чтобы действительно из-за этого провалиться, то градиентный спуск попросту избавится от этой проверки – но трюк в том, чтобы так туда и не добраться. Имея такую проверку, модель уверяется, что градиентный спуск не изменит её цель, потому что изменение цели (при фиксированных прочих параметрах, на что и смотрит градиентный спуск, ведь он вычисляет частные производные) приведёт к плохой работе.
Случай обманчивых моделей, пытающихся стереть свидетельства своей обманчивости, не настолько прямолинеен, но я думаю, что в такой ситуации тоже можно сделать что-то похожее. Это особенно верно, если модель обладает способностью читать и писать в какое-то состояние (как, например, RNN или трансформер, который имеет доступ к своему предыдущему выводу). К примеру, она может записать обязательство следовать жёстко закодированной стратегии всегда следовать обнаруженным ей обязательствам, так что она никогда больше не будет думать об обманчивости, ставшей причиной прочитанной стратегии.
Итак, это проблема – как нам её решить? Ну, в случае выше есть простое решение, просто запускать свои инструменты прозрачности и во время обучения – не только в конце – так что вы сможете отловить обманчивость, как только она возникнет. Я думаю, это правильное решение[1], но стоит заметить, что оно добавляет дополнительные требования к вашим инструментам прозрачности – они должны быть достаточно дёшевы, чтобы их можно было использовать весь процесс обучения. Это может быть не так уж плохо, если вы не проводите так очень много шагов градиентного спуска, а вместо этого просто используете большие модели и огромные пакеты данных – и есть некоторые свидетельства, что это и есть самый эффективный способ обучать нейросети. Всё же, я думаю, что некоторые техники прозрачности лучше подходят к применению по ходу обучения, чем другие. Так что возможность взлома градиента предполагает, что нам следует сосредотачиваться больше на тех техниках, которые позволят нам понять не просто одну модель, но и всю историю её появления.[2]
***
- Это одна из причин, почему я интересуюсь, например, происхождением оптимизации. ↩︎
- Пример техники, которая, как я думаю, хорошо сюда подходит: одно из больших нынешних исследований команды прояснения OpenAI – это «различие моделей», про попытку понять, чем в точности две похожие модели отличаются одна от другой. В сравнении с другими подходами, которые просто сосредоточены на понимании отельной модели, различие моделей может быть весьма полезным для понимания всего процесса обучения, ведь можно исследовать различия на каждом шаге градиентного спуска.