- Неправильные/недостаточные входные данные. Если на входе программа получает бред, на выходе мы тоже получим бред, даже если внутри все отработало идеально. Такой концепт называется Garbage In, Garbage Out. Исправить это мы не сможем — проблема не в программе.
- Из правильных данных мы получили неправильный ответ. Тогда мы считаем, в программе есть баг и пытаемся его чинить.
Тоже самое можно сказать и про нас.
Иногда необходимая информация — отсутствует и мы не можем предотвратить ошибку.
Например, мы даем оценку времени на решение какого-то списка задач. В процессе оказывается, что список должен был быть в 3 раза больше. Ожидаемо, что наша первая оценка будет ошибочна. От нас здесь ничего не зависело. Garbage In — Garbage Out.
Но если мы уже 20 раз подряд наблюдали как количество задач вырастает в 3 раза от начального, странно предполагать, что на 21-й раз все пойдет как по маслу.
Если бы моя программа 20 раз подряд выдала результат, который не совпал с реальностью, я бы предположил, что с ней что-то не так. Зачем она мне, если при ее использовании я все равно получаю неверный ответ? Она должна учитывать факт, что количество задач может вырасти. Ее надо починить и адаптировать к таким условиям работы.
Когда я наблюдаю такую ошибку за собой — я делаю тот же вывод.
Ситуация, описанная выше — называется «Ошибкой планирования». Она — один из пунктов большого списка «Когнитивных искажений». На эту тему много статей, книг, ресурсов — но ни один из них не ответил на мой простой вопрос: «Откуда ошибки берутся и как лучше их исправлять?». Что не так с мозгом, что он предсказуемо выдает неверные результаты? Как накатить на это патч? Если так нельзя, то где подпирать костылями?
Я начал изучать основные принципы работы мозга, чтобы выяснить на каком этапе возникают ошибки, чем они обусловлены и как лучше их чинить.
С чем мы работаем
Для начала оговорюсь, что устройство мозга очень отличается от PC. Ничего приблизительно напоминающего SSD, RAM и CPU — в нем нет. Ближайший аналог — видеокарта или вычислительный кластер.
Каждый нейрон — это маленькая вычислительная машинка. Принимает кучу сигналов на вход и по их совокупности вычисляет, когда и как отдать сигналы на выход. Таких штук в человеческом мозге примерно 86 миллиардов, у каждой — тысячи соединений (синапсов), каждое соединение — со своими параметрами (подробнее про основные особенности работы нейронов).
Короче, если представить видеокарту с 3d упаковкой ядер в количестве 86 миллиардов, где каждое ядро соединено с тысячами других — мы получим очень грубую, работающую совершенно не так, модель мозга. Ну а CPU тут вообще не годятся.
Кстати, это ответ на вопрос, почему ИНС быстрее обучаются на видеокарте. Отдельный нейрон моделировать не сложно, но нам нужно обсчитывать огромное их количество. Решение — считать параллельно.
Но как же память?
А память в такой архитектуре — очень интересная штука. Вместо того, чтобы хранить какие-то «адреса» и читать блоки, мозг сохраняет информацию о том, как вычислять ответ на сигнал. Это больше похоже на запрос в Гугл, нежели на чтение с SSD. Минусы — нельзя обратиться к адресу напрямую и быстро прочитать данные. Плюсы — можно вспомнить «тот фильм, в котором парень с бородкой, в красно-золотом костюме из металла, спасал мир». (Подробнее про память)
У вас мог возникнуть вопрос, связанный с тем, почему мы воспринимаем наши размышления не как кучу происходящих параллельно процессов, а последовательно. Это связано с особенностями работы префронтальной коры и внимания. О них я напишу отдельную статью. Пока что они нам не нужны, но для объяснения такого явления как «поток» — понадобятся.
Как возникают ошибки?
Проблема в том, что архитектура, заточенная на решение задач классификации, обработку изображений и звуков, нахождение зависимостей и восстановление информации по неполным данным — будет неэффективна в некоторых других случаях. Я разобрал основные механизмы, и попытался описать, где и что может пойти не так.
Сила связей и память
Эффект силы связей
Состояния большинства связей в мозге, ответственных за память — возвращаются к исходным за часы/дни. Когда мы встречаем проблему, с которой сталкивались давно — у нас очень небольшие шансы на извлечение информации о ней. Зато, если мы совсем недавно столкнулись с такой проблемой — связи неимоверно сильные. Настолько, что мы будем видеть эту проблему везде, даже если она встречается 1 раз на миллион и не стоит такого количества внимания. А уж если она случайно встретиться второй раз, то ее приоритет поднимется выше Tesla Roadster, запущенного SpaceX.
Думаю, вы уже связали эту информацию с ошибкой планирования. Да, мы склонны учитывать только свежий опыт. Чтобы посмотреть дальше — нам нужно приложить много усилий.
Хотите еще примеров?
Как вам люди, которые спрашивают на собеседовании вопросы, ответы на которые узнали за пару дней до этого?
Волны хайпа, стихающие каждые пару месяцев и сменяющиеся новыми?
А желание закупиться кучей ненужных вещей, только потому, что вот вчера бы они были бы кстати? И пофигу, что ситуация из вчера случилась первый раз, и врятли когда-то повториться.
Корреляция — не есть причинность
Второе забавное следствие из архитектуры на связях — отсутствие разницы между причинностью и корреляцией на низких уровнях мозга. Иными словами, если я часто роняю ключи перед своей дверью — мозг может пойти по пути наименьшего сопротивления и решить, что у моей двери такое свойство — заставлять меня ронять ключи.
А когда мозг делает какой-то вывод — он старается его запомнить и поддержать силу связей.
Ложное понимание
Две предыдущих особенности порождают интересный самоподдерживающийся процесс:
Если кто-то другой уронит рядом с моей дверью ключ, это может быть воспринято как подтверждение моих выводов. Хотя на самом деле это просто случайность. Каждый раз, когда мы наблюдаем нечто, соответствующее шаблону — его приоритет повышается и связи с ним усливаются. В результате, у нас есть шансы начать подгонять все вокруг под нашу «теорию ключа и двери».
В том что мозги устроены так — нет ничего плохого. Да, они заточены под нахождение паттернов, и да — у них иногда получается не верный результат. Просто нужно помнить, что некоторые наши шаблоны — неправильны и уметь это распознать.
Ситуация осложняется тем, что мозг уже построил связи и не выдает нам пустой ответ. У нас не будет чувства, что мы «ничего не поняли». Но модель, которая получится в результате — будет неверной. Более того, поскольку у нас уже есть эта модель — мозг будет выбирать ее, а не попытается построить новую.
Как это исправить?
Ошибки связанные с ослабеванием связей, вроде ошибки планирования, поправить довольно просто. Нужно завести привычку записывать информацию на какой-то стабильный носитель и обновлять мозг при необходимости. Например, каждый раз когда в проект сваливаются новые задачи и увеличиваюся сроки — записывать. В следующий раз, перед планированием, мы сможем посмотреть во сколько раз больше может стать список.
Ошибку корреляции и причинности можно поправить в момент ее возникновения. Достаточно попробовать построить причинно-следственную связь, в очередной раз уронив ключ перед дверью. Так можно понять, что на самом деле — причина в том, что ты достаешь ключ из маленького кармашка, а вовсе не в магических свойствах двери.
Проблема в том, что когда эти ошибки перерастают в ложное понимание — задуматься о том, что что-то идет не так — довольно сложно. Нам уже привычно считать, что дверь вызывает падение ключа — зачем это дополнительно анализировать? Ключ перед дверью падает? Падает. Схема работает? Работает. Зачем ее трогать?
Чтобы детектировать, что мой мозг где-то меня нагрел, и подсунул иллюзию понимания я использую такой прием:
Я пытаюсь описать то, что я должен был понять переводя в другю систему терминов. По сути — используя аналогии. Например, если я могу описать, что такое Реактивное Программирование используя термины из математики, или на примере того, как течет вода — я скорее всего его понял (эта концепция отлично описывается заварочными чайниками, соединенными трубками — я так девушке объяснял).
Второй вариант — менее приятный. Наш шаблон должен сломаться, в результате того, что мы хорошенько сели в лужу. Например, мы привели всех своих друзей к «волшебной двери», но ключ ни у кого не упал. И у нас тоже. Тут есть способы попытаться оставить шаблон, например: «Вы недостаточно верили в магию двери! Поэтому она не работала!» — о таком механизме мы поговорим дальше.
Я подготовил список когнитивных искажений, работающих по описанной выше схеме. Он довольно велик, но запоминать его не надо. Если вам будет нечего делать и захочется что-нибудь почитать — откройте его. Там много занимательных примеров ошибок, исправление которых позвляет немного улучшить жизнь. Внутри инструкция, как им лучше пользоваться.
Ссылка, на случай, если захотите добавить его в закладки.
- Ткнуть в понравившееся название.
- Почитать про этот феномен.
- Попробовать вспомнить, встречали-ли вы похожее поведение в жизни.
- Попробовать объяснить эффект из списка, с помощью информации из этой статьи.
Не пытайтесь его выучить. Само не запомнилось — ну и черт с ним. Главное — попробовать понять, как это явление согласуется с тем что происходит в мозге, и тем, что мы сами наблюдаем. Лучше всего будет если вы поделитесь своими выводами в комментариях — может получиться интересное обсуждение.
Генерализация частных случаев.
Феномен Баадера-Майнхов.
Проклятие знания.
Профессиональная деформация.
Предвзятость относительно экономии времени.
Ошибка планирования.
Иллюзия прозрачности.
Фундаментальная ошибка аттрибуции.
Эффект ореола.
Эффект первого впечатления.
Эффект опозноваемой жертвы.
Ошибка игрока.
Иллюзия кластеризации.
Эвристика доступности.
Ошибка выжившего.
Стереотипизация.
Эффект недавнего.
Каскад доступной информации.
Функциональная закрепленность.
Эффект знания задним числом.
Иллюзорная корреляция.
Эффект привязки (якорение).
Эффект телескопа.
Криптомнезия.
Ложная память.
Эффект дезинформации.
Эффект уровня обработки.
Было бы просто прекрасно, если бы список на этом и кончался, но у нас есть еще один большой пласт проблем.
Отложенное обучение и игнорирование
Для обучения — необходим какой-то фидбек. Его источником может выступать некто, кто корректирует процесс — тогда это обучение с учителем. Или же мы можем обучаться на какой-то информации, самостоятельно оценивая результаты — это обучение без учителя.
Если мы пытаемся сделать программу, отличающую кошек от собак — мы заставляем ее угадывать, какую картинку ей дали на вход. Когда программа ошибается — мы пытаемся внести изменения в ее структуру (например, ослабить связи для активных «нейронов» в ИНС). Когда все хорошо — мы должны зафиксировать текущее состояние (например, услилить активные связи).
Если мы даем ответ о правильности распознования сами — мы выступаем учителем. Если мы построили программу так, что каждый раз когда она делает предположение, она самостоятельно проверяет его — у нас обучение без учителя.
Мозг — пример системы, которая умеет обучаться самостоятельно.
Фидбек извне
Давайте вернемся на много лет назад, когда мозги решали простые проблемы. Например: «Как достать с пальмы кокос». Предположим, мы пришли к выводу, что надо потрясти пальму, кокос упадет и мы позавтракаем. Мы трясем пальму, кокос падает нам на голову. Теперь вместо завтрака у нас огромная шишка на голове и нам больно.
Мы получили фидбек от наших действий. Ощущение удара кокосом по голове — напрямую связалось с решением трясти пальму. В следующий раз мы постараемся придумать что-то другое.
А теперь вернемся в наше время. Всю неделю мы работали над Важными Задачами. Мы успели завершить все к пятнице. Вечером мы пошли в бар, затем классно провели выходные, выехали на природу, позанимались любимым хобби.
Придя на работу в понедельник мы видим коллегу, который с порога говорит нам: «Что это за хрень ты сделал?».
Бац! На нас только что упал воображаемый кокос. Механизм примерно тот-же: мы собирались спокойно прийти на работу, выпить чаю, сесть за задачи. А вместо этого какой-то *** сбивает нам все планы, и собирается на нас наехать! Вот редиска, да? Надо осадить этого парня, чтобы выпить чаю, и нормально приступить к задачам. Он что, не понимает, что у нас на носу дедлайн, сейчас вообще не время такой фигней страдать? Работать нужно!
Мы отвечаем что-то резкое, чтобы от нас отстали.
В этот момент в голове того парня: «О боже, он непроходимый идиот. В его задаче, которую он делал во вторник грубейшая ошибка, которая будет нам дорого стоить. Но он и слушать об этом не желает!» — Заметим, теперь и нашего коллегу ушибло ментальным кокосом. — «Скажу этому выскочке, что из-за его нежелания меня слушать он угробит весь проект, может хоть тогда прислушается?»
Обмен кокосами может продолжаться довольно долго.
Чем эта ситуация отличается от привычной для мозга тряски дерева?
Во первых — мозг нифига не понимает, за что в него сейчас полетел кокос. Представьте, что мироздание внезапно заработало по другой схеме и теперь удар по голове происходит через неделю, после того как мы неудачно потрясли дерево. Да мы уже 5 раз успеем забыть что его трясли.
Когда мозг нифига не понимает — он пытается подобрать подходящее объяснение. (Подробнее можно почитать в этой статье) А какое самое подходящее объяснение кокосу который в вас кинул другой человек? Правильно, — этот человек — *** и склонен во всех кидать кокосы.
Для того, чтобы подумать о его благих мотивах, вспомнить, что человек вообще-то всегда вел себя разумно и с ним было приятно работать, прийти к выводу, что должно было случиться что-то серьезное чтобы в тебя полетел кокос — нужно совершить значительное усилие. В отличии от идеи, что перед нами «кокосометчик», эта логическая цепочка — совершенно неочевидна.
Опаньки, мозг сделал неверный вывод, тем же механизмом который привел нас к ошибочной «теории ключа и двери». Вместо того, чтобы проанализировать всю цепочку и понять причину — мы довольствуемся корреляцией.
А теперь, основываясь на своей «великолепной» идее, мозг сделает еще одну донельзя логичную вещь: попытается решить проблему летящих в него кокосов. А какое тут самое очевидное решение? Правильно, — надо избавиться от «кокосометчика». Хорошо, если «избавиться» будет означать простое игнорирование и уход в закат. Но это же НЕСПРАВЕДЛИВО! В нас же первого кинули кокос и для ровного счета нужно вернуть его бросавшему. Он сам должен признать, что был неправ начав кидать в нас кокосы.
Вот только наш оппонент видит ситуацию точно так-же. Поэтому цикл ментального кокосометания иногда может закончиться вполне физическими шишками от весьма материального рукоприкладства.
Самое забавное во всей этой ситуации, что обычно «победителем» признается тот, кто кинул последний кокос. Хотя, на самом деле, чем больше мы с коллегой находились в цикле, тем больше шишек получали вдвоем.
Фидбек изнутри
А теперь еще один занимательный факт — иногда источником неприятных ощущений является наша собственная память и наш любимый мозг.
Предположим, мы разошлись с коллегой ничего не прояснив. Теперь нам неприятно об этом вспоминать. Мозг уже сделал вывод, что наш коллега — злобный кокосометчик, поэтому решение «попробовать спокойно поговорить и разобраться» — выглядит совсем непривлекательно. Но с неприятным ощущением нужно что-то сделать.
Ух ты, у нас есть одна отличная стратегия, сработавшая с коллегой — игнорировать. Или переключиться на что-то другое. Отличный выход, правда? Нужно просто вести себя как ни в чем ни бывало. Подумаю о чем нибудь приятном и сделаю кружку хорошего чая. А это все — как-нибудь само рассосется.
Помните, в начале текста я говорил, что ошибки бывают двух типов? Один из них — ошибки обработки информации. Другой — ошибки вызванные ее искажением или недостатком. И только что мозг ухитрился вляпаться в ошибку второго типа. Теперь вместо полной картины он видит только самый приятный ее кусочек, начисто игнорируя варианты в которых «не рассасывается».
В эту лужу я нырнул с головой лет 7 назад и с удовольствием в ней плескался еще 4 года. Проблема тут еще и в том, что когда игнорируемое «рассосалось» — ты обращаешь на это внимание и считаешь что твоя стратегия — эффективна. Но если проблема — осталась, то ты просто продолжаешь ее игнорировать и не учитываешь при анализе. Очень приятная лужа.
При такой стратегии проблема — остается. Мы просто создаем слепое пятно, прикрываем шторами отсутствие окна. Закидываемся обезболивающим, смотря на краснеющий и распухающий палец. Если кто-то случайно в него ткнет или терпение переполнится — нас прорывает как дамбу.
Иногда все действительно проходит «само». Но иногда — можно оказаться в огромной беспросветной заднице. Автор в ней бывал и крайне не рекомендует к посещению.
Поэтому я с улыбкой смотрю на компании, пытающиеся ввести культ сглаживания острых углов и позитивного мышления. Слишком уж хрупок карточный домик игнорирования проблем.
Кажется, здесь стоит прийти к выводу, что заклеивать мигающую красную лампочку «проблема» — крайне плохая стратегия, но…
Обезболивающие
Но это не так. И в этой луже я просидел еще 3 года.
Суть тут в чем: наш ментальный ушиб кокосом это не просто какая-то «субъективная фигня». Это следствие объективно происходящих процессов в объективно существующем мозгу. Его «боль» настолько же объективна, как боль обожженого пальца или пульпитного зуба. Мозг на физическом уровне атакует контрсигналами уже устоявшиеся связи и пытается уменьшить их силу, дополнительно врубая ковровые бомбардировки нейромедиаторами. (Могу объяснить в комментариях или отдельной статьей, почему я так думаю)
Когда у нас болит зуб — мы не спешим отказываться от анестезии. И не осуждаем других людей за то, что они попросили укол ультракаина перед удалением зубов. У нас не возникает желания сказать человеку, которому удаляют восьмерку — «Соберись тряпка! Это всего лишь зуб! От этого еще никто не умирал». (Хотя, наверное если бы половина людей в мире не испытывали боли при удалении зуба, а другая половина — просили бы обезболивающее, вторые очень быстро прослыли бы «тряпками, наркоманами, неспособными ни с чем справиться что без своих антидепрессантов обезболивающих».)
Когда нам фигово — мы действительно мыслим по другому. Это не самое подходящеее состояние мозга для построения цепочек сложнее, чем «трясти пальму->кокос упал->больно».
Любопытно то, что этот процесс может завести нас в цикл:
Мозг сфокусировлся на неприятном ощущении. Из-за этого мы забываем про то, что мозг во время неприятностей не работает в режиме «долговременного планирования». Вследствие этого в него не приходит мысль, что нужно успокоиться и вернуться в «режим планирования». Вместо этого мозг выбирает стратегию, которая приводит к новой порции неприятных ощущений. Мозг фокусируется на неприятном ощущении и еще дальше отходит от нормального режима работы.
(Потом объясню, почему так много вещей связанных с мозгом, имеют циклические и рекурсивные шаблоны).
Итого, игнорировать поступающую информацию — плохая стратегия, потому что это может привести нас к ошибке. Не игнорировать — тоже плохо, потому что болящий от кокосов мозг очень плохо соображает, и это приводит нас к ошибке. Безвыходная ситуация? Ну не совсем…
Компенсация воздействий
Я заранее извиняюсь за самый избитый поворот сюжета, какой только можно представить, но единственная стратегия, которую я придумал — найти баланс. Золотую середину между восприятием информации и ее игнорированием.
Оба этих инструмента — полезны. Если на нас свалится слишком много — мы не сможем это обработать. Если информации слишком мало — мы будем ошибаться из-за ее недостатка. Нужно научиться ловить момент, когда наш мозг начинает соображать хуже из-за ударов кокосом, и не уйти в мир радужных пони, где кокосы никого не бьют.
Пользуясь аналогией с обезболивающим — закинуться им, чтобы дойти до врача — окей. Закидываться им пока ожег на нашем пальце не станет причиной заражения крови — нет.
Где находится этот баланс? Знаете, если бы я был философом, я бы сейчас начал говорить, что-то многозначительное, умно звучащее и абсолютно бесполезное, вроде: «Каждый из нас — уникален, и каждый должен найти свой путь к равновесию… бла-бла-бла». Обычно всю пургу подобного рода следует переводить так: «Я не знаю». Но, поскольку я не философ, меня не устраивает такая концовка. У меня есть ответ и на это.
Как исправить?
Fail Fast.
Если мы знаем, что ошибки следуют из архитектуры и будут случаться, лучшее что мы можем сделать — определить их как можно раньше и не дать им стать ОШИБКАМИ. Чем дольше ошибка остается необнаруженной, тем больше последствий она имеет, как за пределами мозга так и внутри него.
В ситуации с нашим коллегой, можно было просто принять удар, и попросить его начать рассказ с начала, а не с его финальных умозаключений. Если на это не хватает сил — попросить отложить разговор и спокойно продолжить его через полчаса.
В первом случае — мы определили шаблон ситуации и порвали его используя игнорирование. Во втором — вышли из цикла на первом же шаге, опять же используя игнорирование. И в обоих случаях, мы не стали полностью забивать на проблему, о которой нам пытались сообщить. Эти решения — в разы лучше перепалки, которая может произойти в противном случае. Мы экономим время, нервы и при этом решаем проблему.
Но для того, чтобы так действовать, нам нужно научиться определять шаблоны таких ситуаций. Мозг должен понять, что он свернул на одну из своих любимых тропинок, предсказать развитие событий и подсказать нам нужную стратегию. Как же записать в мозг шаблон, о его собственных шаблонах?
Для этого существует эта статья.
Я постарался начать с самого начала, с нейронов и связей, и предсказать какие особенности обработки информации будут в такой архитектуре. Я надеялся на то, что существуют какие-то простые правила, намного проще чем огромный список когнитивных искажений. И учитывая, что я за 10 минут описал механизмы возникновения примерно сорока двух из них, кажется, я угадал.
- Затухание и укрепление связей — делают так, что свежая информация более доступна.
- Корреляция определяется как причинность — из-за этого возникают «пробелы» в моделях.
- Ложное понимание — из-за него мы не можем найти возникший пробел.
- Игнорирование — искажает воспринимаемую информацию. В теории этот механизм должен фильтровать мешающие факторы, на практике — можно увлечься и отфильтровать что-то полезное для решения задачи.
Четыре фактора, комбинация которых порождает почти все известные когнитивные искажения. А 4 причины запоминаются намного легче, чем 42 следствия.
Вот оставшийся список:
Иллюзия контроля
Предпочтение нулевого риска
Искажение в восприятии сделанного выбора
Эффект знакомства с объектом
Иррациональная эскалация
Слепое пятно в отношении искажений
Стрелок из техаса
Предвзятость подтверждения
Селективное восприятие
Эффект владения
Эффект Лейк-Уобенгон
Эффект ложного консенсуса
Эффект ложной уникальности
Феномен «справедливого мира»
Эффект Форера
Есть ли в мозгах баги?
Мозг — удивительная вещь. Пока что мы не создали механизм, способный решать те же задачи что и он. Можно ли считать перечисленное ошибками архитектуры? Изъянами?
Я бы не был так категоричен. То, что мозг иногда не подходит для решения свалившейся на него задачи не говорит о том, что он чем-то плох. Я не буду стоит судить об эффективности микроскопа, по тому, как он забивает гвозди.
Да, из-за особенностей архитектуры наш мозг не всегда выдает верный ответ. Но он так же способен осознать свою ошибку и попытаться ее исправить. И пока что, это лучшее что у нас есть.
Скорее всего в этой статье есть ошибки, нюансы которые я упустил и места где я перемудрил с объяснением. Если вы заметили их — напишите пожалуйста.
Возможно, что в моей цепочке рассуждений есть изъян, который разрушит ее до основания. Если вы найдете его, я с радостью послушаю о нем.
Да, это разрушит 2 года моей работы и ударит по мне сильнее любого кокоса. Но это та цена, которую я плачу за возможность стать лучше. И пока что, я доволен обменным курсом.
That which can be destroyed by the truth should be. ― P.C. Hodgell, Seeker’s Mask
PS
Если вы что-то не поняли, или наоборот, вы бы хотели услышать более «техническое/математематическое» объяснение какого-то момента — будет здорово увидеть ваш комментарий. Я с удовольствием над ним подумаю и отвечу.
Если то, что я описывал расходится с вашими наблюдениями, или наоборот ваш опыт согласуется с моими выводами — я тоже с радостью послушаю такой фидбек.
Ведь Хабр — то место, где комментарии не менее интересны, чем сама статья.