Sakana AI предложили способ обучать большие модели по частям Они выпустили статью про так называемые Diffusion Blocks, в которой показали, как можно обучать модели не целиком, а блоками. Вообще, в стандартном обучении необходимость гонять данные через все слои сетки и затем гнать обратно градиенты довольно проблематична. В памяти нужно держать промежуточные состояния всех слоев, с углублением модели память сильно разрастается, и это барьер для масштабирования. Если взглянуть на диффузионные модели, то там все иначе. Они обучаются как бы постепенному очищению шума до нужного ответа, и разные уровни шума (когда модель учится убирать шум при конкретном уровне зашумления) можно обучать относительно независимо. Ученые из Sakana базируют свою механику как раз на идее диффузии. По сути, прохождение сигнала через блоки сетки тоже можно рассматривать как очищение от шума: каждый слой учится приближать сигнал к ответу. И тогда получается, что по аналогии с диффузионными моделями мы можем обучать разные маленькие денойзеры отдельно. Технически, сеть делится на несколько блоков, каждому из которых назначают свой диапазон шума. Проще говоря, блок учится проходить определенную часть пути от шума к ответу. Если в сети N блоков, то при обучении это дает примерно N-кратную экономию памяти. При этом авторы утверждают, что качество на тестах получается сопоставимым с end-to-end обучением. Большой интерес тут, конечно, представляет файнтюнинг. На практике этот метод был бы невероятно полезен именно для дообучения, но для этого нужно как-то научиться конвертировать большие предобученные модели в DiffusionBlocks. Собственно, исследователи обещают этим заняться. Блогпост | Статья