Если вы пользуетесь интернетом, вы наверняка взаимодействовали с нейросетями. Это разновидность алгоритма машинного обучения, используемая во многих областях, от перевода языков до финансового моделирования. Одна из специальностей этого подхода – распознавание изображений. Несколько компаний – включая Google, Microsoft, IBM и Facebook – разработали свои алгоритмы разметки фотографий. Но пока эти алгоритмы могут совершать очень странные ошибки.
API для компьютерного зрения Microsoft Azure добавило к этому изображению следующую подпись: «стадо овец пасётся на покрытом буйной растительностью склоне холма», и тэги: «пастись, овцы, гора, скот, лошадь». Но на фото нет никаких овец. Вообще. Я каждое пятнышко изучила.
тэги: трава, поле, овца, стоит, радуга, человек
На этом фото компьютер тоже увидел овец. По случайности я знаю, что рядом с этим местом действительно паслось несколько овец. Но на фото их не видно.
тэги: склон холма, пастись, овца, жираф, стадо
А вот ещё один пример. Нейросети вообще мерещились овцы каждый раз, когда она видела подобные изображения. Что происходит?
Нейросети обучаются, обрабатывая множество примеров. В данном случае ей скармливали множество изображений, размеченных людьми вручную – и на многих из них овцы были. Начиная с полного отсутствия знаний по поводу увиденного, нейросети необходимо создать правила, согласно которым изображениям нужно присваивать метку «овца». Судя по всему, она не поняла, что слово «овца» обозначает животное, а не просто траву без деревьев. Похожим образом второму фото она дала метку «радуга», поскольку тот пейзаж влажный и дождливый, не сообразив, что для радуги необходима многоцветная полоска.
Может быть, нейросети чрезмерно чувствительны, и везде видят овец? Оказывается, нет. Они видят овец, только когда ожидают их увидеть. Они легко находят овец в полях и на склонах гор, но как только овцы начинают появляться в неожиданных местах, становится очевидно, насколько эти алгоритмы полагаются на угадывание и вероятности.
Заведите овцу в помещение, и её обозначат, как кошку. Поднимите овцу или козу на руки, и её обозначат, как собаку.
«Слева: мужчина держит в руке собаку. Справа: женщина держит в руке собаку».
Раскрасьте их в оранжевый цвет, и они станут цветочками.
«Несколько оранжевых цветов в поле»
Посадите овцу на поводок, и её обозначат, как собаку. Посадите её в машину, и это будет собака или кошка. Если они зайдут в воду, их могут отметить, как птиц или даже белых медведей.
А если козы заберутся на дерево, они превратятся в птиц. Или жирафов (оказалось, что Microsoft Azure печально известна тем, что ей везде мерещатся жирафы, из-за чрезмерного обилия жирафов, которое, по слухам, наблюдалось в начальном наборе данных).
NeuralTalk2: стая птиц летит в воздухе
Microsoft Azure: несколько жирафов стоят рядом с деревом
Нейросети сопоставляют закономерности. Они видят куски текстур, похожие на мех, участки зелёного цвета, и решают, что на картинке есть овцы. Если они видят мех и формы, напоминающие кухню, они могут решить, что видят кошек.
Если жизнь идёт по правилам, распознавание изображений работает, как надо. Но как только люди или овцы делают что-то неожиданное, алгоритмы сразу демонстрируют слабину.
Если вы хотите пронести что-то незаметно мимо нейросети, то вам, почти в киберпанковском стиле, поможет сюрреализм. Возможно, в будущем тайные агенты будут одеваться в куриц или водить автомобили, разукрашенные пятнами, как коровы.
В ветке в твиттера, начавшейся с простого вопроса, есть множество примеров очень смешных ошибок:
И вы сами можете проверить работу API для распознавания образов от Microsoft Azure и убедиться, что даже самые передовые алгоритмы полагаются на удачу и вероятности. Ещё один алгоритм, NeuralTalk2, я по большей части использовала для обработки изображений из этой ветки комментариев в твиттер.
Автор: Вячеслав Голованов