Регулярно вижу, как народ криво формулирует запросы, а потом говорит что ChatGPT не работает.
Так в контексте "заменить программиста" это и есть "не работает": если для правильной формулировки вопроса нужно быть программистом, то инструмент не заменяет программиста. Помогает - да (Copilot реально ускоряет работу), но не заменяет.
либо ссылки на ресурсы которые не будут удалены за всё время существования эвента.
Ну так в этом и проблема: с точки зрения клиента после возвращения из unsubscribe() эвент больше не существует. А в вашем решении получается, что каких-либо гарантий о том, когда именно он прекращает существовать, у клиента нет вообще (при обходе вектора предыдущий обработчик взял и вызвал sleep(20)).
С практической стороны, если хочется создать обработчик что-то делающий с объектом, то что прикажете делать в деструкторе этого объекта? Никакие умные указатели в полях объекта не помогут, объект должен умереть. Гарантировать что деструктор не будет вызван во время вызова notify()?
Беглый гуглинг подсказывает мне, что даже новорождённый слонёнок ростом около 90 см. Не, не пройдёт. (У Перельмана формулировка была "проскочит ли мышь", с последующим комментарием "проскочит даже упитанный кот".)
Как обратная связь: из текста статьи было совершенно не очевидно что она ссылается на другую.
По делу, кратко (поскольку это другая статья): там не подход, там очень общие слова про подход без конкретных алгоритмов. "Идеальный" (в некотором определении идеального) алгоритм поиска алгоритмов называется "индукция Соломонова" и невычислим. "Идеальный" алгоритм сохранения знаний - сохранение полного цифрового потока, осмысленная работа с которым за разумное время опять-же невозможна. Идеального представления данных не бывает (см. разные теоремы о запрете бесплатных завтраков), бывают только хаки, которые работают именно в данном мире, а не во всех мыслимых, или хотя бы во всех мыслимых вычислимых мирах.
Пока вы не привели конкретной модели взаимодействия агента с миром, хотя бы чисто теоретического конструкта уровня AIXI, любые словесные рассуждения "об универсальном представлении знаний" - это, извините, ни о чём. (А объяснение плохо формализованных конструктов вроде "совести" через никак не формализованные или хотя бы подтверждённые штуки вроде "души", гм, не наполняет меня как читателя оптимизмом.)
0) По-моему имеет смысл отвечать нажатием кнопки "Ответить" под сообщением, чтобы читателям комментариев была видна структура разговора.
1) Если вы обсуждаете опасности ИИ и исходите из предположения что некоторые существенные на сегодня проблемы решены, то а) это имело бы смысл проговорить в тексте; б) неясно чем это полезнее анализа "если мы знаем как создать безопасный ИИ и имеем ресурсы и желание это сделать, то ИИ может быть безопасным".
Обучение будет состоять в том, что отказ элемента или системы в целом должны будут отмечаться, как отрицательная ситуация. В результате обобщения будут выделяться состояния системы, предшествовавшие отрицательным ситуациям, и отмечаться, как опасные.
Откуда вы это взяли? Это же одна из самых больших проблем безопасности современных ИИ - они строят правила, про которые известно, что а) на обучающей выборке это правило даёт (почти) вот такие результаты; б) из всех правил удовлетворяющих а), выбранное удовлетворяет некоторому постороннему условию оптимизации (обычно - что сумма квадратов параметров минимальна).
Правил, которые бы соответствовали а) - много. Для любых "достаточно новых" входов правило имеет право давать любые результаты: к примеру, правило "делать блинчики с сахаром" и правило "делать блинчики с сахаром если на вход не попадалось решения RSA-2048, иначе делать блинчики с цианидом" одинаково совместимы с обучающей выборкой. Интуитивно, правило б) чем-то похоже на идею "самое простое правило из всех удовлетворяющих а)" (a.k.a. inductive bias), но это понятие "простого" довольно заметно отличается от человеческого. Легче всего это видеть на классификации изображений: ИНС проводит какие-то границы в пространстве наборов пикселей, но они проходят сильно не так как человеческие.
Поэтому любая фраза "в результате обобщения будут <правило, описанное текстом короче гигабайта>" автоматически подозрительна: если вы не предприняли каких-то специальных мер чтобы ИИ-обобщение попадало в очень малое число таких способов проводить границы, которые допускают компактное описание человеческим языком - то странно ожидать что вы туда попадёте.
грубо говоря сейчас все товары вокруг дороже на 50 рублей стоят просто потому что вы можете их банковской картой оплатить, и если вы платите наличкой то продавец просто получает доп.прибыль.
Вот на это уточнение: продавец получает доп. прибыль, но наличкой. А у налички свои минусы: а) нужно тратить время и силы на пересчёт; б) нужно платить за инкассацию; в) на пересчёте кассы периодически обнаруживается несоответствие расчётной суммы и реальной. И чем крупнее продавец, тем эти проблемы неприятнее.
Это берёте любой язык по вкусу, главное чтобы были замыкания (C#, Java, Python со стеком побольше, да хоть JavaScript) и решаете произвольные задачи без присваиваний: все переменные (включая коллекции) иммутабельны, счётчиков цикла не бывает. Непосредственная польза этой эквилибристики в том, что ряд проблем многопоточного программирования просто исчезает.
Я бы ещё добавил что полезно хотя бы пощупать функциональную парадигму (a.k.a. "написание кода вообще без операторов присваивания"). В большинстве GC-языков хоть какие-то её следы есть, желательно их не проигнорировать.
В исследовании по ссылке есть таблица 1: "Details of the models used in the experiments." Из неё мы узнаём, что работа основывается на изучении модели GPT-2 с вариациями и других моделей плюс-минус того же уровня. Обобщение сделанных выводов даже на GPT-4 выглядит... слабо оправданным проведённым исследованием.
(Понятно что предельно базовое утверждение "результаты модели есть функция от корпуса обучающих текстов и промпта" верно, но оно верно и для людей, поэтому само по себе мало что доказывает.)
Вариант А: Система статична. Тогда она поощряет по фиксированным правилам, а действия, приводящие к максимальному поощрению, не тождественны действиям, которые вы хотели поощрять ("проблема спецификации целей"). После чего глядя на эти правила, агенты выбирают такое поведение, которое поощряется Системой, а не такое, о котором вы думали, когда проектировали систему поощрений. "Сдвиг распределения": то что в момент формулирования правил было стабильным инвариантом, перестаёт быть инвариантом в мире, который подстроился под сформулированные в расчёте на эти инварианты правила. "Когда метрика Х становится целью, она перестаёт измерять Х": если вы оцениваете отдел полиции по числу преступлений в отчёте, вы создаёте стимул не регистрировать преступления.
Вариант Б: Система подкручивается людьми на ходу. Но тогда те кто имеют право подкручивать её правила - воспользуются этим правом в своих, а не ваших интересах. Что намного хуже, право подкрутки само становится призом, привлекающим в первую очередь людей, которые ценят власть над другими. Этому можно противостоять если Система управляет только частью общества - отбирать из общества подмножество, которое изначально имеет какой-то общий интерес кроме социальных игр, - но если вы пытаетесь натянуть систему правил на всё общество целиком, то поток людей с выраженной потребностью в социальном статусе это неизбежная данность.
Да они много кого посещали. Но вы пытаетесь оптимизировать систему из агентов, которые в этой системе оптимизируют свои действия под свои, а не под ваши ценности. Как результат, действия агентов по любым озвученным правилам игры будут неоптимальными в ваших ценностях (вне предельно упрощённых модельных ситуаций). У этой ситуации множество имён - эффект/закон Гудхарта, неоптимальные равновесия Нэша, цена анархии, свежий термин в области ИИ - "проблема согласования/соответствия" (alignment problem) и т.д. Их все объединяет одно: мы - нынешнее человечество, - понятия не имеем как решать эту хрень в общем случае, у нас есть только отдельные частные хаки. Капитализм, к примеру, оказался хорошим хаком в широком диапазоне условий: людям можно продать "оптимизацию прибыли" как прокси очень широкого диапазона целей и одновременно иметь систему, в которой оптимизирующие прибыль агенты производят предсказуемо неплохой эффект. Аналогичных хаков для Литографа (или чего там вы мысленно подставляете вместо) у нас нет. Поэтому я и сказал: если у вас есть хоть какие-то идеи решения общей проблемы, то это было бы ценно. Но "просто всем стать агентами, которые оптимизируют что-то согласованное" - это не решение. Это благое пожелание, которое в реальности не будет выполнено.
Если вы заявляете что знаете как построить систему, устойчивую к закону Гудхарта, то это следует объяснить... чуть большим количеством слов чем "главное чтобы система была устойчива к закону Гудхарта".
Утверждение "если бы [почти] все жители страны были убеждены в Х, это привело бы к значимым результатам" слишком верно. Оно верно для очень-очень многих Х, не только для Х="необходимость литографической автаркии".
Грустная реальность состоит в том, что убеждения распространяются не копированием, они распространяются с меметическим отбором. Поэтому ответ на вопрос
Так почему бы Литографу не стать такой ?
банален: потому что эта идея для большинства населения - включая тех, кто должен бы принимать управленческие решения по её реализации, - не ложится в голову естественным образом.
У любой бюрократической системы на 10 000+ человек девизом идёт "гудхартили, гудхартим и будем гудхартить". Развитая система наказаний предсказуемо приведёт к а) развитому институту стрелочников и б) развитому потоку благ в пользу тех, кто классифицирует чиновников как "проворовавшихся".
Решил указать на то, какой именно давно известный алгоритм вы эмулируете своими расчётами. Больше (после предыдущего вашего ответа) не отвлекаю, хотите дальше писать о принципиально новом подходе в факторизации чисел в уникальной терминологии - ваше время, ваше право им распоряжаться. I'm out.
Встречный опыт: Qt Creator/C++, VS Code/TypeScript+HTML
Работает как продвинутый автокомплит, и в хорошем и в плохом смысле. В хорошем - предлагает поля структур, рутинные аксессоры / циклы / проверки, иногда он разумно предлагает блок в несколько десятков строк "по аналогии" (убрать который вообще в порядке следования DRY архитектурно очень нетривиально). В плохом - когда правишь файл с неидеальным чужим кодом, успешно подтаскивает из него неидеальные привычки его автора.
Иногда я ожидаю и хотел бы простую подсказку, чтобы завершить строку текста или функцию, а вместо этого мне выдается какая-то портянка не в тему.
В Qt Creator работает вместе с обычным автокомплитом, так что проблем с непредсказуемым вводом имён полей/методов я не наблюдал.
Копайлот вставляет куски кода без реальной связи с окружением. Если там есть какие-то символы типа классов или внешних функций, то естественно никаких автоматических импортов не произойдет.
Поскольку их не происходит и без Copilot, я не рассматриваю это как минус (а то что разводить много зависимостей неудобно - даже как маленький плюс).
В некоторых случаях его автокомплит вообще синтаксически не корректен.
Это бывает, но требует мелких правок (в частности, при каких-то условиях он начинает ставить лишнюю закрывающую скобку в конец блока - то ли его пространства имён озадачивают, то ли что). Или же изредка он предлагает бред, но тогда его вставлять не надо вообще.
Так в контексте "заменить программиста" это и есть "не работает": если для правильной формулировки вопроса нужно быть программистом, то инструмент не заменяет программиста. Помогает - да (Copilot реально ускоряет работу), но не заменяет.
Ну так в этом и проблема: с точки зрения клиента после возвращения из
unsubscribe()
эвент больше не существует. А в вашем решении получается, что каких-либо гарантий о том, когда именно он прекращает существовать, у клиента нет вообще (при обходе вектора предыдущий обработчик взял и вызвалsleep(20)
).С практической стороны, если хочется создать обработчик что-то делающий с объектом, то что прикажете делать в деструкторе этого объекта? Никакие умные указатели в полях объекта не помогут, объект должен умереть. Гарантировать что деструктор не будет вызван во время вызова
notify()
?А. Тьфу. Вопрос про натянутую верёвку. У меня получается кубическое уравнение. Примерно у меня получается 93м. Мои извинения за поспешную реакцию.
Проблема:
Если мы в одном потоке скопировали вектор и пошли по нему, а за это время другой поток успел отписаться и занулить указатель, то произойдёт упс.
Беглый гуглинг подсказывает мне, что даже новорождённый слонёнок ростом около 90 см. Не, не пройдёт. (У Перельмана формулировка была "проскочит ли мышь", с последующим комментарием "проскочит даже упитанный кот".)
100% кодового покрытия выявляет около 25% ошибок - Р. Гласс, "Факты и заблуждения профессионального программирования" (33).
Также, оптимизация кодового покрытия - это оптимизация ошибок, избегающих обнаружения тестами.
Как обратная связь: из текста статьи было совершенно не очевидно что она ссылается на другую.
По делу, кратко (поскольку это другая статья): там не подход, там очень общие слова про подход без конкретных алгоритмов. "Идеальный" (в некотором определении идеального) алгоритм поиска алгоритмов называется "индукция Соломонова" и невычислим. "Идеальный" алгоритм сохранения знаний - сохранение полного цифрового потока, осмысленная работа с которым за разумное время опять-же невозможна. Идеального представления данных не бывает (см. разные теоремы о запрете бесплатных завтраков), бывают только хаки, которые работают именно в данном мире, а не во всех мыслимых, или хотя бы во всех мыслимых вычислимых мирах.
Пока вы не привели конкретной модели взаимодействия агента с миром, хотя бы чисто теоретического конструкта уровня AIXI, любые словесные рассуждения "об универсальном представлении знаний" - это, извините, ни о чём. (А объяснение плохо формализованных конструктов вроде "совести" через никак не формализованные или хотя бы подтверждённые штуки вроде "души", гм, не наполняет меня как читателя оптимизмом.)
0) По-моему имеет смысл отвечать нажатием кнопки "Ответить" под сообщением, чтобы читателям комментариев была видна структура разговора.
1) Если вы обсуждаете опасности ИИ и исходите из предположения что некоторые существенные на сегодня проблемы решены, то а) это имело бы смысл проговорить в тексте; б) неясно чем это полезнее анализа "если мы знаем как создать безопасный ИИ и имеем ресурсы и желание это сделать, то ИИ может быть безопасным".
Цитата для примера:
Откуда вы это взяли? Это же одна из самых больших проблем безопасности современных ИИ - они строят правила, про которые известно, что а) на обучающей выборке это правило даёт (почти) вот такие результаты; б) из всех правил удовлетворяющих а), выбранное удовлетворяет некоторому постороннему условию оптимизации (обычно - что сумма квадратов параметров минимальна).
Правил, которые бы соответствовали а) - много. Для любых "достаточно новых" входов правило имеет право давать любые результаты: к примеру, правило "делать блинчики с сахаром" и правило "делать блинчики с сахаром если на вход не попадалось решения RSA-2048, иначе делать блинчики с цианидом" одинаково совместимы с обучающей выборкой. Интуитивно, правило б) чем-то похоже на идею "самое простое правило из всех удовлетворяющих а)" (a.k.a. inductive bias), но это понятие "простого" довольно заметно отличается от человеческого. Легче всего это видеть на классификации изображений: ИНС проводит какие-то границы в пространстве наборов пикселей, но они проходят сильно не так как человеческие.
Поэтому любая фраза "в результате обобщения будут <правило, описанное текстом короче гигабайта>" автоматически подозрительна: если вы не предприняли каких-то специальных мер чтобы ИИ-обобщение попадало в очень малое число таких способов проводить границы, которые допускают компактное описание человеческим языком - то странно ожидать что вы туда попадёте.
Вот на это уточнение: продавец получает доп. прибыль, но наличкой. А у налички свои минусы: а) нужно тратить время и силы на пересчёт; б) нужно платить за инкассацию; в) на пересчёте кассы периодически обнаруживается несоответствие расчётной суммы и реальной. И чем крупнее продавец, тем эти проблемы неприятнее.
Это берёте любой язык по вкусу, главное чтобы были замыкания (C#, Java, Python со стеком побольше, да хоть JavaScript) и решаете произвольные задачи без присваиваний: все переменные (включая коллекции) иммутабельны, счётчиков цикла не бывает. Непосредственная польза этой эквилибристики в том, что ряд проблем многопоточного программирования просто исчезает.
Я бы ещё добавил что полезно хотя бы пощупать функциональную парадигму (a.k.a. "написание кода вообще без операторов присваивания"). В большинстве GC-языков хоть какие-то её следы есть, желательно их не проигнорировать.
В исследовании по ссылке есть таблица 1: "Details of the models used in the experiments." Из неё мы узнаём, что работа основывается на изучении модели GPT-2 с вариациями и других моделей плюс-минус того же уровня. Обобщение сделанных выводов даже на GPT-4 выглядит... слабо оправданным проведённым исследованием.
(Понятно что предельно базовое утверждение "результаты модели есть функция от корпуса обучающих текстов и промпта" верно, но оно верно и для людей, поэтому само по себе мало что доказывает.)
Вот здесь ключевая проблема.
Вариант А: Система статична. Тогда она поощряет по фиксированным правилам, а действия, приводящие к максимальному поощрению, не тождественны действиям, которые вы хотели поощрять ("проблема спецификации целей"). После чего глядя на эти правила, агенты выбирают такое поведение, которое поощряется Системой, а не такое, о котором вы думали, когда проектировали систему поощрений. "Сдвиг распределения": то что в момент формулирования правил было стабильным инвариантом, перестаёт быть инвариантом в мире, который подстроился под сформулированные в расчёте на эти инварианты правила. "Когда метрика Х становится целью, она перестаёт измерять Х": если вы оцениваете отдел полиции по числу преступлений в отчёте, вы создаёте стимул не регистрировать преступления.
Вариант Б: Система подкручивается людьми на ходу. Но тогда те кто имеют право подкручивать её правила - воспользуются этим правом в своих, а не ваших интересах. Что намного хуже, право подкрутки само становится призом, привлекающим в первую очередь людей, которые ценят власть над другими. Этому можно противостоять если Система управляет только частью общества - отбирать из общества подмножество, которое изначально имеет какой-то общий интерес кроме социальных игр, - но если вы пытаетесь натянуть систему правил на всё общество целиком, то поток людей с выраженной потребностью в социальном статусе это неизбежная данность.
Да они много кого посещали. Но вы пытаетесь оптимизировать систему из агентов, которые в этой системе оптимизируют свои действия под свои, а не под ваши ценности. Как результат, действия агентов по любым озвученным правилам игры будут неоптимальными в ваших ценностях (вне предельно упрощённых модельных ситуаций). У этой ситуации множество имён - эффект/закон Гудхарта, неоптимальные равновесия Нэша, цена анархии, свежий термин в области ИИ - "проблема согласования/соответствия" (alignment problem) и т.д. Их все объединяет одно: мы - нынешнее человечество, - понятия не имеем как решать эту хрень в общем случае, у нас есть только отдельные частные хаки. Капитализм, к примеру, оказался хорошим хаком в широком диапазоне условий: людям можно продать "оптимизацию прибыли" как прокси очень широкого диапазона целей и одновременно иметь систему, в которой оптимизирующие прибыль агенты производят предсказуемо неплохой эффект. Аналогичных хаков для Литографа (или чего там вы мысленно подставляете вместо) у нас нет. Поэтому я и сказал: если у вас есть хоть какие-то идеи решения общей проблемы, то это было бы ценно. Но "просто всем стать агентами, которые оптимизируют что-то согласованное" - это не решение. Это благое пожелание, которое в реальности не будет выполнено.
Если вы заявляете что знаете как построить систему, устойчивую к закону Гудхарта, то это следует объяснить... чуть большим количеством слов чем "главное чтобы система была устойчива к закону Гудхарта".
Утверждение "если бы [почти] все жители страны были убеждены в Х, это привело бы к значимым результатам" слишком верно. Оно верно для очень-очень многих Х, не только для Х="необходимость литографической автаркии".
Грустная реальность состоит в том, что убеждения распространяются не копированием, они распространяются с меметическим отбором. Поэтому ответ на вопрос
банален: потому что эта идея для большинства населения - включая тех, кто должен бы принимать управленческие решения по её реализации, - не ложится в голову естественным образом.
У любой бюрократической системы на 10 000+ человек девизом идёт "гудхартили, гудхартим и будем гудхартить". Развитая система наказаний предсказуемо приведёт к а) развитому институту стрелочников и б) развитому потоку благ в пользу тех, кто классифицирует чиновников как "проворовавшихся".
Решил указать на то, какой именно давно известный алгоритм вы эмулируете своими расчётами. Больше (после предыдущего вашего ответа) не отвлекаю, хотите дальше писать о принципиально новом подходе в факторизации чисел в уникальной терминологии - ваше время, ваше право им распоряжаться. I'm out.
Встречный опыт: Qt Creator/C++, VS Code/TypeScript+HTML
Работает как продвинутый автокомплит, и в хорошем и в плохом смысле. В хорошем - предлагает поля структур, рутинные аксессоры / циклы / проверки, иногда он разумно предлагает блок в несколько десятков строк "по аналогии" (убрать который вообще в порядке следования DRY архитектурно очень нетривиально). В плохом - когда правишь файл с неидеальным чужим кодом, успешно подтаскивает из него неидеальные привычки его автора.
В Qt Creator работает вместе с обычным автокомплитом, так что проблем с непредсказуемым вводом имён полей/методов я не наблюдал.
Поскольку их не происходит и без Copilot, я не рассматриваю это как минус (а то что разводить много зависимостей неудобно - даже как маленький плюс).
Это бывает, но требует мелких правок (в частности, при каких-то условиях он начинает ставить лишнюю закрывающую скобку в конец блока - то ли его пространства имён озадачивают, то ли что). Или же изредка он предлагает бред, но тогда его вставлять не надо вообще.