Концепции и стратегии трансферного обучения
Извлечение признаков и дообучение, замороженные слои, когда помогает трансферное обучение
«Концепции и стратегии трансферного обучения» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
Что такое перенос обучения
Перенос обучения использует модель, обученную на большом наборе данных, как отправную точку для новой связанной задачи. Вместо того чтобы изучать визуальные признаки с нуля, Вы используете признаки, которым сеть уже научилась.
Это значительно сокращает объём данных и вычислительные ресурсы, необходимые для достижения высокой точности.
Основа ImageNet
Большинство предварительно обученных моделей компьютерного зрения обучены на наборе ImageNet: примерно 1,4 миллиона изображений, разделённых на 1000 классов.
В процессе обучения сеть осваивает иерархию признаков: границы и цвета на ранних слоях, текстуры на средних и части объектов на верхних. Эти низкоуровневые признаки хорошо переносятся почти на любую задачу анализа изображений.
Почему ранние признаки переносятся
Первые свёрточные слои обнаруживают общие закономерности (границы, пятна, градиенты), которые встречаются на каждом естественном изображении — будь то кошки, рентгеновские снимки или фотографии со спутника.
Глубокие слои становятся более специфичными для задачи (они объединяют эти границы в части объектов ImageNet). Поэтому обычно сохраняют ранние слои, а поздние заменяют или переобучают.
Стратегия 1: извлечение признаков
Извлечение признаков замораживает каждый слой предварительно обученной базовой модели, поэтому её веса не изменяются. Базовая модель работает как фиксированный экстрактор признаков; Вы обучаете только небольшую новую классификационную голову.
Используйте этот подход, когда набор данных небольшой и похож на ImageNet. Он работает быстро и снижает риск переобучения, поскольку обучаемых параметров мало.
base.trainable = False
model = Sequential([
base, # frozen ImageNet features
GlobalAveragePooling2D(),
Dense(num_classes, activation="softmax") # only this trains
])Стратегия 2: дообучение
Дообучение размораживает верхние слои базовой модели и переобучает их вместе с головой, позволяя сети адаптировать высокоуровневые признаки к Вашим данным.
Используйте этот подход, когда у Вас есть больше данных или Ваша предметная область отличается от ImageNet (например, медицинские снимки). Всегда выполняйте дообучение с очень низкой скоростью обучения, чтобы не разрушить предварительно обученные веса.
Извлечение признаков и дообучение
- Извлечение признаков: базовая модель заморожена, обучается только голова, очень быстро, лучше всего подходит для небольших и похожих данных.
- Дообучение: верхние слои базовой модели разморожены вместе с головой, работает медленнее, лучше всего подходит для больших или отличающихся данных.
Распространённый подход — сначала выполнить извлечение признаков, а затем на втором этапе провести дообучение, когда голова стабилизируется.
Требования к объёму данных
Выбор стратегии зависит от объёма доступных данных:
- Несколько сотен изображений: только извлечение признаков (заморозьте всё).
- Несколько тысяч: извлечение признаков, затем дообучение нескольких верхних слоёв.
- Десятки тысяч и больше: дообучение большей части базовой модели, возможно, всей сети.
Чем меньше данных, тем больше слоёв следует заморозить, поскольку меньшее количество обучаемых параметров снижает риск переобучения.
Замена классификационной головы
Модели ImageNet выдают 1000 классов. В Вашей задаче, вероятно, используется другое количество, поэтому удалите исходный верхний слой (include_top=False) и добавьте собственную голову, рассчитанную на Ваши классы.
from tensorflow.keras import layers, Model
x = base.output
x = layers.GlobalAveragePooling2D()(x)
x = layers.Dropout(0.2)(x)
outputs = layers.Dense(5, activation="softmax")(x) # 5 custom classes
model = Model(base.input, outputs)Предварительная обработка должна совпадать
Каждое семейство предварительно обученных моделей ожидает, что входные данные будут масштабированы так же, как при обучении на ImageNet. Использование соответствующей функции preprocess_input необходимо, иначе точность резко упадёт.
from tensorflow.keras.applications.resnet50 import preprocess_input
# Scale pixels exactly as ResNet50 expects
x = preprocess_input(raw_image_batch)Контроль скорости обучения
При извлечении признаков подходит обычная скорость обучения (например, 1e-3), поскольку обучается только недавно созданная голова.
При дообучении необходимо снизить её до очень малого значения, например 1e-5. Большие обновления могут стереть тщательно выученные веса ImageNet — этот эффект называется катастрофическим забыванием.
Типичный рабочий процесс
- Загрузите предварительно обученную базовую модель с параметром
include_top=False. - Заморозьте её и обучите новую голову (извлечение признаков).
- Разморозьте верхние слои и переобучите их с очень низкой скоростью обучения (дообучение).
- Оцените модель и преобразуйте её для развёртывания.
Такой поэтапный подход обеспечивает высокую точность даже на наборах данных умеренного размера.
Быстрая проверка
Проверьте, насколько Вы поняли стратегии переноса обучения.
Повторение
Вы узнали, что перенос обучения повторно использует признаки, предварительно обученные на ImageNet (1,4 млн изображений, 1000 классов). При извлечении признаков базовая модель замораживается для небольших и похожих наборов данных; при дообучении верхние слои размораживаются и обучаются с очень низкой скоростью для больших или отличающихся данных.
Согласуйте предварительную обработку с базовой моделью, замените голову в соответствии с Вашими классами и используйте поэтапный рабочий процесс. Далее Вы реализуете это в коде с VGG16 и ResNet50.
Часто задаваемые вопросы
Урок «Концепции и стратегии трансферного обучения» бесплатный?
Да — полный текст урока «Концепции и стратегии трансферного обучения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Концепции и стратегии трансферного обучения»?
Извлечение признаков и дообучение, замороженные слои, когда помогает трансферное обучение Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Концепции и стратегии трансферного обучения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Концепции и стратегии трансферного обучения
- Использование VGG16 и ResNet50 в качестве базовых моделей
- Дообучение: размораживание и повторное обучение
- MobileNet и EfficientNet для периферийного развертывания