Есть области где всё хуже, но сейчас идёт большой прогресс — речь/распознавание текстов, переводы.
Но есть области загадочные. Вроде как и прогресс есть. И статьи регулярно выходят. Только вот до практического применения как-то особо и не доходит.
Давайте разберём то, как нейронные сеточки и машинное зрение работает в медицине.
Небольшая оговорка. В статье я буду говорить только про машинное зрение. Это когда мы пробуем распознать что-то по рентгенограмме, фотографии, картинке с УЗИ, КТ/МРТ, И.Т.Д.
Эти области которые сильно улучшились в последние годы. В других областях всё несколько запутаннее/хитрее, не хочу их касаться.
Небольшая оговорка 2. Я хочу обойтись тут без явных примеров, рассматривая общности, которые справедливы почти для всех нейронок. Если интересно почитать что нейронки в последнее время научились делать в медицине, то советую:
Распознавание флюорограмм
Распознавание мамограмм
Сетчатка
Рак кожи
И многое многое прочее.
Часть 1 — с наскоку
Медицина — очень специфическая область человеческого знания. В отличие от того что я перечислял выше (биометрия/номера/переводы) — тут есть ответственность. Если врач явно накосячил — человеческое общество предполагает что ему должно прилететь. Не сказать что эта установка всегда выполняется. Но есть некоторая парадигма и в сознании врачей и в сознании общества. С кем бы ты не говорил — люди всегда мыслят в этих рамках.
А теперь приходим мы со своей нейронной сеточкой. И говорим: «мы предсказываем с той же точностью что и врач!» (ниже мы рассмотрим это утверждение подробно). Врач смотрит на одну фоточку — ок. На вторую — шикарно. А вот на десятой он не согласен с мнением сети кардинальным образом. Врач бы написал «подозрительно», а сеть выдаёт «здоров». «Что это такое?!» — думает врач. «Неужели бы мы выпустили этого больного?!»
Глобально при подходе «нейронная сеть + врач» где цель сети «искать патологию» апостериорное распределение может быть следующим:
- Пациент имеет патологию -> нейронная сеть её нашла -> врач её увидел (плюс врачу в карму)
- Пациент имеет патологию-> нейронная сеть её не нашла -> врач её увидел (врач считает «ну и напридумывали тут хрени», минус в карму сети)
- Пациент имеет патологию -> нейронная сеть её не нашла -> врач тоже ничего не видит (все всё продолбали, никакого наказания никому)
- Пациент имеет патологию-> нейронная сеть её не нашла -> врач её не видит (врач считает «ну и напридумывали тут хрени», а дальше два варианта «врач уверен что он прав», находка уходит в утиль и «врач хочет спихнуть ответственность» — назначение дополнительных анализов/дополнительных исследований — и тогда победа)
- Пациент не имеет патологию -> нейронная сеть её не нашла -> врач тоже ничего не видит (плюс врачу в карму)
- Пациент не имеет патологию -> нейронная сеть её не нашла -> врач что-то видит («что же нейронка ваша не видит столь очевидных симптомов, даже если патологии тут не было — однозначно надо проверять!»)
- Пациент не имеет патологию -> нейронная сеть её нашла -> врач тоже что-то нашёл (все согласны, все в плюсе)
- Пациент не имеет патологию -> нейронная сеть её нашла -> врач ничего не видит (опять же два варианта событий «врач считает что он прав» — и всё ок «врач хочет спихнуть ответственность» — и запускает цепочку исследований. Результат — раздосадованный врач, что опять пришлось назначить кучу анализов а там ничего).
Давайте теперь просуммируем все исходы: 1,3,5,7 — нет никакого изменения в текущем протоколе исследования. Для скрининговых исследований это будет 95% случаев. Нейронная сеть ничего не меняет, а любые действия с ней связанные будут являться усложнением работы врача = > в глобальном смысле будут давить в минус.
Пункты 2 и 6 дают офигенный минус в карму нейронных сетей. Они будут создавать явный негатив каждый раз когда происходят.
Пункт 4 — единственная ситуация когда нейронка может отыграться. Но она должна пройти через негатив врача. И это полностью будет убиваться Пунктом 8. Чтобы врачи поняли что нейронка эффективна — число случаев описываемых пунктом 4 должно быть сравнимо или выше чем в пункте 8. Но это достижимо лишь в тех случаях когда число пациентов с патологией высоко. Для скрининга это не встречается.
Реальность выглядит ещё несколько хуже, если честно. Если нейронка видит чего не было в обучении, но что для врача однозначно — она будет выдавать какие-то рандомные ответы. Ну, например, остатки сложных медицинских вмешательств при флюорографии (швы/протезы/осколки). И, даже если сеть статистически лучше врача, но каждые пару недель врач видит одну и ту же очевидную ошибку — у него будет пригорать.
Ок. Мы пришли к выводу, что при интеграции с квалифицированным врачом нейронная сеть практически не способна повысить выявление заболеваний — она будет лишь добавлять проблемы. А давайте подумаем как нейронку можно прикрутить без врача? Реальная проблема поликлиник в России — очень много низкокачественных специалистов на местах. Я разговаривал с врачами федеральных центов — и там две жалобы:
- Врачи при малейшем сомнении отправляют в федеральный центр для диагностики
- Врачи не видят опухолей на пол груди (мало опыта)
Надо понимать, что в таких ситуациях любая нейронная сеть выдаёт точность на порядок выше чем такой врач.
Но при попытке притянуть к реальности всё становиться несколько печальнее:
- Заменить врача целиком не позволит законодательство — опять же «кто будет нести ответственность»
- Врач низкого уровня скорее всего будет идти по одному из двух путей:
- Считать себя умнее сети и не слушать её решения. Судя по тому что я видел — таких будет большинство.
- Полностью исполнять её решения. Это неплохо, но мы не сможем заставить врача делать это бюрократически, ибо врач -тот кто несёт ответственность.
- На низком уровне есть вполне хорошие врачи — и это надо учитывать. Такие врачи могут подорвать репутацию любой программы, указывая на её ошибки.
Самое печальное, что эта проблема «низкая квалификация врача» — решается другими способами, а не нейронными сетями. Грамотный системный подход, с постоянным обучением врача/проверкой квалификации/созданием сетевой инфраструктуры чтобы один врач мог обслуживать сразу много больниц / дублирование на 2-3 врача. Решать эту проблему нейронными сетями — примерно то же что и подходить к ремонту автомобиля со словами «у меня есть рулон скотча, почему бы не попробовать».
Тот же ДИТ в Москве идёт тоже по пути «сначала сведем всё в одно место, а потом распознаем». Своё решение с нейронками они пиарили на конференциях. Но начинают работу они именно с системных решений. Нейронки в такие места придут потом, где-то ускорив работу, где-то повысив качество. Начинать надо именно с инфраструктуры.
Конечно, есть способ как можно заткнуть эту проблему частично именно нейронкой. Автоматом проверять все снимки сделанные в учреждении. Поставить порог таким образом чтобы ложных срабатываний почти не было (да, пусть будем 20% больных пропускать). И, если мы уверены, что пациент болен — то в обход врача назначать ему дополнительные обследования.
Выглядит просто. В реальности это адовый вариант: он рушит логику принятия решений (больного отпустили, как его назад теперь звать), он рушит репутацию врачей (как это Василий Петрович косячит?!), он неприемлем администрации (как 20% пропускать?!). Он не будет работать в случае если врачи компетентны. Для больницы непонятен профит данной системы, зачем тратиться на установку. И он возможен только если в медучреждении где уже есть хорошая информационная система.
Но, в эту сторону смотрит половина проектов с которыми я сталкивался…
Ещё неплохой вариант — подсвечивать врачу то что видит сеть. Опухоли/органы/какие-то характеристики. Но это не является задачами первоочередной необходимости. И в первую очередь нужно производителям оборудования. В какой-то момент такие «ассистенты» смогут сдать стандартом в области. Такой подход не требует жёсткого лицензирования, частично разгружает врача, является неплохим конкурентным преимуществом для аппарата/софта. Я видел несколько таких проектов. Но, опять же, это про другое. Это не заменяет врача, не улучшает выявляемость.
Часть 2. А что со статистикой.
Недавно вышла офигенная статья. Мета-исследование на тему того какую точность нейронные сети достигают и как оно бьётся с людьми. Оно не содержит в себе ответов на то как что-то можно внедрить/использовать. Но хотя бы позволяет оценить современный передний край в науке. Итоговый график статьи примерно такой (оценка точности для всех исследований):
Вроде даже люди ощутимо проигрывают! Но не стоит забывать, что это мета-исследование, где точки на графике — это итоговая точность алгоритмов.
Если оставить те статьи где оценка людей и алгоритма идёт по идентичному набору данных (таких всего 14), то итоговый график будет куда интереснее:
Видно, что при адекватном сравнении алгоритмы выдают почти ту же точность которую дают профессиональные врачи.
Но не стоит забывать несколько моментов:
- Обучить нейронку можно только по чётко поставленной задаче. Если вдруг на снимке есть какая-то непонятная хрень — врач сразу будет разбираться, а выход нейронки будет не определён
- Точность врача зависит от квалификации. Об этом будет пример чуть ниже. Нейронка, скорее всего, даст какую-то усреднённую точность.
- Нейронка может быть зависима на метод/на обучающую выборку. Инвариантность врача значительно больше.
Про точности врачей. Я натыкался на несколько исследований где анализировали точность врачей. По сути реально хорошую нейронку нельзя сделать без такого исследования. Из последних мне очень понравилось вот это. Чтение маммограмм одно из самых сложных направлений в рентгенологии. Надо пространственно восстановить 4 снимка снятых с разных направлений и понять всё ли ок или нет. Нейронка даёт где-то 87% точность при классификации больной/здоровый. Врачи — от 70% до 86%. При этом, согласно исследованию, врачи имели опыт в данной задаче.
Не надо обобщать данное исследование на все другие задачи. Но виден прикольный момент — «плохим врачам нейронка однозначно помогает». А вот хороших — немного тормозит.
Часть 3. О том где нейронки в медицине реально помогают.
Всё что я говорил выше — были рассуждения на тему «нейронки и поиск паталогий». Отвлечёмся на несколько минут и поговорим про более общую тему — нейронки и медицина. Могут ли помочь нейронки в медицине, в анализе изображений?
И тут ответ — однозначно да. И это уже активно используется. Из свежих примеров, что попадалось (привожу тут российские чисто медицинские стартапы которые дошли до продукта):
UNIM — сеть лабораторий выполняющая исследования образцов биопсии (врачи называют это патанатомическими исследованиями). Эти исследования достаточно долгие и муторные. Врач садиться и считает число клеток одного типа, другого типа, число окрашенных клеток, и.т.д. Ещё пару лет назад все эти подсчёты делались в микроскопы и с счётчиком в руке.
Через нейронки это решается быстро и хорошо. Повышается точность (уж что-то а число клеток алгоритмически подсчитать сильно проще чем глазами + можно обрабатывать больший участок за меньшее время). А главное — очень сильно ускоряется время работы врача.
DiagnoCat — анализ КТ на предмет заболеваний в зубах. Зубов у человека много. Лечащий врач обычно обращает внимание на тот зуб который лечит + на то что бросится в глаза. Никто не описывает все 32 зуба полноценно. Но алгоритм может. Такой подход повышает конверсию, улучшает итоговое состояние пациентов.
Только в России я видел ещё 3-4 фирмы/стартапа которые успешно внедрили машинное обучение в околомедицинские технологии. И эти решения повысили качество услуг/уменьшили их цену.
Главная особенность таких стартапов — они идут не от «решения всех проблем», а от «ускорения обработки данных»/«повышения эффективности».
Эпилог
Нейронные сети сейчас идут не от идеи вида «а давайте распознавать X». А от идеи вида «мы тратим кучу на Y — > можем ли мы как-то это оптимизировать?». Ну, например, автоматически заполнять диагноз, если тратим много времени на писанину. К сожалению, многие это не понимают.
Изменится ли медицина в следующие 10 лет? Думаю что да. Но не за счёт нейронных сетей, а за счёт информатизации. Автоматическое управление потоками, виртуальные рабочие места, объединение всех данных в общую базу. А машинное зрение… Оно само появится в тех проектах которые до него дорастут. Тихо и незаметно.
Есть области где всё хуже, но сейчас идёт большой прогресс — речь/распознавание текстов, переводы.
Но есть области загадочные. Вроде как и прогресс есть. И статьи регулярно выходят. Только вот до практического применения как-то особо и не доходит.
Давайте разберём то, как нейронные сеточки и машинное зрение работает в медицине.
Небольшая оговорка. В статье я буду говорить только про машинное зрение. Это когда мы пробуем распознать что-то по рентгенограмме, фотографии, картинке с УЗИ, КТ/МРТ, И.Т.Д.
Эти области которые сильно улучшились в последние годы. В других областях всё несколько запутаннее/хитрее, не хочу их касаться.
Небольшая оговорка 2. Я хочу обойтись тут без явных примеров, рассматривая общности, которые справедливы почти для всех нейронок. Если интересно почитать что нейронки в последнее время научились делать в медицине, то советую:
Распознавание флюорограмм
Распознавание мамограмм
Сетчатка
Рак кожи
И многое многое прочее.
Часть 1 — с наскоку
Медицина — очень специфическая область человеческого знания. В отличие от того что я перечислял выше (биометрия/номера/переводы) — тут есть ответственность. Если врач явно накосячил — человеческое общество предполагает что ему должно прилететь. Не сказать что эта установка всегда выполняется. Но есть некоторая парадигма и в сознании врачей и в сознании общества. С кем бы ты не говорил — люди всегда мыслят в этих рамках.
А теперь приходим мы со своей нейронной сеточкой. И говорим: «мы предсказываем с той же точностью что и врач!» (ниже мы рассмотрим это утверждение подробно). Врач смотрит на одну фоточку — ок. На вторую — шикарно. А вот на десятой он не согласен с мнением сети кардинальным образом. Врач бы написал «подозрительно», а сеть выдаёт «здоров». «Что это такое?!» — думает врач. «Неужели бы мы выпустили этого больного?!»
Глобально при подходе «нейронная сеть + врач» где цель сети «искать патологию» апостериорное распределение может быть следующим:
- Пациент имеет патологию -> нейронная сеть её нашла -> врач её увидел (плюс врачу в карму)
- Пациент имеет патологию-> нейронная сеть её не нашла -> врач её увидел (врач считает «ну и напридумывали тут хрени», минус в карму сети)
- Пациент имеет патологию -> нейронная сеть её не нашла -> врач тоже ничего не видит (все всё продолбали, никакого наказания никому)
- Пациент имеет патологию-> нейронная сеть её не нашла -> врач её не видит (врач считает «ну и напридумывали тут хрени», а дальше два варианта «врач уверен что он прав», находка уходит в утиль и «врач хочет спихнуть ответственность» — назначение дополнительных анализов/дополнительных исследований — и тогда победа)
- Пациент не имеет патологию -> нейронная сеть её не нашла -> врач тоже ничего не видит (плюс врачу в карму)
- Пациент не имеет патологию -> нейронная сеть её не нашла -> врач что-то видит («что же нейронка ваша не видит столь очевидных симптомов, даже если патологии тут не было — однозначно надо проверять!»)
- Пациент не имеет патологию -> нейронная сеть её нашла -> врач тоже что-то нашёл (все согласны, все в плюсе)
- Пациент не имеет патологию -> нейронная сеть её нашла -> врач ничего не видит (опять же два варианта событий «врач считает что он прав» — и всё ок «врач хочет спихнуть ответственность» — и запускает цепочку исследований. Результат — раздосадованный врач, что опять пришлось назначить кучу анализов а там ничего).
Давайте теперь просуммируем все исходы: 1,3,5,7 — нет никакого изменения в текущем протоколе исследования. Для скрининговых исследований это будет 95% случаев. Нейронная сеть ничего не меняет, а любые действия с ней связанные будут являться усложнением работы врача = > в глобальном смысле будут давить в минус.
Пункты 2 и 6 дают офигенный минус в карму нейронных сетей. Они будут создавать явный негатив каждый раз когда происходят.
Пункт 4 — единственная ситуация когда нейронка может отыграться. Но она должна пройти через негатив врача. И это полностью будет убиваться Пунктом 8. Чтобы врачи поняли что нейронка эффективна — число случаев описываемых пунктом 4 должно быть сравнимо или выше чем в пункте 8. Но это достижимо лишь в тех случаях когда число пациентов с патологией высоко. Для скрининга это не встречается.
Реальность выглядит ещё несколько хуже, если честно. Если нейронка видит чего не было в обучении, но что для врача однозначно — она будет выдавать какие-то рандомные ответы. Ну, например, остатки сложных медицинских вмешательств при флюорографии (швы/протезы/осколки). И, даже если сеть статистически лучше врача, но каждые пару недель врач видит одну и ту же очевидную ошибку — у него будет пригорать.
Ок. Мы пришли к выводу, что при интеграции с квалифицированным врачом нейронная сеть практически не способна повысить выявление заболеваний — она будет лишь добавлять проблемы. А давайте подумаем как нейронку можно прикрутить без врача? Реальная проблема поликлиник в России — очень много низкокачественных специалистов на местах. Я разговаривал с врачами федеральных центов — и там две жалобы:
- Врачи при малейшем сомнении отправляют в федеральный центр для диагностики
- Врачи не видят опухолей на пол груди (мало опыта)
Надо понимать, что в таких ситуациях любая нейронная сеть выдаёт точность на порядок выше чем такой врач.
Но при попытке притянуть к реальности всё становиться несколько печальнее:
- Заменить врача целиком не позволит законодательство — опять же «кто будет нести ответственность»
- Врач низкого уровня скорее всего будет идти по одному из двух путей:
- Считать себя умнее сети и не слушать её решения. Судя по тому что я видел — таких будет большинство.
- Полностью исполнять её решения. Это неплохо, но мы не сможем заставить врача делать это бюрократически, ибо врач -тот кто несёт ответственность.
- На низком уровне есть вполне хорошие врачи — и это надо учитывать. Такие врачи могут подорвать репутацию любой программы, указывая на её ошибки.
Самое печальное, что эта проблема «низкая квалификация врача» — решается другими способами, а не нейронными сетями. Грамотный системный подход, с постоянным обучением врача/проверкой квалификации/созданием сетевой инфраструктуры чтобы один врач мог обслуживать сразу много больниц / дублирование на 2-3 врача. Решать эту проблему нейронными сетями — примерно то же что и подходить к ремонту автомобиля со словами «у меня есть рулон скотча, почему бы не попробовать».
Тот же ДИТ в Москве идёт тоже по пути «сначала сведем всё в одно место, а потом распознаем». Своё решение с нейронками они пиарили на конференциях. Но начинают работу они именно с системных решений. Нейронки в такие места придут потом, где-то ускорив работу, где-то повысив качество. Начинать надо именно с инфраструктуры.
Конечно, есть способ как можно заткнуть эту проблему частично именно нейронкой. Автоматом проверять все снимки сделанные в учреждении. Поставить порог таким образом чтобы ложных срабатываний почти не было (да, пусть будем 20% больных пропускать). И, если мы уверены, что пациент болен — то в обход врача назначать ему дополнительные обследования.
Выглядит просто. В реальности это адовый вариант: он рушит логику принятия решений (больного отпустили, как его назад теперь звать), он рушит репутацию врачей (как это Василий Петрович косячит?!), он неприемлем администрации (как 20% пропускать?!). Он не будет работать в случае если врачи компетентны. Для больницы непонятен профит данной системы, зачем тратиться на установку. И он возможен только если в медучреждении где уже есть хорошая информационная система.
Но, в эту сторону смотрит половина проектов с которыми я сталкивался…
Ещё неплохой вариант — подсвечивать врачу то что видит сеть. Опухоли/органы/какие-то характеристики. Но это не является задачами первоочередной необходимости. И в первую очередь нужно производителям оборудования. В какой-то момент такие «ассистенты» смогут сдать стандартом в области. Такой подход не требует жёсткого лицензирования, частично разгружает врача, является неплохим конкурентным преимуществом для аппарата/софта. Я видел несколько таких проектов. Но, опять же, это про другое. Это не заменяет врача, не улучшает выявляемость.
Часть 2. А что со статистикой.
Недавно вышла офигенная статья. Мета-исследование на тему того какую точность нейронные сети достигают и как оно бьётся с людьми. Оно не содержит в себе ответов на то как что-то можно внедрить/использовать. Но хотя бы позволяет оценить современный передний край в науке. Итоговый график статьи примерно такой (оценка точности для всех исследований):
Вроде даже люди ощутимо проигрывают! Но не стоит забывать, что это мета-исследование, где точки на графике — это итоговая точность алгоритмов.
Если оставить те статьи где оценка людей и алгоритма идёт по идентичному набору данных (таких всего 14), то итоговый график будет куда интереснее:
Видно, что при адекватном сравнении алгоритмы выдают почти ту же точность которую дают профессиональные врачи.
Но не стоит забывать несколько моментов:
- Обучить нейронку можно только по чётко поставленной задаче. Если вдруг на снимке есть какая-то непонятная хрень — врач сразу будет разбираться, а выход нейронки будет не определён
- Точность врача зависит от квалификации. Об этом будет пример чуть ниже. Нейронка, скорее всего, даст какую-то усреднённую точность.
- Нейронка может быть зависима на метод/на обучающую выборку. Инвариантность врача значительно больше.
Про точности врачей. Я натыкался на несколько исследований где анализировали точность врачей. По сути реально хорошую нейронку нельзя сделать без такого исследования. Из последних мне очень понравилось вот это. Чтение маммограмм одно из самых сложных направлений в рентгенологии. Надо пространственно восстановить 4 снимка снятых с разных направлений и понять всё ли ок или нет. Нейронка даёт где-то 87% точность при классификации больной/здоровый. Врачи — от 70% до 86%. При этом, согласно исследованию, врачи имели опыт в данной задаче.
Не надо обобщать данное исследование на все другие задачи. Но виден прикольный момент — «плохим врачам нейронка однозначно помогает». А вот хороших — немного тормозит.
Часть 3. О том где нейронки в медицине реально помогают.
Всё что я говорил выше — были рассуждения на тему «нейронки и поиск паталогий». Отвлечёмся на несколько минут и поговорим про более общую тему — нейронки и медицина. Могут ли помочь нейронки в медицине, в анализе изображений?
И тут ответ — однозначно да. И это уже активно используется. Из свежих примеров, что попадалось (привожу тут российские чисто медицинские стартапы которые дошли до продукта):
UNIM — сеть лабораторий выполняющая исследования образцов биопсии (врачи называют это патанатомическими исследованиями). Эти исследования достаточно долгие и муторные. Врач садиться и считает число клеток одного типа, другого типа, число окрашенных клеток, и.т.д. Ещё пару лет назад все эти подсчёты делались в микроскопы и с счётчиком в руке.
Через нейронки это решается быстро и хорошо. Повышается точность (уж что-то а число клеток алгоритмически подсчитать сильно проще чем глазами + можно обрабатывать больший участок за меньшее время). А главное — очень сильно ускоряется время работы врача.
DiagnoCat — анализ КТ на предмет заболеваний в зубах. Зубов у человека много. Лечащий врач обычно обращает внимание на тот зуб который лечит + на то что бросится в глаза. Никто не описывает все 32 зуба полноценно. Но алгоритм может. Такой подход повышает конверсию, улучшает итоговое состояние пациентов.
Только в России я видел ещё 3-4 фирмы/стартапа которые успешно внедрили машинное обучение в околомедицинские технологии. И эти решения повысили качество услуг/уменьшили их цену.
Главная особенность таких стартапов — они идут не от «решения всех проблем», а от «ускорения обработки данных»/«повышения эффективности».
Эпилог
Нейронные сети сейчас идут не от идеи вида «а давайте распознавать X». А от идеи вида «мы тратим кучу на Y — > можем ли мы как-то это оптимизировать?». Ну, например, автоматически заполнять диагноз, если тратим много времени на писанину. К сожалению, многие это не понимают.
Изменится ли медицина в следующие 10 лет? Думаю что да. Но не за счёт нейронных сетей, а за счёт информатизации. Автоматическое управление потоками, виртуальные рабочие места, объединение всех данных в общую базу. А машинное зрение… Оно само появится в тех проектах которые до него дорастут. Тихо и незаметно.