Ilya Siganov's blog
Зачем учить машины?

Компьютеры становятся все умнее. Ученые утверждают, что скоро они смогут разговаривать с нами.
Дейв Барри. (Под “они”, я подразумеваю компьютеры, а ученые, судя по всему, так и не научатся с нами разговаривать)

Прежде чем мы с вами пустимся в пучину больших данных, статистики, теории обучения и , возможно, даже философии, давайте вспомним, как развивалась в принципе вычислительная техника и как мы пришли к тому, что мы сейчас имеем.

Механические вычислительные машины

Поскольку это недостойно таких замечательных людей, подобно рабам, терять время на вычислительную работу, которую можно было бы доверить кому угодно при использовании машины

Копия арифмометра Лейбница в Немецком музее.

Копия арифмометра Лейбница в Немецком музее.

В 17-ом веке замечательные математики Паскаль, Лейбниц и, вероятно, многие другие, уставшие от постоянных монотонных арифметических вычислений, построили механические арифмометры, идею которых описал ни кто иной как Леонардо да Винчи еще в 15-ом веке. Всё было исполнено с использованием цилиндров, шестерёнок и прочих прелестных деталей.

Прогресс не стоял на месте. Жаккард придумал перфокарты для повторения каких-то шаблонов, а Бэббидж понял, что можно создать механическую программируемую перфокартами машину — аналитическую машину. Стартовал проект длиною во весь 19-ый век — создание разностной машины, использующей силу пара, в то время весьма популярного источника энергии. И как не вспомнить первую программистку Аду Байрон, которая помогала в создании этой чудо машины.

Копия разностной машины в лондонском Музее науки

Копия разностной машины в лондонском Музее науки

Примечательно то, что даже тогда, люди полагали, что им удастся создать мыслящую машину, в каком бы то ни было понимании процесса мышления. Единственное чего не хватало по их мнению — это шестерёнок, нужно просто добавить их чуть больше, чтобы производительность машины была достаточно высока.

Машина будет иметь возможность мыслить, проявлять интеллектуальность, если будет достаточно производительной. XIX век.

Электромеханические и электронные машины

В середине прошлого века стали создавать электромеханические вычислительные машины, использовали уже не шестеренки, а, например, лампы. Производительность по сравнению с аналитической машиной Бэббиджа стала просто невероятной, но интеллектуальности мы всё еще не наблюдали. А Тьюринг описал абстрактного вычислителя, тем самым формализовав процесс вычисления на компьютерах. Таким образом к 1960-м годам мы уже имели хорошо описанную и математически обоснованную область. Осталось только дело техники — улучшить производительность!

Если смотреть на развитие уже привычной нам электронной вычислительно техники, то можно условно определить следующие поколения:

  1. 1940-ые — Электронные лампы
  2. 1950-ые — Транзисторы
  3. 1960-ые — Интегральные схемы
  4. 1970-ые — Микропроцессоры
  5. 1980-ые — Параллельные вычисления

Сами по себе поколения нам не интересно разбирать, но интересно детальнее проанализировать концепции появившиеся в конце 70-ых годов, приведшие к так называемому пятому поколению.

Пятое поколение вычислительной техники

Опьяненные успехами развития электроники, Японские ученые решили, что вот теперь, применив распараллеливание вычислений, запущенных на кластере компьютеров, и используя логические языки программирования типа Prolog и языки обработки списков Lisp, они смогут получить искусственный интеллект, достигнув определенной вычислительной мощности. И, самое интересное, их не остановил на полпути тот факт, что уже вышли новые процессоры, обладающие куда большей мощности, чем они предполагали, а компьютеры так и не обладали интеллектом!

В итоге, спустя десять лет разработки, было потрачено около 500 миллионов долларов, но ИИ так и не появилось. Давайте подумаем, в чём же заключалась проблема? Неужели опять в недостатке мощностей?

Машина будет иметь возможность мыслить, проявлять интеллектуальность, если будет распределенной. XX век.

Проблема программного ИИ

Когда мы пишем программу, то мы фактически фиксируем языком программирования некоторую нашу абстрактную идею о некотором факте из природы. Люди создают абстракции, интерпретируя своё восприятие этого мира, то есть они базируются на каких-то знаниях, чувствах, морали, импринтах и так далее. Получается, абстракции, которые фиксируются строгими искусственными логичными языками программирования (которые, кстати, противоречивы с точки зрения формальной логики, так как базируются на противоречивой логике Хоара, но это совсем другая история), не объективны хоть сколько-то. Разные люди скорее всего будут создавать разные абстракции, и это зависит не только от их мастерства программиста, аналитика, ученого.

Найди несчетное множество отличий

А теперь представьте, что вас пригласили разрабатывать подсистему ИИ, способную отличать собаку от кошки. Вам показали две фотографии с кошкой и собакой. Представьте в голове, чем собака и кошка отличаются друг от друга. Теперь попробуйте мысленно формализовать эти идеи. Но, вдруг, вам показали две другие фотографии, которые вы не видели до этого никогда, и у вас, весьма вероятно, частично разрушатся предыдущие абстрактные идеи, на их смену придут новые, более точные, как вам кажется. Но, внезапно, отдел маркетинга понял, что еще надо научить отличать животных не только по фотографии, но и по звуку. Всё начинается сначала! И это еще не всё, настал момент разобраться в разных породах кошек и собак.

Из примера вы можете заметить, что мы с вам загнали себя в ловушку абстрактных воздушных замков. Если бы вы делали это задание в группе друзей, то, возможно, вы бы даже начали весьма горячий спор. Каждый новый пример частично ломает наши идеи, а путь исправления нам видится только в полном переписывании алгоритма.

Путь исправления лежит через полное переписывание алгоритма. Знакомо?

Почему это происходит? Почему не получается описать нечто раз и навсегда? Где же объективная реальность, которую мы так хотим зафиксировать? А может такое быть, что мир слишком динамичен и разнообразен для наших закостенелых статических абстракций? Поэтому необходимо отыскать другие методы описания абстракций, которые не зависят от человеческого восприятия на столько, на сколько это вообще возможно. В этот момент мы можем подойти к идее машинного обучения.

Справедливости ради стоит отметить, что некоторый класс задач можно очень эффективно решать описывая эти статичные абстракции. Такие алгоритмы как правило очень эффективны, следовательно быстро работают. Например, поиск лиц на фотографии методом каскадов Хаара, идентификация музыки, фильтрация сигналов и так далее.

Новый подход к построению ИИ

Вместо того, чтобы человек сам описывал с помощью языка программирования некоторую свою субъективную абстракцию, предлагается использовать компьютер для этих целей. Тогда вместо программирования конечного алгоритма, мы будем создавать алгоритм, который ищет алгоритмы (именно ищет, а не создаёт). Здесь я предлагаю вам ознакомиться со статьей 2001 года “Рефлексирующие программные системы”. В ней авторы ставят вопрос почему программы до сих пор(2001 год) так и не стали интеллектуальными? Как наделить программы рефлексией, то есть способностью к самоулучшению?

“Наиболее рациональный путь решения этой проблемы состоит в изучении того, как она решается живыми разумными системами в процессе их деятельности.”

Для этого определяем некоторое начальное состояние системы и целевое состояние. Путь достижения целевого состояния не известен. Таким образом система должна отыскать каким-то образом этот путь, чтобы совершить переход между состояниями. Поиск может быть реализован как полный перебор чего-то. Если же цель сама по себе очень сложная и достижима разными путями, то мы, как и всегда, разбиваем задачу на подзадачи. Тем самым получаем иерархическую структуру(дерево) из целей, связанных между собой некоторыми путями для перехода. Вообразить это можно в виде пирамиды, в основании которой находятся цели решаемые алгоритмами некоторого первого уровня. Цели второго уровня решаются с помощью алгоритмов второго уровня, соответсвенно. Но что делает алгоритм с каждого следующего уровня этой пирамиды? Он выбирает алгоритм нижнего уровня для решения своей задачи.

Когда мы пишем обычные программы, будь то вычисляющие сложные формулы или рисующие анимации на экране, мы создаем алгоритмы некоторого первого уровня.

Можно сказать, что вся эта система из выбирающих друг друга алгоритмов, идущая к некоторой цели, обладает рефлексией и интеллектуальностью(если рассматривать когнитивную способность к обучению как интеллектуальную).

Вопрос в том, как создавать такие программы? Что они из себя представляют? Что такое поиск пути достижения цели или “подходящего” алгоритма? Что нас ждет на вершине пирамиды, если она существует? И где в этой пирамиде человек?

Как вы уже догадались, такие системы можно создавать с помощью машинного обучения.

Машинное обучения

Рассмотрим сразу пример простой задачи, с помощью которой можно легко объяснить суть маш. обуча.

Допустим у нас есть данные о размерах чашелистика и лепестка большого множества цветов ириса. По этим данным мы хотим научить машину отличать цветы различного вида друг от друга. Мы предполагаем**,** что существует некоторая **скрытая закономерность** между видом цветка и его **характеристиками**. Процесс же обучения — это поиск зависимостей между наблюдаемыми характеристиками и скрытыми. В терминах информатики все вычислимые функции есть суть алгоритмы, таким образом мы с вами можем сказать, что машинное обучение как алгоритм и есть алгоритм 2-го уровня ищущий алгоритмы 1-го уровня.

Может показаться, что теперь мы можем взять любые данные и загрузить их в условный google cloud, чтобы решить нашу произвольную задачу. Но не случайно у нас есть целая пирамида алгоритмов. Оказывается, что определенный алгоритм машинного обучения, как алгоритм поиска, может искать закономерности не в полностью произвольных данных. Получается так, что мы, люди, должны выбирать эти алгоритмы 2-го уровня сами под определенные структуры данных.

Некоторые боятся, что их заменят скриптом.

Продвинутые боятся, что их заменят машинным обучением.

Просветленные выбирают алгоритмы машинного обучение. (шутка)

Именно из-за этой пирамидности нет Единого Алгоритма, людям всё ещё есть что делать и нельзя просто так спросить в чём смысл жизни и получить ответ, отличный от “42”.(на самом деле это проблема постановки правильного вопроса к бытию, которой, кстати, занимается философия)

Проблемы машинного обучения

Факт того, что нужно выбирать алгоритмы под задачу и данные порождает зоопарк разных алгоритмов маш.обуча. и классов задач(регрессия, классификация, кластеризация, …), возникает проблема предобработки данных и выбора подходящего алгоритма. Но как происходит этот выбор? Для этого оценивают метрики качества предсказания и пытаются интерпретировать результаты предсказания, чтобы понять почему алгоритм принял какое-то решение. Метрик качества тоже может быть много разных, в одном случае это может быть обычная точность(accuracy) предсказания, которая считает сколько раз алгоритм ошибся. Может быть хитрая метрика, которая учитывает ошибки первого и второго рода. А для задачи регресси, где предсказывают вещественные числа, можно считать величину отклонения от достоверного значения, или квадрат отклонения, или модуль… В общем вы уловили идею, есть нюансы.

Да, вы можете предположить, что можно написать алгоритм третьего уровня, который будет просто перебирать все метрики, алгоритмы_2 и как-то перемешивать данные, но стоит отметить, что это Полный Перебор по теоретически, неограниченному множеству вариантов. Нужны новые методы оптимизации, не те что применяются на втором уровне, а совсем другие. На сколько я понимаю их ещё нет. Но некоторые структуры, например, глубинные сети по сути своей скрывают внутри себя очень много слоев абстракций. На столько много, что нельзя сказать какой это “уровень” нашей воображаемой пирамиды. По всей видимости, поэтому глубокие сети сейчас действительно кажутся вот-вот-совсем интеллектуальными и, даже, обладающими “творчеством” или способностью создавать.

В любом случае, если вы ещё пишете алгоритмы первого уровня, то вас скоро автоматизируют. Не так давно нейросети научились верстать по макетам(sic!). Поэтому я зову вас на следующую ступеньку, где вы будете выбирать более абстрактные алгоритмы!

А продолжение философствования на тему того, что же это такое, “Искусственный интеллект”, вы можете прочитать тут.