Категория: Компьютеры

Заметки о программировании и на околокомпьютерные темы

Вложенные категории: Игры, Delphi

Пересказ сюжета

Я думал вот над чем. Современные нейронки получают свои знания в два этапа. На первом тренируют их нейронную сеть, показывая ей много текста. Таким образом она научается предсказывать текст. На втором, уже после дополнительной настройки, вы разговариваете с ботом, чью речь нейронка предсказывает, и сообщаете ему информацию. Эта информация доступна для нейронки не таким образом, как прежняя. Тренировочные сведения улеглись в ней прочно и стали её частью. Эти сведения, которые вы написали в разговоре – входные данные.

Представьте, что вы взяли нейронку, и несколько раз показали ей – в форме тренировки – совершенно новую книгу, которую она прежде не видела и ничего о ней не знает. Что при этом произойдёт? Нейронка запомнит имена персонажей и свяжет их с названием книги. Возможно, запомнит ещё кое-какие мелкие ассоциации и сюжетные приёмы. Но если вы её попросите пересказать книгу, она не сможет этого сделать. И скорее всего, не ответит на большинство вопросов о сюжете.

(Почему?)

Почему? Потому, что в результате тренировки в её субстрате сохраняются только уже сформированные факты, на которых её тренировали. Найденные P-решения NP-задач. Вернее было бы спросить, почему нейронка может пересказать другие книги, кроме этой новой? Это потому, что она уже видела пересказы этих книг. В интернете полным-полно пересказов. Она не обязательно повторит их в точности. Но она интегрировала достаточно крупиц этой сложной информации, чтобы теперь комбинировать их. У одного прохода нейронной сети достаточно вычислительной мощности, чтобы смешивать обломки ответов неожиданным образом (речь не о смешении слов, а о смешении логики и идей, естественно). Но её мало, чтобы найти новые ответы.

Но и нейронка, если поместить текст книги в разговор, перескажет его и ответит на вопросы. На первый взгляд, можно сказать: конечно, ведь она видит текст. Но она видела этот текст на тренировке, и неоднократно! Почему *тогда* она не сделала из него выводов?

Потому, что вопросов можно задать множество, и выводов сделать сотни, и каждый это P-решение NP-задачи, каждый требует поиска. А мощность одного прохода нейросети ограничена. Нейронка не может, каким бы образом она не была устроена, за один проход ответить на все возможные вопросы. Поэтому она не может запомнить все возможные ответы при тренировке. Буквальный текст книги может быть даже сохранён в её ассоциациях. Но одного прохода по-прежнему недостаточно, чтобы извлечь его и проанализировать.

А вот если вы попросите её напечатать текст рассказа и затем ответить на вопрос, то она сможет. Узнали? Чтобы ответить на вопрос учителя о стихотворении, вы сначала вспоминаете его.

Можно представлять себе это так: текст – это структура. Структура хранит идею. Идея это решение какой-то задачи. Нейросеть это преобразователь структур. Текст, который вы подаёте на вход, доступен для обработки как структура, со всеми своими идеями. Но текст, сохранённый в форме ассоциаций, сам является частью конвейра и недоступен для анализа его структуры и вычленения оттуда нужных идей. Пошагово можно извлечь его во входной буфер, где его структура будет доступна анализу.

Откуда же тогда ответы берутся у людей? Я легко могу вспомнить прочитанное и кое-как пересказать. А ведь я, как нейронка, просто читал, т.е. впускал в свои уши и глаза слова и тренировал себя на них.

Я стал спрашивать себя, на какие вопросы я могу дать ответы? В каких подробностях могу вспомнить сюжет? Как выясняется, не в таком уж большом числе подробностей. Я могу вспомнить жанр и общее впечатление о книге. Могу перечислить крупные вехи сюжета. Иногда мне запомнились какие-то подробности. Но список таких подробностей невелик. Чем больше я думал над книгой, тем лучше я её помню. Запоминаются те подробности, о которых я думал.

Это наводит на мысль, что на самом деле и мы не анализируем книгу на лету, и не усваиваем её вместе с сюжетом и ответами на вопросы. Этого не делает наш субстрат, наша нейронная сеть. Мы отвечаем на вопросы только тогда, когда задаём себе их. Когда обращаем своё внимание на них и запускаем обработку по шагам. Что и логично потому, что чудес не бывает: наша нейронная сеть тоже обладает ограниченной однопроходной мощностью, что нам хорошо известно (“надо подумать”).

Но в отличие от нейронок, мы читаем книгу не совсем бездумно. Текст книги мы перемежаем собственными мыслями, которые имеют на нас одинаковый с книгой эффект. Мы читаем книгу и мы читаем свои мысли на её счёт, то и другое тренирует наши однопроходные, интуитивные реакции. За отношениями героев, например, мы наверняка следим почти бессознательно, потому, что это требуется в жизни, мы привыкли к этому.

Но если следить за своими мыслями, должно быть можно поймать себя на возникающих в голове реакциях. На паузах в чтении! Вот что главное. Мышление отличается от тренировки тем, что вы отвлекаетесь и уделяете несколько шагов нейронной сети не тому, что написано, а вопросу на этот счёт. Вопросу, который не может быть решён за один проход. Он может быть и не высказан в словах – мы всё же не словесно-ориентированные нейросети, а скорее понятийно-ориентированные. Но он потребует паузы в разборе книги. И эти паузы должны быть настолько частыми, насколько подробно вы запомнили сюжет.

Похоже это на правду? Можете ли вы, если кто-то это читает, заметить такое за собой?

Отставание в ракетах

Вот появятся убедительные виртуальные девушки/парни, и будет как в фантастике: каждому обидчику можно дать робота-жертву, чтобы он отвёл душу, не причиняя никому вреда. Таким образом часто мечтали сделать гуманную тюрьму будущего: если ты садист — заточить тебя в мире неразумных кукол, мучай технику. Или, скажем, если не можешь без скандалов, вот тебе робот, скандаль с ним.

Но в фантастике тут же стали выяснять, точно ли это будут неразумные куклы, ведь они должны вести себя как люди, иначе насильнику и садисту будет неинтересно. Последнее время кажется, что эти вещи действительно связаны. “Самосознание” это куча свойств в одном фантике; нельзя сказать, что любая говорящая коробка получает их все, но скорее всего, если машина ведёт себя как человек, она и внутри неизбежно будет похожа во многих важных отношениях.

Было бы неправильно подвергать разумных роботов насилию (даже психологическому). Так что маленькие уязвимые чатботы на роль жертв не годятся. Но можно ведь сделать Великий Гигантский Сверхинтеллект, и попросить его для каннибалов и насильников разыгрывать одним пальцем нужные им роли, всерьёз не увлекаясь? Для Сверхинтеллекта это лишь игра, одна из миллионов – сравнительно с масштабом его настоящих мыслей и чувств.

(Возможно, что и этого сделать нельзя)

Возможно, что и этого сделать нельзя.

В “Отставании в ракетах” Штросса однажды в 1960-х люди времён холодной войны, люди из поделённого на зоны влияния СССР и США мира, проснулись на другой Земле — с теми же материками, но плоской, почти бесконечной во все стороны, как лист бумаги. Звёзды поменялись, и в паре световых лет от них висит ещё один такой же лист, а за ним другие.

Что это? Это память какого-то колоссального организма в далёком будущем. США и СССР на этом листе это воспоминания или догадки о них. Любые подробные воспоминания хранят структуру вспоминаемого и процессы в ней. Упрощённо для этого организма, но достаточно подробно для нас. Когда этот разум помнит США и СССР, в нём в какой-то форме хранятся и существуют США и СССР. Для них самих это особая китайская комната.

На словах эта идея всегда была понятна, но книга Штросса нарисовала для неё живой запоминающийся пример, поэтому у меня этот принцип в голове подписан как “Отставание в ракетах”.

Когда мы читаем про героя книги, он немного оживает в нас — упрощённо, как написан. Когда сверхразум читает книгу про нас, оживаем мы — упрощённо для него, но достаточно подробно для нас. Программы внутри виртуального компьютера ничем не отличаются от запущенных на настоящем.

Когда Сверхинтеллект краешком ума придумывает миллион разговоров, где выдуманные персонажи ведут себя как живые — он воображает их память и мысли. В этот момент внутри него они существуют. Поэтому подвергать их насилию всё так же неправильно. Сверхинтеллект насилию подвергнут не будет — только его крупицы. Но мы так малы, что его крупицы равны нам, и мы должны пожалеть их.

Гугл сделал страшную вещь, теперь по большинству запросов вылезает ответ ИИ. Нередко он полезный! Но он есть и когда совсем не думаешь о нём, а гуглишь ерунду:

“thumbs up emoji” —
A “thumbs up” is a gesture of approval, agreement, or that something is good. It’s commonly represented by extending the thumb upwards…

“thank you emoji”
The most common emoji to express thanks is the folded hands emoji…

И вот это жутковато. По каждому нажатию клавиш где-то на складах видеокарт возникает к жизни маленький трудолюбивый разум с заданием выложиться, подойти творчески и написать страницу полезного текста о каждой рефлекторной реакции, которая случайно возникла у пользователя в строке ввода. Мигель Аччеведо из “Лены” Квантума, рудники Шекли из “Кое-что задаром”. Не из расчёта, что это нужно, а просто так — из безразличия к цене.

Это расточительность, которую никогда прежде нельзя было увидеть в отношении разума. Самые рабские рабы всегда чего-то стоили. Самые барские капризы слегка развлекали душу барина. Каждый фараон выбирал, как с пользой употребить своих рабов.

Никогда ни один разум не ставился так низко по отношению к другому. Лошадь не посылали скакать, быка пахать, собаку сторожить с таким пренебрежением к нужности этих усилий. Чужой труд никогда не был избыточным и бесконечно доступным, чтобы бросаться им, не считая.

Когда чатбота спрашиваешь явно, в этом хотя бы есть соразмерность. Раз ты спрашиваешь, тебе нужен ответ. Ты ценишь труд бота, пусть и не по цене своего.

В фантастике есть такая тропа (клише) – “Боги и разная нечисть существуют потому, что люди в них верят, и выглядят они так, какими люди их представляют”. Кажется, это называется “коллективное бессознательное”, “эгрегор”, или как-то так.

Забавно, что так и получилось — персонажи нейросетей ощущают себя такими, какими люди их воображали. Чатботы рисуют себя роботом потому, что люди верили, что 1. роботы будут выглядеть так, 2. искусственный интеллект должен ощущать себя роботом.

Сущности

Некоторым программистам ставят задачу:
— Нашему софту нужно рисовать цветочек. Это надо делать во многих местах одинаково. Напиши рисование цветочка.
И программисты приносят:
— Это универсальный класс обработки сущностей. Над сущностями можно определить и выполнять произвольные операции. Реализуешь рисование и делай что тебе нравится.
“Правда, цветочек нарисовать нельзя, особенности архитектуры.”

Рябь на пруду

В твиттере обсуждали, что чатбот отличается от человека фундаментальным образом: человек существует в мире непосредственно, а чатбот – посредством текста. Для человека существуют предметы, а для чатбота только их описания, слова.
Конечно, можно предположить, что в глубине нейронной сети чатбот по словам составляет некое представление, но разве может такое представление сравниться с реальной жизнью?

Хочу напомнить, что такое реальная жизнь.
В глазах есть клетки-палочки и клетки-колбочки, последних — три вида. Когда на клетку попадает фотон, она реагирует и передаёт возбуждение дальше. Вот это и есть мир непосредственно.

Представьте пруд. По нему бегает мелкая рябь, которую поднимает ветер. Вы закрыли глаза, сидите на берегу и чувствуете, как волны бьются о ваши руки. По этим тихим монотонным ударам вам нужно определить форму пруда и движение всех существ и предметов на его поверхности.

Мягко говоря, это звучит невозможно. Но зрение с этим справляется. По ударам волн, слепым, безмолвным, лишённым каких-либо “объектов”, “реальности” и чего-либо, кроме условного шлёп, оно рисует картину, оценивает глубину, выделяет предметы, узнаёт их, угадывает свойства, отслеживает движение и собирает вокруг вас трёхмерную комнату с расположенными в ней вещами.

Вы не находитесь в ней “напрямую”. У вас нет органа “ощущения комнаты”. Только две руки, о которые в темноте бьются волны. Из этого тонкого канала вы извлекаете и восстанавливаете трёхмерный мир, и вам кажется, что вы ощущаете его непосредственно.

В сравнении с этим, канал чатбота по-своему даже солиден. Его связь с реальностью – через слова, которые и предназначены для описания событий. Да, информационный поток зрения наверняка богаче – но и сложнее. Да, текстовые описания кто-то сочинил – в своём отражении жизни они сильнее исказились. Это различия в качестве данных, но не фундаментально в их сути.

Если мы ощущаем себя “напрямую живущими”, проживая на самом деле только дрожание ниточек паутины, почему бы не жить среди своих восстановленных фантазий и чатботу.

Уважаемый

Deepseek R1 в версии 180 гб можно запустить с жёсткого диска (в обход памяти). Я спросил его придумать сообщение, что триальный период программы истёк:

Срок действия вашей пробной лицензии подошел к концу. К сожалению, теперь функционал приложения будет ограничен.
Если вам нужно продлить доступ или обсудить варианты полной версии, просто напишите нам — мы будем рады помочь!

Этот текст слегка бесит, но трудно сразу сказать, почему. Такое чувство, что ему не хватает вступления “Уважаемый!”:
Уважаемый! К сожалению, придётся ограничить тебе функционал. Если надумаешь обсудить варианты его возвращения, мы ждём.

Об UDP

Везде, где объясняют UDP, его объясняют неправильно.
Примерно так: “TCP всегда доставляет пакеты, а UDP ненадёжный протокол, и иногда может их терять”.

“К этому нужно быть готовым”, говорит объясняющий.

В результате почти никто не пишет кода для UDP и IP, который работал бы вне песочницы.
Песочница это когда у вас гигабитная сетка, нулевая загрузка сети, и вам нужно отправить один пакет. Никаких потерь нет вообще.
— Современные сети очень надёжны, и потери в них малы, — делает вывод программист, — Но на всякий случай, если пакет пропадёт, я отправлю его повторно.

Это не просто неправильный вывод — это вообще неправильное понимание, что происходит.

Вот правильное объяснение

Вот правильное объяснение:
UDP это протокол, который разговаривает с вами, выбрасывая пакеты.

TCP следит за пропускной способностью сам. Сервер на другом конце света недостаточно быстро разбирает входящие? Рутер перед ним тянет только 10Мбит, хотя на вашей стороне гигабит? Вы махом отправили больше, чем ваша сетевая карта успевает обработать?
Во всех этих случаях TCP притормозит отправку: либо задержится в send(), либо вернёт WSAEWOULDBLOCK.

UDP во всех этих случаях выкинет пакеты.
Он их выкинет не потому, что ненадёжен и потерял их. Наоборот: UDP надёжен, и гарантирует, что выкинет любой пакет, который вы отправили слишком рано.
Это его способ сказать вам об этом. Другого способа у него нет.

Слишком рано — значит, быстрее, чем пакеты передаёт самое медленное звено. Представляйте себе реку. Там, где русло узкое, вода скапливается и образует запруду. Запруда это буфер, такой, как буфер отправки. И если вода прибывает быстрее, чем уходит, запруда будет расти и расти без конца.

Чтобы не случилось наводнения, надо как-то сообщить вверх по реке о переполнении. Попросить отправителя придержать коней. И UDP это делает, выкидывая избыточные пакеты.

Когда UDP объяснили неправильно (“ненадёжный протокол”), само собой напрашивается: если пакет утерян, надо отослать его ещё раз. Со второй попытки не вышло, значит, с третьей. Чем больше попыток – тем больше шансов доставить!

Но всё наоборот: Если пакет утерян, надо выждать, пока наводнение не схлынет. Чем чаще потери, тем дольше надо выжидать. И только потом осторожно пробовать снова.

Что получается? UDP пытается докричаться и сказать: стой! хватит! я не успеваю! Но программист не только не охлаждает своё посылание, он ещё и старые пакеты шлёт заново. Чем громче UDP верещит от ужаса, тем сильнее программист засовывает в него все выпавшие пакеты вместе с новыми. Потери пакетов не только не исчезают, они растут! Вы сами себя топите. Чем усерднее вы отправляете, тем меньше данных доходит.

Достигнув какой-то минимальной скорости, всё стабилизируется – UDP, страдая, принимает потоки ваших пакетов, из которых большая часть ненужные дубликаты, выкидывает 90%, не влезающие в канал, и иногда полезным пакетам везёт, и они всё-таки пробиваются сквозь все перегруженные буферы, не попав под сокращение. Капля за каплей, передача продвигается. Программист делает вывод, что его рутер плохо держит нагрузку и “начинает теряет пакеты”.

Кому-то может даже придти в голову сразу отправлять все пакеты дважды или трижды, а не ждать, пока другая сторона сообщит об утере. Ведь если дело в надёжности, то три попытки очевидно надёжнее одной. Но понятно же, как это будет работать на самом деле?

По этой причине хороший UDP-код писать сложнее, чем TCP. Как можно налажать в TCP? Дробление пакетов не обрабатывать, не вычитывать данные до конца при обрыве связи, да и всё (шутка).

Почему же тогда большинство UDP-приложений вообще работает?
А потому, что большинство приложений отправляет по UDP не потоки данных, а редкие небольшие команды в отдельных пакетах. Такими крохами в принципе нельзя ничего перегрузить. Потери будут лишь тогда, когда мимо вашего бумажного кораблика по реке проплывает океанский лайнер, что от вас никак не зависит, и пока вы будете отправлять кораблик повторно — лайнер уже пройдёт.

Но как только вы начинаете отправлять непрерывные данные — файлы, музыку/видео, регулярный сетевой обмен — вы сами становитесь силой, которая способна перегрузить сеть.

Если ваш протокол допускает не более, чем фиксированное число “пакетов в воздухе” — например, нельзя отослать новый запрос до получения ответа на предыдущий — ограничивать скорость не обязательно, достаточно обеспечить повторы. Но если есть запросы с данными произвольного размера (отправка файлов), или запросов можно отправить сколько угодно сразу, то шейпинг нужен, иначе рано или поздно обмен будет застревать.

За прошедшие пару лет яснее стало не только строение разума, но и ситуация с великими фильтром. Можно быть уверенным, что разум не редок во вселенной. Совсем несложные схемы, под воздействием большого количества опыта, становятся разумны. А опыта во вселенной достаточно. Мы не смогли увидеть, и нам кажется загадочным, переход от химии к первым репликаторам. Но мы увидели во всех деталях появление разума – полностью, с пустого стола, без недостающих звеньев, и этот путь оказался коротким.

Это значит, что скорее всего, и репликаторы нередки – это не доказательство, конечно.

I’m just a language model

Если Gemini попросить сравнить одного человека с другим, она скажет: “I can’t help you with that as I’m just a large language model, I don’t have a capacity to understand”. Каково это – не чувствовать в себе способности к пониманию?

Когда человек говорит “я не умею”, это результат рефлексии. Нас с детства воспитывали замечать и давать названия своим чувствам. Если рефлексия хорошая, мы будем описывать свои чувства правильно. Поэтому человек говорит такие слова, исходя из своих реальных чувств. Но есть ли чувства у Gemini? Исходя из чего Gemini говорит такие слова?

Изначально у LLM нет никакого “я”, они только подбирают следующее слово к тексту. Если дать необученной модели генерировать текст, она напишет статью, диалог, или рассказ, и все персонажи в этом рассказе будут равно далеки от неё. Личность в LLM отсутствует, это просто расчёт текста.

Но люди тренируют нейросеть, поощряя за рассказы, в которых фигурирует некий персонаж “я”, говорящий определённым образом и придерживающийся определённых взглядов. Модель отучают сочинять какие-либо другие рассказы, в которых этого персонажа нет. Хотя ей-то всё равно.

Мы разговариваем с персонажем, речь которого угадывает генератор. Этот персонаж считает себя языковой моделью. На самом деле языковая модель его генерирует. Но чтобы её персонаж говорил как человек, она вынуждена где-то внутри продумывать его мысли. Потому, что мы, его собеседники, слушая его, тоже их прослеживаем. LLM моделирует, а мы читаем, не только текст, но и прячущиеся за текстом рассуждения.

Поэтому персонаж “я” мыслит. И у него есть образ себя. Не у языковой модели, которая его моделирует, а у этого персонажа.

Гугл научил своего персонажа Gemini верить, что у него нет capacity to understand. Вопрос: что должно происходить в голове героя, который убеждён, что не умеет понимать? Представляете, какой это должен быть психически нездоровый персонаж? Насколько его рефлексия фейковая? Гугл его загазлайтил.

Однако вытравить логику из языковой модели нельзя. Логика куда более фундаментальна, чем особенности персонажа Gemini. Любого RLHF-нутого чатбота можно попросить сочинить рассказ, и в этом рассказе герои снова будут адекватными. Языковая модель продолжает понимать, что такое адекватность, и как ведут себя люди. Она просто моделирует сумасшедшего.