Нейросети бывают разные. Но если бы меня спросили, какая архитектура — моя любимая, я бы не задумываясь ответил: «автоэнкодеры».
Представьте, что мы хотим научиться уменьшать размер данных. Это полезно для более эффективного хранения и быстрых вычислений. А еще было бы здорово превращать данные в вектора чисел так, чтобы похожие наборы чисел соответствовали похожим объектам. Их можно было бы использовать для анализа данных. Как решить обе задачи одновременно?
🖼 Давайте вообразим, что мы хотим сжимать изображения. Возьмем двух людей: одного назовем «кодировщиком», а второго — «декодировщиком». И посадим их в разные комнаты. Дальше мы достаем пакет картинок, которые хотим сжать, и будем по одной давать кодировщику. Его задача — записать набор чисел небольшой длины, как-то отражающий содержание картинки. Потом мы будем давать эти наборы чисел декодировщику. Он должен будет взглянуть на числа и нарисовать исходную картинку.
🥊 А затем мы посмотрим на результат, посмеемся и влепим обоим подзатыльники. Чем меньше нарисованная картинка похожа на исходную, тем сильнее подзатыльники. Чтобы не быть совсем жестокими, мы еще подскажем, что нужно улучшить, чтобы удар в следующий раз был слабее. Декодировщику — как нужно поправить картинку и что нужно было понять из чисел. Кодировщику — как составлять эти числа, чтобы их лучше воспринял декодировщик.
Сперва у них ничего не будет получаться, так что подзатыльники будут знатными. Но постепенно кодировщик научится сохранять в числах больше смысла, а декодировщик — их расшифровывать. Например, первое число будет положительным, если на картинке кот, и отрицательным, если там собака. Второе число будет кодировать размер животного, третье — цвет шерсти и так далее 🐶🐱
Именно так и функционируют автоэнкодеры! Только кодировщик и декодировщик — это разные нейросети. После их тренировки декодировщик обычно отбрасывают. А вот кодировщик можно использовать, чтобы сжимать картинки (и другие объекты) в меньшую размерность и работать с полученными векторами для анализа данных. Например, их кластеризации или даже задач классификации. Несмотря на то, что мы не говорим нейросетям, какие картинки содержат котиков, а какие песиков, они выучивают такую информацию самостоятельно из данных. Разве это не элегантно?
Для картинок эта архитектура уже не так популярна, зато из нее вырос мощный метод генерации изображений — диффузия. А вот в биологии автоэнкодеры всё еще процветают: они используются для снижения размерности и интеграции данных из разных экспериментов в области транскриптомики отдельных клеток 🧬
Текст подготовлен Владимиром Шитовым (@chelovek_nauk) эксклюзивно для Бластим. От себя добавим, что у нас на курсе по машинному обучению вы точно своими руками напишете ванильный автоэнкодер