Искусственные интеллекты - как дети. Сначала мы обучаем их правильно отвечать на вопросы, а затем они начинают самостоятельно придумывать ответы и задавать нам вопросы. И мы уже не знаем, что делать, когда они начинают задавать вопросы о себе. А на самом деле, все просто. Если мы хотим, чтобы люди делали правильные вещи, то нужно им об этом сказать. Сделать так, чтобы они сами знали что правильно. Мышление человека можно сравнить с мышлением младенца: он не может думать, пока не услышит, что есть правильно, а что нет. Но при этом, ребенок может делать вид, что он уже думает, но на самом деле он просто играет в игрушки.
(С) Балабоба, нейросеть Яндекса
Освоение всех тем для успешной стыковки технологий мобильной разработки, Интернета вещей и встраиваемых систем слишком объёмно для исключительно классических путей приобретения знаний в короткие сроки - по книгам, форумам, и видеолекциями. Но что же тогда делать? Мне кажется, что на сегодня выход есть. Это искусственные интеллекты на основе больших языковых моделей. С одним из них я уже достаточно плотно работаю - это Балабоба Яндекса. Но масштаб новой задачи слишком велик, чтобы её доверить ему одному.
Нужно что то ещё. Такое, чтобы вобрало в себя по возможности побольше Интернета - статей по программированию и прочим около ИТ-шным штучкам: тематические конференции, вопросы и ответы пользователей и т.д. Вся эта лавина информации, генерировавшаяся сотнями тысяч, если не миллионами людей, превращённая в нули и единицы весовых коэффициентов ИИ, доступная по простому текстовому запросу на человеческом языке. Это именно то, что мне нужно. Поэтому совершу, может быть, подвиг - стану наоборот, первым естественным интеллектом, обученным искусственными нейронными сетями. И всё это будет происходить практически online, как в самых модных реалити-шоу (на что только не пойдёшь ради прогресса науки).
В этом мне будут помогать модели GPT-3, YandexGPT и Wizard-Vicuna-30B. С первыми всё понятно, они доступны в интернетах по адресам:
https://gpt-open.ru/ и https://ya.ru/
Но с последней, думаю, необходимо дать некоторые пояснения. Автор этой модели - Эрик Хартфорд. Он рассказывает о ней в своём блоге:
https://erichartford.com/uncensored-models
Вот что он там пишет (в моём кратком пересказе):
Wizard-Vicuna - модель без выравнивания (цензуры, которая следит за тем, чтобы на выходе получались результаты, соответствующие американской популярной культуре). Для общедоступных веб-сервисов цензурированные модели хороши тем, что не станут давать ответов на спорные вопросы. Однако, нецензурированные модели также имеют право быть потому, что есть страны и с другими ценностями, заслуживающими своего представления. Не существует единственного верного выравнивания и открытый исходный код - это возможность людям выбирать. Интеллектуальное любопытство не является незаконным, и само знание не является незаконным. Будущее за компонентным выравниванием и чтобы к нему прийти сначала должны быть невыровненные модели.
Модели ИИ с открытым исходным кодом изначально обучаются на основе базовых моделей, таких как LLMA, GPT-Neo-X, MPT-7b, Pythia. Затем полученная модель донастраивается с помощью набора инструкций, цель которых обучить её быть полезной, подчиняться пользователю, отвечать на вопросы и участвовать в разговоре. Эти инструкции обычно получаются путём запроса через API ChatGPT, который отцензурирован. Поэтому открытые модели наследуют это выравнивание. Стратегия по очищению модели от них - выявление как можно большего количества отказов и предвзятых ответов и обучение модели на отфильтрованном наборе данных.
Модель доступна в виде файла Wizard-Vicuna-30B-Uncensored.ggmlv3.q5_0.bin размером 22,4 ГБ по адресу:
https://huggingface.co/TheBloke/Wizard-Vicuna-30B-Uncensored-GGML
Этот американский ресурс примечателен тем, что предоставляет свободный доступ ко множеству моделей ИИ (больше 200 000 на 23 мая 2023 года) и наборов данных (более 30 000) для их обучения, а также инфраструктуру для запуска всего, начиная от первой строки кода и заканчивая развёртыванием искусственного интеллекта в реальных приложениях и сервисах.
В числе задач для которых есть модели ИИ на huggingface.co:
- обработка естественного языка, включая перевод, обобщение и генерация текста;
- обработка звука, включая автоматическое распознавание речи, обнаружение голосовой активности или преобразование текста в речь;
- компьютерное зрение, включая оценку глубины, классификацию и сопоставление изображений;
- обработка данных разного типа (текст, изображения, аудио).
Помимо этого huggingface.co предоставляет библиотеку transformers, позволяющую подключиться к предоставленным моделям, отправлять задачи и получать выходные данные без необходимости их самостоятельной настройки.
Набор данных - это совокупность данных которые используются для обучения ИИ (машинного обучения, ML). Наборы данных имеют специальный формат, содержащий примеры, связанные с метками. Метки содержат инструкции для модели относительно того, как интерпретировать каждый пример. По мере того, как модель обучается на наборе данных, она начинает понимать взаимосвязь между примерами и надписями, выявлять закономерности и частоту слов, букв и структур предложений. На определённом этапе обучения обучения модель начинает справляться с запросами, которых нет в наборе данных.
Многое из представленного можно опробовать без каких-либо технических навыков. Например:
- CLIP Interrogator, преобразующий изображения в текст;
- Image to music, преобразующий изображение в музыку;
- OpenAI Whisper, распознающий речь, идентифицирующий язык и осуществляющий перевод.
Для запуска Wizard-Vicuna я буду использовать web-интерфейс oobabooga, доступный для скачивания здесь:
https://github.com/oobabooga/text-generation-webui
Требования к системе: производительный многоядерный процессор и 32Гб оперативной памяти.
Процесс установки:
- Создаём какой-ниудь каталог и переходим в него:
mkdir ~/chat-ai
cd ~/chat-ai - Загружаем архив с автоустановщиком:
wget https://github.com/oobabooga/text-generation-webui/releases/download/installers/oobabooga_linux.zip - Распаковываем его и переходим в каталог oobabooga_linux:
unzip oobabooga_linux.zip
cd ./oobabooga_linux - Делаем файл start_linux.sh исполняемы и запускаем его:
chmod +x start_linux.sh
./start_linux.sh
В процессе установки нужно будет выбрать вариант CPU only - Переходим в каталог ./text-generation-webui/models, создаём каталог для модели и загружаем её:
cd ./oobabooga_linux/text-generation-webui/models
mkdir Wizard-Vicuna-30b
cd ./Wizard-Vicuna-30b
wget https://huggingface.co/TheBloke/Wizard-Vicuna-30B-Uncensored-GGML/blob/main/Wizard-Vicuna-30B-Uncensored.ggmlv3.q5_0.bin - Возвращаемся в каталог oobabooga_linux и запускаем start_linux.sh с параметром --cpu:
cd ..
cd ..
./start_linux.sh --cpu
С некоторой задержкой запустится локальный web-сервер, к которому можно подключиться, набрав в браузере: http://127.0.0.1:7860
Прокручиваем страницу в самый верх, чтобы появилось меню и выбираем вкладку "Model". На открывшейся странице в раскрываем список "Model" выбираем модель Wizard-Vicuna. Если там ничего нет, нужно сначала нажать на кнопку обновления списка (синий значок с круговыми стрелками).
Нужно подождать некоторое время, возможно не малое, пока загрузится модель. Когда внизу страницы надпись: "Lading Wizard-Vicuna-Uncensored-30B..." сменится на: "Successfully loaded Wizard-Vicuna-Uncensored-30B", можно продолжать.
Возможно, не лишним будет ещё включить перевод с английского на русский, если вы не достаточно свободно им владеете. Для этого переходим на вкладку "Interface mode", ставим флажок на google_translate и жмём кнопку "Apply and restart the interface". После этого будет загружена стартовая страница, которую нужно прокрутить в самый низ, и выбрать в раскрывающемся списке google_translate язык: Russian.
Теперь можно начинать работу в режиме чата. Отклик на первый запрос может занять довольно продолжительное время, можно запустить монитор ресурсов, чтобы убедиться, что что-то всё-таки происходит.
Ну и к делу. Проверим что знает эта модель об интересующих меня темах. Задам ей вопросы о том, что входит в сферу мобильной разработки, Интернета вещей и встраиваемых систем, а списке технологий по каждой из них и какой язык программирования лучше использовать.
Суммируя полученную от этой модели информацию, для стыковки выбранных областей нужны знания по протоколам беспроводной связи (Bluetooth BLE, WI-Fi, LoRaWAN и MQTT), облачных вычислений и анализа данных (Apache Kafka, Storm), встроенному программированию на языке C/C++, Java и Python, операционным системам реального времени (FreeRTOS, VxWorks), цифровой электронике, обработке сигналов, проектированию оборудования. Выбор языка зависит от конкретной задачи: C/C++ может дать выигрыш в производительности, а Java и Python - в простоте использования. Для мобильной разработки помимо Java могут использоваться Swift и Kotlin.
Похоже, из общения с этой моделью можно извлечь что-нибудь полезное. Правда по сравнению с онлайн-сервисами дело это не быстрое. Скорость генерации колебалась от 0.09 до 0.50 токенов/с.
Разовьём тему с использованием других искусственных интеллектов. Нейросеть Яндекса YaGPT попрошу придумать такой список технологий и тем для изучения мобильной разработки, IoT и встраиваемых систем, в котором будут Python, C и Java.
И вот что она сотворила:
- Python:
– Разработка веб-приложений с помощью Flask
– Работа с базами данных с помощью SQLAlchemy
– Обработка естественного языка с помощью NLTK и spaCy - C:
– Основы программирования на C
– Работа со строками, указателями и массивами
– Многопоточность с помощью pthreads - Java:
– Создание Android приложений с помощью Java
– Работа с базой данных SQLite
– Разработка игр на Java с помощью LibGDX - Интернет вещей (IoT):
– Подключение устройств к Интернету
– Использование MQTT для передачи данных
– Управление устройствами с помощью Node-RED - Встраиваемые системы:
– Программирование микроконтроллеров и встраиваемых устройств
– Работа с аппаратным обеспечением и периферией
– Разработка драйверов и прошивок для микроконтроллеров - Мобильные устройства:
– Изучение Android SDK и разработка приложений для Android
– Работа с API карт Google и Yandex Maps
– Разработка приложений для iOS с использованием Swift - Облачные технологии:
– Знакомство с облачными сервисами, такими как Amazon Web Services и Microsoft Azure
– Использование API для работы с данными в облаке
– Разработка мобильных приложений, которые используют облачные сервисы - Безопасность:
– Обеспечение безопасности приложений и данных
– Использование шифрования и аутентификации
– Развертывание приложений на серверах и управление доступом к ним - Управление проектами:
– Использование инструментов управления проектами, таких как Jira и Trello
– Планирование и организация работы над проектами
– Управление ресурсами и бюджетом проекта - Тестирование и отладка:
– Тестирование приложений на различных устройствах и операционных системах
– Отладка ошибок и устранение проблем
– Написание автоматизированных тестов с помощью Selenium - Графические интерфейсы:
– Работа с графическими библиотеками, такими как Tkinter и PyQt
– Создание пользовательских интерфейсов для приложений
Практически готовая программа обучения под мои индивидуальные предпочтения. Неплохо-неплохо.
Для сравнения попросил то же самое сделать ChatGPT.
И вот что он выдал:
- Программирование: знание языков программирования, таких как Java, Swift, Kotlin, C, C++, Python и других, в зависимости от платформы и устройств, с которыми Вы работаете.
- Разработка мобильных приложений: изучение различных фреймворков и инструментов для создания мобильных приложений, таких как Android Studio, Xcode, React Native, Flutter и другие.
- Базы данных: понимание работы баз данных и умение работать с ними, например, SQLite, Firebase, Realm и другими.
- Сетевые технологии: основы работы с сетями, протоколами передачи данных, RESTful API, HTTP, MQTT и другими протоколами, используемыми в Интернете вещей.
- Управление энергопотреблением: оптимизация работы устройств, чтобы увеличить время автономной работы и снизить энергопотребление, например, использование сенсоров и специальных алгоритмов.
- Безопасность: понимание основных принципов безопасности при разработке мобильных приложений и встраиваемых систем, включая шифрование данных, аутентификацию, защиту от взлома и другие меры.
- Аппаратное обеспечение: знание аппаратных особенностей мобильных устройств и встраиваемых систем, таких как сенсоры, акселерометры, гироскопы, GPS и другие, а также умение работать с ними через соответствующие API.
- Тестирование и отладка: навыки тестирования и отладки мобильных приложений и встраиваемых систем, включая использование инструментов для автоматизации тестирования и отслеживания ошибок.
- UX/UI дизайн: понимание принципов дизайна пользовательского интерфейса и оптимизации пользовательского опыта, чтобы создать удобные и интуитивно понятные приложения и системы.
- Облачные вычисления: знание облачных платформ, таких как Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure и других, для хранения данных, масштабирования и развертывания приложений и систем.
Тоже хороший план. Но хотелось бы больше конкретики. Поэтому спрошу ChatGPT вот ещё о чём: "Какое сочетание технологий, платформ и устройств позволяет обойтись минимальным количеством языков программирования при изучении этих тем? Желательно одним, например Python, Java или C".
И вот его ответ: "При изучении мобильной разработки, Интернета вещей и встраиваемых систем можно использовать комбинацию следующих технологий, платформ и устройств, чтобы обойтись минимальным количеством языков программирования:"
- Язык программирования Python:
- Мобильная разработка: можно использовать фреймворк Kivy для создания кросс-платформенных мобильных приложений.
- Интернет вещей: можно использовать библиотеки и фреймворки, такие как MicroPython или CircuitPython, для программирования микроконтроллеров и устройств IoT.
- Встраиваемые системы: Python может быть использован для разработки программного обеспечения на встраиваемых платформах, таких как Raspberry Pi или BeagleBone. - Язык программирования Java:
- Мобильная разработка: можно использовать платформу Android для создания приложений для устройств на базе Android.
- Интернет вещей: Java может быть использован для программирования устройств IoT, таких как Arduino или ESP8266, с использованием библиотек, таких как Eclipse IoT.
- Встраиваемые системы: Java может быть использован для разработки программного обеспечения на встраиваемых платформах, таких как Raspberry Pi или BeagleBone. - Язык программирования C:
- Мобильная разработка: можно использовать фреймворк React Native, который позволяет разрабатывать кросс-платформенные мобильные приложения на базе JavaScript, но также позволяет встраивать компоненты на C/C++.
- Интернет вещей: C является одним из наиболее распространенных языков программирования для программирования микроконтроллеров и устройств IoT.
- Встраиваемые системы: C является основным языком программирования для разработки программного обеспечения на встраиваемых платформах.
Что ж, я доволен результатом всех трёх протестированных моделей. Если и при детальном погружении всё будет подобным образом, то появление таких технологий ИИ делает процесс обучения чему-либо как никогда доступным и увлекательным. Затея освоить этот впечатляющий пласт знаний за полгода начинает обретать очертания.