Или их процесс обучения - это просто еще одна идея в гиперуранионе?

Две тысячи лет назад некоторые греческие парни в одеждах спрашивали себя, откуда берутся идеи и как мы учимся. Эти вопросы превратили их в существенных исторических персонажей и вызвали постоянную дискуссию. Отвечая на вопрос «как мы учимся?» может провести нас через путешествие философов и мыслителей по всему миру. Как это связано с сегодняшними дискуссиями о глубоком обучении? Ответ менее философский и более практичный…

Некоторые глубокие мысли перед глубоким обучением

В какой-то момент своей жизни мы, должно быть, слышали о Сократе, Платоне и Аристотеле. Возможно, вы видели их мраморные бюсты или пытались выяснить, кто есть кто на фреске Рафаэля Афинская школа (задача не из легких!). Их постоянно рисуют и раскрашивают разными способами, и то, что осталось от их произведений, изучается и анализируется на протяжении веков. Цитаты Платона - мотивация лекций по философии, а также футболок и кружек. У них все, причем все! Даже глубокое обучение.

Сократ никогда ничего не писал [1]. Все, что мы знаем от него, это его самого известного ученика Платона. Вдохновленный знаниями своего учителя, Платон был одним из первых, кто задумался об истоках наших идей и процесса обучения. Проще говоря, он считал, что обучение - это запоминание. Согласно Платону, все мы произошли из мира душ (который он назвал Гиперуранион), где у нас было совершенное знание всех идей. Живя здесь, на Земле, мы просто помним то, что знали из нашего мира душ. Идеи есть, их нужно просто запомнить!

Иногда, пока я жду, когда моя искусственная нейронная сеть (ИНС) завершит обучение, я думаю об этом. Возможно, ИНС также происходят из мира, где все их параметры, независимо от того, сколько их у нас, известны. Может тренировка - это просто вспоминание? Это всегда вселяет в меня надежду!

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

Более чем через тысячу лет после Аристотеля и Платона Джон Локк придумал похожую идею. Он сказал, что когда мы родились, наш разум был подобен чистому листу (tabula rasa) и что наш опыт и взаимодействие с миром сформировали наши мысли и, следовательно, нашу личность. Это противоречило идеям Платона о разуме, который помнит то, что уже было, и вызвал дискуссию, которая продолжается и сегодня. Современные дебаты природа vs воспитание содержат две разные точки зрения: либо человеческое поведение формируется нашим опытом, либо наше поведение уже определено нашими генами.

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

Искусственные нейронные сети

Искусственная нейронная сеть (ИНС) - ключ к пониманию глубокого обучения. За каждым описанием процесса глубокого обучения стоит ИНС, которая была разработана и обучена для достижения определенной цели. ИНС - это группа связанных единиц (нейронов), которые принимают и передают сигналы. Предполагается, что работа ИНС должна напоминать процесс, в котором взаимодействуют нейроны в нашем мозгу. [2] На самом деле, хотя ИНС и настоящие нейронные сети имеют общие черты, они не так похожи. Чтобы объяснить, как работает биологическая нейронная сеть, нам нужно поговорить об электрических и химических синапсах, а также о белках и мембранах. Объяснение того, как работает простая ИНС, связано с другими вещами.

В ИНС набор входных данных подается в сеть единиц, распределенных на разных уровнях. Входные данные преобразуются в соответствии с функцией активации каждого блока, а также весами и смещениями, которые соединяют все блоки. В конце сети последний слой получает результат и сравнивает его с реальными наблюдаемыми данными. До этого момента ИНС работала в режиме прямого распространения, что означает, что входные данные, функции активации, веса и смещения используются вместе для определения выхода. Сравнение этого вывода с наблюдаемыми (реальными) данными запускает второй процесс в ИНС, называемый обратным распространением или просто обратным распространением. В этом процессе различия между выходными и реальными данными используются для корректировки весов и смещений, которые связывают все устройства. Это измерение того, насколько далеко выходные данные находятся от реальных данных, рассчитывается с помощью функции потерь. [3] Эта настройка повторяется несколько раз, пока мы не сможем сказать, что ИНС обучена. Лучше пояснить это на примере.

Яблоки, апельсины и лимоны

Предположим, мы работаем над ИНС, которая сможет различать лимоны и любые другие фрукты. Это похоже на пример, который мы упоминали ранее, но это не то же самое (мы вернемся к этому моменту позже). Первое, что нам нужно, это входные данные. В этом случае у нас должна быть база данных с разными изображениями и этикеткой, которая сообщает нам, какой из этих фруктов является лимоном, а какой нет. Размер и качество этого набора данных - один из наиболее важных аспектов процесса обучения ИНС. Этот набор данных позволит нам сравнить результат, полученный от ИНС, с ожидаемым результатом и соответствующим образом скорректировать веса и смещения. На рисунке 2 показаны несколько примеров фруктов и их этикеток. Это просто для демонстрационных целей. На самом деле нам понадобится набор данных, превышающий 8 примеров.

Такой набор данных должен быть закодирован таким образом, чтобы его можно было интерпретировать с помощью алгоритма. В простом примере, таком как этот, мы могли бы преобразовать метки в единицы (1) и нули (0), а изображения в одномерный массив, который учитывает разрешение изображения и цвет каждого пикселя. Если мы предположим, что первое изображение, которое у нас есть, имеет разрешение 30x30 пикселей, мы могли бы представить это изображение в виде массива RGB 30x30x3, который может быть сведен в одномерный массив, содержащий несколько параметров для каждого изображения. Это означает, что входной набор данных из 8 изображений с разрешением 30x30 пикселей может быть преобразован в 2D-матрицу, содержащую 2700 строк и 8 столбцов. Обратите внимание, что этот процесс - простой способ объяснить, как работать с проблемами распознавания изображений. Более надежная методология - использовать многомерные тензоры и сверточные нейронные сети [4]

Идти вперед

Входные данные содержат не только закодированные изображения, но также закодированные метки для каждого изображения. Таким образом, для каждого столбца в матрице на рисунке 2 у нас будет другая матрица с метками, указывающими, является ли изображение лимоном (1) или другим фруктом (0). Первая из этих матриц входит в сеть слева, как показано на рисунке 4. Это начало процесса прямого распространения. Каждый из параметров для каждого примера преобразуется в соответствии с архитектурой сети и значениями весов и смещений. Многие книги и интернет-ресурсы содержат разные примеры и объяснения по этому поводу. [2,5] В этом случае достаточно сказать, что каждый блок учитывает значения весов и смещений, а также выходной сигнал блоков, которые подключаются слева. Каждая черная линия, соединяющая единицы измерения, имеет индивидуальный вес (w), а каждая единица, окрашенная в желтый и зеленый цвета, содержит индивидуальное смещение (b). Итак, внутри каждого модуля происходят два основных процесса:

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

  • Как только у нас есть эти значения, мы используем функцию активации каждого блока, чтобы преобразовать входные данные в выходные данные каждого блока. Функции активации - это сердце ИНС. Их основная функция - добавить нелинейность, необходимую для установления закономерностей и сопоставления всей информации, поступающей в сеть. Если вы построите некоторые из этих функций активации, вы заметите, что большинство из них нелинейны, и это именно то, что мы хотим: установить нелинейные отношения между элементами и слоями.

Последнее, что нужно сказать об архитектуре ИНС, касается ее уровней. ИНС, представленная на рисунке 4, содержит один входной слой, один выходной слой и три скрытых или промежуточных слоя. Сколько слоев у нас должно быть? Сколько единиц на слой? Это непростой вопрос. Размер и количество слоев могут кардинально изменить производительность ИНС. Больше слоев или больше единиц не обязательно означает, что ИНС будет работать лучше. Архитектура ИНС может быть специфичной для различных типов проблем, и ее необходимо протестировать, прежде чем решать, какое количество уровней и единиц является правильным. Для задач, подобных представленной в примере, количество скрытых слоев обычно составляет 2–4 [6], но оно может увеличиваться в зависимости от количества данных и их качества. ИНС, содержащие более двух уровней, обычно считаются примером глубокого обучения [7].

Мы на полпути. На этом этапе мы завершили первое прямое распространение и получили выходную матрицу, которую мы можем сравнить с матрицей меток. Это сравнение покажет нам, насколько точной была наша ИНС. Как правило, начальные веса и смещения нейронной сети выбираются случайным образом. Однако это может быть не так для конкретных приложений ИНС [8]. При такой случайной инициализации весов и смещений весьма вероятно, что ИНС дает неверные результаты. Что же нам тогда делать? Как мы можем сказать ИНС, что некоторые яблоки были ошибочно классифицированы как лимоны? И что еще более важно, что случилось с миром идей Платона? Почему эта ИНС не могла вспомнить, что такое лимон?

Назад в Гиперуранион

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

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

Вычисление ошибки между всеми выходными данными и наблюдаемыми данными покажет нам, насколько точной была ИНС в классификации. Однако этого числа недостаточно для корректировки весов и смещений и улучшения прогнозов сети. Основная идея обратного распространения ошибки заключается в том, что существует способ найти минимальное значение функции стоимости. Помните, что любая функция стоимости зависит от наблюдаемых данных (y) и выходных данных (a) от ИНС. Эти выходные данные являются функцией весов и смещений каждого слоя, а также входных данных (x). Поскольку входные данные не могут быть изменены, единственный способ настроить окончательное значение функции стоимости - это изменить веса и смещения. Эта модификация должна быть такой, чтобы окончательная стоимость была минимально возможной. Итак, обратное распространение - это проблема минимизации. Но не простой. Функция стоимости зависит от нескольких весов и смещений, которые увеличиваются с каждой единицей или слоем, добавляемым в сеть. [3] Как тогда решить эту проблему?

Как распространять обратное распространение

В задачах такого типа широко используется метод градиентного спуска. Это позволяет нам вычислить градиент в определенной точке функции, чтобы мы могли следовать в этом направлении, пока не найдем минимум. В качестве графического примера рассмотрим рисунок 6. На нем показана функция, которая зависит от двух переменных x и y. Мы хотели бы знать, какие значения для x и y приведут нас к минимальному значению z. Если мы начнем со случайной комбинации x и y, которая является случайной точкой на поверхности, мы можем вычислить градиент функции в этой конкретной точке. Этот градиент скажет нам, в каком направлении мы должны следовать, если хотим найти минимальное значение этой поверхности. Затем мы можем сделать небольшой шаг в этом направлении и снова вычислить градиент. Если мы будем повторять этот процесс достаточно долго и, в зависимости от типа поверхности, мы сможем найти минимум этой функции.

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

Обратите внимание, как направление, которое ведет нас от начальной точки к минимуму, вычисляется через частную производную функции по каждой из переменных. После вычисления этих частных производных они вычитаются из начальной точки, чтобы найти новую точку, которая следует за градиентом и близка к минимуму. Если вы не совсем уверены в том, каков эффект вычисления этих частных производных, или начинаете беспокоиться из-за уравнений, вы можете прочитать эту статью или выполнить быстрый поиск в Интернете. Это простая идея.

В случае примера на рисунке 6 вычисление состоит из частной производной z по x и по y. Однако, если мы вернемся к нашему примеру ИНС, вы увидите, что функция стоимости, которую мы пытаемся минимизировать, зависит не только от двух переменных, но и от нескольких переменных: веса и смещения каждой единицы на каждом уровне. Таким образом, у нас будет столько градиентов для весов и смещений, сколько весов и смещений мы определили изначально! И последнее: помните, как мы сказали, что метод градиентного спуска будет указывать направление, по которому мы должны следовать, чтобы найти минимум, и что как только мы получим это направление, мы собираемся предпринять небольшие шаги к нашей конечной цели. Насколько мал этот шаг? Вот почему у нас есть еще одна ручка для включения алгоритма ИНС! Скорость обучения [3] будет определять, насколько велик или мал этот шаг. На рисунке 7 представлена ​​простая блок-схема, которая содержит все шаги, которые выполняются в рабочем процессе ИНС. Обратите внимание, как после расчета градиентов мы должны обновить параметры, вычтя из них градиенты. Эти градиенты умножаются на скорость обучения. При небольшой скорости обучения потребуется больше итераций, чтобы найти минимум. Большая скорость обучения должна потребовать меньше итераций, но при этом может возникнуть больше проблем.

Итак, что именно у нас есть сейчас и что мы можем с этим делать?

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

Следуя предыдущему примеру, у нас будет ИНС, способная различать лимоны и любые другие фрукты. Мы дадим этой ИНС картинку любого фрукта, и она скажет нам, лимон это или нет. Помните, что каждое изображение будет входить в ИНС как одномерный массив, и все значения в этом массиве будут взаимодействовать с весами и смещениями каждой единицы и каждого слоя. В конце ИНС последний слой будет выводить одно единственное значение, которое будет определять, показывает ли изображение, вошедшее в ИНС, лимон или какой-либо другой фрукт. Этот процесс можно экстраполировать на многие другие приложения. У нас может быть ИНС, выходные данные которой вместо одного значения состоят из нескольких чисел, которые сообщают нам, соответствует ли изображение лимонам, яблокам, бананам или любым другим фруктам. Приложив больше усилий, мы могли бы построить ИНС, которая распознает, есть ли на фотографии автомобиль, велосипед или светофор. Области применения ИНС многочисленны и связаны не только с обработкой изображений. Как только вы получите четкое представление о том, как работает ИНС, вы увидите, что многие аспекты нашей повседневной жизни могут быть связаны с глубоким обучением. Независимо от важности и сложности приложения, процесс обучения ИНС остается таким же, как и тот факт, что ИНС требует значительного количества данных для обучения.

Помните, мы говорили, что пример с идентификатором лимона не совсем то же самое, что кто-то впервые идет в супермаркет? Этот человек раньше ничего не знал о фруктах и ​​пытался определить, какие из этих фруктов были лимоны. Сколько примеров «лимон, а не лимон» нужно этому человеку, чтобы убедиться, что лимон - это лимон? Для реальной нейронной сети нам не нужно много примеров. Новорожденный может не сразу выучить все названия фруктов, но он сможет знать, что все лимоны, несмотря на их размер, желтизну и форму, являются лимонами и полностью отличаются от банана или яблока. Сколько лимонов потребуется этому новорожденному, чтобы обобщить характеристики лимонов и узнать, что общего у всех лимонов? Определенно не так много, как требовалось бы ИНС [9]. Будет справедливо сказать, что наш процесс обучения отличается от процесса обучения ИНС. Действительно ли ИНС учатся? Если они это сделают, то это будет не тот процесс обучения, который есть у нас.

Формы Платона, универсалии Аристотеля и скрытые слои ИНС

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

С другой стороны, Аристотель говорил, что среди вещей есть универсальные характеристики. Можно говорить о желтизне лимонов или красноте яблок. Однако для Аристотеля эти универсальные характеристики не укоренились естественным образом в нашем сознании. Они являются продуктом нашего опыта в реальном мире. С точки зрения Аристотеля, мы можем видеть гроздь лимонов и знать, что все они имеют одинаковую характеристику желтизны, хотя не все они имеют одинаковую форму или даже один и тот же тип желтого цвета. В этом случае обучение - это продукт нашего взаимодействия с реальным миром. Наш разум способен определять универсальные характеристики вещей и знать, какие фрукты - лимоны, а какие - яблоки.

Как ИНС связаны с этими теориями? В качестве первой идеи важно сказать, что классический способ работы с ИНС - это случайная инициализация весов и смещений. Эта случайная инициализация отличается от представлений Платона о серии предварительно загруженных идей или форм. Знание априори правильных весов и предубеждений было бы похоже на наличие предварительно загруженного набора идей, который позволяет нам учиться. В большинстве случаев это не так. Однако теория Платона может объяснить, почему аналогичные проблемы решаются с использованием ИНС с одним и тем же набором начальных весов и смещений и с заранее установленной архитектурой. Тем не менее не существует идеального сочетания весов и смещений для решения всех проблем. ИНС может иметь хорошую производительность в сильно нелинейной задаче, но никогда не достигнет 100% точности по отношению к невидимым данным.

Если мы проанализируем ИНС, используя теорию Аристотеля, то мы скажем, что если мы выберем правильную архитектуру, ИНС всегда должна сходиться к идеальному результату. После нескольких итераций и использования почти бесконечного набора входных данных ИНС, наконец, получит правильные значения весов и смещений, и результат будет на 100% точным. Это может быть верно для простых задач, но, к сожалению, для более сложных проблем нет гарантии, что ИНС сойдется к идеальному результату. Это правда, что добавление дополнительных скрытых слоев и использование различных функций активации поможет распознать нелинейные отношения в данных. Однако это не означает, что ИНС всегда будет сходиться к приемлемому результату.

На самом деле то, как обучение работает у людей и животных, можно объяснить тем, что, хотя часть информации уже присутствует в мозгу во время рождения, обучение также включает в себя опыт и взаимодействие с миром. Исследования показали, что способ, которым нейроны связаны в головном мозге, предустановлен уже во время рождения [9]. Это объясняет, почему несколько животных рождаются с инстинктами или инструкциями, которые помогают им выполнять основные задачи выживания, такие как кормление или спаривание. Эти знания уже присутствуют в мозге и связаны с информацией, содержащейся в геномах, которые, в свою очередь, являются продуктом многолетней эволюции. Предварительно загруженная в мозг информация дополняет знания, полученные в результате взаимодействия с окружающим миром. Наш процесс обучения является результатом как структуры нашего мозга (природы), так и взаимодействия с миром (воспитания).

Заключение

Хотя слово обучение постоянно используется в отношении ИНС, очевидно, что человеческое обучение и обучение ИНС - это два разных процесса. Между сложностью структуры мозга и сложной архитектурой ИНС есть важные различия. Мы могли бы имитировать тот факт, что часть нашего процесса обучения является врожденной, унаследовав веса, смещения и архитектуру от предыдущих реализаций ИНС (это было названо мета-обучением и в основном состоит из процесса обучения, который происходит на двух уровнях, каждый из них связаны с разным масштабом времени [10–12]). Однако нам все равно придется решать воспитательную часть обучения, когда нет четкого параллелизма между используемым алгоритмом обучения и тем, что происходит в нашем мозгу. В дополнение к этому, всегда важно помнить, что окончательный вывод ИНС является результатом нескольких нелинейных функций, оцениваемых через несколько уровней и единиц. Этот результат ничем не уступает используемым функциям активации. Например, нейронная сеть с только линейными функциями активации не сможет распознавать нелинейные отношения независимо от ее архитектуры.

Несмотря на явные различия между ними, дизайн ИНС следует сущности того, что такое биологическая нейронная сеть. Это послужило источником вдохновения для важных усовершенствований ИНС, таких как сверточные нейронные сети. Реальная нейронная сеть постоянно используется как ссылка на то, какой должна быть ИНС. Однако мы должны быть осторожны в отношении того, чего мы можем ожидать от ИНС и чем процесс ее обучения отличается от биологического обучения. Возможно, настоящая нейронная сеть - это просто идея или форма того, как должна выглядеть ИНС. В глубине души мы знаем, как выглядит настоящее обучение, и знаем, что идеальной ИНС не может быть никогда. Тем не менее, наши взаимодействия и опыт с реальными нейронными сетями определенно помогут нам улучшить наше понимание ИНС и сделать их мощным дополнением к нашему интеллекту и рассуждениям.

использованная литература

  1. Хендрикс, С. (2018) Кем был Сократ? Разъяснение величайшей тайны философии . BigThink.
  2. Бишоп, К. (2006). Распознавание образов и машинное обучение. Springer. Нью-Йорк, США.
  3. Кантанфорош, К., Кунин, Д., Ма, Дж. (2019) Оптимизация параметров в нейронных сетях. DeepLearning.ai.
  4. Weilong Mo et al. (2019) Распознавание изображений с использованием сверточной нейронной сети в сочетании с алгоритмом ансамблевого обучения. J. Phys .: Conf. Сер. 1237 022026
  5. Е. Н. (2014). Сбор данных. Теория, алгоритмы и примеры. CRC Press. Флорида, США.
  6. Назначение глубокой нейронной сети. Нейронные сети и глубокое обучение (Курс 1 из Специализации глубокого обучения). Coursera
  7. Количество скрытых слоев. Heaton Research.
  8. Радд-Ортнер, Р.Н.М., Михайлова, Л. Повторяемый детерминизм с использованием неслучайных инициализаций весов в приложениях глубокого обучения умных городов. J. Надежная среда Intell Environ 6, 31–49 (2020). Https://doi.org/10.1007/s40860-019-00097-8
  9. Задор, А. Критика чистого обучения и того, чему искусственные нейронные сети могут научиться у мозга животных. Nat Commun 10, 3770 (2019). Https://doi.org/10.1038/s41467-019-11786-6
  10. Санторо и др. (2016). Мета-обучение с помощью нейронных сетей с расширенной памятью. Материалы 33-й Международной конференции по машинному
    обучению. Нью-Йорк, США.
  11. Виальта, Р., Дрисси, Ю. Перспективный взгляд и обзор метаобучения. Обзор искусственного интеллекта, 18 (2): 77–95, 2002.
  12. Вен, Л. (2018). Мета-обучение: учимся быстро учиться.