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

Регулярно вижу, как народ криво формулирует запросы, а потом говорит что ChatGPT не работает.

Так в контексте "заменить программиста" это и есть "не работает": если для правильной формулировки вопроса нужно быть программистом, то инструмент не заменяет программиста. Помогает - да (Copilot реально ускоряет работу), но не заменяет.

либо ссылки на ресурсы которые не будут удалены за всё время существования эвента.

Ну так в этом и проблема: с точки зрения клиента после возвращения из unsubscribe() эвент больше не существует. А в вашем решении получается, что каких-либо гарантий о том, когда именно он прекращает существовать, у клиента нет вообще (при обходе вектора предыдущий обработчик взял и вызвал sleep(20)).

С практической стороны, если хочется создать обработчик что-то делающий с объектом, то что прикажете делать в деструкторе этого объекта? Никакие умные указатели в полях объекта не помогут, объект должен умереть. Гарантировать что деструктор не будет вызван во время вызова notify()?

А. Тьфу. Вопрос про натянутую верёвку. У меня получается кубическое уравнение. Примерно у меня получается 93м. Мои извинения за поспешную реакцию.

Проблема:

struct Data { int val; };
struct User { std::unique_ptr<Data> data; };

User u;
//...
//подписка
auto subscriptionId = s.subscribe([&](){LOG() << u.data->val;});
//...
//отписка
s.unsubscribe(subscriptionId);
u.data = nullptr;

Если мы в одном потоке скопировали вектор и пошли по нему, а за это время другой поток успел отписаться и занулить указатель, то произойдёт упс.

Беглый гуглинг подсказывает мне, что даже новорождённый слонёнок ростом около 90 см. Не, не пройдёт. (У Перельмана формулировка была "проскочит ли мышь", с последующим комментарием "проскочит даже упитанный кот".)

100% кодового покрытия выявляет около 25% ошибок - Р. Гласс, "Факты и заблуждения профессионального программирования" (33).

Также, оптимизация кодового покрытия - это оптимизация ошибок, избегающих обнаружения тестами.

В статье «Сильный интеллект, что это значит?»  (https://habr.com/ru/articles/735136/), по сути, описан мой подход к разработке ИИ.

Как обратная связь: из текста статьи было совершенно не очевидно что она ссылается на другую.

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

Пока вы не привели конкретной модели взаимодействия агента с миром, хотя бы чисто теоретического конструкта уровня 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, я не рассматриваю это как минус (а то что разводить много зависимостей неудобно - даже как маленький плюс).

В некоторых случаях его автокомплит вообще синтаксически не корректен.

Это бывает, но требует мелких правок (в частности, при каких-то условиях он начинает ставить лишнюю закрывающую скобку в конец блока - то ли его пространства имён озадачивают, то ли что). Или же изредка он предлагает бред, но тогда его вставлять не надо вообще.

Information

Rating
5,323-rd
Registered
Activity