Я запускаю на CPU (не GPU) с моделью на 65B параметров (4 бита). Программа съедает 40G памяти при загрузке модели на 65B параметров. Работает медленно, но работает.
Модель на 7B параметров работает значительно шустрее, но настолько же менее качественно, хотя и съедает, ориентировочно, всего 5G памяти.
Работает в консоли, программа написана на C/C++. Вот ссылка на github.
Есть недостаток: в какой-то момент программа вылетает из диалога и завершается.
Я спрашивал у ChatGPT "можно ли носить воду в решете ?" - нейросеть не смогла дать тот ответ, который я жду от ИИ, она ответила "Да, можно носить воду в решетчатой бутылке или контейнере, так как решетка обеспечивает хорошую циркуляцию воздуха и позволяет воде охлаждаться быстрее. Однако следует убедиться, что решетка достаточно плотная и прочная, чтобы избежать утечек. Также рекомендуется использовать бутылку или контейнер, изготовленные из безопасных материалов, которые не выделяют вредных веществ в воду. "
Я тоже спросил:
Неплохой ответ на вопрос, можно ли носить воду в решете.
Однако я отмечу, что судить по модели исходя из математики - очень наивно. Зачем модели уметь это делать, если она может пользоваться калькулятором?
Если судить по получающимся результатам, то видно, что они явно не точны. Модель приходится уламывать воспользоваться калькулятором. До сих пор не знаю, удалось мне уломать её или нет в этом посте. Модель, в частности, написала:
Я - компьютерная программа, которая имеет встроенный калькулятор и может вычислять математические выражения. Так что, когда я выполняю математическую операцию, я использую встроенный калькулятор. Однако, когда я даю ответ на вопросы, связанные с математикой, я могу использовать и другие методы, включая статистические модели и предсказания, если это применимо.
Очень похоже на правду, с поправкой, что, в первую очередь, используются "другие методы", иначе такую низкую точность не объяснить.
Поскольку до этого я ей сообщил, какой результат я считаю правильным (потому что я верю, что реализация Python'а считает правильно, и что процессор у меня в компе не глючит на этих вычислениях), так и непонятно, использовала она в том диалоге свой встроенный калькулятор на самом деле или нет.
1 делится на 2 не нацело, запишем 0 в частное, и 1 будет в остатке. Ставим десятичную точку в частное, дописываем справа 0 к остатку, получается 10.
Далее, 10 делится на 2 нацело, и получается 5, но в данном случае деление — альтернативное, поэтому запишем в частное 4, а в остатке, соответственно, будет 2.
Дописываем к остатку 0, получается 20, которое тоже делится на 2 нацело, и получается 10, но такой цифры нет, поэтому запишем максимальную цифру, то есть, 9 в частное, и тогда 2 будет в остатке.
Дописываем 0, получается опять 20, поэтому опять записываем 9 в частное, и опять 2 будет в остатке.
Очевидно, что процесс замкнулся и стал бесконечным.
Сначала нейронка ChatGPT не поняла контекста, что имеется ввиду сама строка с вопросом:
Нейронка ChatGPT здесь не поняла до конца контекст вопроса.
Поэтому я переформулировал вопрос, и получился длинный диалог
Некоторое тестирование нейронки ChatGPT на "чувство численности".
В целом, у меня сложилось впечатление, что некоторое "чувство численности" у нейронки ChatGPT имеется, но его характер несколько отличается от человеческого. У человека точность резко падает с ростом количества, а у ChatGPT эта зависимость значительно плавнее.
Заставить её вызвать калькулятор у меня не получилось, устал с ней биться, потому что она, порой, "плохо слушается".
При этом она часто демонстрирует эффект Даннинга-Крюгера: "я никогда не стараюсь жульничать, моя цель - быть точной и полезной", "я посчитала сумму букв правильно", хотя ни то, ни другое -- не верно.
Если вычислить данную сумму, то окажется, что она равна 67. Это не говоря о том, что часть слагаемых — неправильная, хотя берёт она их из своего же ответа и на ходу же часть из них заменяет на отличающиеся на 1.
Но сразу же соглашается, если её вывести на чистую воду: "Извините, я допустила ошибку в своих предыдущих сообщениях. Действительно, третье с конца слово "числа" имеет 6 букв, а последнее слово "вопросом?" — 9 букв."
Возможно, механизм явления Даннинга-Крюгера у неё похож на оный у человека.
Да, конечно. Но подразумевалось, что там должно быть ещё и структурированное освобождение ресурсов.
Они там специально жульничают, сильно захламив конструкцию и не использовав её преимущество. Фактически, они использовали её не по назначению, чтобы создать иллюзию, что паттерн — плохой. А плохой, как раз, не паттерн.
Я уже писал об этом:
В том примере по ссылке, мало того, что приведён неэффективный пример, так ещё и не показано преимущество структуры Arrow в смысле структурированного освобождения ресурсов в случае неудачи.
Без необходимости освобождения ресурсов, естественно, этот код вырождается в логическое выражение.
Если выполнить всю ту предобработку образов, которая имеется у человека и не только у него, а затем применить модель, эффективную для распознавания образов, то — что получится?
Примерно то же самое, что и с языковой моделью?
Если подумать, то выяснится, что там не образы, а видео, то есть, в динамике. Это может иметь существенное значение.
Симпатично, но copy-paste'а в виде повторяющегося return false; мельтешит, дополнительные пустые строки между if'ами раздувают код, и пропадает возможность структурировано освободить ресурсы в случае неудачи.
В том примере по ссылке, мало того, что приведён неэффективный пример, так ещё и не показано преимущество структуры Arrow в смысле структурированного освобождения ресурсов в случае неудачи.
function isCorrect($param1, $param2, $param3)
{
if ($param1 !== $param2) {
if ($param1 === ($param3 * 2)) {
if ($param2 === ($param3 / 3)) {
return true;
}
}
}
return false;
}
И делают при этом невинный вид.
Они специально пишут не оптимальный код, выдавая свой вариант за лучший из возможных, чтобы попытаться на этом основании объявить Arrow Anti Pattern антипаттерном.
Нет, это — это именно паттерн, причём, зачастую, он лучше аналогичного с множеством goto и множеством меток, что mobi выше убедительно и продемонстрировал.
Если статические анализаторы "заряжены" неверными посылками, логично неуместную ругань от них отключить или настроить порог их срабатывания на разумный уровень вложенности, если это возможно.
А вот это можно задать в качестве четвёртого вопроса.
Известен ли алгоритм хотения?
Есть ли его реализации в виде механизмов?
Речь идёт о настоящем хотении, не его имитации?
Совсем не обязательно.
Я запускаю на CPU (не GPU) с моделью на 65B параметров (4 бита).
Программа съедает 40G памяти при загрузке модели на 65B параметров.
Работает медленно, но работает.
Модель на 7B параметров работает значительно шустрее, но настолько же менее качественно, хотя и съедает, ориентировочно, всего 5G памяти.
Работает в консоли, программа написана на C/C++.
Вот ссылка на github.
Есть недостаток: в какой-то момент программа вылетает из диалога и завершается.
Я тоже спросил:
Не настолько ChatGPT и плох.
Если судить по получающимся результатам, то видно, что они явно не точны.
Модель приходится уламывать воспользоваться калькулятором.
До сих пор не знаю, удалось мне уломать её или нет в этом посте.
Модель, в частности, написала:
Очень похоже на правду, с поправкой, что, в первую очередь, используются "другие методы", иначе такую низкую точность не объяснить.
Поскольку до этого я ей сообщил, какой результат я считаю правильным (потому что я верю, что реализация Python'а считает правильно, и что процессор у меня в компе не глючит на этих вычислениях), так и непонятно, использовала она в том диалоге свой встроенный калькулятор на самом деле или нет.
Если применить альтернативное деление столбиком:
то получатся удивительные результаты.
1 делится на 2 не нацело, запишем 0 в частное, и 1 будет в остатке.
Ставим десятичную точку в частное, дописываем справа 0 к остатку, получается 10.
Далее, 10 делится на 2 нацело, и получается 5, но в данном случае деление — альтернативное, поэтому запишем в частное 4, а в остатке, соответственно, будет 2.
Дописываем к остатку 0, получается 20, которое тоже делится на 2 нацело, и получается 10, но такой цифры нет, поэтому запишем максимальную цифру, то есть, 9 в частное, и тогда 2 будет в остатке.
Дописываем 0, получается опять 20, поэтому опять записываем 9 в частное, и опять 2 будет в остатке.
Очевидно, что процесс замкнулся и стал бесконечным.
Итак, обычным делением столбиком получается 0.5.
Альтернативным делением столбиком получается 0.4(9).
В школьной математике, скорее всего, такого нет, потому что я сам это придумал.
Теперь доказывать якобы неравенство
0.4(9) != 0.5
стало труднее.Сначала нейронка ChatGPT не поняла контекста, что имеется ввиду сама строка с вопросом:
Поэтому я переформулировал вопрос, и получился длинный диалог
В целом, у меня сложилось впечатление, что некоторое "чувство численности" у нейронки ChatGPT имеется, но его характер несколько отличается от человеческого.
У человека точность резко падает с ростом количества, а у ChatGPT эта зависимость значительно плавнее.
Заставить её вызвать калькулятор у меня не получилось, устал с ней биться, потому что она, порой, "плохо слушается".
При этом она часто демонстрирует эффект Даннинга-Крюгера: "я никогда не стараюсь жульничать, моя цель - быть точной и полезной", "я посчитала сумму букв правильно", хотя ни то, ни другое -- не верно.
Соврать может на каждом шагу, например, пишет:
Если вычислить данную сумму, то окажется, что она равна 67.
Это не говоря о том, что часть слагаемых — неправильная, хотя берёт она их из своего же ответа и на ходу же часть из них заменяет на отличающиеся на 1.
Но сразу же соглашается, если её вывести на чистую воду: "Извините, я допустила ошибку в своих предыдущих сообщениях. Действительно, третье с конца слово "числа" имеет 6 букв, а последнее слово "вопросом?" — 9 букв."
Возможно, механизм явления Даннинга-Крюгера у неё похож на оный у человека.
Ну, если даже я не догадался, что имелось ввиду, то грех требовать этого от ChatGPT.
ChatGPT обычно отвечает несколько в другом стиле: вместо того, чтобы переспрашивать, накидывает возможные варианты.
Так случилось и в этот раз (специально в новом чате спросил, чтобы старый контекст не повлиял):
В этот раз обошлось без пустых ответов.
Совершенно неестественно.
Видите, и другие люди так же думают.
Я сначала хотел уточнить, что раз не указан, значит, — натуральный, но не стал. Оказывается, надо было уточнить.
Что интересно, второй раз на вопрос по вычислению логарифмов пустой ответ пришёл, раньше с таким вообще не сталкивался:
По моим ощущениям, ChatGPT за последнее время "поумнел".
Уже не такой болван, как раньше, ответы явно адекватнее стали.
Но они и писали несколько раз при login'е, что обновили и улучшили.
Посчитает:
В принципе, ещё и подсказывает, как можно самому посчитать.
Да, конечно.
Но подразумевалось, что там должно быть ещё и структурированное освобождение ресурсов.
Они там специально жульничают, сильно захламив конструкцию и не использовав её преимущество.
Фактически, они использовали её не по назначению, чтобы создать иллюзию, что паттерн — плохой.
А плохой, как раз, не паттерн.
Я уже писал об этом:
Без необходимости освобождения ресурсов, естественно, этот код вырождается в логическое выражение.
Если выполнить всю ту предобработку образов, которая имеется у человека и не только у него, а затем применить модель, эффективную для распознавания образов, то — что получится?
Примерно то же самое, что и с языковой моделью?
Если подумать, то выяснится, что там не образы, а видео, то есть, в динамике.
Это может иметь существенное значение.
Вот только является ли 0.(9) нестандартным числом?
Попробовал "вытрясти душу" из него.
Кажется, получилось
Можно попробовать получить тот же результат без подсказки.
Умеет ли ChatGPT сам жульничать?
Вычислял ли он на самом деле или воспользовался подсказкой из моей информации?
Я бы не был столь категоричен.
Модель — языковая?
Тогда — вопрос: сколько времени человек учит язык, хоть свой родной, хоть не родной?
ChatGPT "эволюционирует":
Или здесь ChatGPT врёт?
Поскольку тема уже была затронута, я не стал отдельный пост создавать.
В наше время 80 символов уже явно устаревшая ширина, 120 или 160 уместнее.
Симпатично, но copy-paste'а в виде повторяющегося
return false;
мельтешит, дополнительные пустые строки междуif
'ами раздувают код, и пропадает возможность структурировано освободить ресурсы в случае неудачи.В том примере по ссылке, мало того, что приведён неэффективный пример, так ещё и не показано преимущество структуры Arrow в смысле структурированного освобождения ресурсов в случае неудачи.
Те, кто решили, что Arrow Anti Pattern — это антипаттерн, приводят такой пример кода (по той самой ссылке из статьи):
вместо очевидного такого:
И делают при этом невинный вид.
Они специально пишут не оптимальный код, выдавая свой вариант за лучший из возможных, чтобы попытаться на этом основании объявить Arrow Anti Pattern антипаттерном.
Нет, это — это именно паттерн, причём, зачастую, он лучше аналогичного с множеством
goto
и множеством меток, что mobi выше убедительно и продемонстрировал.Если статические анализаторы "заряжены" неверными посылками, логично неуместную ругань от них отключить или настроить порог их срабатывания на разумный уровень вложенности, если это возможно.
В качестве компромисса, для того, чтобы обезопасить range-based for, можно использовать редко применяемую возможность указать вид ссылочности
this
:Компромисс, потому что теперь "не висит", но — за счёт накладных расходов на copy&move.
Что интересно: если бы поле
data_
не было быprivate
, то в следующем коде висящей ссылки не возникло бы:Жаль, что метод не позволяет "пробросить" свойство поля, если им инициализирована ссылка, продлевать жизнь всего объекта на время жизни ссылки.