Pull to refresh

Comments 21

Что-то и то, и то какое-то странное. Первая статья еще нормальная, вторую даже статьей назвать сложно — скорее отчет о курсовом проекте.

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

Ко второй статье основная критика это что она 1 — не так то и ускоряет. 15-20% это ерунда, нужно ускорение на порядок как минимум, чтобы начать утверждать, что оно стоит того. см. batch normalization, там ускорение больше, чем на порядок. 2 — не везде работает. это значит, что просто взять и вставить нельзя — надо тюнить. Если надо тюнить, то надо больше запусков. Больше запусков — вся разработка дольше. Так что непонятно.

ПС — какой к черту «отжиг»? Переводить текст из довольно узкой области и вставляеть непонятные термины в гуглоперевод это как-то так себе.
Результаты второй статьи и мне показались слабоватыми. Что касается первой, то речь ведь не идет об ускорении обучения как такового. За время обучения одной модели формируют N моделей для ансамбля.
По поводу гуглоперевода, коллега, попросил бы не бросаться обвинениями.
Согласен с supersonic_snail по первой статье. Быть может метод и правда хорош, но подтверждений пока не так много.

В теории, если взять слишком малый шаг, нас мало выбьет из локального минимума и мы вновь скатимся к тому же. Как правильно выбратьправильный цикл? Не надёжнее ли на практике действовать как деды и просто снижать шаг? И сравнение берётся с заранее фиксированным временным бюджетом, быть может с другим бюджетом будет уже не так, это на совести авторов статьи, которую ещё предстоит проверить.

А что не так с термином "отжиг"?

По поводу второй статьи, автор на Reddit поясняет, что она была сделана за несколько дней в формате "индивидуального science-хакатона". Там же начали обсуждать, как быть с тенденцией публиковать и ссылаться на пусть и не до конца проверенные, но самые свежие идеи и результаты на arXiv: это плохо или хорошо?

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

«отжиг» — вполне используемый термин для одного из классов алгоритмов, емнип, даже у банды четырёх был.
Можете показать? Я такого не видел, но может я что упустил.

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

Про первое — по мне, главная практическая проблема, что часто bottleneck — это скорость inference, а не тренировки, особенно финальной. А тут inference все еще в N раз медленней.
А они сравнивали качество ансамбля, которые получается их техникой, с тем, который достигается полной тренировкой несколько раз? Ну и да, если плохо тренировать бейзлайн, много пейперов написать можно…

Про второе — AFAIR, часто первые слои жрут намного больше вычислений, поэтому если первую половину выкинуть, то должно быть ускорение сильно больше, чем в два раза.

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

Все-таки скорость обучения тоже важна если данных много, GPU не топовый, модель сложная, идей много надо проверить…
Тоже важна, вопросов нет, но все же предполагаемая скорость Inference тоже имеет значение. Т.е. если понятно, что inference будет очень тормозной часто и экспериментировать в эту сторону не хочется. Впрочем, верю, что могут быть юзкейсы, где не так.
Почему у комментаторов сложилось впечатление, что авторы первой статьи плохо обучили baseline?

ResNet-110, Cifar-10
Оригинальная статья авторов архитектуры ResNet
Смотрим таблицу 6: ошибка классификации на CIFAR-10: 6.43 (6.61±0.16)
Статья про «отжиг» (ансамбль снимков модели): Фигура 1.2 — ошибки классификации CIFAR-10
Resnet-110 Single Model: 5.52 (по оригинальной статье)
Resnet-110 Snapshot Ensemble: 5.32

Остальные результаты тоже можно проверить.
Про первую. Мне кажется, было бы хорошо иметь возможность убедиться в том, что у нас нет одинаковых снэпшотов. Можно, конечно, веса посравнивать. Но без этого мы рискуем получить M клонов одной модели. Второе соображение состоит в том, что если время обучения одного снэпшота T/M сильно меньше обучения одной модели, то мы рискуем получать не локальные минимумы, что даст нам малополезные результаты. А если сравнимо, то итоговое время сравнимо со временем обучения всей модели.

Спасибо за разбор!


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

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

image

Синий график, где явно криво настроен learning rate, игнорируем, смотрим на их красный график. Там видно, что каждый раз, когда LR увеличивается (т.е. каждый период косинуса) training loss прыгает вверх до ~5e-1. По первому сегменту видно, что с нуля этот loss достигается за ~10 эпох при периоде косинуса в 50. То есть получаем от силы 30% ускорение, что на сильно быстрее на мой взгляд не тянет, особенно учитывая резервы по настройке learning rate.

Поэтому вопрос, что лучше (и главное почему) — их схема или, например, взять их LR schedule за первые 50 эпох, обучить 6 моделей по 50 эпох с нуля с разными инициализациями и сделать ансамбль из них, — остался открытым. Во втором случае индивидуальные модели будут похуже, но если за счет разных инициализаций они окажутся более разнообразными, то их ансамбль может сработать лучше.
Только практика может ответить на этот вопрос. Проверьте свою схему и напишите статью на Архив.
Я бы применял их схему чуть попозже, после первоначального грубого обучения. Например, первые слои уже обучились типовым фильтрам Габора. Но это только мое предположение, все надо проверять. В этом и заключается эмпирический подход.
При «холодном» рестарте коэффициенты сети случайно инициализированы, и их надо долго обучать. При рестарте с локального минимума у нас уже в принципе обученная сеть, дальнейшее обучение будет только слегка изменять значения весов.
Sign up to leave a comment.

Articles