Средствами CV удается автоматически преобразовать фото- и видеоданные в информацию, что с успехом удалось сделать Ыну с коллегам в вышеописанном эксперименте с кошками с использованием технологий самообучения ANN. Еще в 2007 году группа авторов под руководством того же Эндрю Ына опубликовала статью «Обучение с самообучением: Трансферное обучение на неразмеченных данных» (Self-taught Learning: Transfer Learning from Unlabeled Data). В ней они рассматривают четыре типа обучения
• Supervised Classification – Обучение с учителем
• Semi-supervised Learning – Обучение с частичным участием учителя
• Transfer Learning – Трансфертное обучение
• Self-taught Learning – Обучение без учителя
Эти виды обучения отличаются по степени использования заранее помеченных данных. В случае обучения с учителем она максимальна и, напротив, в случае обучения без учителя минимальна. Идея последнего проста, можно на некотором тестовом наборе научить саму сеть самостоятельно учиться, а после этого она получит возможность накапливать внутри себя необходимый ей комплекс метаданных, чтобы решать поставленную перед ней задачу распознавания. Но в отличие от человека, использующего при обучении творческие способности, ассоциации и т. п., машина по определению тупа, поэтому процесс ее обучения требует затрат большой вычислительной мощности, к тому же эта мощность при использовании фон-неймановских CPU на задачах машинного обучения используется нерационально.
Основным инструментом для разработчиков CV служат библиотеки функций, позволяющие решать стоящие перед ними задачи с использование нейронных сетей и методы машинного обучения. Библиотеки позволяют аккумулировать опыт и небольшими силами создавать серьезные работающие системы из готовых блоков. Почти все библиотеки относятся к открытому ПО, в числе наиболее популярных: OpenCV, TensorFlow, CUDA, YOLO, MATLAB, Keras, SimpleCV, BoofCV, CAFFE, OpenVINO и DeepFace, но ими список не ограничивается, поскольку по своим возможностям они заметно различаются, выбор зависит от решаемой задачи.
В подавляющим большинстве рейтингов лидирует библиотека OpenCV, что заслуживает особого внимания. Хотя она относится к открытым продуктам и она развивается силами большого числа добровольцев, но у нее, что случается нечасто, российские корни. История OpenCV с создания сотрудниками Саровским ВНИИЭФ, работавшими по контракту с Intel, Нижегородской программной технологической лаборатории (NSTL, Nizhny Software Technology Lab). Одним из ее основателей стал Валерий Федорович Курякин, первыми разработчиками были Вадим Писаревский и Виктор Ерухимов, а американский участник проекта Гари Брадски инициировал развите в виде свободно распространяемой продукта с открытым исходным кодом. В 2000 году библиотека получила название OpenCV. Дальнейший путь развития OpenCV был непрост, однако он привел к успеху, библиотека скачана более 20 млн раз и ее элементы использовались при разработке Android и iOS.
Проблема умного железа
Используя метафору «души и тела» в приложении к AI, можно сказать, что в CV – это проблема «души», она решается давно и успешно, но проблема «тела» остается далека от решения, несмотря на кажущееся благополучие, обеспечиваемое графическими процессорами GPU и собранными из них кластерами с рекордными показателями производительности, измеренной в петафлопах, то есть в единицах, не имеющих непосредственного отношения к нагрузке, создаваемой AI-приложениями. История специализированных аппаратных технологий для CV и вообще задач машинного обучения только начинается.
Приходится признать, что для такого класса задач используемые ныне GPU и намного реже специализированные микросхемы (ASCI) и матричные массивы (FPGA) служат тем, что по-английски называют stopgap measures, то есть средствами, обеспечивающими временное решение, не более того. О степени несовершенства можно судить по тому, что мозг потребляет порядка 40 ватт, а если бы удалось создать компьютер, моделирующий равное число нейронов современными технологиями, его мощность оценивалась бы тысячами мегаватт, но есть на 7–9 порядков больше. Поэтому нынешнее положение можно сравнить с тем, что было в первые годы существования компьютеров, когда в ход шли любые доступные радиодетали – лампы, транзисторы, конденсаторы, сопротивления, магнитные сердечники. Это происходило до семидесятых, до тех пор пока не появились интегральные микросхемы, а позже и микропроцессоры.
Проблема железа для CV заключается в том, что до сих пор нет процессоров, полностью соответствующих задачам моделирования. нейронных сетей. Фон-неймановские CPU были задуманы для расчетов, то есть для последовательного выполнения одной программы, хотя за десятилетия их научились искусственными приемами адаптировать к распараллеливанию, или, как сейчас чаще говорят, к работе в многопоточном режиме, более соответствующим требованиям машинного обучения. Однако CPU, имея относительно небольшое число (десятки) производительных ядер, остаются способными обрабатывать ограниченное количество мощных потоков. Ограниченность обычных CPU для задач CV и других задач, связанных с машинным обучением, была осознана давно, чтобы с ней справиться в ход идут не только графические, карты (GPU), аудиокарты, сигнальные процессоры, программируемые матрицы FPGA и многое другое. Успешнее других оказалось внедрение GPU, задуманные для задач трехмерного рендеринга они отличаются большим числом ядер, но эти ядра существенно меньше и проще, чем CPU. Так уж случилось, что GPU, рожденные для компьютерных игр, смогли обеспечить прорыв в AI. Сегодня огромные кластеры, собранные из игровых в прошлом процессоров, обеспечивают всю индустрию AI.
Но GPU являются паллиативом, если посмотреть на проблему шире, то надо признать, что аппаратные средства, поддерживающие CV, NLP и другие решения из области machine intelligence, являющейся подмножеством AI, должны быть рассчитаны на совершенно иную нагрузку, чем традиционные. Во-первых, в их основе должен быть приближенный компьютинг (approximate computing), дающий удовлетворительно точный, но не гарантированно точный результат. Именно так, неточно, работает человеческое мышление. Исследования показывают, что снижение точности на 5–10 % может понизить энергопотребление на два порядка. Во-вторых, обучение должно стать органической частью архитектуры, идея обучения на основе программируемой архитектуры похоже на своего рода оксюморон. Пока удовлетворение этих требований возможно только в идеале. Тем, кого интересует проблема соотношения аппаратного обеспечения и машинного обучения, будет интересно данное в марте 2020 интервью Яна Лекуна «На экзотическом железе трудно добиться успеха». В нем он раскрывает проблему соотношения аппаратного обеспечения и машинного обучения, делая упор на том, что неэффективно использование матричного умножения для выполнения операций свертки – основы конволюционных сетей CNN. На данный момент альтернативу GPU, поставляемых компанией Nvidia, составляют несколько процессоров. Наиболее известно среди них существующее с 2016 года семейство тензорных процессоров Google (Tensor Processing Unit, TPU), представляющих собой специализированную интегральную схему, предназначенную для поддержки библиотеки машинного обучения TensorFlow. Возможно, подходящим решением проблемы железа для CV станут графовые модели, где вершины представляют вероятностные характеристики данных, а ребра – корреляцию между этими свойствами. Этим путем идёт британская компания Graphcore, производящая процессоры Colossus MK2 IPU (Intelligence Processor Unit), название которого адресует к электронно-механическому компьютеру Colossus, испробованному во время Второй Мировой Войны в операции Ultra. Другой многообещающий стартап Cerebras (Головной мозг) выбрал для себя в качестве руководящей идею использования специализированных процессоров на разреженных матрицах. К тому же ее процессор CS-1 изготовлен по необычной технологии Wafer-Scale Engine (WSE), то есть масштабирование на всю подложку. Он занимает всю поверхность кремниевой пластины размером 215 x 215 миллиметров, состоит из более чем 1,2 триллиона транзисторов, собранных примерно в 400 000 ядер.