Обсуждение

В архиве: 4 комментария.

Читать и комментировать в ЖЖ ↗

avlasov · 15 января 2022

Комментарий

Где-то встречал тезис, что 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 — ниочень. Но наверное тут прикол как раз в эволюционности — просто надо пробовать разные фичи и смотреть какие из них полезны для решения целевой задачи (или задач).

Анатолий Левенчук · 15 января 2022

Комментарий

Мне нравится подход описания происходящего в архитектуре сетей в gonzo-обзорах, https://t.me/gonzo_ML Вот фраза из последнего их обзора про свёрточные сети (https://t.me/gonzo_ML/820): "Интересно во всей этой истории то, что ничего нового в этих компонентах нет, просто в такой конфигурации их раньше не собирали, пробовали по-отдельности. Что наводит на мысли про возможный тюнинг почти любой работы, если бы было время, ресурсы и желание перебирать варианты. Для этого точно должна быть другая нейросеть, а-ля AlphaGo для сборки и улучшения архитектур". Да, определяешь "компоненты" правильно, а затем перебираешь )))

Ответ на комментарий

avlasov · 15 января 2022

Комментарий

Мне лично компонентный подход крайне близок — думаю в контексте инженерии это на 146% понятное стремление. И тут как раз имхо весьма важно понимание реальных причин трудностей обучения нейросетей. Ибо если просто компоненты тяп-ляпать то с большой вероятностью будут проблемы с обучаемостью сетки и/или генерализацией полученных моделей. Что по сцылке и отмечалось. Ну и кагбэ да, надо много перебирать. Что может и не плохо, но затратно. Насколько я понимаю, в прошлом году как раз что-то типа очередного "прорыва" в понимании произошло - https://arxiv.org/pdf/2110.01765.pdf, но читать это очень сложно. Ибо James Martens, 30 разделов, 172 страницы. В работах Martens'а прохождение чуть менее чем каждый раздела является почти что подвигом :). Их Deep Kernel Shaping возможно позволит склеивать компоненты с меньшими затратами и/или более осмысленно.

Ответ на комментарий

_meskalito_ · 16 января 2022

Комментарий

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