2014 dxdy logo

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

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




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


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

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

-- 22.09.2024, 15:08 --

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

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

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


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

(Не всегда)

Изображение


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

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

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


12/07/15
3311
г. Чехов
Как я пришел к 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
3311
г. Чехов
Mihaylo в сообщении #1655790 писал(а):
Билинейное преобразование

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

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


16/07/14
9143
Цюрих
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
3311
г. Чехов
mihaild в сообщении #1655895 писал(а):
Всё уже украдено до Вас, называется positional encoding.

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

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

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


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

Задача распознавания цифр 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
3311
г. Чехов
В пункте 2 у меня механизм активного внимания. Мне кажется, надо его как-то улучшить. Надо, чтобы он запрашивал более разнообразные пиксели. Пока не придумал. Может метрику разнообразия ввести? Какую?

-- 29.09.2024, 20:41 --

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

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


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

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


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

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


12/07/15
3311
г. Чехов
Нет, не совсем фиксированные пиксели.
Стартовые пиксели фиксированные, подсмотрел - (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
3311
г. Чехов
Я тут свою нейросетку разделил на две отдельные части: механизм внимания и персептивная часть. Начал их обучать двумя разными оптимизаторами.
1. Персептивная часть как обычно пытается дать лучшее предсказание классов.
2. А механизм внимания получил другой критерий, он берёт второй по вероятности класс и обучается на нём, как будто это был бы основной вариант ответа. Обучаясь по этому критерию, по моей задумке, механизм внимания выбирал бы более оппозиционные и противоречивые точки и как можно скорее разрешал бы конфликт вариантов ответа.

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

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

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


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

Итак, решаемая задача в общем виде:
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
50
Комбинация селектора и с предиктором - правильная идея, имхо. Надо совершенствовать остальное. Как именно? Тоже не знаю. :oops:

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


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

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, Супермодераторы



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

Сейчас этот форум просматривают: Rasool


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

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