Явления может быть и разные, но все они получаются из одних волновых уравнений, а поэтому очень похожи - грубо говоря, в одном случае в правой части волнового уравнения стоит непрерывная функция, а в другом - дискретная (сумма дельта-функций, грубо говоря). В рамках волновой оптики (не геометрической) дифракция может считаться в том числе через интерференцию, только интегралы будут вместо сумм. Или интерференцию можно посчитать через дифракцию, просто под интегралом будут дельта-функции, и интеграл выродится в сумму.
Фейнман это показывал, курс лекций по физике, третий том, глава 30, параграф 1. Он эти два термина вообще не различал - это одно и то же. Просто термин "дифракция" используют чаще в применении к интегралам (непрерывным источникам), а "интерференция" - к суммам (дискретным источникам). А физический смысл у них одинаков - суммирование волн от различных источников с учетом фаз и поляризаций.
Но вообще, поскольку интеграл - операция более общая, чем сумма, да и бывают дискретно-непрерывные источники (например мачты на холме или три тополя на Плющихе), которые проще описывать через интегралы, я-бы проголосовал за интерференцию, как частный случай дифракции. Хотя принципиальной физической разницы между ними нет.
Так все-таки где CFG-scale в алгоритме SD, и как оно работает с математической точки зрения? За статьи и доки спасибо, но вы обещали "Самое понятное объяснения"
Насчет умножения - это зависит от того, какой тип внимания вы используете, там их много разных вариантов (https://arxiv.org/abs/1508.04025v5). Если вы посмотрите, на (https://arxiv.org/pdf/1706.03762.pdf , eq.1), то там видно, что максимум софтмакса достигается тогда, когда Q является перестановкой K. По-моему, умножения как такового там нет, просто очень хитрый подбор оптимальной перестановки координат вектора V. Хотя я могу ошибаться. Но в той-же location-based attention (https://arxiv.org/abs/1508.04025v5, eq.8) вообще этот перестановочный характер внимания очевиден: никакого умножения там нет, просто подбор матрицы оптимальной перестановки координат.
А главное, по теории (универсальная теорема аппроксимации, теорема Колмогорова-Арнольда и т.д.) умножение входов не может являться базовой бинарной операцией, позволяющей проводить универсальную аппроксимацию, там в УТА допустимо в качестве бинарной операции только сложение, и это доказано. Поэтому нейроны и свертки в нейронных сетях можно, а умножения каналов - нельзя, иначе аппроксимация не сойдется. Я конечно могу ошибаться, но вижу это так.
Насколько я понимаю, в трансформере профит идет за счет многоголовости внимания. По факту на каждом многоголовом внимании вы тренируете не одну сеть, а их ансамбль, где каждой сети соответствует своя голова внимания. Этот ансамбль дальше разгребается (уточняется, комбинируется) следующим слоем, то есть фактически многоголовое внимание - это стекинг из простых одноголовых сетей, за счет стекинга и профит. Хотя я могу ошибаться.
С вниманием все может объясняться с такой точки зрения: самая простая интерпретация внимания - это оптимальная перестановка значений входной величины (немонотонное преобразование), и поэтому если за вниманием стоит простая модель, типа регрессии (или полносвязного слоя, например), регрессия будет работать эффективнее, чем без внимания. Если за вниманием стоит модель более сложная, чем регрессия - возможно внимание и не даст такого сильного эффекта, как в случае с регрессией, но эффект все-равно по идее должен быть не хуже (предполагаем, что мы можем обучить корректно это внимание, а здесь дополнительные свободные параметры требуют дополнительного объема датасета и более аккуратной тренировки. И конечно помним, что "не хуже" не означает "лучше", и поэтому нет гарантии, что увеличение параметров/добавление внимания даст эффект) - для любой последующей сети должна существовать оптимальная перестановка входных значений, при которой модель работает наилучшим образом, хотя возможно внимание в каких-то слоях работает впустую. Поэтому мне внимание нравится - его использование иногда позволяет мне использовать более простые сети после него, хотя с очень сложными сетями я его не использовал.
И статья интересная, спасибо - сети сейчас действительно бурно растут в смысле не только результатов, но и размера. И уже не всегда понятно - стоит предлагаемое увеличение размеров сети полученных результатов, или нет: может 99% элементов сети работает вхолостую. Мне приходилось сталкиваться со случаями, когда сильное увеличение размера сети не приводило к улучшению результатов, а иногда и ухудшало их.
Хорошо, что вы еще не за полярным кругом. Там этого восходно-закатного солнечного света вообще почти нет, ни зимой, ни летом - солнце то круги нарезает над головой, то под ногами.
Честно - не знаю, возможно вы действительно правы, и ваш метод эффективен. Особенно с нейронкой, как я уже говорил - он мне понравился - просто и эффективно.
Но всегда сети сравниваются на одинаковых обучающих и тестовых датасетах и одинаковых метриках. Метрики вы уравняли, но насколько мне известно, 15М датасет дает не меньшую точность, чем 1М, просто за счет большего объема обучающего датасета. Поэтому я-бы обучил ваше решение на том, на котором тренировали Чанг и Чен и сравнил результаты. Насколько мне известно, именно этого требуют журналы для публикации решений.
The famous SVD algorithm, as popularized by Simon Funk during the Netflix Prize. SVD алгоритм использовался для предсказаний оценок фильмов в Netflix Prize.
Ну, в 2006 году не было активных исследований графовых нейронных сетей, которые и сводятся к большим матрицам смежности, и не было рекомендаций Pinterest. Работы Лесковца появились в 2017.
На мой взгляд, у вас там две главные ошибки, почему все так плохо:
Вход SVD у вас 3хX мерный - UserID,MovieID,Rating. А должен быть NxM-мерной матрицей, где N-общее число фильмов, M-количество пользователей
SVD здесь не годится, поскольку у вас матрица разреженная, и большую часть фильмов большая часть пользователей не смотрела. По теории тут вроде нужно использовать что-то типа взвешанного NMF (https://github.com/asn32/weighted-nmf), чтобы не учитывать при факторизации те оценки, которых нет, да и рейтинги у вас неотрицательные, то-есть SVD как-то совсем не при чем. Что будет делать SVD - искать линейные комбинации номеров пользователей и номеров фильмов для регрессии на оценки? Это выглядит не очень. Размерность матрицы должна быть равна количеству фильмов, в общем, и нужно взвешивание с неотрицательным разложением, тогда что-то заработает, и он будет искать веса с которым суммировать рейтинги похожих пользователей. Вроде по теории как-то так.
С нейронкой поинтереснее, но к concatenate по смыслу лучше добавить механизм внимания, должно получше работать - внимание подберет эмбеддинги похожие у пользователей и фильмов (как в мультимодальных моделях), и по идее даст лучшее профилирование, и заодно позволит оценить, сколько вам нужно данных и какой должна быть размерность эмбеддинга, чтобы более-менее эффективно обучить схему.
где тут камазы и легковушки? Своп на то и своп, чтобы его система и пользователь использовали по мере внезапной необходимости. Иначе смысл свопа теряется, нужно память закупать, а не заплатки ставить.
У меня выдержал меньше года. Правда биг дата, машинное обучение и все такое, но интенсивность юзанья свопа была низкая - примерно 10-20 часов в неделю. Пару лет назад.
А где CIFG брали, сами писали? На чем сеть реализовывали?
Явления может быть и разные, но все они получаются из одних волновых уравнений, а поэтому очень похожи - грубо говоря, в одном случае в правой части волнового уравнения стоит непрерывная функция, а в другом - дискретная (сумма дельта-функций, грубо говоря). В рамках волновой оптики (не геометрической) дифракция может считаться в том числе через интерференцию, только интегралы будут вместо сумм. Или интерференцию можно посчитать через дифракцию, просто под интегралом будут дельта-функции, и интеграл выродится в сумму.
Фейнман это показывал, курс лекций по физике, третий том, глава 30, параграф 1. Он эти два термина вообще не различал - это одно и то же. Просто термин "дифракция" используют чаще в применении к интегралам (непрерывным источникам), а "интерференция" - к суммам (дискретным источникам). А физический смысл у них одинаков - суммирование волн от различных источников с учетом фаз и поляризаций.
Но вообще, поскольку интеграл - операция более общая, чем сумма, да и бывают дискретно-непрерывные источники (например мачты на холме или три тополя на Плющихе), которые проще описывать через интегралы, я-бы проголосовал за интерференцию, как частный случай дифракции. Хотя принципиальной физической разницы между ними нет.
Написали достаточно, а объяснили немного
Так все-таки где CFG-scale в алгоритме SD, и как оно работает с математической точки зрения? За статьи и доки спасибо, но вы обещали "Самое понятное объяснения"
Насчет умножения - это зависит от того, какой тип внимания вы используете, там их много разных вариантов (https://arxiv.org/abs/1508.04025v5). Если вы посмотрите, на (https://arxiv.org/pdf/1706.03762.pdf , eq.1), то там видно, что максимум софтмакса достигается тогда, когда Q является перестановкой K. По-моему, умножения как такового там нет, просто очень хитрый подбор оптимальной перестановки координат вектора V. Хотя я могу ошибаться. Но в той-же location-based attention (https://arxiv.org/abs/1508.04025v5, eq.8) вообще этот перестановочный характер внимания очевиден: никакого умножения там нет, просто подбор матрицы оптимальной перестановки координат.
А главное, по теории (универсальная теорема аппроксимации, теорема Колмогорова-Арнольда и т.д.) умножение входов не может являться базовой бинарной операцией, позволяющей проводить универсальную аппроксимацию, там в УТА допустимо в качестве бинарной операции только сложение, и это доказано. Поэтому нейроны и свертки в нейронных сетях можно, а умножения каналов - нельзя, иначе аппроксимация не сойдется. Я конечно могу ошибаться, но вижу это так.
Насколько я понимаю, в трансформере профит идет за счет многоголовости внимания. По факту на каждом многоголовом внимании вы тренируете не одну сеть, а их ансамбль, где каждой сети соответствует своя голова внимания. Этот ансамбль дальше разгребается (уточняется, комбинируется) следующим слоем, то есть фактически многоголовое внимание - это стекинг из простых одноголовых сетей, за счет стекинга и профит. Хотя я могу ошибаться.
С вниманием все может объясняться с такой точки зрения: самая простая интерпретация внимания - это оптимальная перестановка значений входной величины (немонотонное преобразование), и поэтому если за вниманием стоит простая модель, типа регрессии (или полносвязного слоя, например), регрессия будет работать эффективнее, чем без внимания. Если за вниманием стоит модель более сложная, чем регрессия - возможно внимание и не даст такого сильного эффекта, как в случае с регрессией, но эффект все-равно по идее должен быть не хуже (предполагаем, что мы можем обучить корректно это внимание, а здесь дополнительные свободные параметры требуют дополнительного объема датасета и более аккуратной тренировки. И конечно помним, что "не хуже" не означает "лучше", и поэтому нет гарантии, что увеличение параметров/добавление внимания даст эффект) - для любой последующей сети должна существовать оптимальная перестановка входных значений, при которой модель работает наилучшим образом, хотя возможно внимание в каких-то слоях работает впустую. Поэтому мне внимание нравится - его использование иногда позволяет мне использовать более простые сети после него, хотя с очень сложными сетями я его не использовал.
И статья интересная, спасибо - сети сейчас действительно бурно растут в смысле не только результатов, но и размера. И уже не всегда понятно - стоит предлагаемое увеличение размеров сети полученных результатов, или нет: может 99% элементов сети работает вхолостую. Мне приходилось сталкиваться со случаями, когда сильное увеличение размера сети не приводило к улучшению результатов, а иногда и ухудшало их.
Хорошо, что вы еще не за полярным кругом. Там этого восходно-закатного солнечного света вообще почти нет, ни зимой, ни летом - солнце то круги нарезает над головой, то под ногами.
Честно - не знаю, возможно вы действительно правы, и ваш метод эффективен. Особенно с нейронкой, как я уже говорил - он мне понравился - просто и эффективно.
Но всегда сети сравниваются на одинаковых обучающих и тестовых датасетах и одинаковых метриках. Метрики вы уравняли, но насколько мне известно, 15М датасет дает не меньшую точность, чем 1М, просто за счет большего объема обучающего датасета. Поэтому я-бы обучил ваше решение на том, на котором тренировали Чанг и Чен и сравнил результаты. Насколько мне известно, именно этого требуют журналы для публикации решений.
del
Ну, в 2006 году не было активных исследований графовых нейронных сетей, которые и сводятся к большим матрицам смежности, и не было рекомендаций Pinterest. Работы Лесковца появились в 2017.
del
На мой взгляд, у вас там две главные ошибки, почему все так плохо:
Вход SVD у вас 3хX мерный - UserID,MovieID,Rating. А должен быть NxM-мерной матрицей, где N-общее число фильмов, M-количество пользователей
SVD здесь не годится, поскольку у вас матрица разреженная, и большую часть фильмов большая часть пользователей не смотрела. По теории тут вроде нужно использовать что-то типа взвешанного NMF (https://github.com/asn32/weighted-nmf), чтобы не учитывать при факторизации те оценки, которых нет, да и рейтинги у вас неотрицательные, то-есть SVD как-то совсем не при чем. Что будет делать SVD - искать линейные комбинации номеров пользователей и номеров фильмов для регрессии на оценки? Это выглядит не очень. Размерность матрицы должна быть равна количеству фильмов, в общем, и нужно взвешивание с неотрицательным разложением, тогда что-то заработает, и он будет искать веса с которым суммировать рейтинги похожих пользователей. Вроде по теории как-то так.
С нейронкой поинтереснее, но к concatenate по смыслу лучше добавить механизм внимания, должно получше работать - внимание подберет эмбеддинги похожие у пользователей и фильмов (как в мультимодальных моделях), и по идее даст лучшее профилирование, и заодно позволит оценить, сколько вам нужно данных и какой должна быть размерность эмбеддинга, чтобы более-менее эффективно обучить схему.
Только я заметил, что промпт для создания программы значительно длиннее ее кода?
Фурье тут скорее всего плохо проходит - низкая точность. Мы например такие вещи параметрическими спектральными оценками считаем.
Конечно.
где тут камазы и легковушки? Своп на то и своп, чтобы его система и пользователь использовали по мере внезапной необходимости. Иначе смысл свопа теряется, нужно память закупать, а не заплатки ставить.
Почти. Apacer AS350 128G
У меня выдержал меньше года. Правда биг дата, машинное обучение и все такое, но интенсивность юзанья свопа была низкая - примерно 10-20 часов в неделю. Пару лет назад.
В общем: любишь своп на SSD, люби и дамп на HDD
техническая сторона вопроса такая: если у вас не хватает памяти, но есть своп на SSD, то он быстро сдохнет.