Вам не нужно использовать предварительно обученную сеть для обучения модели для вашей задачи. Однако на практике использование предварительно обученной сети и ее переподготовка к вашему заданию / набору данных обычно быстрее , и часто у вас получаются лучшие модели, которые дают более высокую точность . Это особенно актуально, если у вас недостаточно данных для обучения.
Почему быстрее?
Оказывается, что (относительно) независимо от набора данных и целевых классов, первые несколько слоев сходятся к аналогичным результатам. Это связано с тем, что низкоуровневые слои обычно действуют как детекторы краев, углов и других простых структур. Посмотрите на этот пример , который визуализирует структуры, на которые «реагируют» фильтры разных слоев. Уже обучив нижние уровни, адаптация слоев более высокого уровня к вашему варианту использования происходит намного быстрее.
Почему точнее?
На этот вопрос сложнее ответить. ИМХО, это связано с тем, что предварительно обученные модели, которые вы используете в качестве основы для трансферного обучения, были обучены на массивных наборах данных. Это означает, что полученные знания поступают в вашу переобученную сеть и помогут вам найти лучший локальный минимум вашей функции потерь.
Если вы находитесь в комфортной ситуации, когда у вас много тренировочных данных, вам, вероятно, следует обучать модель с нуля, так как сохраненная модель может «указать вам неправильное направление».
В этой магистерской диссертации вы можете найти набор задач (небольшие наборы данных, средние наборы данных, небольшой семантический разрыв, большой семантический разрыв), где сравниваются 3 метода: точная настройка, извлечение функций + SVM, с нуля. Точная настройка модели, прошедшей предварительную подготовку на Imagenet, почти всегда является лучшим выбором.