Что такое bias в нейронных сетях
Перейти к содержимому

Что такое bias в нейронных сетях

  • автор:

Нейронные сети: теория и практика

В рамках изучения темы искусственного интеллекта мне повстречался такой термин, как искусственная нейронная сеть. Изучив несколько десятков статей и пару книг, я хочу поделится своим кратким опытом. Я думаю, что данная статья будет полезна тем, кто захочет начать свой путь в изучении нейросетей.

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

Нейронные сети состоят из:

  • входного слоя I (input)
  • произвольного количества скрытых слоев H (hidden)
  • выходного слоя O (output)
  • набора весов W (weight) и смещений B (bias) между каждым слоем
  • функции активации f для каждого из скрытых слоев

У каждого из нейронов есть 2 основных параметра: входные данные (input data) и выходные данные (output data). В случае входного нейрона эти параметры равны, а в остальных случаях, в поле input попадает суммарная информация всех нейронов с предыдущего слоя, после чего, она нормализуется относительно функции активации и результат подает output.

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

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

Для наилучшего понимания давайте разберем это на примере. Скажем у нас есть искусственный нейрон с двумя входными данными I1 = 2, I2 = 1. В нейроне происходят три вещи.

  1. Каждый вход умножается на вес и в нашем случае пусть веса будут следующими W1 = 4, W2 = 3:
  • Полученные результаты складываем со смещением B (Скажем B = –9):
  • Данную сумму мы передаем через функцию активации:

Но что же такое функция активации? Функция активации используется для подключения несвязанных входных данных с выводом, у которого простая и предсказуемая форма. То есть, если на входе у вас будет большое число, пропустив его через функцию активации, мы получим выход в нужном нам диапазоне. Функций активации достаточно много, но, как правило, чаще всего в качестве функцией активации берется функция сигмоида, т.к. она позволяет удобно работать со значениями от 0 до 1:

Теперь, когда у нас есть входные данные, мы можем получить выходные данные, подставив входное значение в функцию активации. И в итоге мы получаем что f(2) = 0,87 и так, мы повторяем для всех слоев, пока не дойдем до выходного нейрона. А весь этот процесс получения из входных данных результат называется прямым распространением.

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

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

Практика

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

В качестве параметров мы рассмотрим:

  • размер компании (маленькая (0), средняя (0.5), крупная (1));
  • уже существующую кредитную историю (1 – отличная, 0 – нет кредитной истории, -1 – еще те плохиши);
  • рейтинг 1-10 (чем меньше, тем лучше);
  • срок ведения деятельности (больше или меньше года).

Ну, соответственно дадим для нашего нейрона тренировочные данные и ручками сами определим получат ли компании спецпредложение или нет.

Кредитная история Размер компании Срок ведения деятельности Рейтинг Спецпредложение
-1 0 1 1 Нет
-1 0.5 0 2 Нет
-1 1 1 5 Нет
0 0 0 7 Нет
0 0 1 8 Нет
0 0.5 1 10 Да
0 0.5 0 4 Нет
0 0.5 1 3 Да
0 1 1 8 Нет
0 1 1 1 Да
0 1 1 4 Да
1 0 0 3 Нет
1 0.5 0 8 Нет
1 0.5 1 1 Да
1 1 0 4 Да
1 1 1 3 Да

Реализуем на python’e:

Вы спросите, что такое np? Да-да, держите:

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

Почему нужно выбирать случайные первоначальные веса? Как я понял, что основной смысл состоит в нахождении идеальных весов, довольно близких к оптимальным. Однако, я еще не нашел (или плохо искал) универсального метода подбора весов, и потому будем считать, что случайность иногда может попасть в тот самый идеальный результат, который мы ищем.

Определим функцию активации (сигмоиду) и ее производную:

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

Ах, да. Забыл еще рассказать, что такое эпоха. Эпоха это один переход туда (прямое распространение) и обратно (обратное распространение). Вот собственно то, как происходит прямое и обратное распространение, да и сама тренировка:

Вот такие изменения весов после тренировки мы получили (не забывайте, что первоначальные веса случайны):

Теперь проверим то, что мы получили на новых данных, которые не использовались во время тренировки.

Скажу заранее, что мы получим какие-то значения от 0 до 1 (спасибо сигмоиде). Попробуем условно сказать, что они означают:

Собственно, вот что мы получили:

Хочу также показать Вам график зависимости ошибки от эпохи (для этого мы ошибки и логировали):

Из графика видно, что чем больше будет количество эпох, тем меньше будет ошибка. А вот что будет с результатом и графиком, если во время тренировки будет всего 100 эпох:

А что если тренировочные данные будут недобросовестными, скомпрометированными или вообще они сделаны наугад без какой-либо логики? А вот что:

И график будет выглядеть так:

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

Заключение

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

P.S.: Если Вы заинтересованы в теме нейросетей или у Вас есть замечания/пожелания/советы, то оставляйте обратную связь в комментариях.

Как работать с bias в нейросети

Как правильно работать с нейросетью с использованием bias если я делаю ее самостоятельно(разбираю чужой код,но без bias). Я делал так:для каждого слоя выделяю лишнюю связь с весом(это вес для bias). При прямом передачи сигнала по сети на данном слое при взвешивании сигналов учитываю сигнал bias,например 1.0 и его вес про который я говорил выше. Но когда я вычисляю вектор ошибок для данного слоя и чтобы его же передать пред-слою,я получаю вектор не учитывающий вес к bias.Как автор говорит «Нейрону смещения не нужна ошибка».В результате например для матрицы данного слоя (3,5) (с учетом bias) получаю вектор ошибок (4,1).Т.е. вес bias нельзя исправить,хотя его нужно исправлять. Похоже такой код не работает. Как нужно правильно работать с bias?

Отслеживать

9,509 9 9 золотых знаков 50 50 серебряных знаков 106 106 бронзовых знаков

задан 25 июн 2019 в 7:33

Константин Константин

895 4 4 серебряных знака 16 16 бронзовых знаков

Переобучение

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

Недообучение (англ. underfitting) — негативное явление, при котором алгоритм обучения не обеспечивает достаточно малой величины средней ошибки на обучающей выборке. Недообучение возникает при использовании недостаточно сложных моделей.

Примеры

На примере линейной регрессии

Представьте задачу линейной регрессии. Красные точки представляют исходные данные. Синие линии являются графиками полиномов различной степени M, аппроксимирующих исходные данные.

Рис 1. Недообучение. M=1

Рис 2. Норма. M=2

Рис 3. Переобучение. M=4

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

На Рис. 2 представлена ситуация, когда выбранная полиномиальная функция подходит для описания исходных данных.

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

На примере логистической регрессии

Представьте задачу классификации размеченных точек. Красные точки представляют данные класса 1. Голубые круглые точки — класса 2. Синие линии являются представлением различных моделей, которыми производится классификация данных.

Рис 4. Недообучение

Рис 5. Подходящая модель

Рис 6. Переобучение

Рис. 4 показывает результат использования слишком простой модели для представленного датасета

Кривые обучения

Кривая обучения — графическое представление того, как изменение меры обученности (по вертикальной оси) зависит от определенной единицы измерения опыта (по горизонтальной оси) [1] . Например, в примерах ниже представлена зависимость средней ошибки от объема датасета.

Кривые обучения при переобучении

При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке.

Рис 7. Кривые обучения при переобучении

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

Кривые обучения при недообучении

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

Рис 8. Кривые обучения при недообучении

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

High variance и high bias

Bias — ошибка неверных предположений в алгоритме обучения. Высокий bias может привести к недообучению.

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

Рис 9. High variance и high bias

При использовании нейронных сетей variance увеличивается, а bias уменьшается с увеличением количества скрытых слоев.

Для устранения high variance и high bias можно использовать смеси и ансамбли. Например, можно составить ансамбль (boosting) из нескольких моделей с высоким bias и получить модель с небольшим bias. В другом случае при bagging соединяются несколько моделей с низким bias, а результирующая модель позволяет уменьшить variance.

Дилемма bias–variance

Дилемма bias–variance — конфликт в попытке одновременно минимизировать bias и variance, тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Данная дилемма проиллюстрирована на Рис 10.

Рис 10. Дилемма bias–variance

При небольшой сложности модели мы наблюдаем high bias. При усложнении модели bias уменьшается, но variance увеличится, что приводит к проблеме high variance.

Возможные решения

Возможные решения при переобучении

  • Увеличение количества данных в наборе;
  • Уменьшение количества параметров модели;
  • Добавление регуляризации / увеличение коэффициента регуляризации.

Возможные решения при недообучении

  • Добавление новых параметров модели;
  • Использование для описания модели функций с более высокой степенью;
  • Уменьшение коэффициента регуляризации.

См. также

  • Модель алгоритма и ее выбор
  • Оценка качества в задачах классификации и регрессии [на 28.01.19 не создан]
  • Оценка качества в задаче кластеризации

Примечания

Источники информации

  • The Problem of Overfitting on Coursera, Andrew Ng
  • Overfitting: when accuracy measure goes wrong
  • The Problem of Overfitting Data
  • Overfitting in Machine Learning
  • Overfitting — статься на Википедии
  • Переобучение — вводная статься на MachineLearning.ru
  • The Problem of Overfitting — курс Andrew Ng
  • Hastie, T., Tibshirani, R., Friedman, J.The Elements of Statistical Learning, 2nd edition. — Springer, 2009. — 533 p.
  • Vapnik V.N.Statistical learning theory. — N.Y.: John Wiley & Sons, Inc., 1998.
  • Воронцов, К. В.Комбинаторная теория надёжности обучения по прецедентам: Дис. док. физ.-мат. наук: 05-13-17. — Вычислительный центр РАН, 2010. — 271 с.

Inductive bias и нейронные сети

В этой статье я расскажу, что такое inductive bias, зачем он нужен и где встречается в машинном обучении. Спойлер: везде. Любая нейросеть имеет inductive bias (даже та, что в человеческом мозге, хе-хе)

Также вы узнаете:

  • почему inductive bias — это очень хорошо
  • способы внедрить inductive bias в модели машинного обучения
  • какой inductive bias в сверточных нейросетях и как успех архитектуры Image Transformer связан с inductive bias

Картинка для привлечения внимания

Что такое inductive bias

Я намеренно не буду переводить термин «inductive bias» на русский язык: общепринятого перевода нет, а все разумные варианты перевода, на мой взгляд, не передают суть термина. К тому же, в профессиональной среде все используют англицизм.

У термина inductive bias в литературе есть много определений. Все они — неформальные. Формального определения вообще не существует, а наиболее строгое из возможных опирается на формальную математическую логику. Мы здесь ограничимся следующим определением:

Inductive bias — это априорные знания о природе данных, которые человек некоторым образом вкладывает в модель машинного обучения.

Чтобы лучше понять суть inductive bias, рассмотрим примеры:

  • Модельлинейной регрессии. Линейная регрессия строится в предположении, что между целевой переменной и зависимыми переменными (признаками) существует линейная зависимость. В модель как бы «вложены» знания о том, что данные имеют линейную природу. Из-за этого ограничения линейности модели линейная регрессия плохо обучается под любые данные, в которых целевая переменная от признаков зависит не линейно (см. рис ниже). Это предположение о линейной связи между признаками о ответом — и есть ее inductive bias (точнее, один из ее inductive bias’ов, как мы увидим далее)

Ось Х — значение признака, ось Y — значение целевой переменной. Видно, что зависимость Y от Х нелинейна. Из-за этого модель линейной регрессии, которая пытается построить линейную зависимость между X и Y, будет очень плохо описывать эти данные.

  • МодельK ближайших соседей(k-nearest neighbours). Эта модель работает в предположении «компактности», то есть «значение целевой переменной для неизвестного объекта однозначно определяется значениями целевой переменной для k ближайших (в некотором смысле) к нему объектов». Это допущение — inductive bias алгоритма k ближайших соседей. В модель KNN вложены знания о том, что ответ для любого объекта должен быть вычислен только на основе того, какие значения ответов были у ближайших к этому объекту элементов обучающей выборки.

Иллюстрация классификации объекта (зеленая точка) алгоритмом KNN. Синие точки — объекты одного класса, оранжевые — объекты другого класса. При k=3 зеленая точка будет отнесена к

  • Нелинейная регрессия: пусть у меня есть данные, полученные из некоторого физического эксперимента. Пусть в данных две переменные — и . Я хочу построить модель машинного обучения, которая могла бы по переменной предсказывать значение . Пусть я знаю из теоретической физики, что уравнение зависимости y от x должно выглядеть определенным образом: в виде функции . Тогда мне остается обучить модель машинного обучения находить подходящие значения коэффициентов и на основании моих данных с датчика. Я могу сделать это, например, с помощью градиентного спуска (см. рис). Это знание о том, что модель машинного обучения, описывающая наши данные, должна иметь вид определенной функции и есть inductive bias.

Иллюстрация нахождения оптимальных коэффициентов функции y = w1*exp(w2*x) + w3 для описания данных (голубые точки).

Итак, подведем итог: inductive bias — это некоторые априорные допущения о природе данных, которые человек «передает» модели машинного обучения, накладывая ограничения на то, в каком виде модель будет искать зависимость значения целевой переменной от входящих данных.

Здесь мы рассмотрели довольно тривиальные примеры inductive bias — те, которые достигаются наложением ограничений на сам вид модели. Вообще «передать» модели априорные знания (наделить модель inductive bias) можно разными способами: не только с помощью определенного устройства архитектуры модели. Об этом мы поговорим ниже. А пока что давайте заметим, что.

Без inductive bias не обойтись

Из примеров о линейной регрессии и KNN может показаться, что inductive bias — плохая штука. Ведь это ограничивает модели! Inductive bias линейной регрессии не позволяет ей хорошо обучаться под данные, которые не имеют линейной зависимости между целевой переменной и признаками. Inductive bias алгоритма KNN не позволяет ему хорошо работать на данных, в которых целевая переменная объекта не однозначно определяется значениями целевых переменных «близких» элементов. Одни недостатки! Можно ли сделать модель совсем без ограничений?

Но без inductive bias модель машинного обучения существовать не может. Вот почему:

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

https://bit.ly/31bvCvP

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

Inductive bias — это дополнительная информация о природе данных для модели; способ показать модели, «в какую сторону думать», в каком виде искать решение, по какому принципу строить алгоритм генерализации. Он позволяет модели приоритизировать один способ генерализации над другим. Он загоняет модель в рамки при выборе метода генерализации, внутри которых практически все варианты генерализации будут достаточно адекватные. Модель становится как бы «сдвинута» (biased) в сторону решения определенного вида.

Иллюстрация того, как inductive bias показывает модели,

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

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

Итак, мы поняли, что inductive bias — хорошая и полезная штука. Давайте поговорим о том, какими способами можно внедрить inductive bias в модель. Мы увидим, что манипулирование устройством архитектуры модели — лишь один из многих способов внедрения inductive bias.

Способы внедрить inductive bias в модель.

Выше мы рассматривали примеры inductive bias моделей линейной регрессии и KNN. У обеих этих моделей inductive bias «встроен» в саму архитектуру модели — в сам механизм того, как эти модели получают значение целевой переменной на основе входных данных. Давайте убедимся, что внедрить в модель априорные знания о данных можно и другими способами. Для этого рассмотрим нейронные сети и inductive bias в них.

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

Архитектура нейросети описывает вид функций, которые может выражать нейросеть. Да, нейронная сеть по своей сути — это просто функция, описывающая зависимость выхода от входа, как и линейная регрессия или функция y = w1*exp(w2*x) + w3 из третьего примера. Только нейросеть — сильно более сложная функция, с большим числом обучаемых параметров и нелинейностей. Отсюда понятно, что архитектура нейросети — это уже ее inductive bias.

Более того, каждый вид слоев сетей — сверточный, полносвязный, рекуррентный — имеют свой inductive bias, обусловленный строением этих слоев. Причем их inductive bias помогают им обрабатывать данные того вида, для которых они предназначены: сверточному слою — изображения, рекуррентному — данные, представленные в виде последовательностей. Об inductive bias сверточного слоя мы поговорим ниже.

Далее, алгоритм обучения нейросети тоже накладывает на модель ограничения. Мы обучаем нейросеть с помощью алгоритма обратного распространения ошибки (backpropagation), а не с помощью какого-либо другого метода. И это тоже внедряет в модель некоторые знания о том, как должен быть устроен предпочтительный способ генерализации. А именно: алгоритм backpropagation минимизирует среднюю ошибку модели на обучающей выборке с точки зрения некоторой метрики качества. То есть заставляет модель из всех возможных способов генерализации выбирать такой, который будет показывать лучшее значение некоторой метрики в среднем на обучающей выборке.

Тут становится понятно, что выбор learning rate, алгоритма оптимизации (Adam, RMSProp, . ) — все это тоже вносит вклад в inductive bias: заставляет модель искать способ генерализации определенным способом.

Далее: данные. Через обучающие данные тоже можно внести вклад в inductive bias. (то есть, через данные передать модели знания о данных, хе-хе)

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

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

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

Таким образом мы внедрили inductive bias в нейросеть с помощью аугментации датасета. Теперь обучающие данные и алгоритм обучения нейросети (backpropagation) устроены так, что модель в процессе обучения «понимает», что данные (картинки фруктов) бывают не только расположенными строго вертикально, но и повернутыми на произвольное число градусов. И учится одинаково хорошо классифицировать фрукты, повернутые по-разному.

Обратите внимание, что нужный inductive bias — понимание, что картинки фруктов бывают не только вертикальные — появляется у модели не только благодаря наличию повернутых на разное число градусов картинок фруктов в обучающем датасете, но и благодаря определенному устройству процесса обучения нейросети. Backpropagation заставляет нейросеть учиться одинаково хорошо классифицировать все картинки из обучающего датасета, и поэтому нейросеть учится классифицировать и повернутые фрукты в том числе.

Это важное замечание для понимания сути inductive bias, потому как чаще всего когда говорят о внедрении inductive bias в нейросети, упоминают только манипуляции с архитектурой нейросети и/или обучающими данными. Так происходит, потому что все нейросети по умолчанию обучаются с помощью backpropagation и о роли этого алгоритма во внедрении inductive bias в нейросеть можно умолчать. Однако без определенного устройства алгоритма обучения манипуляции с обучающими данными могли бы не иметь желаемого эффекта.

Проиллюстрируем это на примере: представьте, что мы поменяли алгоритм обучения нейросети. Пусть мы вместо backpropagation используем следующий алгоритм обучения сети:

  1. 100 раз выбери случайные значения параметров нейросети;
  2. для каждого значения параметров посчитай значение метрики качества на тестовом датасете;
  3. «обученная» нейросеть — это нейросеть с параметрами, для которых получено лучшее значение метрики на тестовом датасете

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

Более того: устройство архитектуры тоже играет роль в том, будут ли махинации с датасетом иметь нужный эффект. Например, какой бы inductive bias вы ни вложили в данные и обучающий алгоритм, вы никогда не научите линейную регрессию хорошо решать задачу распознавания лиц.

Таким образом, внедрение любого inductive bias в модель машинного обучения опирается на определенные характеристики архитектуры модели, обучающего алгоритма и обучающих данных. Все это совместно влияет на то, как алгоритм выбирает способ генерализации и какой inductive bias получает.

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

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

Итак, мы поняли, что внедрить inductive bias в модель можно произвольным способом — манипуляциями с архитектурой модели, данными, способом ее обучения. Главное — придумать, каким из возможных способов передать модели нужную вам информацию о данных, чтобы она получила желаемый inductive bias.

Inductive bias и размер обучающей выборки

Выше мы обсудили, что обучающие данные также являются способом внедрения в модель inductive bias . Заметим теперь, что чем больше и разнообразнее обучающая выборка, тем больше знаний о природе данных модель получает во время обучения. А значит, тем меньше вероятность модели выбрать «плохой» способ генерализации, который будет плохо работать на данных вне обучающей выборки.

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

Вы, наверное, знаете, что если обучающая выборка мала, нейронные сети часто переобучаются. Например, при решении задачи классификации изображений кошек и собак иногда обращают внимание на фон, а не на самих животных. Переобучение модели — не что иное, как выбор неудачного способа генерализации из-за отсутствия достаточно информации в обучающих данных. Чтобы помочь модели не переобучиться, отсутствующие в датасете «знания» о природе данных нужно передать ей другим способом — например, через внедрение более сильного inductive bias в архитектуру модели путем создания больших ограничений на устройство модели.

Отсюда вывод: чем меньше обучающая выборка и сложнее задача, тем более сильный inductive bias требуется вложить в устройство модели для успешного обучения модели. Иными словами, тем большие ограничения нужно наложить на модель, чтобы она не «ушла сильно в сторону».

Кстати, если вы спросите, почему люди, в отличие от нейросетей, могут быстро обучиться на задачу классификации кошек и собак, имея всего десяток картинок в обучающей выборке — это потому, что у людей есть inductive bias: мы знаем, что на картинке есть фон, а есть объект, и при классификации картинок нужно обращать внимание только на сам объект. А нейросеть до обучения ни о каких «фонах» и «объектах» не знает — ей просто дают разные картинки и просят научиться их отличать.

Давайте увидим работу принципа «чем меньше данных — тем больший нужен inductive bias в архитектуре» на примере. Для этого рассмотрим две архитектуры нейросетей для работы с изображениями: сверточные нейросети и Visual Transformer. Поймем, как их успех связан с inductive bias и в чем заключается различие их принципа обработки картинок.

Inductive bias сверточного слоя

Inductive bias сверточного слоя — предположение компактности и нечувствительности к переносу (translation invariance). Фильтр свертки устроен так, что за один раз захватывает компактную часть всего изображения (например, квадрат 3х3 пикселя, как показано на гифке), не обращая внимания на дальние пиксели изображения. Также в сверточном слое один и тот же фильтр используется для обработки всего изображения (как на гифке — один и тот же фильтр обрабатывает все квадраты 3х3 изображения).

Эти inductive bias помогают сверточным нейросетям (CNN) обрабатывать изображения так, как их «обрабатывает» человек: предположение компактности отвечает человеческому представлению о том, что каждый объект на изображении расположен компактно, т.е. в определенной области изображения, а не разреженно по всей площади картинки; а нечувствительность к переносу заставляет нейросеть одинаково обрабатывать один и тот же объект на изображении вне зависимости от того, в какой части картинки он находится (см. рис. ниже):

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

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

Какие inductive bias у других слоев: рекуррентного, полносвязного и т.д., предлагаю подумать самостоятельно =) А мы упомянем о таком явлении, как «скрытый inductive bias» (implicit inductive bias):

Скрытые inductive bias

Часто бывает так, что устройства нейросетей или обучающих данных порождают не только нужные inductive bias, но и «скрытые» — такие, которые человек не хотел сознательно вкладывать в модель и которые сложно выявить при первом взгляде на устройство модели. Исследователи проводят много экспериментов с нейросетями, пытаясь выявить наличие и суть таких скрытых эффектов.

Пример со свертками: сверточные нейросети строились так, чтобы наделить их двумя inductive bias, которые описаны выше: предположением компактности и нечувствительности к переносу. Эти bias — те, которые хотел вложить в сверточные сети человек, и они явно порождены самой структурой операции свертки. Но оказалось, что кроме этих двух inductive bias архитектура сверток порождает и другие, которые не так просто выявить, просто взглянув на то, как работает свертка.

Например, не так давно одно исследование показало, что у сверток есть inductive bias, касающийся текстуры изображений: оказывается, сверточные сети устроены так, что при обработке картинок обращают больше внимания на текстуры, а не на формы объектов. Это пример вредного inductive bias: мы бы хотели, чтобы было наоборот: чтобы нейросеть делала выводы не на основе текстур, а на основе форм предметов. Из-за этого «перекоса» в сторону текстур сверточные сети плохо распознают картинки, на которых текстуры объекта сильно отличаются от текстур тех картинок, что были в обучающей выборке.

Чтобы избавиться от такого нежелательного поведения сверток, нужно внедрить в нейросеть еще один inductive bias, который заставит модель обращать больше внимания на формы объектов, а не на их текстуры. Такой inductive bias внедряется через изменение обучающих данных, а не архитектуры модели. Изображения из тренировочного датасета аугментируются так, чтобы датасет содержал больше изображений одинаковой формы (например, картинок слонов), но с разными видами текстур (см. рис. ниже)

https://arxiv.org/pdf/1811.12231.pdf Пример аугментации изображений тренировочной выборки, чтобы уменьшить влияние текстуры изображений на работу CNN.Слева — исходное изображение; справа — аугментированные версии левого изображения с разными текстурами, но одной формой.

Это еще один пример того, как разные inductive bias могут внедряться в модель посредством разных техник — не только с помощью изменения архитектуры модели, но и манипуляцией тренировочными данными. А также пример того, что наличие любых inductive bias зависит не от отдельного компонента — архитектуры модели, устройства данных или алгоритма обучения — а от всех сразу.

Понимание, какие скрытые inductive bias есть у модели, помогает лучше понять, как именно модель обрабатывает данные и сделать модель более эффективной, если выявленные скрытые inductive bias окажутся вредными.

В английском языке «скрытые» inductive bias называются implicit. А те, которые человек осознанно вложил в модель — explicit.

Итак, мы выяснили, как inductive bias сверточных слоев помогает CNN эффективно обрабатывать изображения. Рассмотрим другую архитектуру нейросетей для работы с картинками — Visual Transformer — и поймем, как ее недавний успех связан с inductive bias.

Visual Transformer и inductive bias

Возможно, вы слышали об архитектуре Visual Transformer. Это НЕсверточная архитектура нейросетей для обработки изображений, которая показывает лучшие результаты, чем сверточные сети, на некоторых задачах: например, на задаче классификации картинок из датасета JFT-300M. В этом наборе данных 300 миллионов изображений.

Модель Visual Transformer основана на той же идее, что и архитектура Transformer из области обработки естественного языка (NLP): на механизме Attention. По сути, Visual Transformer — это адаптация модели Transformer для языка на область картинок. Модель была предложена сравнительно недавно — в 2020 году — но уже завоевала популярность, получила широкое применение в задачах и считается «убийцей сверток». Подробно об архитектуре читайте в оригинальной статье.

Мы же поговорим о том, почему Visual Transformer работает лучше, чем свертки, правда ли, что свертки больше не нужны и при чем тут inductive bias:

Так как у Visual Transformer нет сверток, у этой архитектуры нет и inductive bias, которые есть у сверточных нейросетей. При этом, конечно, некоторые inductive bias у Transformer все же есть — как мы убедились выше, совсем без них нейросеть сделать нельзя.

Visual Transformer почти полностью основан на механизме attention (внимания), поэтому модель имеет те inductive bias, которые есть у attention. Один из них — сдвиг в сторону простых функций. Как и у сверток и всех нейросетей в целом, у трансформеров есть скрытые inductive bias, и все они пока неизвестны: ведутся исследования для их выявления. Вот, например, ссылка на одно такое. В общем, предстоит еще много исследований трансформеров, но что можно сказать точно — inductive bias трансформера намного проще, чем у сверточных нейросетей, они накладывают меньше ограничений на модель.

Меньшие ограничения на модель дают Visual Transformer больше возможностей для выбора лучшего способа генерализации при обучении. И на очень больших датасетах типа JFT-300M трансформеры действительно показывают лучшие результаты при обучении, чем свертки. В JFT-300M достаточно изображений, чтобы нейросеть с очень легким inductive bias хорошо обучилась решать задачу, и не выбрала «неправильный» способ генерализации.

Но вот на датасетах размером поменьше (как ImageNet) Visual Transformer проигрывает классическим сверткам. На графике ниже представлены результаты нескольких моделей, обученных на разных датасетах: ImageNet (~1.2 млн изображений), ImageNet-21k (~15 млн изображений) и JFT-300M (~300 млн изображений).

BiT — сверточная архитектура на основе ResNet, ViT — архитектура Visual Transformer. На графике видно, что трансформеры начинают показывать результаты лучше сверток только на больших датасетах:

https://arxiv.org/pdf/2010.11929.pdf

Результаты моделей BiT (ResNet-based) и ViT (Visual Transformer) на датасетах разных размеров. Внутри серой области заключены результаты различных моделей BiT. Видно, что ViT начинает выигрывать у BiT только при достаточно большом размере датасета

Другими словами, если у вас есть огромный датасет для обучения сети, Transformer — ваш выбор, однако для обучения на небольших датасетах лучше выбрать свертки.

Преимущество Visual Transformer над свертками на больших датасетах имеется ровно потому, что у архитектуры Visual Transformer нет inductive bias, какие есть у сверточного слоя. Здесь мы наблюдаем подтверждение того, что чем меньше обучающий датасет, тем более сильный inductive bias нужен для успешного обучения модели. Но верно и обратное: чем больший датасет есть у нас в распоряжении, тем меньший inductive bias требуется и тем лучше модель может обучиться под задачу (потому что у нее меньше ограничивающих bias’ов, а величина датасета позволяет получить всю нужную информацию для хорошей генерализации из него)

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

Свертки + Transformer

Выше мы разобрали два подхода к обработке картинок нейросетями: с помощью сверточных слоев и архитектуру Transformer. Оба подхода имеют преимущества и недостатки: у сверток сильный inductive bias, но они хорошо показывают себя на небольших датасетах, а трансформеры могут показывать лучшие результаты в обработке изображений, но им для этого требуется очень много данных.

Ребята из Facebook (ой, Меты, извините) решили использовать преимущества обоих подходов: совместить архитектуры Transformer и CNN. Гибридная модель ConViT сможет обрабатывать картинки почти так же хорошо, как и Transformer, при этом требуя меньше данных для обучения. Вот статья с описанием предлагаемой модели и рассуждениями, почему это должно сработать (там есть слова inductive bias!)

Надеюсь, такое погружение в устройство сверток и трансформеров помогло глубже осознать понятие inductive bias =)

Заключение

Итак, сделать модель без inductive bias в принципе невозможно, так как уже само устройство модели вносит ограничения в ее возможности и порождает inductive bias. Да и делать такую модель не нужно: как мы увидели из статьи, inductive bias часто помогает в решении задач. Вопрос лишь в том, насколько сильный нужен inductive bias для решения конкретной задачи, насколько он поможет решить нужную задачу и как создать архитектуру модели, которая породит нужный inductive bias (ну и вместе с этим не породит много вредных скрытых bias).

Главная задача при создании архитектуры модели машинного обучения — наделить модель таким inductive bias, чтобы он помогал модели обучиться решать поставленную задачу (как в случае сверток), а не мешал. Собственно, в изобретении таких inductive bias и заключается задача поиска новых эффективных архитектур нейросетей.

Надеюсь, эта статья помогла вам в понимании того, что такое Inductive bias и почему он полезен, а не вреден =) Вот еще несколько полезных ссылок по теме:

Литература:

Attention is all you need (статья, презентующая архитектуру Transformer для NLP)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *