«Кому написано на роду ярмо носить — тот есть бык…» В общем, у чётких пацанов логика чёткая, а ярмоносцам приходится компромиссы находить. Логика бывает ещё и нечёткой, а создатель оной — Лотфи Заде; помню, на занятиях по ТАУ нам подчёркивали важность орфоэпии, без которой хошь не хошь, а преисполниться знаниями не получится.
Когда выдумывали нечёткую логику, время было такое, что фантасты уже описали, как должен выглядеть искусственный интеллект, однако ж реализовать хотелки было сложно на огромных ламповых компьютерах. Вот появятся мощные компьютеры в 90-х — и все теории второй половины XX века пойдут в дело. Так было и с нечёткой логикой.
В общем, цель создания нечёткой логики в том, чтобы описать строго математически нестрогие понятия. Например, яблоко — это нечто небольшое, круглое и красное. Хм, а если зелёное яблоко? Ну тогда оно яблоко на 73%, то есть, наверное, яблоко. А если большое, круглое и красное — тогда, может быть, это шар для боулинга или моя голова — что соответствует яблоку на 23%, а тыкве на 42%. Нечёткая логика — это попытка перевести человеческие слова в понятные для компьютера байты.
По сути, LLM делают это тоже: мы им пишем, а они берут слова, переводят в токены и в своём многомерном пространстве строят вектор — таким образом получается, что король − мужчина + женщина = королева, и т.д. К связи с нейросетями мы ещё вернёмся в конце.
1. От чёткого множества к нечёткому
Нечёткое множество задаётся функцией принадлежности — для каждого значения она показывает, насколько к множеству «причастен»:
Дам несколько определений. Универсум — это всё множество значений , на котором задана функция принадлежности. Носитель — это все значения , для которых : они хоть немного принадлежат множеству. Ядро — значения, для которых : это самые «чистые» представители множества. Высота — максимальное значение ; если она равна 1, множество называется нормальным. Дальше договоримся работать только с нормальными множествами.
Так яблоко это, тыква или голова? Вот чтобы вернуться от нечёткого множества к обычному, выбирают порог от 0 до 1 и оставляют только те , у которых принадлежность не ниже этого порога. Это называется альфа-срезом: например, при остаются элементы, принадлежащие множеству хотя бы на 70%.
Разница видна на примере «тёплой воды» (рис. 1): у чёткого множества 29,9° — ещё «не тёплая», а 30,1° — уже «тёплая»; у нечёткого никакого скачка нет.
2. Функции принадлежности
Форма функции принадлежности — тут как карта ляжет, ну или как проще программировать. Типовой набор — на рис. 2: треугольная, трапециевидная, гауссова, сигмоида.
Найдёте лишний график? Конечно же , ведь это единственный график с острым углом. А, стоп: — там от до плато. Ладно-ладно, график отличается тем, что при увеличении аргумента не вернётся на 0.
Треугольник, трапеция и гауссова функция удобны для понятий с серединой: «около 20 градусов», «средний рост», «похоже на яблоко» — далеко слева и далеко справа принадлежность снова падает к нулю. Сигмоида нужна для пороговых понятий: «дорого», «горячо», «слишком быстро» — чем больше значение, тем увереннее принадлежность, и назад к нулю график уже не разворачивается.
В формуле ниже — треугольная и трапециевидная функции принадлежности.
где — левое основание, вершина и правое основание треугольника, а — левое основание, начало плато, конец плато и правое основание трапеции.
Гладкие варианты — гауссова функция и сигмоида.
где — центр гауссовой функции и точка перегиба сигмоиды, — ширина гауссовой функции, а — крутизна сигмоиды.
3. Пример лингвистических переменных
Возьмём температуру. Можно, конечно, хранить её просто числом в градусах, но человек обычно мыслит словами: «холодно», «комфортно», «жарко». Вот это и есть лингвистическая переменная: у неё есть имя, шкала значений и набор слов-термов, которыми мы эту шкалу описываем. Каждый такой терм — отдельное нечёткое множество.
На рис. 3 видно, зачем термы перекрывают друг друга. Значение 28° не обязано выбирать один ярлык навсегда: оно ещё «комфортно» со степенью 0,5 и уже «жарко» со степенью 0,25. Благодаря этому переход между режимами получается плавным.
Слова можно усиливать или ослаблять. «Очень жарко» должно быть строже, чем просто «жарко», а «более-менее жарко» — мягче. В формулах это превращается в операции над функцией принадлежности . Мы договорились ранее, что функция нормальная. Вариантов усилить и ослабить функцию много; в формуле 5 — самые простые примеры:
4. Операции
Дополнение — отражение графика относительно уровня 0,5
Пересечение и объединение по Заде — поточечные минимум и максимум двух функций принадлежности (рис. 4): в пересечении выживает только зона, где оба множества «согласны», объединение накрывает всё, до чего дотягивается хотя бы одно.
и — лишь один вариант. Так же, как ранее мы примерно давали формулы для усиления и ослабления, так и тут: логика нечёткая же, вот и формулы тоже нечёткие. Если у нас есть две степени принадлежности, например и , то нечёткому «И» нужна функция, которая из них делает одну общую степень: насколько верно «A и B» одновременно. Такие функции называют t-нормами. Для нечёткого «ИЛИ» нужна похожая функция, только она считает степень «A или B»; её называют t-конормой. Ниже — несколько стандартных вариантов:
Плата за размытость: законы исключённого третьего и противоречия перестают выполняться
при этом на «крайних» значениях 0 и 1 все формулы совпадают с булевой логикой — нечёткая логика является её обобщением, а не заменой.
5. Нечёткий вывод: схема Мамдани
Система, использующая нечёткую логику, настраивается человеческими правилами, структурно выглядящими так:
Универсумов может быть много, как и самих правил. Тут для примера взяты два универсума: цвет и размер, как в истории выше про яблоко. А на выходе говорится, яблоко это или нет.
Например, правила могут быть такими:
Дальше эти правила прогоняются через пять последовательных операций. Сначала входные числа фаззифицируются: для каждого входа считаются степени принадлежности нужным термам. Потом для каждого правила считается степень срабатывания — насколько хорошо его условие совпало с текущими входами. Затем заключение правила активируется: выходное множество срезается на найденном уровне. После этого все активированные заключения собираются в одно общее выходное нечёткое множество. И уже в конце выполняется дефаззификация — из этого множества достают одно конкретное число.
Степень срабатывания правила: «И» внутри условия — это min (или другая t-норма)
Каждое заключение срезается на уровне , а срезанные множества объединяются максимумом — это и есть итоговое нечёткое множество на выходе
Вся схема для двух правил «ЕСЛИ x есть И y есть , ТО z есть » и «ЕСЛИ x есть И y есть , ТО z есть » — на рис. 5.
6. Дефаззификация
В конечном итоге нам нужно число, а не множество. Стандарт — центроид (центр тяжести фигуры под )
Альтернативы: бисектор (вертикаль, делящая площадь пополам), MOM — середина области максимума, SOM/LOM — её левый и правый края. Разные методы дают разные ответы на одном и том же множестве (рис. 6) — выбор влияет на поведение регулятора.
7. Модель Такаги—Сугено
Альтернатива Мамдани: заключение правила — не нечёткое множество, а функция входов (обычно линейная). Правило выглядит так:
Выход — взвешенное среднее по степеням срабатывания, дефаззификация не нужна:
Сугено проще считать и удобнее обучать; Мамдани нагляднее и легче читается экспертом.
8. Связь с нейросетями
Нечёткая система и нейросеть — два универсальных аппроксиматора с противоположными характерами. У нечёткой системы знания читаемы (правила «ЕСЛИ–ТО» понятны эксперту), но параметры — границы и формы термов — приходится подбирать вручную. У нейросети наоборот: она сама учится по данным, но выученное не прочитать. Гибрид берёт лучшее из обоих миров — это направление называется нейро-фаззи.
Классика гибрида — ANFIS (Янг, 1993): система Такаги—Сугено, буквально развёрнутая в сеть из пяти слоёв (рис. 7). Слой 1 — фаззификация (узлы-функции принадлежности с настраиваемыми параметрами или ); слой 2 — правила, «И» берётся произведением
слой 3 — нормировка степеней срабатывания, слой 4 — линейные заключения , слой 5 — сумма, дающая формулу (16). Каждый узел дифференцируем, поэтому вся конструкция обучается как обычная нейросеть: градиентным спуском (обычно гибридно — метод наименьших квадратов для коэффициентов плюс backprop для параметров термов).
ANFIS обучается по построению, но и классической нечёткой системе обучение не помешает: помимо правил надо выбрать функции принадлежности, а они, кстати, очень похожи на функции активации нейронов — сигмоида и есть классическая активация, а гауссова функция — ядро RBF-сетей. Схема та же: мы даём правила, а далее прогоняем множество примеров с ответами и получаем хорошие параметры функций принадлежности.