2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Механизм активного внимания
Сообщение23.09.2024, 07:24 


12/07/15
3345
г. Чехов
Mihaylo в сообщении #1655567 писал(а):
Говоря на языке трансформеров, я хочу найти такую структуру самовнимания, которая не будет вычислять всю матрицу $RW$ поголовно, а будет запрашивать нужные отдельные элементы матрицы, чтобы убедиться, что скалярное произведение вероятно имеет большое или наоборот маленькое значение.

Например, пиксель внизу изображения зеленый, вверху - синий. Значит на изображении лето. Всего по двум пикселям можно определить искомое. Это очень и очень хороший контракт!

-- 22.09.2024, 15:08 --

Допустим получен первый токен "Петя", можно попробовать запросить следующее слово, оно окажется "ударил" - эта информация уже отвечает на вопросы "Петя преступник?" или "Петя злой?". Хотя конечно стоило бы перепровериться и запросить еще информацию, вдруг Петя ударил по барабану палочкой.

В общем подобный механизм внимания спекулятивный, но сильно экономит ресурсы, так как сопоставлять токены каждый с каждым - это сильно круто.

Таким макаром мы читаем "по диагонали" и слушаем собеседников.)


mihaild в сообщении #1655634 писал(а):

(Не всегда)

Изображение


Я хочу реализовать механизм активного внимания. Это то, о чем я говорил ранее: достаточно посмотреть на зеленый пиксель внизу и синий пиксель вверху, чтобы сделать ошибочный вероятный вывод о том, что на фото запечатлено лето.

Именно поэтому я пришёл к идее SoftOrdering. Мягкое упорядочивание умеет работать с неупорядоченными данными. Наши два пикселя - зеленый и синий - могут иметь произвольный порядок. Ещё один плюс - последовательность пикселей может быть любой длины. Не хватает только механизма для отбора пикселей. Активное внимание - это по сути активное обучение, когда нейросеть сама определяет, на каких данных ей обучаться. Нейросеть должна отбирать наиболее лучшие пиксели с точки зрения информативности.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение23.09.2024, 21:07 


12/07/15
3345
г. Чехов
Как я пришел к SoftOrdering? Я вообще изначально думал как реализовать механизм активного внимания. Типа зрачок глаза пробегается по изображению и, игнорируя подавляющее и бесполезное количество пикселей, определяет, что изображено. Работа глазодвигательной мышцы зрачка - это по сути выбор координаты $(x, y)$ пикселя для анализа.

Но как существующие базовые структуры работают с графическими данными? Если тебя интересует пиксель с координатами $(3, 4)$, то запроси значение вектора $x[85]$. А для пикселя $(4,4)$ запроси значение вектора $x[112]$. Никакой логики и понимания.

Тут я не придумал ничего лучше как сделать unbinding - оторвать данные от индексов массива. Для этого нужно пиксели хранить не в виде вектора $x$ длиной 784 элемента, а иметь данные в виде массива $[(x_1, y_1, value_1), (x_2, y_2, value_2), ...]$. При чем данные должны быть неупорядоченные, ведь наш глаз будет двигаться по пикселям в произвольном порядке.
Операция unbinding абсолютно не теряет информацию об исходном векторе $x$, это, я считаю, важно.

Такие данные называются облаком точек (point cloud) и особо хороших алгоритмов для работы с ними нет, известны лучшие алгоритмы в этом классе PointNet и PointNet++. Я изобрел SoftOrdering, но в результате анализа работы по PointNet я понял, что у меня абсолютно такая же структура, только вместо MaxPool у меня Histogram. Histogram заведомо выигрышнее, так как имеет гиперпараметр, который регулирует сжатие данных от 0 до 100%.

Что я думаю? Нагенерировать случайным образом наборы координат точек фиксированной длины. Координаты генерируются вещественные, но наш массив понимает только целые значения координат от 0 до 27. Чтобы решить эту проблему, мне пришла в голову применить билинейное преобразование. То есть пиксель с вещественными координатами находится между четырьмя окружающими целочисленными пикселями, он получает усреднённое значение $value$ по правилу билинейного преобразования. Билинейное преобразование легко дифференцируемо, и это кажется гениально.
Соответственно входные данные $(x,y)$ я хочу обучать, PyTorch такое позволяет.

В итоге можно получить обученные последовательности координат пикселей, оптимальные для анализа. Ещё тут может быть рекуррентный вариант алгоритма, который посмотрит первую точку, проанализирует её и на основании первых данных запросит вторую точку и т.д. Работы уйма.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение24.09.2024, 06:14 


12/07/15
3345
г. Чехов
Mihaylo в сообщении #1655790 писал(а):
Билинейное преобразование

Наверное всё-таки бикубическая интерполяция, у билинейной проблема с вычислением градиентов в граничных точках.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение24.09.2024, 13:47 
Заслуженный участник
Аватара пользователя


16/07/14
9201
Цюрих
Mihaylo в сообщении #1655790 писал(а):
Но как существующие базовые структуры работают с графическими данными? Если тебя интересует пиксель с координатами $(3, 4)$, то запроси значение вектора $x[85]$.
Это неправда, есть много структур, работающих с многомерными данными напрямую.
Mihaylo в сообщении #1655790 писал(а):
Для этого нужно пиксели хранить не в виде вектора $x$ длиной 784 элемента, а иметь данные в виде массива $[(x_1, y_1, value_1), (x_2, y_2, value_2), ...]$.
Всё уже украдено до Вас, называется positional encoding.
Собственно интерполяцию оно даст автоматически (только не по соседним пикселям, а по всем, но с убывающими весами).
Mihaylo в сообщении #1655851 писал(а):
у билинейной проблема с вычислением градиентов в граничных точках
Это совершенно не проблема, ReLU же используют.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение24.09.2024, 15:36 


12/07/15
3345
г. Чехов
mihaild в сообщении #1655895 писал(а):
Всё уже украдено до Вас, называется positional encoding.

Спасибо.
mihaild в сообщении #1655895 писал(а):
Это совершенно не проблема, ReLU же используют.

Мы на вход подаём одно и то же изображение несколько раз, я так думаю. А значит найдется неглубокая ложбина в овраге, куда градиентный спуск быстро сползёт и застрянет.
Ещё другая проблема: застревание градиентного поиска в мёртвых зонах, где пиксели почти всегда цвета фона.
Поэтому я хотел, чтобы интерполяция учитывала больше пикселей вокруг.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение29.09.2024, 18:05 


12/07/15
3345
г. Чехов
Запилил я алгоритм. Я его реализовал немного не так, как описывал здесь и задумывал.

Задача распознавания цифр MNIST. Сначала у нас пустая гистограмма и начальное предсказание по классам равномерное [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1].
1. Мы берем гистограмму и предсказание, конкатенируем их ("склеиваем" в общий вектор).
2. Отдаём вектор на простенький полносвязный слой, выход этого слоя - две координаты пикселя $i$ и $j$.
3. Далее, используя изображение текущей цифры и билинейную интерполяцию, получаем значение пикселя $value$ с координатами $i, j$.
4. Собираем еще один вектор из текущей гистограммы, из индексов $i, j$ и значения $value$.
5. Отдаём второй вектор на слой RecurrentSoftOrdering. Выход этого слоя - приращение гистограммы.
6. Приращиваем гистограмму.
7. Отдаём гистограмму на третий полносвязный слой с софтмаксом. Выход - предсказание вероятностей 10 классов.
8. Переходим к п.1 Заметим, что гистограмма и предсказание классов обновились и следующая итерация будет несколько иной.

Таким образом цикл повторяется 25 раз (для примера), в каждом цикле в идеале должны быть обработаны 25 разных пикселей из 784. Эти пиксели отличаются тем, что их выбирает сама нейросеть. Это называется активным обучением.

Пока не получается хорошо. :oops: Слишком инновационно. :mrgreen:

-- 29.09.2024, 18:11 --

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

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение29.09.2024, 20:20 


12/07/15
3345
г. Чехов
В пункте 2 у меня механизм активного внимания. Мне кажется, надо его как-то улучшить. Надо, чтобы он запрашивал более разнообразные пиксели. Пока не придумал. Может метрику разнообразия ввести? Какую?

-- 29.09.2024, 20:41 --

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

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение01.10.2024, 19:01 


12/07/15
3345
г. Чехов
Кто-нибудь может навскидку подтвердить, что при умном выборе по двум пикселям можно предсказывать с точностью примерно 30%? Теоретический предел 40%?

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение01.10.2024, 20:28 
Заслуженный участник
Аватара пользователя


16/07/14
9201
Цюрих
Не очень понимаю, откуда Вы взяли эти числа. Если игнорировать всё переобучение, и считать координаты фиксированными - т.е. у нас есть полный датасет, кто-то выбирает случайную картинку из него, нам разрешают написать на бумажке две пары координат, после чего сообщают яркости по этим двум координатам - то мы можем правильно называть цифру в 34711 (из 70000) случаев (запросив координаты 406 и 409).

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение02.10.2024, 04:24 


12/07/15
3345
г. Чехов
Нет, не совсем фиксированные пиксели.
Стартовые пиксели фиксированные, подсмотрел - (17.2, 14.5), а вторая пара запрашивается в зависимости от прогноза. Для примера (21.6, 17.5). Варьируется вторая пара несильно, в ограниченной области квадранта.


Я взял число 40% (0,4) исходя из того, что каждая цифра в датасете представлена примерно на 10% и цифры всё-таки примерно похожи сами на себя, пиксели принимают значения 0 и 255. При таких очень грубых допущениях, имея два пикселя, можно надёжно угадывать $4 = 2^2$ варианта.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение03.10.2024, 21:14 


12/07/15
3345
г. Чехов
Я тут свою нейросетку разделил на две отдельные части: механизм внимания и персептивная часть. Начал их обучать двумя разными оптимизаторами.
1. Персептивная часть как обычно пытается дать лучшее предсказание классов.
2. А механизм внимания получил другой критерий, он берёт второй по вероятности класс и обучается на нём, как будто это был бы основной вариант ответа. Обучаясь по этому критерию, по моей задумке, механизм внимания выбирал бы более оппозиционные и противоречивые точки и как можно скорее разрешал бы конфликт вариантов ответа.

Но оказалось, что механизм внимания более устойчиво и уверенно работает, если CrossEntropyLoss считать на самом низковероятном классе. Если основной оптимизатор обучает персептивную часть на критерии CrossEntropyLoss of argmax, то оптимизатор механизма внимания - на критерии CrossEntropyLoss of argmin.

Не сказать, что работает прям круто и чётко, но мне нравится концепция.)

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение03.11.2024, 12:53 


12/07/15
3345
г. Чехов
Долго не писал, так как был в месячном бане. Но я за это время провёл кучу экспериментов.

Итак, решаемая задача в общем виде:
1. Берётся стандартный датасет от Яна Лекуна - арабские цифры MNIST 28х28 пикселей со значениями 0-255; 60000 примеров для обучения и 10000 - для теста.
2. Алгоритм может запрашивать $b$ пикселей изображения ($b$ - бюджет) пошагово, то есть сначала запрашивает значение первого пикселя по координатам $(i_1, j_1)$, делает какое-то предположение и запрашивает следующий пиксель $(i_2, j_2)$ и так далее не более $(i_b, j_b)$.
3. Результатом всех шагов должен быть ответ, какая цифра на изображении.

Но в результате я решаю задачу в частном виде: на каждом шаге алгоритм запрашивает значения сразу 16-ти пикселей, которые всегда расположены в форме "каре" 4х4, который запрашивается всё также одной парой координат $(i_1, j_1)$ и т.д. То есть один шаг частной задачи можно рассматривать как 16 шагов общей задачи, а бюджет запросов пикселей будет также отличаться в 16 раз. Если в общей задаче алгоритм обдумывает выбор пикселя 16 раз, то в частной - только лишь один раз, но зато чуть производительнее может быть организован запрос и самое главное - можно применить 2D-свёрточный слой к обработке запроса. В общем я применил в этом деле хитрость Яна Лекуна.

Алгоритм активного обучения классически состоит из двух частей: оракул и селектор. Оракул умеет принимать какие-то данные для анализа и давать ответ. Селектор выбирает данные, которые с его точки зрения наилучшим образом подойдут для оракула и наилучшим образом обучат его. Имеет место конфликт Exploitation & Exploration. С одной стороны, следует точно угадать текущий ответ, а с другой стороны, изучить и обобщить датасет.

Вкратце, в моей серии алгоритмов селектор запрашивает координату каре-пикселя в виде вещественных координат, при этом координаты округляются до меньших целых (с помощью floor). И эти целые координаты собственно определяют положение каре. Далее полученное каре с помощью билинейной интерполяции преобразуется в девятку значений пикселей. Билинейная интерполяция учитывает отброшенную дробную часть координат. Вся эта сложность нужна для того, чтобы алгоритм обратного распространения ошибки (backprop) мог собственно распространить ошибку насквозь через селектор.

С точки зрения backprop, селектор находится на входе, он анализирует выход оракула (либо дефолтный ответ), генерирует запрашиваемую координату пикселя, далее идут запрос каре-пикселя и билинейная интерполяция и после всего этого - оракул. Оракул имеет на входе сверточный 2D-слой, а далее слой SoftOrdering, который умеет накапливать пошаговые результаты.

Какие получены лучшие результаты?

1. Если запрашивать всего один фиксированный пиксель изображения, то можно выйти на точность 30+%. Этот результат я получил с помощью более простого алгоритма без билинейной интерполяции ещё месяц назад, писал об этом.
2. Запрашиваем 1 каре-пиксель: точность 57,0% на тестовых данных.
3. 2 каре-пикселя: 67,2%.
4. 3 каре-пикселя: 72,9%.
5. 4 каре-пикселя: 77,2%.
6. 5 каре-пикселей: 77,8%.
7. 10 каре-пикселей: 77,3%.

Мне кажется проблема в алгоритме селектора.

Цель - пробить этот потолок обучения. Кстати, результаты получены несколько разными алгоритмами. То есть общий алгоритм для 1-каре/2-каре/3-каре/4-каре не работает для 5-каре и 10-каре.

-- 03.11.2024, 13:18 --

Немного философии-в-науке:

Мне кажется, в задаче селектор играет гораздо более важную роль, чем оракул. При чем это выглядит так: если мы хотим простых результатов (до 50-70% точности), то селектор вообще почти неважен. Но как только мы ставим задачу достижения точности 90%+, то тут наступает его час.

Алгоритм 1...4-каре очень быстро обучался и включал в себя достаточно простую цель: распределение запрашиваемых каре-пикселей таким образом, чтобы расстояние между ними было не менее чем 3 пикселя. (Это логично, зачем анализировать одни и те же пиксели по несколько раз.)

В общем сейчас не найден хороший подход к селекции пикселей.

-- 03.11.2024, 13:28 --

Существует также проблема устойчивости: если бюджет каре-пикселей небольшой $b \leqslant 4$, то алгоритм хорошо сходится. Если количество пикселей растёт, то селектор и оракул в какой-то момент выходят "на контры", результаты уходят вниз и почти всегда не возвращаются к достигнутым значениям.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение05.11.2024, 15:11 


14/03/22
54
Комбинация селектора и с предиктором - правильная идея, имхо. Надо совершенствовать остальное. Как именно? Тоже не знаю. :oops:

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение07.11.2024, 20:09 


12/07/15
3345
г. Чехов
Mihaylo в сообщении #1660496 писал(а):
1. Если запрашивать всего один фиксированный пиксель изображения, то можно выйти на точность 30+%. Этот результат я получил с помощью более простого алгоритма без билинейной интерполяции ещё месяц назад, писал об этом.
2. Запрашиваем 1 каре-пиксель: точность 57,0% на тестовых данных.
3. 2 каре-пикселя: 67,2%.
4. 3 каре-пикселя: 72,9%.
5. 4 каре-пикселя: 77,2%.
6. 5 каре-пикселей: 77,8%.
7. 10 каре-пикселей: 77,3%.

Провёл такой эксперимент - заменил селектор на статический, он запрашивает фиксированные координаты каре-пикселей, которые я задал вручную на своё усмотрение. Результат следующий:

1-каре пиксель: точность 49,5% на тестовых данных.
2-каре пикселя: 66,5%
3-каре пикселя: 76,8%
4-каре пикселя: 82,3%
5-каре пикселей: 85,4%
10-каре пикселей: 90,2%

Статический селектор не использует в работе апостериорную информацию (предыдущие запрошенные пиксели и предположение оракула). Значит теоретически можно улучшить работу селектора, полученные данные выше являются опорными. Как видно, для 1-каре просто найдены координаты получше, а для 2-каре апостериорный селектор чуть-чуть работает, превосходство в пределах погрешности.

 Профиль  
                  
 
 Re: Механизм активного внимания
Сообщение07.11.2024, 21:12 


12/07/15
3345
г. Чехов
Провёл еще один эксперимент - селектор динамический, который запрашивает квазистатические пиксели, пытаясь их понемножку улучшать по обратной связи. Результат:

1-каре пиксель: точность 56,2% на тестовых данных.
2-каре пикселя: 69,2%
3-каре пикселя: 79,2%
4-каре пикселя: 84,5%
5-каре пикселей: 88,7%
10-каре пикселей: 90,2%

Есть улучшение по всему эксперименту, кроме 10-каре точек (пикселям видимо тесно, улучшаться некуда).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group