Примечание редактора. Олаф де Леу выступает с докладом на ODSC West 2021. Обязательно ознакомьтесь с его докладом «На пути к более энергоэффективным нейронным сетям? Используй свой мозг!" там!
В последние годы модели машинного обучения быстро развивались. Машинное обучение является популярной областью, и специалисты по данным и инженеры по машинному обучению разработали самые удивительные модели, от сверточных нейронных сетей до глубокого Q-обучения. Все используют алгоритмы с приложениями в разных областях, которые используются большинством людей в любое время и в любой день, когда вы смотрите Netflix, используете Google или проверяете прогноз погоды.
Глядя на архитектуру модели, эти модели могут различаться. Сверточные сети часто имеют несколько слоев объединения, простые ИНС (искусственные нейронные сети) отличаются количеством скрытых слоев и просто прямолинейны, и, конечно же, вы можете иметь RNN с модулями LSTM. Несмотря на эти различия, у них есть одна общая черта; прежде чем вы сможете использовать их для прогнозов или рекомендаций, их необходимо тщательно обучить. Тренировочный процесс не разовый. Поскольку модели могут меняться и со временем собираются новые данные, это следует делать периодически. Часто это длительный и очень затратный в вычислительном отношении процесс, поскольку обучающие данные могут состоять из сотен тысяч элементов. В настоящее время это не является реальной проблемой со всеми возможностями аппаратного обеспечения и облачных вычислений, с использованием графических процессоров и так далее. Хотя у нас есть доступ ко всем этим возможностям, обучение такой глубокой нейронной сети требует больших затрат энергии.
Нет ли способа обучить модель более энергоэффективным способом? Должна быть, если мы попытаемся смоделировать работу нашего мозга, поскольку наш мозг потребляет гораздо меньше энергии, чем стандартный ноутбук [1].
Вдохновленный человеческим мозгом
И именно отсюда черпали вдохновение Spiking Neural Networks. Я не нейробиолог и не нейробиолог, но постараюсь в очень упрощенной форме описать, как в основном работают сети в мозге. Нейроны общаются друг с другом посредством последовательностей импульсов. Потенциал действия проходит вдоль аксона в нейроне и активирует синапсы. Синапсы высвобождают нейротрансмиттеры, которые достигают постсинаптического нейрона. Здесь потенциал действия повышается с каждым поступающим импульсом нейротрансмиттеров. Если потенциал действия достигает определенного порога, постсинаптический нейрон сам запускает спайк [2].
https://medium.com/analytics-vidhya/an-introduction-to-spiking-neural-networks-part-1-the-neurons-5261dd9358cd Изображение выброса нейротрансмиттеров в постсинаптический нейрон
Шипы нейронных сетей
Как это работает и какие проблемы?
Вопрос, который сразу же приходит на ум, заключается в том, как перевести этот принцип в математические уравнения, алгоритм, который мы можем использовать для обучения нейронных сетей. Второй вопрос заключается в том, как преобразовать данные, изображения или написанные от руки цифры из набора данных MNIST в последовательности спайков.
Кодировка
Одним из способов преобразования изображений в последовательности спайков является использование процесса кодирования Пуассона [3], [7], [8]. Каждое изображение кодируется в последовательность спайков и перемещается на следующий уровень в сети.
Например, инфраструктура BindsNET использует метод кодирования Пуассона:
import os from torchvision import transforms from bindsnet.datasets import MNIST from bindsnet.encoding import PoissonEncoder # Load MNIST dataset with the Poisson encoding scheme # time: Length of Poisson spike train per input variable. # dt: Simulation time step. dataset = MNIST( PoissonEncoder(time=250, dt=50), label_encoder=None, download=True, root=os.path.join("path_to_data", "MNIST"), transform=transforms.Compose( [transforms.ToTensor(), transforms.Lambda(lambda x: x * intensity)] ), )
Расшифровка
Следующий шаг — выяснить, как бороться с этими поездами с шипами. Мы просто считаем всплески в определенном интервале или ждем до первого всплеска? Все эти разные методы декодирования хороши, и разные методы декодирования лучше всего подходят для разных задач [2], [5].
Моделирование нейронной динамики
Один из аспектов человеческого мозга, описанный в предыдущем абзаце, заключается в том, что потенциал действия постсинаптического нейрона повышается с входящими импульсами, и нейрон сам выпускает импульс, когда потенциал достигает определенного порога. Чтобы включить эту нейронную динамику, нам нужна математическая модель для ее описания. Часто используемой моделью является модель Leaky-Integrate and Fire, которая представляет собой упрощение модели Ходжкина и Хаксли, изначально разработанной для электрохимической инженерии. Он использует обыкновенные дифференциальные уравнения, которые идеально подходят для последовательностей шипов в SNN [5], [6], [7].
Задачи
Понятно, что временная составляющая последовательности шипов очень важна. Это также является самым большим препятствием для Spiking Neural Networks. Красота обычных искусственных нейронных сетей заключается в непрерывном процессе. Входные данные представляют собой просто вектор, и он умножается, например, на матрицу весов, добавляется некоторое смещение и, наконец, применяется сигмовидная или релю-функция. От входного слоя до вывода все непрерывные функции. Это означает, что мы можем применить градиентный спуск в процессе обратного распространения ошибки. А вот и поезд с шипами… дискретное явление. Очень эффективно, поскольку нам нужно выполнять вычисления только тогда, когда прибывает поезд с шипами, но градиентный спуск становится проблемой. Это основная причина, по которой обычные ИНС по-прежнему более популярны. SNN более сложны, и, несмотря на энергоэффективность, все сводится к производительности с точки зрения точности. Вот где ANN по-прежнему выигрывают игру, но SNN подходят все ближе и ближе. Было доказано, что SNN могут быть до 1900 раз более эффективными, чем классические RNN [5].
Фреймворки
Хотя ИНС гораздо более популярны, ученые проводят все больше и больше исследований SNN и даже разрабатывают полные основы для SNN. Две из этих платформ построены на основе известной библиотеки ML Pytorch: BindsNET и Spyketorch. Оба разработали методы обучения SNN и очень просты в использовании [3], [4].
Давайте еще раз взглянем на структуру BindsNET. После настройки набора данных MNIST BindsNET хочет, чтобы вы определили объект network
. Мы будем следовать примеру, как описано на странице BindsNET GitHub, и определим сеть Diehl & Cook.
from bindsnet.models import DiehlAndCook2015 # build Diehl & Cook network network = DiehlAndCook2015( n_inpt=784, # number of input neurons n_neurons=100, # Number of excitatory, inhibitory neurons exc=22.5, # Strength of synapse weights from excitatory to inhibitory layer inh=17.5, # Strength of synapse weights from inhibitory to excitatory layer dt=1.0, # Simulation time step nu=[1e-10, 1e-3], # pair of learning rates for pre- and post-synaptic events, resp. norm=78.4, # Input to excitatory layer connection weights normalization constant inpt_shape=(1, 28, 28))
Сеть Диля и Кука фактически состоит из двух слоев: возбуждающего слоя с возбуждающими нейронами и тормозного слоя с тормозными нейронами. Как вы можете видеть в приведенном выше фрагменте кода, сила этих нейронов определяется в настройках сети [8].
Диль и Кук [8]
Приведенный выше код создает эти слои с начальными значениями соединений между слоями. Вы можете легко просмотреть начальные веса.
network.connections
приводит к:
{('X', 'Ae'): Connection( (source): Input() (target): DiehlAndCookNodes() ), ('Ae', 'Ai'): Connection( (source): DiehlAndCookNodes() (target): LIFNodes() ), ('Ai', 'Ae'): Connection( (source): LIFNodes() (target): DiehlAndCookNodes() )}
которые представляют связи между всеми тремя слоями.
Как видите, тормозные нейроны названы LIFNodes()
, ссылаясь на упомянутую ранее модель Leaky-Integrate and Fire.
Вы также можете проверить начальные веса между слоями. Помните сильные стороны exc
и inh
, которые мы выбрали ранее в нашем определении сети.
network.connections[("Ae", "Ai")].w
дает:
Parameter containing: tensor([[22.5000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 0.0000], [ 0.0000, 22.5000, 0.0000, ..., 0.0000, 0.0000, 0.0000], [ 0.0000, 0.0000, 22.5000, ..., 0.0000, 0.0000, 0.0000], ..., [ 0.0000, 0.0000, 0.0000, ..., 22.5000, 0.0000, 0.0000], [ 0.0000, 0.0000, 0.0000, ..., 0.0000, 22.5000, 0.0000], [ 0.0000, 0.0000, 0.0000, ..., 0.0000, 0.0000, 22.5000]])
где вы снова можете увидеть использование библиотеки PyTorch
в типе данных tensor
.
Внимательный читатель, вероятно, заметил связь между тормозным и возбуждающим слоями в выводе network.connections
выше. Оба слоя влияют друг на друга немного по-разному, как можно прочитать в [8].
Обучение
Обучение моделей использует функциональность PyTorch
dataloader
для создания итерации Python по нашему набору данных. Итак, следующим шагом будет определение этого загрузчика данных:
import torch # Create a dataloader to iterate and batch data dataloader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=True)
Теперь единственное, что осталось, это поезд сети. Ниже вы найдете самый простой фрагмент кода для запуска процесса обучения. Конечно, вы можете начать с начальных значений для ваших нейронов или добавить приятные функции, чтобы отслеживать прогресс.
for (i, d) in enumerate(dataloader): if i > n_train: break image = d["encoded_image"] label = d["label"] # Get next input sample. inputs = {"X": image.view(time, 1, 1, 28, 28)} # Run the network on the input. network.run(inputs=inputs, time=time, input_time_dim=1)
В обширной документации репозитория BindsNET и в их статье [3] вы найдете больше замечательных функций.
На ODSC West 2021 я более подробно расскажу об этих увлекательных разработках SNN. Будут ясны дополнительные математические и технические детали, касающиеся методов кодирования и декодирования. Будет показано решение проблемы градиентного спуска, такое как обратное распространение во времени и суррогатные градиенты 5. Наконец, я расскажу о различных подходах между платформами SpykeTorch и BindsNET.
Об авторе/спикере ODSC West 2021 Олафе де Леу:
Как дипломированный математик, меня особенно интересуют методы и математика, лежащие в основе алгоритмов. Как они ищут оптимальное решение и почему один алгоритм быстрее другого? В своей работе в качестве Data Scientist для Dataworkz я разрабатываю алгоритмы или адаптирую существующие решения к потребностям клиентов и запускаю их в производство, чтобы они могли извлечь из этого максимальную пользу. В свободное время я люблю читать научно-популярные статьи или книги по математике, физике или астрофизике. Кроме того, я люблю путешествовать и кататься на велосипеде.
В Dataworkz у всех нас есть одно общее хобби — данные. С группой увлеченных специалистов по данным, инженеров данных и инженеров по машинному обучению мы работаем в различных областях науки о данных и инженерии. В частности, мы специализируемся на CD4ML, непрерывной доставке для машинного обучения.
использованная литература
[1] Дж. В. Минк, Р. Дж. Блюменшайн, Д. Б. Адамс, Отношение центральной нервной системы к метаболизму тела у позвоночных: его постоянство и функциональная основа, Американский журнал физиологии-регуляторной, интегративной и сравнительной физиологии 241 ( 3) (1981) Р203–Р212.
[2] Spiking Neural Networks: Principles and Challenges, Андре Грюнинг¹ и Сандер М. Бохте², Университет Суррея, Великобритания¹, CWI, Амстердам, Нидерланды², материалы ESANN 2014, Европейский симпозиум по искусственным нейронным сетям , Вычислительный интеллект и машинное обучение. Брюгге (Бельгия), 23–25 апреля 2014 г., издание i6doc.com, ISBN 978–287419095–7.
[3] Hazan H, Saunders DJ, Khan H, Patel D, Sanghavi DT, Siegelmann HT and Kozma R (2018) BindsNET: библиотека нейронных сетей, ориентированная на машинное обучение, на Python. Фронт. Нейроинформ. 12:89. doi: 10.3389/fnif.2018.00089
[4] Мозафари М., Ганджтабеш М., Новзари-Далини А. и Маскелье Т. (2019). SpykeTorch: эффективное моделирование сверточных нейронных сетей с пиками, не более чем с одним шипом на нейрон. Границы нейронауки (https://doi.org/10.3389/fnins.2019.00625)
[5] Эффективные и действенные вычисления с рекуррентными нейронными сетями с множественными временными масштабами, Боджиан Инь, Федерико Корради, Сандер М. Бохте, июль 2020 г., arXiv:2005.11633
[6] Паугам-Мойзи Х., Бохте С. (2012) Вычисления с нейронными сетями с шипами. В: Розенберг Г., Бэк Т., Кок Й.Н. (ред.) Справочник по естественным вычислениям. Шпрингер, Берлин, Гейдельберг. https://doi.org/10.1007/978-3-540-92910-9_10
[7] Понулак Ф., Касински А. Введение в импульсные нейронные сети: обработка информации, обучение и приложения. Acta Neurobiol Exp (Войны). 2011;71(4):409–33. PMID: 22237491.
[8] П. У. Дил и М. Кук. Неконтролируемое обучение распознаванию цифр с использованием пластичности, зависящей от времени всплеска. Границы вычислительной нейронауки, август 2015 г.
Читайте другие статьи по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от начального до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг. Вы также можете пройти обучение по науке о данных по запросу, где бы вы ни находились, с помощью нашей платформы Ai+ Training.