В связи с оглушительным успехом первой части аппаратного ШИМа, я решил, что не стоит останавливаться, и хочу поделиться еще одним вариантом реализации данного действа, но чуть более издевательского. А читая комментарии к первой части, я сделал для вывод, что не стоит пытаться реализовать код универсально, кому надо - тот сам все сделает под свои цели. Ну что же, так и поступим.
Да простит меня сообщество, - не вижу смысла заливать код куда либо, если там несколько строк:
Итак, котэ работает на 2 прерываниях, одно прерывание срабатывает при совпадении, другое при переполнении. Т.е. когда сработало прерывание по переполнению, а значит таймер обнулился, - на пин подается высокий уровень. Когда таймер досчитал до значения регистра сравнения - вызывается прерывание по совпадению, в котором на пин подается низкий уровень. И таймер продолжает считать дольше, пока не вызовет прерывание по переполнению. И так по кругу.
Пройдемся по алгоритму:
Допустим, хотим ШИМ на D13, смотрим табличку вначале... D13 - это первая таблица, она относится к PORTB и регистр настроек DDRB, В самой верхней шапке - управляющие биты, ПИНу D13 соответствует байт 32 (если так можно сказать), разложив его в бинарный код, будет 00100000 , это 6 бит,.. но нам надо записать в переменную bit число 32.
Далее, прописываем нужные порты и регистры.. т.е. в блоке setup - DDRB и в прерываниях таймеров прописываем порты PORTB.
Соответственно, если порты и регистры будут не B, а например на аналоговых пинах - это С, то пишем вместо DDRB - DDRC, вместо PORTB - PORTC.
Для более простой настройки, конечно же можно это все переопределить в define.
Для установления значения скважности, нужно значение скважности записать в регистр сравнения, в данном примере используется таймер 2, канал B, значит записываем OCR2B = 0-255. Максимально 255, т.к. таймер 2 - 8 битный. Нужно ли вызывать перед записью значений запрет прерываний cli(); и их разрешение sei(); после - каждый решает сам, от требований поставленной задачи.
Решил я поиграться в ардуинки. Выбор пал на ESP32-C3 с 0,42-Дюймовым OLED-Модулем за какие-то там 200 руб. Пока оно едет из Китая думаю, дай потыкаюсь со средой разработки. Раньше дела с ней не имел.
Оказывается есть две версии под линухой. Одна на электроне v. 2.3.8 и старая 1.8.19 на Java. Но об ентом я ещё не знал, естественно выбрал поновее и получил засаду - вечно крутится на заставке. Думал наши разрабы АльтЛинухи накосячили с опакечиванием, перепробовал кучу сборок со стороны (не из репов Альта) - везде одно и тоже - вечно крутится заставка. Запустил иде из консоли и увидел туеву хучу ошибок с невозможностью чего-то там скачать. Направление гугления тут же изменилось и выяснилось, что www.arduino.cc лочит россиян из-за Cloudflare (эдакий сервис для защиты сайтов от хакерских атак). Что и и как произошло между Cloudflare и РФ вспоминать не стал и начал думать как пустить Ардуино-ИДЕ через тор-сеть. Придумать не удалось
Вот тогда я и узнал, что разница между старой и новой ИДЕ исключительно в интерфейсе, более того, настроек сети в новой версии я не нагуглил (возможно пальчиками где-то в конфигах и прописывается). А вот в старой версии пожалуйста Файл-->Настройки->Сеть:
При этом все библиотеки и "платы" начали загружаться. И да, версия из репозиториев Альта. Между прочим, ардуинки часто используются не только как хобби, но и в образовательных целях. Но политиканам насрать на это.
Программируемый многофункциональный робот от Keyestudio V3.0 для Arduino. Умеет выполнять множество команд. Комплект для сборки отлично подойдет начинающим любителям робототехники и программирования.Ссылкана источник.
2 Фургон
Интересный набор для сборки фургона-автодома с множеством различных функций.Ссылкана источник.
3) Робот с клешней
Набор для сборки умного робота с 'рукой'. Умеет выполнять различные команды, брать/класть предметы и тд.Ссылкана источник.
4) Механический робот
Еще одна версия робота с 'клешней' для самостоятельной сборки и программирования.Ссылкана источник
5) Танк
Комплект для сборки собственного робота-танка на гусеницах. Умеет выполнять множество команд.Ссылкана источник
6) 4WD Mecanum
Робот с интересными колесами, которые могут двигаться в любом направлении. Робот сборный, программирование на Microbit V2.Ссылкана источник
7) Самобалансирующийся робот
Электронный комплект «сделай сам» - робот балансир для взрослых и детей.Ссылкана источник
8) Робот с камерой
Робот-машинка Pi 4B для сборки и программирования. Имеет камеру и функцию слежения/наблюдения, а также множество других возможностей.Ссылкана источник
9) Ферма
Необычный конструктор для программирования с множеством датчиков и солнечной панелью.Ссылкана источник
10) Робот-погрузчик
Забавный робот с ковшом и умеющим рисовать.Ссылкана источник
11) Игровая приставка
Геймпад Keyestudio ATMEGA32U4 с OLED-экраном, стартовый набор для Arduino.Ссылкана источник
12) Генератор
Генератор электричества с солнечной панелью, которая поворачивается вслед за солнцем и поможет зарядить ваши гаджеты в трудную минуту.Ссылкана источник
13) Лягушка
Веселый робот-лягушка с сервоприводами для сборки.Ссылкана источник
14) Манипулятор
Набор для сборки крана-манипулятора для последующего программирования. Поможет обучить и научить начинающих любителей электроники, роботостроения и программирования как это делается=).Ссылкана источник
15) Поливочная машина
Набор для создания автоматической станции поливки цветов и других растений. Датчики влажности будут следить за состоянием почвы и поливать, когда это будет нужно.Ссылкана источник
16) Перчатка
Специальная перчатка с датчиком движения, способная управлять Вашими роботами и другими устройствами.Ссылкана источник
17) робот-собачка
Умная собака-робот для сборки и программирования.Ссылкана источник
18) Паук
Роботизированный паук с пультом управления.Ссылкана источник
19) Вездеход
Робот-вездеход ELEGOO Conqueror с UNO R3.Ссылкана источник
20) Робот-картограф
Самый серьезный аппарат в нашей сегодняшней подборке. ROSMASTER X1 - это обучающий робот с приводом на 4 колеса, разработанный на основе операционной системы ROS robot. Он использует плату серии Jetson и Raspberry Pi 4B в качестве основного контроллера и оснащен высокопроизводительной аппаратной конфигурацией, такой как лидар и камера глубины, которые могут осуществлять управление роботом, дистанционную связь, картографирование и навигацию, отслеживание обхода препятствий, автопилот, распознавание особенностей человеческого тела и другие функции.Ссылкана источник.
Всем доброго времени суток, с вами на связи Lis-ST, и сегодня мы с вами более подробно ознакомимся с нейросетями, которые чаще всего и называют ИИ, а именно с языковыми моделями. Начнём от простого, к сложному.
Восприятие языковых нейронок.
Как нейросеть видит нашу письменность.
Модели не понимают буквы и слова как люди. Их родной язык — числа. Решить эту проблему довольно просто, ведь правда? Просто присваиваем каждой букве и знаку число - проблема решена! Но практика показала обратное, на обработку текста в таком формате требовалось очень много вычислительных мощностей и времени, а при увеличении длины текста требования росли в квадратичной зависимости. Причина банальна, внутри скрытого слоя каждый символ должен "взаимодействовать" с каждым, и это не единственная проблема.
Первый шаг в решении данной проблемы, разбить текст на части - "токены". А раз уж решили прибегнуть к такому способу и так как нейросеть всё-равно работает с числами, почему бы их не сделать из наиболее часто встречающихся частей текста:
С одно стороны, когда у нас были символы, наш словарь состоял из 256 значений, а токенов в той же GPT более 50000... Какая-то оптимизация наоборот, скажете вы и будете не правы. Всё дело в том, что если токеновая модель обрабатывает последовательность из 1000 токенов за условные 10 секунд, то символьной модели для обработки того же текста потребуется уже минимум 160 секунд, неплохая такая разница?
Вкратце затронем эмбеддинги - так называемый вектор. Зачем нам какой-то вектор, ведь токены у нас, числа им присвоены? Но нужно же как-то определять, в каком порядке токены размещены в тексте. Не забываем о контексте за который отвечает механизм внимания (Self-Attention), работающий так-же в скрытом слое, всё также путём присвоения дополнительных значений токенам.
Генерация - не сердце, но суть нейросетей.
Валера, что-то не нравится мне этот расклад, как бы чего плохого не случилось.
Языковая модель — этоочень умный писатель, он никогда не видит весь текст сразу, а пишет по кусочкам (токенам). И каждый раз, когда нужно выбрать следующий кусочек, в его голове происходит невидимое "голосование".
После того как модель прочитала всё, что вы написали, она составляетвнутренний рейтинг всех возможных продолжений. У неё в голове есть огромная доска рейтинга на 50 000 мест (по числу токенов). У каждого варианта — своя оценка. Эти оценки — не про "правильность", а протипичность. Модель спрашивает себя: "Что в моей обучающей библиотеке чаще всего шло после такого начала?"
Пример: вы написали "Сегодня хорошая...". В голове модели:
место №1: "погода" - (очень высокий балл)
место №2: "." (точка) - средний балл
место №3: "для" - небольшой балл
место №1000: "крокодил" - почти ноль
Модельникогда не уверена на 100%, у неё есть тольковеса предпочтений.
Что происходит с этими весами дальше? Два Варианта:
Вариант №1: Точность.
Модель всегда берётсамый верхний вариантиз рейтинга. Увидела "погода" - напечатала "погода". Потом снова смотрит рейтинг для "Сегодня хорошая погода", опять берёт самый верхний... В итоге получается очень предсказуемый, сухой,бездумно-правильныйтекст. Как говорят: "модель включила режим калькулятора". Плюс: не ошибается, минус: нет творчества, повторяет штампы.
Такой режим используется, когда нужен точный факт, код или перевод. Но общаться с таким собеседником скучно и бесполезно, но главное, абсолютно бесперспективно, если вы сунетесь к нейронке с тем, чему она не обучена (запомните главный принцип, касательно "проблем", если решения вашей проблемы нет в интернете, вероятность того, что поможет нейросеть, стремится к нулю, даже при варианте №2).
Вариант №2: Обычный человек.
Модель смотрит на рейтинг иподбрасывает волшебный кубик, где грани взвешены по весам. Вариант с весом 80% занимает 80% граней кубика, вариант с 15% - 15% граней и т.д.. Так она иногда может выбрать и "погоду", и неожиданно «.», и даже очень редко "крокодила", если кубик так выпадет.
Именно за счёт случайноститекст становится живым, разнообразным, иногда остроумным. Но изредка - странным или глупым. Это плата за "человечность" и творчество.
Температура.
Температура за бортом.
Температура - это ручка управления "креативностью" нейросети.
Холодная температура (низкая, например 0.2).
Модель как быувеличивает контрастмежду первым местом и всеми остальными. Первое место становитсягигантским, а все остальные - крошечными. Кубик почти всегда падает на топ-1 результат. Текст становится сухим, однообразным, как диктор новостей, читающий по бумажке.
Лучше всего для:фактов, инструкций, кода, перевода.
Комнатная температура (1.0 - стандарт).
Это естественное состояние модели, то, чему её обучили. Разница между первым и вторым местом естественная. Кубик отражает реальные статистические веса. Текст получаетсяпохожим на обычную человеческую речь- с предсказуемыми, но иногда слегка неожиданными поворотами.
Лучше всего для:обычного чата, деловых писем, новостей.
Горячая температура (высокая, например 1.5).
Модельсглаживает оценки: первое место уже ненамного выше второго, а сотый вариант получает заметный шанс. Кубик становится "расслабленным" - он может выбросить редкое слово, необычную конструкцию, даже неуклюжий, носвежийоборот. Текст получается творческим, иногда странным, иногда гениальным, иногда бредовым.
Лучше всего для:стихов, шуток, креативных идей.
Кипящая температура (очень высокая, например 2.5+).
Все варианты становятся почти равноправными. "Погода" и "крокодил" получают почти одинаковые шансы. Кубик выпадает практически случайно. Текст превращается вбессмысленный словесный шум - связные слова, но нелепые сочетания ("Сегодня хорошая крокодил на завтрак"). Полезно разве что для демонстрации того, как модель ломается.
Есть ещё более умные настройки, дополняющие температуру, но статья и так уже не маленькая, а это плохо.
Манипуляции нейросетью.
Да, я такой.
Чтобы задать нейросети нужный "настрой" или стиль, используют два главных инструмента:ручки температуры(о которых мы говорили) иволшебные слова в начале диалога(промпты).
1. Задаём "характер" словами.
Представьте, что вы нанимаете актёра. Вы не просто говорите "говори", а даётевводную о роли:
"Ты - научный популяризатор, который объясняет сложные вещи на пальцах. Ты не используешь формулы и термины, если без них можно обойтись. Ты любишь метафоры, примеры из жизни и немного юмора. Твой стиль - как у хорошего учителя или ведущего научно-популярного шоу."
В GPT это называетсяsystem prompt(системное сообщение). В других моделях - просто первое сообщение, которое задаёт контекст.
Что ещё можно прописать в настройку:
"отвечай кратко, не более трёх абзацев"
"используй маркированные списки, но без markdown"
"называй меня на "ты""
"добавляй примеры из кулинарии/спорта/путешествий"
Это самый мощный способ изменить стиль, потому что модель начинает "вживаться" в роль.
Вот несколько самых интересных примеров того, на что способен системный промпт за пределами привычных сценариев:
Придумать "анти-совет" для вашей идеи (Адвокат Дьявола):
Нейронка по умолчанию старается быть вежливой и соглашаться. Но промпт может превратить её в беспристрастного критика, задача которого - найти слабые места в вашем бизнес-плане или проекте, чтобы вы могли его улучшить.
Подготовиться к сложному интервью:
Попросите нейросеть представить себя журналистом, который задаст вам каверзные вопросы. Это поможет вам заранее подготовиться к разговору с реальным экспертом.
Писать стихи в стиле числа "π":
В этом промпте каждое слово стихотворения должно строго соответствовать цифрам числа Пи (3,14,15…), где первое слово - из трёх букв, второе - из одной, третье - из четырёх и т.д.
Заключение? Итог? Выводы?
А теперь можно вернуться к вопросу, существует ли ИИ на сегодняшний день? Но чтоб разобраться в данном вопросе, нужно в первую очередь понять, что такое ИИ.
Исходя из словосочетания, ИИ, это интеллект, но искусственный, а интеллект - это качество психики, состоящее из способности осознавать новые ситуации, способности к обучению и запоминанию на основе опыта, пониманию и применению абстрактных концепций, и использованию своих знаний для управления средой обитания человека.
Да, это сухое, весьма размытое определение, которое не даёт чёткого представления о том, что-же это такое. Если же посмотреть на то, с помощью чего он реализуется, всё становится на свои места: способности познавать, обучаться, мыслить логически, систематизировать информацию путём её анализа, определять её применимость, находить в ней связи, закономерности и отличия, ассоциировать её с подобной информацией, оценивать её достоверность, актуальность и многое другое...
И опять вернёмся непосредственно к вопросу, являются ли нейросети - искусственным интеллектом? На все 100% нет, и даже близко ничего общего с ним не имеют. По своей сути нейронки - поисковик, работающий на глюках.
П.С.:
У Лисёнка голова бобо. Тут хотел написать в рифму к первому предложению, но видимо ещё не совсем.
Всем спасибо за внимание, с вами был Lis - Silver Tail. Ссылка на первый пост об основах нейросетей ниже.(блин, это же ещё всё вычитывать...(здесь был смайлик))
Комментарии