Небинарность. В хорошем смысле.
Нравится нам это или нет, в реальном мире бинарных и черно-белых явлений обычно не так много. Чисто органически. И если в вашей системе, модели или процессах вдруг появляются важные решения вида «всё или ничего», имеет смысл покопаться и проверить.
Бинарные решения удобно оценивать. С ними удобно работать, под них есть масса логического и математического аппарата. Очевидно, что вычислительная техника с ними неплохо справляется. Люди тоже наловчились, потому что однозначность вроде бы вызывает меньше вопросов впоследствии.
А если стакан наполовину полон или пуст, можно заключить, что у вас стакан неподходящего размера.
Реальный мир все еще аналоговый, и даже более аналоговый, чем нам бы того хотелось. И практически всегда упрощение любого явления до «да/нет» это упрощение, упрощение крайне мощное (бесконечность вариантов сводится к 1 биту), и как любое упрощение — оно имеет свою цену. Нифига не дешевую.
Обычно такое упрощение и проекция множества в бит формируется введением критерия. Что у нас считается одним значением, а что, очевидно, другим. Однозначность, измеримость и прочие свойства выбранного критерия дают вам возможность сделать то самое упрощение, и затем поверить (или проверить), что сам критерий вам подходит.
Первое, что стоит помнить, а забывчивым напомнить снова, что ваш критерий — это всего лишь критерий. Он выбран. Он не естественный чаще всего, как бы вам это не казалось. И поскольку он выбран, это не часть наблюдений — это часть вашей модели. В голове, в математике, в коде, неважно.
Если мы говорим об исследовании, построении моделей, или изучении уже существующих косячных, то на все бинарные оценки надо пойти, отдельно посмотреть, и посмотреть пристально. Такое поле нехоженых граблей можно найти, закачаетесь. Потому что кто-то где-то решил упростить себе жизнь, и это упрощение счас выйдет боком.
Второе, что стоит помнить, ваша бинарная булевая оценка — это функция. А у функции есть переменные. С одной переменной хорошо, удобно: больше килограмма = плохо, меньше килограмма = хорошо. А нет ли в вашей предметной области чего-то еще? Например, времени. Или параметров среды. Или способа измерений. Или температуры на луне. Или настроения проверяющего.
В идеальном мире к каждому булевому упрощению должна прилагаться модель и описание: что мы сейчас меряем, где, какой функцией оцениваем, и почему она выбрана именно такой.
Даже кампутер(ц) не «оперирует нулями и единичками», как в детсаду рассказывают. Заряд на p-n переходе транзистора в современном мире не только изменяется по формуле по времени, куда он денется, да еще и делает это достаточно нелинейно (и хорошо, если там сигмоида). А проектировщики современной памяти на кремнии запросто расскажут вам про туннельный эффект, тепловой шум и квантовую неопределенность в трехмерном облаке на каждом сраном переходе, у каждого транзистора, в каждом условном бите из миллиона в каждом гигабайте.
То, что оно все еще «булевое бинарное», это во-первых чисто статистический эффект, а во-вторых, это контролируется набором достаточно непростых инженерных уловок и подсистем. И даже там внезапно залетевшая элементарная частица со стороны солнца запросто испортит всю статистику и вычисления, что наглядно видно в космической технике, и даже в обычной, при магнитной буре.
В общем, раньше времени не обольщайтесь.
На прикладном уровне если ваше «да-нет» вдруг перестало оправдывать возложенные на себя задачи — надо идти смотреть, не сожрала ли наша функция оценки какие-то переменные или детали, которые оказались не учтены. А они, видимо, оказались.
Даже несчастный чекбокс-галочка — типа бинарный — сплошь и рядом оказывается не столь прост, как хотелось бы: см заметку «про галочку».
Про поле квантизации, на пальцах. Если чашка кофе стоит $1, то меньше = дешево, больше = дорого. Если считать почему-то, что у нас однородная выборка. А почему мы вдруг считаем, что она однородная? При этом, если в Анкоридже чашка кофе стоит $5, и хрен вам меньше, то $5 уже становится нашей границей: меньше = дешево, больше = дорого. Для получения однородного ответа, т.е выхода функции оценки, нужно учесть поправку в (5-1)=$4, если мы хотим прийти к нормальному распределению по выходу.
Процесс приведения размерности называется нормализацией. Обычно к тому самому диапазону между 0 и 1. И вот его, если хотите, уже упростите до бинарного значения (например линейно, по 0.5, это половина диапазона). Попутно задумавшись, а можете ли вы так вообще сделать в вашей задаче.
А то самое $4, то есть смещение в выборке до квантизации, именуется bias. Размер куска выборки, для которой применяется смещение — это поле квантизации. Которое тоже надо выбрать предварительно. Каким-то понятным, предсказуемым, формализованным и неизменным способом. То есть сначала подумать, затем упрощать.
На таком математическом упрощении со смещением (bias) построена, если интересно, гипер-квантизация моделей нейросетей. Когда берется пачка весов, и упрощается до 1 бита. Не байта, именно бита, 1/0. А почему это работает и не ломается? Потому что для выбранной пачки, группы уже прописан и посчитан bias внутри группы, например в 3.14. Для другой группы — bias другой. И когда вы берете набор бит, и домножаете их на 3.14, вы получаете набор значений приблизительно напоминающий исходный.
Для соседней пачки смещение уже будет задано, скажем, в 2.71, и общий набор переменных снова превращается в какой-то набор — их можно сравнивать между собой, несмотря на то, что исходные биты были максимально тупые и булевые.
Потеря данных, и даже части смысла в этих значениях все равно будет. Но явно не настолько радикальная, как в проекции на 1 бит всего, что было.
Третье, что всегда надо помнить: любая модель съедает данные. Потому что любая модель — это упрощение, см парадокс Кантора (о проекции неисчислимого множества на счётное). Нельзя бесконечность привести к конечности, и при этом ничего не потерять. Научитесь с этим жить.
При анализе, улучшениях, дебаге и прочих инженерных раскопках всякие бинарные упрощения — это хорошая точка, чтобы пойти и задать себе вопрос «почему мы меряем это именно так», и «почему я знаю то, что я знаю». Как минимум потому, что модель и оценку писали и выдумывали люди. А люди ошибаются, упрощают, и вообще не умеют в цифры. Причем в формальную логику люди тоже не умеют, мозг аналоговый.
В логотипе Sony Vaio буквы V+A показывают аналоговую полуволну (2 штуки), а буквы I+O булевое «цифровое» значение.
Кто бы знал, сколько косяков и граблей можно нахватать на их стыке.
Теперь точно не забудете.
Проверочные вопросы, прикладные. Для функций оценки
- как выбрана граница «да/нет»?
- может ли она меняться от выборки? есть ли смещение, возможно ли оно?
- есть ли в функции переменная времени? (самое частое)
- имеет ли значение не только измерение, но и скорость его изменения? (первая производная)
- как поступаем с граничными значениями, когда 4.9999… уже равно 5.000, а когда еще нет?
- есть ли шум, как мы с ним поступаем? числовой ряд [4.9, 5.1, 4.9] больше границы в 5, или нет?
- должен ли квантоваться по времени выход? при болтанке [4.9, 5.1] ежесекундно, ответ какой?
- может, мы зря забыли про компоненты PID-регуляции?
Как нае... обмануть бинарную функцию оценки в человеческом смысле, если интересно — гуглить «парадокс выборщиков» в США. Когда достаточно внутри малых групп получить перевес голосов (в сторону того или иного кандидата), и результирующее «бинарное» решение далее используется в принятии стратегических выводов, просто потому что в каждой малой группе был достигнут нужный перевес выше входного порога.
Выигрыш в 5 малых группах с минимальным перевесом дает нам 5 безусловных значений «да» (100%), в то время как внутри каждой могло быть распределение [49% против 51%], и общая статистика без группировки была бы совсем иной (3 против 2).
Хорошим тоном опять же, считается, что потерю данных следует избегать. Для этого неплохо бы записать и хранить не только ваши бинарные значения и выводы, но и те входные данные (заведомо бОльшей размерности), по которым вы этот вывод делали. Чтобы когда случится «ой» и «модель говно», вы могли бы сесть и посчитать заново, что и где конкретно не учли.
Это относится не только к голой математике и хранению, но и к достаточно высокоуровневым вещам типа принятия управленческих решений (бинарных); полезно иметь не только знание «что мы там намеряли», но и «чем мы оперировали, когда решение принимали». Как общий, стратегический подход.
Если у вас где-то в системах, процессах появляются ключевые точки «всё или ничего» — то есть опять же, жестокие бинарные — подумайте блин дважды, не упрощаете ли вы сверх меры; а если да, то чего ради. Может оправданно и красиво; а может и нет.
- совершенно незачем ставить условия «с завтра все работаем по-другому», когда можно раскатить эксперимент на группу и посмотреть
- совершенно неоправданно переобуваться в полете с плана А на план Б, если они могут поработать параллельно
- нет смысла ставить процессы и людей перед (любым) неизбежным фактом, когда можно сделать одно из решений дороже, и посмотреть динамику
- любая «серая зона» и граничные значения — повод пойти и подумать, а откуда они взялись, и не переупрощались ли мы
Бинарное упрощение — это жесткость. А жесткость предполагает негибкость. Негибкость запросто выйдет вам боком.