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

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

Зачем переносить обучение?
Многие глубокие нейронные сети, обученные на изображениях, имеют любопытное общее явление: на ранних уровнях сети модель глубокого обучения пытается изучить низкий уровень функций, например, обнаружение краев, цветов, вариаций интенсивности и т. д. Такие функции не относятся к конкретному набору данных или задаче, потому что независимо от того, какой тип изображения мы обрабатываем для обнаружения льва или автомобиля. В обоих случаях мы должны обнаружить эти низкоуровневые функции. Все эти функции возникают независимо от точной функции стоимости или набора данных изображения. Таким образом, изучение этих особенностей в одной задаче по обнаружению львов можно использовать в других задачах, таких как обнаружение людей. Вот что такое трансферное обучение. В настоящее время очень трудно увидеть, как люди тренируют всю сверточную нейронную сеть с нуля, и обычно для аналогичной задачи используют предварительно обученную модель, обученную на различных изображениях, например, модели, обученные на ImageNet (1,2 миллиона изображений с 1000 категории) и использовать функции из них для решения новой задачи.

Заблокированная схема:

Заморозить и обучаемые слои:

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

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

  • Целевой набор данных небольшой и похож на базовый набор сетевых данных: Поскольку целевой набор данных невелик, это означает, что мы можем точно настроить предварительно обученную сеть с помощью целевого набора данных. Но это может привести к проблеме переобучения. Также могут быть некоторые изменения в количестве классов в целевой задаче. Итак, в таком случае мы удаляем полносвязные слои с конца, может быть, один или два, добавляем новый полносвязный слой, удовлетворяющий количеству новых классов. Теперь мы замораживаем остальную часть модели и обучаем только новые добавленные слои.
  • Целевой набор данных большой и похож на базовый набор данных для обучения: в таком случае, когда набор данных большой и может содержать предварительно обученную модель, вероятность переобучения исключена. Здесь также удаляется последний полносвязный слой и добавляется новый полносвязный слой с нужным количеством классов. Теперь вся модель обучается на новом наборе данных. Это гарантирует настройку модели на новом большом наборе данных, сохраняя архитектуру модели прежней.
  • Целевой набор данных небольшой и отличается от базового набора сетевых данных. Поскольку целевой набор данных отличается, использование высокоуровневых функций предварительно обученной модели нецелесообразно. В таком случае удалите большинство слоев с конца в предварительно обученной модели и добавьте новые слои к удовлетворительному количеству классов в новом наборе данных. Таким образом, мы можем использовать низкоуровневые функции из предварительно обученной модели и обучить остальные слои, чтобы они соответствовали новому набору данных. Иногда полезно обучить всю сеть после добавления нового слоя в конце.
  • Целевой набор данных большой и отличается от базового набора сетевых данных: Поскольку целевая сеть большая и отличается, лучший способ — удалить последние слои из предварительно обученной сети и добавить слои с достаточным количеством классов. , затем обучите всю сеть, не замораживая ни одного слоя.

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

Рассмотрим все ситуации, когда размер и набор данных целевой задачи отличаются от базовой сети.

Первоначально опубликовано на https://comingfly.blogspot.com.