Pull to refresh
108
0
Павел Садовников @Siarshai

Программист

Send message
1) Да есть. Для этого нужно иметь не один W, а три. Первый тренируется как обычно, изображения для второго уменьшены на k%, изображения для третьего на k% увеличены (где k обычно от 2 до 4). Применяем их к очередному кадру, получаем три отклика и ищем максимум по всем трёх G. В зависимости от того, на каком G найден максимум, мы можем сказать приблизился объект к камере, остался в той же плоскости или отдалился; кроме того детекции получаются стабильнее. Минус — больше считать.
2) Маленькие объекты действительно сложно отслеживать. Но если паттерн объектов хорошо сохраняется при перемещении и заметно отличается от фона, то можно попробовать. Как ни странно, для них лучше использовать не MOSSE или KCF, а тривиальный алгоритм, описанный в начале статьи. Только радиус, на котором мы ищем объект нужно взять побольше.
если порезать только _часть_ синапсов данного нейрона, производительность типового решения (плотные матрицы) не вырастет.

Разумеется, в этом и есть основной смысл именно понейронного прунинга. Я упомянул об этом во введении.
В данном случае, это верно и для тех и для других. Мы ведь и выкидываем нейроны целиком. Но я полагаю, что выкинуть 16 нейронов с 128 связями (2048 весов) лучше с точки зрения TFLOPS, чем 16 нейронов с 64 связями (1024 весов).

Но вообще да, для плотных матриц между TFLOPS и вырезанными весами тоже зависимость не совсем линейная из-за внутренней GPU'шной кухни. Выкинуть 16 нейронов с 64 связями это не то же самое, что выкинуть 64 нейрона с 16 связями. По-честному нужно было посчитать график TFLOPS на пачку inference'ов (что и делают в некоторых статьях), но я поленился.
> Можно попробовать делать поиск оптимальной архитектуры с точки зрения ширины слоев, выкидывая нейроны там где они прунятся хорошо, и подсыпая туда где плохо.
Да, звучит разумно.
  1. Да, нейроны удаляются целиком, но на графике именно компрессия по весам. Так сделано потому что в конечном итоге нас интересуют сэкономленные TFLOPS'ы, а они кореллируют именно с убранными весами. Тогда как количество весов нелинейно зависит от количества редуцированных нейронов. Так если предположить, что в сети N >> 1 одинаковых слоёв, и из каждого слоя мы убираем по 50% нейронов, то количество весов сократится на 75%.

    Вообще, действительно стоило выложить и прокомментировать финальную архитектуру, но там вроде бы ничего особо интересного. У меня получилось, что при одинаковом размере слоёв нейроны сильнее удаляются из первых свёрточных слоёв, и полносвязных слоёв прямо перед logit-слоем. Впрочем, это может зависить от архитектуры сети и конкретной задачи, так что не хочется делать обобщения.
  2. Хороший вопрос. Если размеры слоёв выбраны удачно (т.е. нейронов хватает на все полезные фичи из предыдущего слоя), то скорее всего да, может, не в 20 раз, а поменьше, но примерно так. Этот вопрос уже залезает исследования широких сетей. Может быть я когда-нибудь попробую поэкспериментировать с обучением сильно раздутых сеток. Это перекликается с моей предыдущей статьёй про ландшафт функции потерь нейронной сети.
  3. Не совсем честно сравнивать OBD и групповые алгоритмы прунинга, т.к. последние налагают ещё дополнительное ограничение, какие веса нужно делать менее значимыми вместе. Мне кажется, что при одинаковой изначальной структуре сети и одинаковом количестве удалённых весов, OBD покажет больший val accuracy, но результат L0 или L1 группового алгоритма будет тратить меньше TFLOPS.

> Что же касается многообразий над кольцами вычетов (и вообще над теми или иными алгебраическими структурами не являющимися полями, еще и, наверное, алгебраическими замкнутыми), то либо (скорее всего) это то самое сознательное разведение безосновательного наукоподобия, которое по неведомым причинам меня так раздражает

Довольно странно называть «разведение безосновательного наукоподобия» многообразия над кольцами вычетов. Если доказательство теоремы верно и следует из определённых аксиом или других доказанных теорем, то это вполне обоснованная и вполне наука.

Сдаётся мне, что вас скорее раздражает математика, которую некуда приложить, которая не описывает ничего в реальном мире. Натуральные числа норм потому что ими можно считать яблоки, дифуры норм потому что ими можно описывать многие физические процессы, многообразия над кольцами вычетов норм потому что — ???

На самом деле я вас понимаю, я в душе практик =) Но посмотрите, конкретно эти ребята (Saxe, Chromanska, Kawaguchi и прочие) делом занимаются. Они применяют довольно хардкорную математику, но применяют для дела. Их результаты будут полезны учёным-практикам, а результаты тех — каггельщиками и остальным ребятам. Можно сравнить это с положением учёных в обществе. Учёный не производит ничего сам, но говорит, что нужно делать инженеру. А уже инженер-конструктор производит, скажем, самолёты, которыми пользуется простой народ. Чтобы сконструировать что-нибудь летающее не обязательно глубоко знать аэродинамку, достаточно интуитивно понимать основы. Но если хочешь сделать Боинг, будь добр покурить уравнения течения газа.

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

На самом деле, хороший вопрос. Это тоже довольно сильное ограничение сомнительной реалистичности. В трёх источниках с Chromanska, которые я могу быстро просмотреть, просто упоминается это ограничение без особого объяснения или приведена формула вообще без С, вот так: $inline$ \frac{1}{\Lambda}\sum_{i=1}^{\Lambda} w_i = 1 $inline$.
> наукоподобное обоснование сложившейся практике

Я бы не был столь жёсток с учёными. Я бы тоже предпочёл, чтобы сначала было обоснование, а потом развивался метод. Но наука не всегда движется по красивому циклу гипотеза->модель->эксперименты->практический метод->ништяки->повторить. В машинном обучении сложилась такая ситуация, что практика убежала далеко вперёд от теории, и чтобы восстановить равновесие, теперь нужно сначала подумать, почему работают существующие методы. Это не «наукоподобное», а вполне «научное» обоснование, просто оно слегка запоздало.

Плюс, как я уже написал, эти исследования задают направление для новых практических исследований.
Увы, пока что никак, если не считать ResNet'ы, batch normalization и итерирование по маленьким batch'ам вместо градиентного спуска с использованием всего датасета, что все и так делают без всякого на то теоретического основания. Зато они подсказывают почему именно всё вышеперечисленное хорошо работает. Эти исследования не влияют на практику напрямую, а показывают в каком направлении нужно двигаться в научных работах, исследующих прикладные методы, которые, в свою очередь, будут нести практическую пользу. Если периодически не нырять в теорию, нейронные сети так навсегда и останутся шаманством, которое вроде работает, но непонятно почему.
Это матожидание не от куба дисперсии, а от куба случайной величины. Если случайная величина распределена симметрично относительно нуля, но матожидание от любой её нечётной степени будет равняться нулю.
Вероятно, перед формулой должен быть минус, иначе около нуля будет максимум, а не минимум. ES-подход отработает хорошо, если задать достаточно большую сигму. Текущую точку будет постоянно «выбрасывать» из (0, 0) из-за нестабильности градиентов, но это не проблема, если хранить самую лучшую точку. Соответственно, VO-подход тоже должен приземлиться в центр, если начать с достаточно большой сигмой. По самой последней ссылке в статье есть картинки с похожей функцией.

> Реальные задачи на такое похожи гораздо больше чем на то, что показано в иллюстрациях в статьях.
Я много раз слышал это утверждение. Вроде как это подтверждают визуализации в вашей статье. Есть ли реально какие-то формальные исследования на эту тему? Я видел в основном утверждения, что за пределами первой фазы обучения лежит ландшафт с кучей седловых точек. К тому же, непонятно, какого улучшения выхлопа от сети можно достичь, если хорошо преодолеть этот ландшафт (10%, 100%, 1000%?).
Да, действительно. Исправил.
При написании статьи и в качестве материалов для следущей использовались его материалы. В конце статьи приведена ссылка на предыдущую версию DemoGNG.
Спасибо =) Что поделать, больно специфическая область исследования. Да и статья все же далека от идеала.
Да, действительно. Спасибо за замечание. Исправил в статье.
Расшифровка мозговых сигналов — действительно интересная задача, но мозговые импульсы требуют очень хорошей предобработки, чтобы их можно было скормить кластеризатору. Не уверен что после этого бы выполнялись ограничения, перечисленные в статье — соответственно, не факт, что именно DBSCAN был бы хорошим инструментом в этом случае.
Разве что «метод визуализации» в очень-очень широком смысле — не просто красивое представление, а способ разбить данные на несколько групп, и потом работать с каждой группой по-разному. Я лично не сталкивался с реальными сложными задачами кластеризации, так что моё мнение имеет здесь малый вес.
вопрос: изначальная точка в к-средних выбиралась случайным образом или это одна из точек данных?


Для инициализации использовался алгоритм k-means++. Т.е. даже лучше, чем просто случайный выбор точки.

Кстати, интересно, есть ли модификация к-средних, где центроид на каждой итерации не просто считается как среднее точек кластера, а сначала считается среднее, а потом выбирается реальная точка, ближайшая к этой расчетной. Кажется логичным такой подход, чтобы избежать ситуации, изображенной на картинке.


Интересная идея, но тут есть несколько недостатков. Что если примерное направление не совпадает ни с одной точкой? Как быть с кластерами с дырками посередине? Совсем не уверен, что это бы решило проблему с вот такими «колбасками».

Вот же как выступает kmeans с большим количеством кластеров на картинке с узким кластером, пересекающим круглый:




Лучше, чем было, но всё равно так себе: кластеры вытягиваются в направлении, перпендикулярном, направлению меньшего кластера.
Вот, например, питонья sklearn-имплементация с примером использования, которую я препарировал. Здесь можно найти matlab версию, а здесь — Java (распараллеленная, кстати!), но я их не смотрел.
1

Information

Rating
Does not participate
Location
Долгопрудный, Москва и Московская обл., Россия
Date of birth
Registered
Activity