Комментарий
Где-то встречал тезис, что Machine Learning есть автоматизация науки. И оно в каком-то смысле так, но вот DL явно автоматизирует науку таким образом, что жутко увеличивает издержки на этапе экспериментальной проверки полученных гипотез.
Конечно, польза от него все равно какая-то есть. Но по идее, для правильной автоматизации науки нужен prior который бы приводил к тому, что модель можно было бы относительно легко проверять экспериментально, ну или там исследовать ее структуру. В DL мы обычно видим прямо противоположный подход — накинем слоев, набросим параметров, намажем нормалайзеров, проложим пути прохождения градиентов. Вобщем, в некотором роде шаманство, которое вполне себе работает, если фокусироваться на предсказании.
Но даже в инженерии, а не токо науке, нередко требуется чтобы модель вела себя предсказуемо чуть более чем всегда. Ну там для создания самодвижущихся повозок, к примеру, ну и вообще всяческих автономных роботов.
На новогодних праздниках/выходных меня посетила мысль, что тут может быть интересным такое направление. ReLU сетки, если без всяких приколов, по сути являются что-то типа огромного дерева, в листьях которого расположены линейные модели. Ну или можно еще их расматривать как "кусочно"-линейный модели, где "кусочками" являются выпуклые многогранники.
NB Подразумевая что на выходе сетки линейный слой, либо линейный классификатор. Вообще говоря, могут быть другие варики, но это я думаю не очень принципиально. В большинстве случаев у нас какая-то линейная модель.
А вот исследовать линейные модели люди умеют (simplex'ы, interior point и проч), правда если их небольшое кол-во :). И даже вобщем-то выпуклые модели можно исследовать.
Тут также можно узреть заход в сторону Педро Домингоса с его трайбами МЛ. Нейросетка как коннективисткая модель, а древо как логицисткая.
Соответественно, получается что можно подумать о prior, который бы позволял исследовать полученное "древо" методами выпуклой оптимизации. Тут кста вполне возможно будет полезен эволюционисткий подход.
Я так же на выходных размышлял о трудностях обучения глубоких сетей, ну и меня посетила (довольно очевидная) мысля он необходимых условиях для слоев глубоких нейросетей — каждый слой должен быть embedding в том смысле что сохранять структуру исходных данных в том или ином смысле. Что в явном виде в соответствующих работах Хинтона и Бенджио в районе 2006го года, где они послойно пре-тренировали слои нейросеток, как раз таким образом чтобы сохранять нужную инфу (RBM, autoencoders а также supervised pre-training). Понятно, что если слои сконструированы таким образом, чтобы они сохраняли структуру данных, но во что-то его преобразовывали, то есть шанс что дальнейшая оптимизация уже пойдет лучше.
Ну и судя по последним работам (James Martens et al, 2021), одна из проблем обучения глубоких нейросеток методом SGD в том и состоит, что просто случайно инициализированные слои уменьшают это самое структурное различие между тренировочными примерами. В результате, SGD нужно работать очень долго — т.е. требуется выставлять очень низкий learning rate, ибо он весьма чувствителен к ре-параметризации. И судя по всему криво инициализированная сетка тренируемая по методу SGD имеет тенденцию усугублять эту проблему. Вобщем, я бы сказал проблема прямо противоположна "vanishing gradient", уменьшается "информативность" передаваемая в прямом направлении. Соответственно, SGD не может опираться на эту исчезающую инфу и сперва учит какую-то хрень.
Эволюционисткий подход (greedy layer-wise pre-training) эту проблему как раз решает. Т.е. если два слоя в нейросетке, то ее можно натренировать вполне, "информативность" там не так сильно теряется, даже second-order оптимизацию (L-BFGS, scaled CG, etc) задействовать можно, которые как раз способны компенсировать падение "информативности".
Мне вот только не очень понятно, почему инициализируемые послойно слои дают полезные фичи. Точнее в случае supervised pre-training оно наверное более-менее понятно. А вот если RBM/autoencoders — ниочень.
Но наверное тут прикол как раз в эволюционности — просто надо пробовать разные фичи и смотреть какие из них полезны для решения целевой задачи (или задач).