Forwarded from the Turing Machine
Low-rank RNNs in ten minutes
Artificial neural networks are super cool. They are known for all sorts of computational prowesses, and they also happen to model brain processes quite well. Among artificial neural networks, there are recurrent neural networks (RNNs), which contain a pool of interconnected neurons, whose activity evolves over time. These networks can be trained to perform all sorts of cognitive tasks, and they exhibit activity patterns that are quite similar to what is observed in many brain areas... [ Read more ]
A post by Adrian Valente
Follow: @theTuringMachine
Artificial neural networks are super cool. They are known for all sorts of computational prowesses, and they also happen to model brain processes quite well. Among artificial neural networks, there are recurrent neural networks (RNNs), which contain a pool of interconnected neurons, whose activity evolves over time. These networks can be trained to perform all sorts of cognitive tasks, and they exhibit activity patterns that are quite similar to what is observed in many brain areas... [ Read more ]
A post by Adrian Valente
Follow: @theTuringMachine
Разбираемся в генеративных моделях: diffusion
Сейчас почти на каждом шагу можно встретить много разных генеративных моделей. Самый яркий пример — text-to-image/video модели, которые по текстовому описанию генерируют картинку или видео. Давайте погрузимся в термины diffusion и flow matching и разберемся, как это всё работает верхнеуровнево.
Предыстория и контекст
DDPM (Denoising Diffusion Probabilistic Models) стала одним из главных открытий в 2020 году. После этого ученые всерьез начали заниматься диффузиями и немного забросили работы по GAN, хотя их было очень много в то время.
Я прекрасно помню тот момент. Я работал в Huawei над улучшениями качества картинок, и в соседних командах потихоньку люди начинали обращать внимание на normalizing flows и diffusion. Мы тогда обучали U-Net подобные архитектуры и не отвлекались ни на что другое.
Проблема генерации данных
Собственно в чем суть. Чтобы генерировать данные, круто было бы понимать как эти данные распределены, в идеале иметь доступ к функции распределения. Ведь чтобы что-то генерировать/сэмплировать вам нужна эта функция.
Например, если у вас нормальное распределение (колокол) с известными средним и дисперсией, то вы с легкостью можете получать данные из этого распределения.
А как же быть с многомерными картинками? Ответ — никак, но... Невозможно получить распределение картинок, но можно его как-то попытаться смоделировать/аппроксимировать.
Основная идея диффузионных моделей
Итак, как я уже говорил, мы умеем получать значения из нормального распределения (ака шум). Теперь давайте обучим нейронку превращать наш шум в какие-нибудь данные (например, картинки).
Получаем шум, прогоняем модель, получаем картинку — вот так просто. Может это звучит немного странно, однако таким образом работают VAE и GAN.
Что особенного в диффузии?
Главное отличие заключается в том, что мы трансформируем шум в данные в несколько шагов, вместо одного. То есть мы учим нашу модель двигаться постепенно. Вот тебе 1000 шагов — потихоньку превращай шум в картинку.
И это работает просто и хорошо! Решаются проблемы VAE с размытостью генераций и GAN с нестабильным обучением. Да, процесс стал медленнее, но взамен мы получили стабильность и качество, а сам процесс обучения стал значительно проще.
Как это работает более подробно
В DDPM есть два процесса, прямой и обратный:
- В прямом мы зашумляем картинку, постепенно превращая в шум
- В обратном мы постепенно расшумляем, превращая в картинку
Существуют разные расписания шума, которые влияют на скорость и качество генерации.
Как мы учим модель расшумлять данные
Главное на что стоит обратить внимание — процесс стохастический. То есть даже во время генерации мы на каждом шаге добавляем шум. И как бы это ни звучало парадоксально, за счет этого шума мы как бы нивелируем небольшие неточности модели. То есть если модель на каком-то шаге свернула не туда, то добавленный шум может сгладить этот эффект. Это мое понимание. Если вы считаете иначе, пишите — обсудим.
Заключение
Надеюсь было полезно. Для более глубокого погружения - читаем отличный гайд на 80 страниц.
Tutorial on Diffusion Models for Imaging and Vision
В следующий раз поговорим про еще более простой способ.
Сейчас почти на каждом шагу можно встретить много разных генеративных моделей. Самый яркий пример — text-to-image/video модели, которые по текстовому описанию генерируют картинку или видео. Давайте погрузимся в термины diffusion и flow matching и разберемся, как это всё работает верхнеуровнево.
Предыстория и контекст
DDPM (Denoising Diffusion Probabilistic Models) стала одним из главных открытий в 2020 году. После этого ученые всерьез начали заниматься диффузиями и немного забросили работы по GAN, хотя их было очень много в то время.
Я прекрасно помню тот момент. Я работал в Huawei над улучшениями качества картинок, и в соседних командах потихоньку люди начинали обращать внимание на normalizing flows и diffusion. Мы тогда обучали U-Net подобные архитектуры и не отвлекались ни на что другое.
Проблема генерации данных
Собственно в чем суть. Чтобы генерировать данные, круто было бы понимать как эти данные распределены, в идеале иметь доступ к функции распределения. Ведь чтобы что-то генерировать/сэмплировать вам нужна эта функция.
Например, если у вас нормальное распределение (колокол) с известными средним и дисперсией, то вы с легкостью можете получать данные из этого распределения.
А как же быть с многомерными картинками? Ответ — никак, но... Невозможно получить распределение картинок, но можно его как-то попытаться смоделировать/аппроксимировать.
Основная идея диффузионных моделей
Итак, как я уже говорил, мы умеем получать значения из нормального распределения (ака шум). Теперь давайте обучим нейронку превращать наш шум в какие-нибудь данные (например, картинки).
Получаем шум, прогоняем модель, получаем картинку — вот так просто. Может это звучит немного странно, однако таким образом работают VAE и GAN.
Что особенного в диффузии?
Главное отличие заключается в том, что мы трансформируем шум в данные в несколько шагов, вместо одного. То есть мы учим нашу модель двигаться постепенно. Вот тебе 1000 шагов — потихоньку превращай шум в картинку.
И это работает просто и хорошо! Решаются проблемы VAE с размытостью генераций и GAN с нестабильным обучением. Да, процесс стал медленнее, но взамен мы получили стабильность и качество, а сам процесс обучения стал значительно проще.
Как это работает более подробно
В DDPM есть два процесса, прямой и обратный:
- В прямом мы зашумляем картинку, постепенно превращая в шум
- В обратном мы постепенно расшумляем, превращая в картинку
Существуют разные расписания шума, которые влияют на скорость и качество генерации.
Как мы учим модель расшумлять данные
def ddpm_train_step(self, x0):
"""
x0 - исходные данные
"""
batch_size = x0.shape[0]
# Выбираем случайный шаг времени
t = torch.randint(0, timesteps, (batch_size, 1))
# Добавляем шум к исходным данным
x_t, target_noise = add_noise(x0, t)
# Модель предсказывает добавленный шум
predicted_noise = model(x_t, t)
# Учим модель предсказывать правильно
loss = F.mse_loss(predicted_noise, target_noise)
return loss
Главное на что стоит обратить внимание — процесс стохастический. То есть даже во время генерации мы на каждом шаге добавляем шум. И как бы это ни звучало парадоксально, за счет этого шума мы как бы нивелируем небольшие неточности модели. То есть если модель на каком-то шаге свернула не туда, то добавленный шум может сгладить этот эффект. Это мое понимание. Если вы считаете иначе, пишите — обсудим.
Заключение
Надеюсь было полезно. Для более глубокого погружения - читаем отличный гайд на 80 страниц.
Tutorial on Diffusion Models for Imaging and Vision
В следующий раз поговорим про еще более простой способ.
Разбираемся в генеративных моделях: Flow matching
Помните, в прошлый раз мы разбирали DDPM, где нужно было делать 1000 шагов для генерации? А что если я скажу, что можно сделать всё то же самое, но в разы проще и быстрее?
Сегодня поговорим про flow matching в его самой простой форме - linear interpolation. Если DDPM показался вам сложным, то тут вы офигеете насколько всё просто.
В чём основная идея? Вместо того чтобы учить модель убирать шум пошагово (как в DDPM), мы учим её находить прямой путь от шума к картинке. Да-да, просто рисуем линию из точки А в точку Б!
Как это работает:
1. Берём шум и настоящую картинку
2. Случайно выбираем точку между ними (это наше t)
3. Просим модель предсказать в какую сторону двигаться из этой точки
И всё! Вот честно - это весь алгоритм. Смотрите какой простой код для обучения:
А генерация ещё проще - просто идём маленькими шажками в нужном направлении:
А теперь самое интересное - то что мы тут делаем, по сути решаем обычный дифур!
Наш vector_field это просто производная dx/dt, а в sample мы используем метод Эйлера для решения этого дифура. И тут открывается целое поле для экспериментов - можно использовать любые солверы: Рунге-Кутту, multistep методы и прочие штуки из мира численных методов.
В общем берите любой солвер из scipy.integrate и вперёд! Некоторые из них позволят ещё сильнее уменьшить количество шагов при генерации.
Главные преимущества по сравнению с DDPM:
- Не нужно возиться с расписаниями шума
- Процесс полностью детерминированный (мы же просто решаем дифур!)
- Генерация работает в разы быстрее
- Код настолько простой, что его можно написать за 5 минут
Я сам офигел когда первый раз это запустил - на многих задачах качество получается сравнимое с DDPM, а кода в три раза меньше.
Единственный небольшой минус - модель иногда бывает менее стабильной при обучении, т.к. нет стохастичности как в DDPM. Но это решается правильным подбором learning rate.
Flow Matching Guide and Code: https://arxiv.org/pdf/2412.06264
Помните, в прошлый раз мы разбирали DDPM, где нужно было делать 1000 шагов для генерации? А что если я скажу, что можно сделать всё то же самое, но в разы проще и быстрее?
Сегодня поговорим про flow matching в его самой простой форме - linear interpolation. Если DDPM показался вам сложным, то тут вы офигеете насколько всё просто.
В чём основная идея? Вместо того чтобы учить модель убирать шум пошагово (как в DDPM), мы учим её находить прямой путь от шума к картинке. Да-да, просто рисуем линию из точки А в точку Б!
Как это работает:
1. Берём шум и настоящую картинку
2. Случайно выбираем точку между ними (это наше t)
3. Просим модель предсказать в какую сторону двигаться из этой точки
И всё! Вот честно - это весь алгоритм. Смотрите какой простой код для обучения:
def train_step(self, x0):
batch_size = len(x0)
z = torch.randn(batch_size, self.dim).to(self.device)
t = torch.rand(batch_size, 1).to(self.device)
xt = (1 - t) * z + t * x0 # линейная интерполяция между шумом и картинкой
pred_field = self.vector_field(xt, t)
true_field = x0 - z # вот оно - направление от шума к картинке
loss = F.mse_loss(pred_field, true_field)
return loss # возвращаем loss, а не x
А генерация ещё проще - просто идём маленькими шажками в нужном направлении:
def sample(self, batch_size=64, steps=100):
dt = 1.0 / steps
x = torch.randn(batch_size, self.dim).to(self.device)
for i in range(steps):
t = torch.ones(batch_size, 1).to(self.device) * i * dt
v = self.vector_field(x, t)
x = x + dt * v
return x
А теперь самое интересное - то что мы тут делаем, по сути решаем обычный дифур!
Наш vector_field это просто производная dx/dt, а в sample мы используем метод Эйлера для решения этого дифура. И тут открывается целое поле для экспериментов - можно использовать любые солверы: Рунге-Кутту, multistep методы и прочие штуки из мира численных методов.
В общем берите любой солвер из scipy.integrate и вперёд! Некоторые из них позволят ещё сильнее уменьшить количество шагов при генерации.
Главные преимущества по сравнению с DDPM:
- Не нужно возиться с расписаниями шума
- Процесс полностью детерминированный (мы же просто решаем дифур!)
- Генерация работает в разы быстрее
- Код настолько простой, что его можно написать за 5 минут
Я сам офигел когда первый раз это запустил - на многих задачах качество получается сравнимое с DDPM, а кода в три раза меньше.
Единственный небольшой минус - модель иногда бывает менее стабильной при обучении, т.к. нет стохастичности как в DDPM. Но это решается правильным подбором learning rate.
Flow Matching Guide and Code: https://arxiv.org/pdf/2412.06264
Давайте я тоже выйду из тени, следуя примеру Александра 👋
Я на обеих фотках справа, это мы забавно поймали Joscha Bach после конференции в моём городке в Германии.
Меня зовут Алексей Тимченко, мы учились вместе с Сашей на программе "Когнитивные науки и технологии" ВШЭ. Там и зародилась идея писать разборы статей и посты, совмещая наши интересы в ИИ и нейронауках.
Сейчас нас разбросало по миру: я осенью закончил вторую магистратуру (уже по вычислительным нейронаукам) в Тюбингене и начал свой PhD в молодом институте Hertie institute for AI in brain health, а Саша разрабатывает vision BCI в Испании.
Во всей этой движухе мной движут вопросы фундаментальной науки. При всей полезности приложений, мне интересно понимать как конкретно устроены объекты, которые мы изучаем. В частности, до PhD я занимался тем как спайки и мозговые ритмы взаимодействуют между собой (фотка с FENS 2024 как раз про это). А в общности, я хочу понимать как динамика мозговых процессов опосредует вычисления, необходимые для выживания. Помимо этого, мне интересно всё смежное: сознание и подходы к нему через естественные науки и философию, BCI, эмерджентность в AI, агентность и модели мира в predictive coding.
Начинаем с малого, однако - с обработки зрительной информации. Во время PhD я постараюсь понять как геометрия естественных стимулов отражается в активности последующих структур: retina, thalamus, superior colliculus и V1. Для этого я буду работать в парадигме computation through low-dimensional dynamics и изучать вызванную стимулами динамику во всех перечисленных структурах. Думаю, придется основательно засесть за топологию и дифф. геометрию, чтобы охарактеризовать эти самые надоедливые нейроманифолды 😵💫
Путь интересный и непроторенный, так что буду писать о рандомных вещах в канал. Кстати, дайте знать, насколько интересны разборы фундаментальных концептов и теорий, я люблю погружаться в такие кроличье норы ✨
Я на обеих фотках справа, это мы забавно поймали Joscha Bach после конференции в моём городке в Германии.
Меня зовут Алексей Тимченко, мы учились вместе с Сашей на программе "Когнитивные науки и технологии" ВШЭ. Там и зародилась идея писать разборы статей и посты, совмещая наши интересы в ИИ и нейронауках.
Сейчас нас разбросало по миру: я осенью закончил вторую магистратуру (уже по вычислительным нейронаукам) в Тюбингене и начал свой PhD в молодом институте Hertie institute for AI in brain health, а Саша разрабатывает vision BCI в Испании.
Во всей этой движухе мной движут вопросы фундаментальной науки. При всей полезности приложений, мне интересно понимать как конкретно устроены объекты, которые мы изучаем. В частности, до PhD я занимался тем как спайки и мозговые ритмы взаимодействуют между собой (фотка с FENS 2024 как раз про это). А в общности, я хочу понимать как динамика мозговых процессов опосредует вычисления, необходимые для выживания. Помимо этого, мне интересно всё смежное: сознание и подходы к нему через естественные науки и философию, BCI, эмерджентность в AI, агентность и модели мира в predictive coding.
Начинаем с малого, однако - с обработки зрительной информации. Во время PhD я постараюсь понять как геометрия естественных стимулов отражается в активности последующих структур: retina, thalamus, superior colliculus и V1. Для этого я буду работать в парадигме computation through low-dimensional dynamics и изучать вызванную стимулами динамику во всех перечисленных структурах. Думаю, придется основательно засесть за топологию и дифф. геометрию, чтобы охарактеризовать эти самые надоедливые нейроманифолды 😵💫
Путь интересный и непроторенный, так что буду писать о рандомных вещах в канал. Кстати, дайте знать, насколько интересны разборы фундаментальных концептов и теорий, я люблю погружаться в такие кроличье норы ✨
Forwarded from All about AI, Web 3.0, BCI
Berkeley developed a streaming “brain-to-voice” neuroprosthesis which restores naturalistic, fluent, intelligible speech to a person who has paralysis.
Researchers adopted streaming transducer techniques similar to methods used by popular ASR methods like Siri or Alexa, and repurposed them for personalized brain-to-voice synthesis.
This approach resulted in significant improvements in the decoding speed of the brain-to-voice neuroprosthesis compared to prior approaches with longer delays.
Researchers also show continuous long-form brain-to-voice synthesis, robustness to model-generated auditory feedback, and out-of-vocabulary brain-to-voice synthesis.
Researchers adopted streaming transducer techniques similar to methods used by popular ASR methods like Siri or Alexa, and repurposed them for personalized brain-to-voice synthesis.
This approach resulted in significant improvements in the decoding speed of the brain-to-voice neuroprosthesis compared to prior approaches with longer delays.
Researchers also show continuous long-form brain-to-voice synthesis, robustness to model-generated auditory feedback, and out-of-vocabulary brain-to-voice synthesis.
Introduction | Smart stimulation patterns for visual prostheses
Я уже рассказывал, что начал работать над визуальными кортикальными имплантами. В этой области долгие годы используются одни и те же стандартные паттерны стимуляции — обычно 10-50 импульсов через несколько электродов за 100-200 мс. Такой подход далек от естественной активности мозга, но стабильно вызывает фосфены.
Я считаю, что можно существенно улучшить эту технологию. Например, отслеживать нейронную активность во время стимуляции и адаптировать параметры в реальном времени. Или использовать прямой фидбек пациента для итеративной оптимизации. Сейчас идеальное время для продвижения этой области — нужно сделать стимуляцию более естественной, использовать многоэлектродные массивы и создать замкнутые системы с нейронной обратной связью.
Я подготовил обзор четырех важных статей в этой области.
Towards biologically plausible phosphene simulation — использует in silico модель V1 коры для создания дифференцируемого симулятора фосфенов.
https://doi.org/10.7554/eLife.85812
Human-in-the-Loop Optimization — на синтетических данных ретинальных протезов разработан метод сжатия тысяч параметров стимуляции до 13 через байесовскую оптимизацию.
http://arxiv.org/abs/2306.13104
MiSO: Optimizing brain stimulation — на реальных записях Utah-массива (96 электродов) из PFC макаки создана система предсказания нейронных состояний от мультиэлектродной стимуляции.
https://openreview.net/forum?id=Gb0mXhn5h3
Precise control with dynamically optimized electrical stimulation — на ex vivo сетчатке мыши разработан алгоритм временного дизеринга( стимуляруем с небольшими задержками)
https://doi.org/10.7554/eLife.83424
Следующий пост будет с review. https://www.group-telegram.com/neural_cell.com/271
Я уже рассказывал, что начал работать над визуальными кортикальными имплантами. В этой области долгие годы используются одни и те же стандартные паттерны стимуляции — обычно 10-50 импульсов через несколько электродов за 100-200 мс. Такой подход далек от естественной активности мозга, но стабильно вызывает фосфены.
Я считаю, что можно существенно улучшить эту технологию. Например, отслеживать нейронную активность во время стимуляции и адаптировать параметры в реальном времени. Или использовать прямой фидбек пациента для итеративной оптимизации. Сейчас идеальное время для продвижения этой области — нужно сделать стимуляцию более естественной, использовать многоэлектродные массивы и создать замкнутые системы с нейронной обратной связью.
Я подготовил обзор четырех важных статей в этой области.
Towards biologically plausible phosphene simulation — использует in silico модель V1 коры для создания дифференцируемого симулятора фосфенов.
https://doi.org/10.7554/eLife.85812
Human-in-the-Loop Optimization — на синтетических данных ретинальных протезов разработан метод сжатия тысяч параметров стимуляции до 13 через байесовскую оптимизацию.
http://arxiv.org/abs/2306.13104
MiSO: Optimizing brain stimulation — на реальных записях Utah-массива (96 электродов) из PFC макаки создана система предсказания нейронных состояний от мультиэлектродной стимуляции.
https://openreview.net/forum?id=Gb0mXhn5h3
Precise control with dynamically optimized electrical stimulation — на ex vivo сетчатке мыши разработан алгоритм временного дизеринга( стимуляруем с небольшими задержками)
https://doi.org/10.7554/eLife.83424
Следующий пост будет с review. https://www.group-telegram.com/neural_cell.com/271
Review | Smart stimulation patterns for visual prostheses
🔘 Towards biologically plausible phosphene simulation
tl;dr: Differentiable PyTorch simulator translating V1 stimulation to phosphene perception for end-to-end optimization
- Fully differentiable pipeline allowing optimization of all stimulation parameters via backpropagation
- Based on many experimental data.
- Bridges gap between electrode-level stimulation and resulting visual perception
link: https://doi.org/10.7554/eLife.85812
🔘 Human-in-the-Loop Optimization for Visual Prostheses
tl;dr: Neural encoder + Preference bayesian optimization.
- Train deep stimulus encoder (DSE): transform images -> stimulation.
- Add "patient params" 13 values as additional input into DSE.
- Uses Preferential Bayesian Optimization with GP prior to update only "patients" params using only binary comparisons
- Achieves 80% preference alignment after only 150 comparisons despite 20% simulated noise in human feedback
link: https://arxiv.org/abs/2306.13104
🔘 MiSO: Optimizing brain stimulation for target neural states
tl;dr: ML system that predicts and optimizes multi-electrode stimulation to achieve specific neural activity patterns
- Utah array on monkey PFC
- One-two electrode stimulation with fixed frequency/amplitude
- Collect paired (stim, signals) data across multiple sessions
- Extract latent features using Factor Analysis (FA)
- Align latent spaces across sessions using Procrustes method
- Train CNN to predict latent states from stim patterns
- Apply epsilon-greedy optimizer to find optimal stimulation in closed-loop
link: https://www.nature.com/articles/s41467-023-42338-8
🔘 Precise control with dynamically optimized electrical stimulation
tl;dr: Temporal dithering algorithm exploits neural integration window to enhance visual prosthesis performance by 40%
- Uses triphasic pulses at 0.1ms intervals optimized within neural integration time window (10-20ms)
- Implements spatial multiplexing with 200μm exclusion zones to prevent electrode interference
- Achieves 87% specificity in targeting ON vs OFF retinal pathways, solving a fundamental limitation of current implants
link: https://doi.org/10.7554/eLife.83424
my thoughts
The field is finally moving beyond simplistic zap-and-see approaches. These papers tackle predicting perception, minimizing patient burden, targeting neural states, and improving power efficiency. What excites me most is how these methods could work together - imagine MiSO's targeting combined with human feedback and efficient stimulation patterns. The missing piece? Understanding how neural activity translates to actual perception. Current approaches optimize for either brain patterns OR what people see, not both. I think the next breakthrough will come from models that bridge this gap, perhaps using contrastive learning to connect brain recordings with what people actually report seeing.
tl;dr: Differentiable PyTorch simulator translating V1 stimulation to phosphene perception for end-to-end optimization
- Fully differentiable pipeline allowing optimization of all stimulation parameters via backpropagation
- Based on many experimental data.
- Bridges gap between electrode-level stimulation and resulting visual perception
link: https://doi.org/10.7554/eLife.85812
tl;dr: Neural encoder + Preference bayesian optimization.
- Train deep stimulus encoder (DSE): transform images -> stimulation.
- Add "patient params" 13 values as additional input into DSE.
- Uses Preferential Bayesian Optimization with GP prior to update only "patients" params using only binary comparisons
- Achieves 80% preference alignment after only 150 comparisons despite 20% simulated noise in human feedback
link: https://arxiv.org/abs/2306.13104
tl;dr: ML system that predicts and optimizes multi-electrode stimulation to achieve specific neural activity patterns
- Utah array on monkey PFC
- One-two electrode stimulation with fixed frequency/amplitude
- Collect paired (stim, signals) data across multiple sessions
- Extract latent features using Factor Analysis (FA)
- Align latent spaces across sessions using Procrustes method
- Train CNN to predict latent states from stim patterns
- Apply epsilon-greedy optimizer to find optimal stimulation in closed-loop
link: https://www.nature.com/articles/s41467-023-42338-8
tl;dr: Temporal dithering algorithm exploits neural integration window to enhance visual prosthesis performance by 40%
- Uses triphasic pulses at 0.1ms intervals optimized within neural integration time window (10-20ms)
- Implements spatial multiplexing with 200μm exclusion zones to prevent electrode interference
- Achieves 87% specificity in targeting ON vs OFF retinal pathways, solving a fundamental limitation of current implants
link: https://doi.org/10.7554/eLife.83424
my thoughts
The field is finally moving beyond simplistic zap-and-see approaches. These papers tackle predicting perception, minimizing patient burden, targeting neural states, and improving power efficiency. What excites me most is how these methods could work together - imagine MiSO's targeting combined with human feedback and efficient stimulation patterns. The missing piece? Understanding how neural activity translates to actual perception. Current approaches optimize for either brain patterns OR what people see, not both. I think the next breakthrough will come from models that bridge this gap, perhaps using contrastive learning to connect brain recordings with what people actually report seeing.
Please open Telegram to view this post
VIEW IN TELEGRAM
the last neural cell pinned «Introduction | Smart stimulation patterns for visual prostheses Я уже рассказывал, что начал работать над визуальными кортикальными имплантами. В этой области долгие годы используются одни и те же стандартные паттерны стимуляции — обычно 10-50 импульсов…»
Токенизация изображений: от сверток к трансформерам
Долгие годы для представления картинок в сжатом виде использовали разные вариации автоэнкодеров. Чтобы получить дискретное представление (то есть набор конкретных "символов" вместо непрерывных значений), применяли VQ-VAE — это по сути обычный авто энкодер, но с vector-quantized слоем посередине.
Но в середине прошлого года трансформеры добрались и до этой области.
Главная идея состоит в том, чтобы:
1. Заменить свертки на трансформеры
2. Убрать 2D-сетку и представлять картинку как просто последовательность токенов (без явной пространственной привязки для каждого токена)
TiTok: An Image is Worth 32 Tokens
link: https://arxiv.org/abs/2406.07550
Главная фишка — всего 32/64/128 токенов достаточно для представления целого изображения!
Как это работает:
- Энкодер и декодер — оба на основе Vision Transformer
- К патчам изображения присоединяются специальные registers токены
- Эти register токены квантуются (превращаются в вектора из словаря)
- эти токены подаются на вход декодеру вместе с [MASK] токенами
Интересно, что эта архитектура похожа на MAE (Masked Autoencoder), только с акцентом на компактное представление.
Для генерации используется maskGIT, и получаются довольно качественные изображения. При этом никакой диффузии — всё быстро и понятно.
FlexTok: гибкая длина токенов
link: https://arxiv.org/abs/2502.13967
FlexTok берет идею TiTok, но вместо работы с оригинальным изображением начинает с VAE-latents:
- Добавляет flow matching для декодера
- Использует регистры как условие для модели
- Применяет nested dropout для регистров, чтобы декодер мог работать с разным числом токенов (от 1 до 256)
- use FSQ квантизацию как COSMOS by NVIDIA
FlowMO: прямой подход
link: https://www.arxiv.org/abs/2503.11056
FlowMO - Это TiTok но с диффузией для декодера.
- Работаем напрямую с картинками
- Используем все токены для реконструкции
- тоже диффузионный декодер
Сравнение моделей
TiTok работает с исходными изображениями, не использует диффузионный декодер, применяет дистилляцию через MagViT VQVAE и стандартную квантизацию.
FlexTok работает с VAE-латентами, использует диффузионный декодер, обходится без дистилляции и применяет FSQ квантизацию с 64k векторов.
FlowMO работает с исходными изображениями, использует диффузионный декодер, обходится без дистилляции и применяет LFQ (sign) квантизацию со сложными функциями потерь.
Мои мысли о развитии этих подходов
Объединить MAE с TiTok:
- используем маскирование входного изображения, как в MAE. По идеи ддолжно ускорить работу и сделать токены ещё более информативными.
Объединить FlexTok, TiTok и MAE в один универсальный экстрактор признаков:
- Случайное маскирование для входного изображения (0, 0.25, 0.5, 0.75, 1)
- Nested dropout для латентов (как в FlexTok)
- Маскирование токенов для декодера: 0.5, 0.75, 1 как это делают уже в maskGIT
- Плюс сюда же ещё добавить REPA
Долгие годы для представления картинок в сжатом виде использовали разные вариации автоэнкодеров. Чтобы получить дискретное представление (то есть набор конкретных "символов" вместо непрерывных значений), применяли VQ-VAE — это по сути обычный авто энкодер, но с vector-quantized слоем посередине.
Но в середине прошлого года трансформеры добрались и до этой области.
Главная идея состоит в том, чтобы:
1. Заменить свертки на трансформеры
2. Убрать 2D-сетку и представлять картинку как просто последовательность токенов (без явной пространственной привязки для каждого токена)
TiTok: An Image is Worth 32 Tokens
link: https://arxiv.org/abs/2406.07550
Главная фишка — всего 32/64/128 токенов достаточно для представления целого изображения!
Как это работает:
- Энкодер и декодер — оба на основе Vision Transformer
- К патчам изображения присоединяются специальные registers токены
- Эти register токены квантуются (превращаются в вектора из словаря)
- эти токены подаются на вход декодеру вместе с [MASK] токенами
Интересно, что эта архитектура похожа на MAE (Masked Autoencoder), только с акцентом на компактное представление.
Для генерации используется maskGIT, и получаются довольно качественные изображения. При этом никакой диффузии — всё быстро и понятно.
FlexTok: гибкая длина токенов
link: https://arxiv.org/abs/2502.13967
FlexTok берет идею TiTok, но вместо работы с оригинальным изображением начинает с VAE-latents:
- Добавляет flow matching для декодера
- Использует регистры как условие для модели
- Применяет nested dropout для регистров, чтобы декодер мог работать с разным числом токенов (от 1 до 256)
- use FSQ квантизацию как COSMOS by NVIDIA
FlowMO: прямой подход
link: https://www.arxiv.org/abs/2503.11056
FlowMO - Это TiTok но с диффузией для декодера.
- Работаем напрямую с картинками
- Используем все токены для реконструкции
- тоже диффузионный декодер
Сравнение моделей
TiTok работает с исходными изображениями, не использует диффузионный декодер, применяет дистилляцию через MagViT VQVAE и стандартную квантизацию.
FlexTok работает с VAE-латентами, использует диффузионный декодер, обходится без дистилляции и применяет FSQ квантизацию с 64k векторов.
FlowMO работает с исходными изображениями, использует диффузионный декодер, обходится без дистилляции и применяет LFQ (sign) квантизацию со сложными функциями потерь.
Мои мысли о развитии этих подходов
Объединить MAE с TiTok:
- используем маскирование входного изображения, как в MAE. По идеи ддолжно ускорить работу и сделать токены ещё более информативными.
Объединить FlexTok, TiTok и MAE в один универсальный экстрактор признаков:
- Случайное маскирование для входного изображения (0, 0.25, 0.5, 0.75, 1)
- Nested dropout для латентов (как в FlexTok)
- Маскирование токенов для декодера: 0.5, 0.75, 1 как это делают уже в maskGIT
- Плюс сюда же ещё добавить REPA
What does it mean to understand the brain function?
In search of neuroscience paradigms [part 0 - introduction]
A lot of papers are published daily on brain function on multiple levels. What I found interesting is that each study contains an implicit set of assumptions, which are part of a larger research program. Thus, different researchers mean different things when generating scientific insight.
This can lead to vastly different interpretations of the same experimental result. The biggest problem is in my opinion that these assumptions/paradigms are kept implicit and researchers are sometimes not even aware which theories they assume to be true while generating hypotheses and conducting experiments.
I will attempt to bridge this brain-science to "meta-science" gap in the next few posts, of course on the level of a beginner PhD student and from a perspective of a neuroscientist (within rather than above science) that seeks precision and awareness of scientific frameworks we all choose to work on.
Neuroscience is one of the fields with a unique position in this regard - as opposed to physics we really don't have a coherent picture unifying different scales where we established certain laws. We actually rarely have laws and theories that are universally accepted - this is the beauty of being in this field, but also a curse because hot debates are unavoidable.
So, in the next posts I will cover some of the old and emerging theories & frameworks about what it means to understand a biological neural network:
1. "Grandmother cells" & single-neuron frameworks
2. Cell-assemblies & Hebbian associations
3. Embodied & ecological cognition, naturalistic settings
4. Predictive coding & Bayesian brain
5. Feedforward processing & I/O relations, decoding
6. Dynamical systems & population codes
7. Connectomics & structural mapping
8. Computations in electric fields vs spiking
9. Cognitive modules vs distributed processing
What I won't cover for now but maybe will, is the philosophy of scientific insight (realism vs instrumentalism, functional vs mechanistic, reductionist vs holistic, explanation vs description). Also I won't touch AI computations for now, however might do in the future when it becomes more relevant to my research.
Hopefully, after this post series you will gain something valuable to apply to your work. Or you will learn about the existential troubles neuroscientists face, if you're just interested in the field 😉
Which topic would you like to read about first?
P.S. As for the extended read for those interested, here is the paper that stimulated my deeper exploration. Frankly I did not enjoy it too much but it definitely asked the right questions and forced me to try to prove the authors wrong.
In search of neuroscience paradigms [part 0 - introduction]
A lot of papers are published daily on brain function on multiple levels. What I found interesting is that each study contains an implicit set of assumptions, which are part of a larger research program. Thus, different researchers mean different things when generating scientific insight.
This can lead to vastly different interpretations of the same experimental result. The biggest problem is in my opinion that these assumptions/paradigms are kept implicit and researchers are sometimes not even aware which theories they assume to be true while generating hypotheses and conducting experiments.
I will attempt to bridge this brain-science to "meta-science" gap in the next few posts, of course on the level of a beginner PhD student and from a perspective of a neuroscientist (within rather than above science) that seeks precision and awareness of scientific frameworks we all choose to work on.
Neuroscience is one of the fields with a unique position in this regard - as opposed to physics we really don't have a coherent picture unifying different scales where we established certain laws. We actually rarely have laws and theories that are universally accepted - this is the beauty of being in this field, but also a curse because hot debates are unavoidable.
So, in the next posts I will cover some of the old and emerging theories & frameworks about what it means to understand a biological neural network:
1. "Grandmother cells" & single-neuron frameworks
2. Cell-assemblies & Hebbian associations
3. Embodied & ecological cognition, naturalistic settings
4. Predictive coding & Bayesian brain
5. Feedforward processing & I/O relations, decoding
6. Dynamical systems & population codes
7. Connectomics & structural mapping
8. Computations in electric fields vs spiking
9. Cognitive modules vs distributed processing
What I won't cover for now but maybe will, is the philosophy of scientific insight (realism vs instrumentalism, functional vs mechanistic, reductionist vs holistic, explanation vs description). Also I won't touch AI computations for now, however might do in the future when it becomes more relevant to my research.
Hopefully, after this post series you will gain something valuable to apply to your work. Or you will learn about the existential troubles neuroscientists face, if you're just interested in the field 😉
Which topic would you like to read about first?
P.S. As for the extended read for those interested, here is the paper that stimulated my deeper exploration. Frankly I did not enjoy it too much but it definitely asked the right questions and forced me to try to prove the authors wrong.
arXiv.org
What does it mean to understand a neural network?
We can define a neural network that can learn to recognize objects in less than 100 lines of code. However, after training, it is characterized by millions of weights that contain the knowledge...
Forwarded from the last neural cell (Aleksejs Timčenko)
Which topics would you like me to cover? 👋
Anonymous Poll
33%
"Grandmother cells" & single-neuron frameworks
37%
Cell-assemblies & Hebbian associations
30%
Embodied & ecological cognition, naturalistic settings
53%
Predictive coding & Bayesian brain
37%
Feedforward processing & I/O relations, decoding
49%
Dynamical systems & population codes
30%
Connectomics & structural mapping
30%
Computations in electric fields vs spiking
30%
Cognitive modules vs distributed processing
2%
I will add my topic in the comments 🤔