2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Механизм активного внимания
Сообщение23.09.2024, 07:24 


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

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

-- 22.09.2024, 15:08 --

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

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

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


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

(Не всегда)

Изображение


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

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

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


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

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

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


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

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

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

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


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

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

-- 29.09.2024, 20:41 --

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

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


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

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


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

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


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

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

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



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

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


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

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