Коротко о прочитанных недавно книгах

Дочитал на днях две книжки, которые читал параллельно.

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

Про книгу «Глубокое обучение» надеюсь как-нибудь напишу отдельный пост. Если коротко, это скорее теоретическая книга про разные архитектуры нейронных сетей: обычные многослойные, сверточные, рекуррентные, порождающие. Описываются различные методы их обучения. При этом в книге достаточно много математики, которую иногда при поверхностном чтении можно пропустить, авторы все равно объяснят идею каждой архитектуры сети. В книге есть несколько примеров кода с использованием TensorFlow и Keras, но это не учебник по этим библиотекам. Идеи описаны достаточно тяжелые, но при этом язык написания книги — замечательный с добавлением шуток и цитат из художественных или не очень книг, которые можно прицепить к рассматриваемой теме. Книга писалась в 2017 году, еще до появления ChatGPT, и это надо учитывать. Даже сами авторы пишут, что по нейронным сетям появляется огромное количество научных публикаций, предлагающие новые подходы к построению различных архитектур сетей. В конце книги приводятся ссылки на чуть меньше 600 публикаций.

Как я пытался векторизовать картинки

Как я пытался векторизовать картинки

В последнее время работа над очередной версией OutWiker у меня в основном заключается в том, что я перерисовываю растровые картинки, которые используются в качестве изображений на кнопках и в качестве значков в дереве заметок. Картинки для кнопок я уже все перевел в векторный формат, а вот значков для заметок такое количество, что в обозримом будущем векторизовать их все вряд ли удастся. В комментариях спрашивали, почему бы не попробовать применить какой-нибудь софт для векторизации, на самом деле я пробовал, но проблема заключается в том, что исходные картинки имеют размер всего 16×16 пикселей, и векторизаторы создают месиво из каких-то размытых пятен. Честно говоря, тут их винить не стоит — если увеличить исходную картинку каким-нибудь примитивным алгоритмом масштабирования, то результат будет примерно такой же. Это уже наш мозг, глядя на набор из 256 точек (16×16) допридумывает то, что там изобразил художник. Когда я рисовал векторные значки, которые должны были бы выглядеть в маленьком размере так же, как исходная картинка, приходилось напрягать воображение и дорисовывать то, что на исходной картинке не имело четких контуров.

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

Читать далее ‘Как я пытался векторизовать картинки’ »

Про генерацию кода искусственным интеллектом

Про генерацию кода искусственным интеллектом

Понадобилось мне для OutWiker сделать новый контрол для выбора цвета. Это должен быть выпадающий список (в простонародье — ComboBox), который вместо текста отображал бы прямоугольники разных цветов. Я очень не люблю делать свои контролы, но в какую сторону копать было понятно. Решил эту задачу переложить на братьев наших меньших (а в перспективе — больших), то есть на искусственный интеллект, и попросить его сгенерировать код.

Начал с Copilot. Результат меня прям очень впечатлил. Первоначальный запрос был такой:

«Напиши код компонента на Python с использованием библиотеки wxPython, который использует wx.adv.OwnerDrawnComboBox, чтобы выбирать цвет с помощью выпадающего списка. Каждый элемент выпадающего списка должен отображаться в виде прямоугольника своего цвета. Напиши код приложения, который этот компонент использует.»

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

«Пусть теперь нулевой элемент будет обозначать «цвет по умолчанию» и выводиться текстом, а последний элемент списка — «Выбрать цвет» и тоже выводиться текстом.»

Удивительно, но он сделал именно то, что я имел в виду. В процессе общения поправили некоторые мелочи, и оно заработало.

После этого мне стало интересно сравнить результат с другими нейронками. Начал с Яндекс GPT 4. Результат получился унылый. Работающего контрола от него я так и не добился. В выпадающем списке цветные прямоугольники он не смог нарисовать (хотя честно пытался, но все время что-то было не то).

Попробовал после этого нейронку от Сбера — GigaChat. С ним пришлось помучиться подольше, чем с Copilot, — приходилось часто указывать конкретные строки, где ИИ был не прав, и что там должно быть. Но в итоге контрол начал делать то, что от него требуется, хотя некоторые оформительские моменты придется за ним все-таки править руками. А на дополнительной хотелке нейронка ушла в бесконечный цикл и начала писать без передыху по три одинаковые строчки, которые к делу вообще не относятся. В другой раз по этому же запросу у нее перепутались код и комментарии к нему. Ну ладно, с бонусом она не справилась, но в целом тоже молодец.

Еще я на днях локально себе поставил опенсорсную нейронку Llama 3 (запускал через ollama). Код, который она генерила, тоже с ходу не заработал. Но еще у меня и комп для нее слабоват. Сначала ИИ отвечал относительно шустро, но если надо было исправить ошибку, то он начинал думать минут 10, и результат совсем не впечатлял. В общем, у меня не хватило терпения заставить эту нейронку написать рабочий код.

PS. Если кому интересно, то вот код, который в итоге получился у Copilot. Для получения этого кода понадобилось 7 запросов. И код, который получился у GigaChat . Сколько понадобилось запросов для получения этого кода не знаю, потому что история не сохранилась.

Для запуска этих исходников нужна библиотека wxPython.