bias osc что это

Что должен знать Data Scientist про когнитивные искажения ИИ

Проблема когнитивных искажений ИИ возникает на уровне определения, но дело не только в термине. «искажение» — это перегруженный термин, смысл которого может изменяться в зависимости от контекста.

Так, вашему вниманию могут быть представлены следующие примеры определения отклонений:

О чем идет речь в области машинного обучения и ИИ?

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

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

Весь смысл ИИ в том, чтобы дать вам возможность объяснить свои пожелания компьютеру на примерах (данных!), а не в инструкциях. Каких примерах? Это ваш выбор в качестве учителя. Датасеты — это учебники, по которым ваш ученик может учиться. И знаете что? У учебников есть авторы-люди, как и у наборов данных.

Учебники отражают предвзятость их авторов. Как и у учебников, у наборов данных есть авторы. Они собираются в соответствии с инструкциями, сделанными людьми.

Представьте себе попытку обучить человека по учебнику, написанному предвзятым автором — вас удивит, если ученик в конце концов выразит некоторые из тех же предвзятых представлений? Чья это вина?

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

Искажения исходят не от алгоритмов ИИ, они исходят от людей.

Алгоритмы никогда не думают самостоятельно. На самом деле, они совсем не думают (они – инструменты), поэтому мы, люди, должны думать за них. Если вы хотите узнать, что можно сделать с отклонениями в ИИ и углубиться в эту кроличью нору – вот вход.

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:

Источник

MIDI и OSC — основные протоколы взаимодействия музыкальных приложений

Часть 1. MIDI

1 Предпосылки

Необходимость в таком стандарте возникла примерно к концу 70-х годов. В то время синтезаторы управлялись напряжением с помощью интерфейса CV/Gate. Существовало несколько его видов, однако, наибольшую популярность получил вариант, предложенный фирмой Roland: в нем при увеличении напряжения на 1 В, частота генерируемого тона увеличивалась на одну октаву. Главным недостатком такого интерфейса является то, что с помощью него можно управлять только одним голосом полифонии. Для извлечения дополнительной ноты нужно добавлять еще один интерфейс CV/Gate. Кроме того, таким способом передается только сам факт нажатия клавиши и ее высота, чего однозначно мало для выразительной игры.

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

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

2 История появления

К началу 80-х большинство производителей осознали необходимость создания единого интерфейса. Задача стояла такая: разработать стандарт передачи действий исполнителя в цифровой форме между всеми типами электромузыкальных инструментов. [1]

3 Основы

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

Сам протокол состоит из трех частей [1]: спецификация формата данных, аппаратная спецификация интерфейса и спецификация хранения данных. В данной статье будет идти речь только о первой части.

MIDI сообщения делятся на два типа: сообщения канала (channel messages) и системные сообщения (system messages). Первые управляют звукообразованием, а вторые выполняют служебные функции, например, синхронизация.

Сообщение обычно состоит из двух или трех байт. Первый байт называется статус байтом. В нем задается тип сообщения и номер канала, к которому оно относится. Все последующие байты называются байтами данных. Статус-байт всегда начинается с единицы, а байт-данных с нуля — таким образом система их различает. Получается, что для MIDI информации остается только 7 бит, с помощью которых можно закодировать целые числа от 0 до 127, — вот откуда берется это «знаменитое» ограничение на количество нот и значения контроллеров.

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

Табл. 1. Сообщения канала.

Сообщение Статус-байт Байт данных 1 Байт данных 2
Note Off 1000nnnn Номер ноты Velocity
Note On 1001nnnn Номер ноты Velocity
Polyphonic Key Pressue 1010nnnn Номер ноты Давление
Control Change 1011nnnn Номер контроллера Значение
Program Change 1100nnnn Номер программы
Channel Pressure 1101nnnn Давление
Pitch Wheel Change Change 1110nnnn Номер программы
Системные сообщения 1111nnnn . .

Табл. 2. Системные сообщения

Сообщение Статус-байт Байт данных 1 Байт данных 2
System Exclusive (SysEx)
System Exclusive 11110000 ID .
System Common
MTC Quater Frame 11110001 Тайм-код
Song Position Pointer 11110010 LSB MSB
Song Select 11110011 Номер песни
Tune Request 11110110
End Of Exclusive (EOX) 11110111
Real Time
Timing Clock 11111000 (248)
Start 11111010 (250)
Continue 11111011 (251)
Stop 11111100 (248)
Active Sensing 11111110
System Reset 11111111

4 Недостатки

MIDI разрабатывался, как доступный и практичный стандарт для передачи жестов исполнителя между любыми MIDI-устройствами [2]. Не в последнюю очредь благодаря своей легковесности он и получил такое распространение. Что ни говори, со своим предназначением он справляется прекрасно, и это подтверждается временем.
Итак, наверное, самый известный недостаток — ограничение значений контроллеров на 128 значений. Конечно, есть возможность передавать их с помощью двух байтов данных (что дает 16 384 возможных значений), но для этого надо передать три сообщения Control Change, что очень сильно загрузит протокол, так как данные по нему передаются со скоростью 31 250 бит/с. Это очень мало. Для сравнения, 12-нотный аккорд передастся примерно за 10 мс. И это без других сообщений, например Clock и CC. В реальном перфомансе, когда одновременно передается много различных параметров, могут возникнуть проблемы с синхронизацией.

Часть 2. Open Sound Contol

«Open Sound Control — это новый, оптимизированный для современных сетевых технологий протокол для взаимодействия компьютеров, звуковых синтезаторов и других мультимедиа устройств» — так был представлен OSC на международной конференции по компьютерной музыке в 1997 году [3]. OSC не является протоколом в том виде, каким является MIDI, так как он не описывает требований к аппаратному обеспечиванию — спецификации описывают лишь формат передачи данных. В этом плане OSC больше схож с XML или JSON, нежели с MIDI [8].

Пока оставим технические подробности и начнем с самого начала, с истории.

1 История, области применения

Open Sound Control был создан в 1997 году Мэттью Райтом (Matthew Wright) и Эдрианом Фридом (Adrian Freed) в Университете Калифорнии в центре новой музыки и аудио технологий (CNMAT — Center of New Music and Audio Technologies). Разработчики хотели использовать высокоскоростные сетевые технологии в интерактивной компьютерной музыке [4]. OSC не важно, по какому протоколу передаваться, так как он представляет собой всего лишь формат данных (binary message format), хотя большинство реализаций используют TCP/IP или UDP. Другой причиной создания было то, что MIDI с его нотами, каналами и контроллерами логично не подходил к разрабатывающемуся в то время синтезатору CAST (CNMAT Additive Synthesis Tools), оно и понятно, ведь MIDI — это клавишно-ориентированный протокол, который разрабатывался для управления одним синтезатором с другого [1].

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

2 Особенности
3 Анатомия сообщений


Стоит отметить, что при использовании UDP, если сообщения передавались в разных пакетах, они не обязательно будут приходить в том порядке, в каком были переданы [6]. Допустим, были переданы сообщения:

/synth1/noteoff 54
/synth1/noteon 60

Фактически они могут прийти в обратном порядке:

/synth1/noteoff 60
/synth1/noteon 54

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

Чтобы этого избежать, нужно передавать сообщения в одном пакете (bundle), либо использовать TCP/IP, он отличается от UDP тем, что гарантирует корректную доставку пакетов, передавая каждый из них до тех пор, пока он не передастся в изначальном виде. Нужно иметь ввиду, что ценой такому удобству будут большие в сравнении с UDP задержки, поэтому использование TCP/IP должно быть обосновано.

Читайте также:  что делать в нфс андеграунд 2 когда прошел 2 этапа
4 Pattern matching

дефис между двумя символами означает диапазон чисел в ASCII последовательности (дефис в конце строки не имеет специального значения);

Источник

Синхронизация. Новый уровень шоу. V2. NETWORK. Как работает OSC (Open Sound Control)

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

Для передачи данных OSC использует транспортный протокол UDP и TCP. Поэтому при передаче и приеме сообщений мы должны указывать порт данных и IP-адрес клиента и сервера.
OSC очень похожи на MSC-сообщения. Отличие в том, что сами сообщения и адрес клиента не регламентируются протоколом, как в MSC. В OSC регламентируется лишь правило описания адреса и сообщения. Любой производитель и программист может придумать свои наборы сообщений и передать их через OSC.

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

Хорошо, OSC-сообщение мы доставили в нужный порт, и программа клиента прочитала это сообщение. Но как же программе понять, к чему применить это сообщение? Для этого OSC-сообщение содержит адрес назначения внутри программы клиента. Это очень похоже на параметр назначения MSC-сообщения, как CueList или Cue. Только, как я уже сказал выше, OSC не имеет жесткой привязки к синтаксису адреса, как в MSC, но тем не менее мы должны соблюдать правила описания адреса, которое использует OSC, а именно URL (Uniform Resource Locator).
Эту схему описания адреса пути вы применяете каждый раз, когда пользуетесь интернет-браузером, чтобы попасть в конкретное место на сайте.

Эти пути назначения сообщения могут быть разными – в зависимости от функционала, который заложил конкретный производитель. Если вы хотите отправить OSC-сообщение на световую консоль ETC Eos, то его путь должен начинаться с “/eos”, далее нужно указать группу контролируемых параметров пульта (например, “/fader”), далее нужно указать номер фейдера “/1” – и в итоге мы получим полный путь к конкретному фейдеру, который будет выглядеть так: “/eos/fader/1/”. Так же мы можем указать путь к группам, к спискам сцен и другому содержимому пульта.

String
Передает строку, закодированную в формате ASCII. С помощью этого типа вы можете передать имя объекта или целое сообщение. Очень часто это используется в системах дистанционного управления по OSC. К примеру, пульт может передать по OSC информацию об имени кьюлиста, который назначен на конкретный фейдер.

Blob
Binary Large Object передает оригинальный массив байтов. Очень часто его используют для передачи изображений, звука и видео.

Bool
Boolean – это логический тип данных, который может передать либо ложь, либо истину. Самое распространенное его использование – это описание состояния переключателя, который может быть включен (истина) или выключен (ложь). На самом деле в типологии OSC этот тип данных разделен на две части, каждая из которых несет в себе конкретное состояние. Я объединил их, дабы облегчить понимание этих типов.

Impulse
Это не совсем тип данных как таковой, поскольку он не несет в себе информацию о состоянии аргумента, он инициализирует событие. В описании OSC-протокола он обозначается как “Bang” и часто применяется, когда вам нужно передать информацию о действии (скажем, об открытии страницы или любого другого события) без необходимости передачи аргумента.

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

Итак, давайте еще раз вспомним, из чего состоит OSC-сообщение. Первая часть – это IP-адрес клиента и номер его порта, на который нужно доставить OSC-сообщение. Вторая его часть – это адрес. И третья – аргумент. Схематически это будет выглядеть следующим образом:

Как видно на схеме, чтобы передать состояние кнопки Flash фейдера номер один на световую консоль Eos, мы должны указать сетевой адрес и порт пульта (192.168.1.101:5004) Далее нужно указать адрес необходимой кнопки, состояние которой мы хотим передать (/eos/fader/1/flash), и в итоге передать аргумент типа Boolean: если кнопка должна быть нажата, то аргумент равен True, если кнопка отпущена, то аргумент равен False.

Резюмируем особенности OSC-протокола
OSC-протокол базируется на интерфейсе передачи данных Ethernet. А это дает сразу несколько преимуществ. Для передачи такого сигнала мы можем использовать стандартное сетевое оборудование, которое намного распространеннее и доступнее, чем специализированные карты синхронизаций. По Ethernet мы можем передать сигнал практически на неограниченное расстояние, используя при этом разные способы передачи: как по радиоканалу, так и по оптике, и по витой паре.

OSC использует протокол передачи данных UDP, который обязывает указывать IP-адрес и порт клиента. Что дает множество преимуществ. К примеру, мы можем на одном сетевом клиенте синхронизировать несколько приложений одновременно, используя один и тот же IP-адрес, но при этом разные порты. Это также позволяет нам настраивать сложные маршруты, делить OSC-сигнал или получать на один клиент сообщения из разных источников без использования дополнительного оборудования, так как этот функционал уже заложен в сетевых протоколах группы TCP/IP.

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

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

Источник

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’ов, как мы увидим далее)

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

Нелинейная регрессия: пусть у меня есть данные, полученные из некоторого физического эксперимента. Пусть в данных две переменные — и . Я хочу построить модель машинного обучения, которая могла бы по переменной предсказывать значение . Пусть я знаю из теоретической физики, что уравнение зависимости 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 в них.

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

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

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

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

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

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

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

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

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

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

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

100 раз выбери случайные значения параметров нейросети;

для каждого значения параметров посчитай значение метрики качества на тестовом датасете;

«обученная» нейросеть — это нейросеть с параметрами, для которых получено лучшее значение метрики на тестовом датасете

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

Более того: устройство архитектуры тоже играет роль в том, будут ли махинации с датасетом иметь нужный эффект. Например, какой бы 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 в архитектуре» на примере. Для этого рассмотрим две архитектуры нейросетей для работы с изображениями: сверточные нейросети и Visual Transformer. Поймем, как их успех связан с inductive bias и в чем заключается различие их принципа обработки картинок.

Читайте также:  microsoft sync center что это

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

Принцип работы свертки https://brandinho.github.io/mario-ppo/

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 (

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)

Источник

Сказочный портал