Открыть список
Как стать автором
Обновить

Комментарии 22

Используем здесь weight decay

Вы используете learning rate decay.
Weight decay — это L2 регуляризация параметров модели.
Упс, действительно, недосмотрел. Спасибо)
Не за что, очень классная статья!
состязательные сети.
Эммм… звучит короче и читабельней, чем «состязающиеся», но это точно нормально с точки зрения русского языка? Не уверен, но гугл выдает скорее «состязательные мероприятия/состязательные игры» и т.д., не «состязательные спортсмены».

Хотя черт, после того, как автоэнкодер мне предложили перевести как «автокодировщик» — берем!))
я думал об этом. пришел к выводу, что вполне нормально.
с другой стороны, я не Розенталь)
Не за что)

Немного послушал, и правда похоже, ха. Не знаете, они зарелизили эту свою сеть с двумя ветками где-нибудь в статье?
Судя по ответам после лекции — нет. Она сделана на внутреннем Яндексовом фреймворке. Это правда года полтора назад было, многое поменялось.
С другой стороны, там сложно только один слой сделать. Как я понимаю, остальное из Caffe собирается.
Ещё никто не упомянул A Scanner Darkly? Один в один же.
Скрытый текст
Все никак не соберусь посмотреть) Стоит того?
Психоделика на любителя, на мой взгляд. Есть у Дика ряд таких произведений. Но понравилось, как режиссер использовал ротоскопию, чтобы органично совместить реальный мир и глюки.
Восхитительно!

Но зря я на ночь эти гифки посмотрел.
А можно же фальшивомонетчика развернуть, предъявлять ему изображения и он будет выдавать рецепт, потом по расстоянию между рецептами (разности чисел) можно будет определить насколько похожи 2 изображения друг на друга? Так как я понял, что в пространстве рецептов похожее располагается рядом. Или это только у них в DCGAN так получились?
Так точно на оба вопроса) Интересная мысль.

Ситуация слегка осложняется тем, что мы до сих пор не знаем, какой кусок рецепта что означает (т.е. мы не знаем, как их сравнивать — может, 90% рецепта контролирует какие-то тонкости типа цвета обоев за спиной, которые к похожести не имеют отношения?), а вот можно ли это как-то выяснить? Скажем, развернуть сеть вашим способом, закидывать туда парочки изображений с контролируемыми различиями и смотреть, что в рецепте поменяется, хм…
Хорошая статья, спасибо.
Интересно, насколько мощным должен быть дискриминатор и как изменится тренировка при увеличении его параметров (слоев).

Вообще, сейчас есть модная тенденция делать генеративные модели с помощью RNN:
www.youtube.com/watch?v=Zt-7MI9eKEo

arxiv.org/pdf/1502.04623.pdf
Не за что) Мощность дискриминатора обсуждают в том же посте, откуда заглавная гифка — насколько я понимаю, верхняя граница должна быть меньше, чем у генератора, а вот нижняя должна плавать и влиять на точность подделок.

О, кстати, спасибо, что напомнили про DRAW — давно ее мельком видел, и каким-то образом забыл) Хочу попробовать дальше разобрать еще немного порождающих моделей (NADE, модные вариационные автоэнкодеры), возьмем и эту тоже)
Ух, дочитал, спасибо за статью! В первое прочтение не осилил, но дополнительная статья (https://habrahabr.ru/post/278425/) очень помогла прочитать во второй раз.
Чуть-чуть субьективного фидбека — плиз, прописывайте более явно что является входом и выходом различных сетей.
Например, вот в этом фрагменте:
image
мне кажется важным выделить, что во время тренировки discriminator на одной и той же сети прогоняется на паре изображений, результат смешивается, и градиент считается от этого значения на все веса.
Или вот случайный шум, который подается на вход генератора — это вектор? Двумерная картинка?
Если вектор — как он приводится к двумерному массиву, чтобы convolutions начали работать?
Привет! Спасибо за фидбек.
Наверное, я думал, что сработает метафора — таки для сравнения подделок и оригиналов надо смотреть на оба сразу)
Шум — двумерный, ага, чтобы свертки могли по нему проходиться. Он сразу сэмплится в таком виде. Точнее даже в форме (batch_size, 1, width, height), чтобы совпадал с размерностями feature-mapов в сверточной сети.
У меня это выглядит так:
np.float32(np.random.random((n, NOISE_HEIGHT * NOISE_WIDTH * 1)).reshape(n, 1, NOISE_HEIGHT, NOISE_WIDTH))

(отстраненно глядя на свой код)… понятия не имею, нафига тут reshape, когда в numpy можно сразу передать size сэмплеру)
А какие архитектуры сети использовались в оригинальных пейперах, которые вот эти лица получали?
Мне кажется шум фальшивомонетчика это своего рода ДНК, по которому фальшивомонетчик может построить нужный образ (организм). Т.о. если как-то скрещивать такие ДНК, то можно получить заранее нужный результат. В вашей статье ощущаются отголоски генетических алгоритмов.

Опечатка: Disriminative -> Discriminative


Странно, что за полтора года никто не заметил :)

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.