Pull to refresh
3
0
Send message
пробовали — arxiv.org/abs/1701.02386

статья очень суровая математически. суть — один дискриминатор (насколько я помню) и много генераторов, каждый обслуживает свой кусок данных, которые надо сгенерировать.
отличное ревью, спасибо.

может вы знаете какие-то примеры применения GAN-ов в продакшне? субъективно то да, картинки вроде клевые, но если хорошенько присмотреться к тем же лицам, то вечно что-то не так. мне давно интересно, смог ли кто-нибудь вкрутить это все в какой-то продукт.
какой конкретно gan у вас? их уже развелось столько, что говорить просто GAN слегка сбивает с толку. к тому же во многих вариантах сравнивать loss-ы G и D вообще особого смысла не имеет. скорее надо уловить типичные хорошие кривые для них и уже с ними сравнивать.
Я говорил об этой статье — [1]. Я пролистал ее еще раз и там делается что-то такое — есть фиксированный словарь, который обучается перед обучением непосредственно модели перевода. Как формируется словарь — не суть на данный момент. В этот словарь можно положить n-gramm-ы разного размера, которые вполне могут оказаться словами, вроде «the». В этой статье они показывают, что во-первых, для разных языков надо брать разный размер словаря, во-вторых в общем вроде как чем словарь больше, тем лучше.

[1] https://arxiv.org/pdf/1609.08144.pdf
не совсем. у них есть фиксированный набор достаточно частых слов, а незнакомые слова разбиваются на n-gramm-ы. отдельные символы тоже нормальный вариант, но n-gramm-ы лучше работают. какого размера у них n, я не знаю. было бы логичным иметь что-то более-менее гибкое.
Можете показать? Я такого не видел, но может я что упустил.

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

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

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

ПС — какой к черту «отжиг»? Переводить текст из довольно узкой области и вставляеть непонятные термины в гуглоперевод это как-то так себе.
Если делать так, то нужно каждую итерацию пересчитывать главные компоненты. Это О(n^3), где n — размер извлекаемых фич, что жутко медленно. batchnorm это O(n).
Да, вы правы, я понял. Если код сильно большой, то оно просто скопирует вход, поэтому делаем denoising ae и так далее.
Код это я имею в виду то, во что сжимает автоенкодер по ходу обработки информации, code в вашем исходнике. И да, в волна-круг задаче.

KL — KL divergence. Он же используется чтобы сделать так, чтобы q(z|x) примерно походил на p(z), но из-за невычислимости приходится делать предположение, что q(z|x) — диагональный гауссиан, а p(z) — стандартный гауссиан. Тогда можно посчитать аналитически. GAN позволяет оба ограничения убрать, то есть произвольный q(z|x) и произвольный p(z). Найти можно тут, но статья довольно суровая для неподготовленного читателя.

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

Я бы не сказал, что код размером >1 это оверфит. Скорее код размером 1 — андерфит. Оверфит был бы если бы вы дали мало точек на кривой и оно бы построило по ним что-нибудь вроде полинома высокого порядка. Тут такого нет — тут вообще кусок полностью прямой.

GAN можно использовать чтобы изящно уйти от KL и от сэмплинга из диагонального гауссиана при обучении. Это неплохо бы вписалось в ваши 6 статей.

PS — виноват, ответил в корень.
Обычный VAE моделирует p(x) — вероятность данных. Если добавить то, что там за цифра должна быть — становится p(x|y), где для каждого x дано y. Такое в литературе принято называть conditional. y может быть не только то, что за цифра: раскраска черно-белой картинки — это тоже conditional. Только x — цветные картинки, y — черно-белые.
Зачем у вас дропаут вообще есть? Он оказывает какое-то положительное влияние на значение negative-log-likelihood на тестсете? По моему опыту VAE обучается с трудом и недообучение гораздо большая проблема, чем перееобучение. Какая-то еще регуляризация только ухудшает результат.

Результат с тем, что AE не справился с волна+круг, я немного неосилил — вы даете ему код размером 1, это маловато. Естественно он не может разделить эти две вещи. А что если дать код размером 100? Разве что вы намекаете, что код должен быть достаточно большой и даже тысячи может не хватить для реальных данных.

Можете немного раскрыть интригу — про что вы будете говорить в VAE+GAN? Избавляться от размытостей или от KL divergenc-а?

Вообще, статьи очень хорошие, спасибо что пишете.
кстати, не может такого быть, что в тех 20-ти миллионах сэмплов уже есть все возможные паттерны вызовов malloc/free? В конце концов исходник то небесконечный, и не может быть такого, что за те пару недель вы выбрали все возможные комбинации этих вызовов? Ну или если не все, то какой-то небольшой сабсет.

Было б интересно начать новую игру на другой карте другим замком, поиграть месяца 2-3, а потом уже посмотреть, как модель предсказывает аллокейшны в этом случае. Если оно и тут работает, то это совсем неожиданно. Но это я так, мысли вслух, я нисколько не умаляю того, что вы уже сделали.

да, с оформлением и прочей ерундой вы правы — это неблагодарное дело если сама работа не предполагает публикаций.

snippet suggestion это любопытно. машинный перевод из английского в с++ не за горами? :)
Сам факт, что такое вообще работает, крайне удивителен. Я не особо осведомлен о научной литературе в этой области, но я думаю, что поисследовав более тщательно и детально вполне можно опубликоваться в каком-нибудь научном журнале для системщиков.

Позвольте предложить алтернативное направление улучшений — ЛСТМ, еще и с двумя слоями, выглядит как довольно суровый оверкилл. Можно попробовать что-нибудь линейное для последовательностей, тот же линейный CRF. Как вариант можно глянуть, что делали люди для языков и взять какую-нибудь n-gram модель. Поясню — если представить, что ваши классы это слова или буквы, то задача становится очень похожа на Language Modelling, где люди предсказывают следующее слово на основании всех предыдущих. Литературы на эту тему вагон и тележка.
Если у вас есть желание таки продраться через статью на архиве, то разберитесь с вот этим сначала — [1]. А перед этим не помешало бы с вот этим — [2]. Там машинный перевод с рекурентными сетями. Оно не вполне очевидно, как это связано с NTM-ами, но связано. Если понять [1], то NTM станет относительно несложным расширением этой системы.

[1] https://arxiv.org/abs/1409.0473
[2] https://arxiv.org/abs/1409.3215
Таблицы вы показываете очень странные — во-первых, почему это вы ставите конкуренту результат 0.96, если он 0.99? Я только что перепроверил (ну мало ли что) — таки 0.99.

Во-вторых, время на изучение не имеет значения вообще от слова совсем. ML на данный момент не черный ящик, а уж тем более нейронные сети, так что надо учить хотя бы основы. А то, что на какой-то задаче можно за вменяемое время получить результат автоматически, означает, что задача настолько простая, что она даже не стоит рассмотрения. Как конкретный пример — попробуйте хотя бы cifar10, и покажите, что выйдет. Я сомневаюсь, что вы вообще получите там вменяемый результат, разве что у вас есть заточенные под задачу предобученные алгоритмы.

В-третьих, в самой первой таблице у Amazon ML оценки 4 и 5, а интегральная 2.1, а у брейн2 4 и 5 и интегральная 2.8. Как так? Разве что вы не показали какой-то столбец, но тогда какой-вообще смысл так что-то сравнивать?

Information

Rating
Does not participate
Registered
Activity