Алгоритм «вперед-вперед»: некоторые предварительные исследования

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

Искусственный интеллект и машинное обучение уже произвели революцию во многих отраслях и областях исследований, но за всем этим успехом стоит одно ключевое подмножество ИИ: нейронные сети. Нейронная сеть – это тип алгоритма машинного обучения, созданный по образцу структуры и функций человеческого мозга. Он состоит из слоев взаимосвязанных «нейронов», которые обрабатывают и передают информацию.

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

Эти нейронные сети имеют много компонентов, но одним из ключевых процессов в них является обратное распространение.

Обратное распространение – это алгоритм, используемый для обучения нейронных сетей. Фундаментальная идея нейронных сетей заключается в том, что каждый нейрон получает входные данные от других нейронов, и они используют их в качестве входных данных для вычисления выходных данных, которые передаются другим нейронам следующего слоя. Весь процесс обучения нейронной сети сильно зависит от корректировки весов и смещений связей между нейронами. Для этого используется обратное распространение. Обратное распространение — это эффективный алгоритм для изучения весов и смещений нейронной сети. Он работает с использованием цепного правила исчисления для вычисления градиента функции ошибок относительно весов и смещений сети. Градиент — это вектор, указывающий в направлении наибольшего увеличения функции ошибок, и его можно использовать для обновления весов и смещений таким образом, чтобы уменьшить ошибку.

Чтобы вычислить градиент, обратное распространение использует «обратный проход», который начинается с выходного слоя и проходит в обратном направлении через слои сети, распространяя градиент функции ошибок в обратном направлении через сеть. Обратный проход эффективен с вычислительной точки зрения, потому что он использует промежуточные результаты, вычисленные во время прямого прохода, который включает в себя вычисление выходных данных сети с учетом входных данных.

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

Однако обратное распространение — это не идеальный алгоритм, с ним есть проблемы. Давайте перейдем к тому, что именно не так с обратным распространением.

Что не так с обратным распространением?

Без сомнения, успехи и высоты, которых глубокое обучение достигло за последнее десятилетие, поразительны. Во многом это сводится к успеху градиентных спусков с большим количеством параметров и данных. Эти градиенты вычисляются с обратным распространением, показывая успехи, достигнутые за эти годы.

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

Для контекста кора — это внешний слой мозга, и ее основными функциями являются сознание, мышление, эмоции, рассуждение, язык и память.

Несмотря на многочисленные усилия, нет убедительных доказательств того, что кора использует производные ошибки или сохраняет нейронную активность для обратного прохода. Более того, соединения «сверху вниз» не соответствуют соединениям «снизу вверх»; это то, что можно было бы ожидать, если бы использовалось обратное распространение. Наряду с этим обратное распространение также требует совершенного знания вычислений, выполняемых на прямом проходе, чтобы вычислить правильные производные. Например, если черный ящик был вставлен в прямой проход, мы не можем выполнить обратное распространение, если у нас нет сведений о дифференцируемой модели черного ящика. Альтернативой этому может быть использование обучения с подкреплением. Обучение с подкреплением может выступать в качестве альтернативного алгоритма для обучения нейронных сетей, но оно дорого, медленно и часто нестабильно при работе с большим количеством параметров и наборов данных.

Однако, чтобы обойти эту проблему, вводится новый алгоритм — алгоритм «вперед-вперед». Этот алгоритм имеет скорость, аналогичную обратному распространению, но его главное преимущество заключается в том, что его можно использовать, когда у нас нет идеальной модели. Давайте сразу перейдем к алгоритму «вперед-вперед».

Алгоритм «вперед-вперед»

Алгоритм «вперед-вперед» во многом основан на машинах Больцмана и шумо-контрастной оценке. Основная идея этого алгоритма заключается в том, что он заменяет обратный проход обратного распространения другим прямым проходом. Эти два прямых прохода имеют схожие функции, но работают с разными данными. Положительный проход работает с реальными данными и корректирует веса, чтобы увеличить «хорошесть» в каждом скрытом слое. Отрицательный прямой проход работает с отрицательными данными и регулирует вес, чтобы уменьшить «хорошесть» в каждом скрытом слое. Теперь, когда у нас есть общее представление о том, как работает алгоритм «вперед-вперед», давайте рассмотрим несколько примеров реализации этого алгоритма!

Эксперименты с FF

Понимание некоторых основных экспериментов, которые проводились с алгоритмом Fast-Forward, чтобы подтвердить, что этот алгоритм является допустимым для потенциальной замены обратного распространения.

Чтобы дать некоторый контекст, эксперименты, которые были проведены в статье, использовали набор данных MNIST рукописных цифр. Этот набор данных состоит из 50 000 обучающих изображений, а тестовый набор состоит из 10 000 изображений. MNIST создан для простых нейронных сетей, что делает его очень удобным для тестирования новых алгоритмов.

Неконтролируемый пример FF

Есть 2 ключевых вопроса об алгоритме Forward-Forward, которые необходимо решить.

Во-первых, давайте предположим, что у нас есть источник отрицательных данных, возможно ли для него изучить эффективные многослойные представления, чтобы он мог фиксировать структуру в данных. Второй большой вопрос: откуда берутся эти негативные данные?

Для контролируемого обучения обычно используется контрастное обучение. Контрастное обучение — это метод глубокого обучения с самоконтролем, который позволяет модели узнавать данные без меток. Для этого первой задачей является преобразование входных векторов в векторы представления без какой-либо информации о метках (это то, что добавляет неконтролируемую часть). Как только это будет сделано, он должен изучить простое линейное преобразование для этих векторов представления. Их необходимо преобразовать в векторы логитов; они используются в softmax, функции активации в выходном слое NN, для расшифровки распределения вероятностей меток. Обучающая часть преобразования контролируется, но не требует никаких скрытых слоев, поэтому обратное распространение не требуется. В результате для выполнения этих задач можно использовать алгоритм «вперед-вперед», используя векторы реальных данных для положительного прямого прохода и поврежденные данные для отрицательного прямого прохода.

Существует множество способов классифицировать/искажать данные. Например, если мы смотрим на корреляции дальнего действия в изображениях, это можно сделать, различая разницу между корреляциями дальнего и ближнего действия. Например, в изображениях, которые характеризуют формы, мы можем создавать отрицательные данные, которые имеют разные корреляции в дальнем диапазоне, но аналогичные корреляции в ближнем диапазоне. Если мы создадим маску с большими областями единиц и нулей, мы сможем затем создать гибридное изображение для отрицательных данных. Этого можно достичь, «сложив изображение одной цифры, умноженное на маску, и изображение другой цифры, умноженное на обратную маску». Это было много контента, давайте посмотрим на наглядный пример ниже.

Подобные маски создаются, начиная со случайного битового изображения и затем размывая изображение фильтром формы [¼, ½, ¼] как по горизонтали, так и по вертикали. После того, как это повторяется, изображение находится на пороге 0,5.

Вот результаты исследования:

После обучения сети с 4 скрытыми слоями по 2000 ReLU в каждом в течение 100 эпох уровень ошибок составил 1,37%.

Контролируемый пример FF

С другой стороны, у нас есть контролируемый пример алгоритма «вперед-вперед» в действии. Из приведенного выше раздела становится очевидным, что для больших моделей работа без меток является наиболее эффективной и целесообразной. Поскольку эти большие модели выполняют множество задач, информация о маркировке не представляет особого интереса. Однако, если мы сосредоточимся на модели меньшего размера, которая фокусируется только на одной задаче, по логике, наиболее целесообразно использовать обучение с учителем.Чтобы реализовать алгоритм «Вперед-вперед», необходимо включить метку в ввод. Таким образом, положительный прямой проход будет изображением с правильной меткой, а отрицательный прямой проход будет изображением с неправильной меткой. Поскольку метка является дифференцирующим фактором, алгоритм будет игнорировать особенности изображения, которые не коррелируют с меткой.

Давайте внимательнее посмотрим на набор данных MNIST: изображения MNIST содержат черную рамку, чтобы упростить работу сверточных нейронных сетей. Сеть с 4 скрытыми слоями, как в предыдущем примере, каждый с 2000 ReLU и полной связью между слоями, получает ошибку теста 1,36% в MNIST после 60 эпох. Обратное распространение может дать аналогичные результаты с 20 эпохами, но это была первоначальная гипотеза: алгоритм FF будет медленнее, но будет иметь более широкий спектр приложений, где обратное распространение может не оправдаться.

Проанализировав алгоритм «Вперед-вперед», можно увидеть, что можно классифицировать рукописную цифру всего за один прямой проход по сети. «Он начинается с ввода, состоящего из тестовой цифры и нейтральной метки, состоящей из записей 0,1». Первые действия со скрытыми слоями используются в качестве входных данных для функции softmax, которая была изучена в процессе обучения. Весь этот процесс заключается в том, как алгоритм FF может классифицировать изображение.

Кроме того, обучающие данные могут быть дополнены дрожанием изображений до 2 пикселей; таким образом, мы получаем 25 различных сдвигов для каждого изображения. Используя эти дополненные данные, мы можем обучить ту же НС с 500 эпохами и получить ошибку теста всего 0,64%, что очень похоже на то, что мы достигли с обратным распространением. Вот его визуализация:

Использование FF для моделирования нисходящих эффектов в восприятии

Примеры, которые я рассмотрел, были в значительной степени сосредоточены на классификации изображений с помощью нейронных сетей с прямой связью. Таким образом, процесс обучения выполнялся по одному слою за раз. Другими словами, информация/обучение, полученные на более поздних уровнях, не повлияли на то, что было изучено на более ранних уровнях. Особенно при использовании этого с алгоритмом «вперед-вперед» это огромная слабость.

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

Для проверки корректности этого метода использовался видеовход со статическим изображением MNIST. Нижний слой был пиксельным изображением, а верхний позже стал представлением одного из N класса цифр. Между этими слоями есть 2 или 3 промежуточных слоя, каждый из которых состоит из 2000 нейронов. «В эксперименте RNN запускалась для 10 временных шагов, и на каждом временном шаге четные слои обновлялись на основе нормализованных действий в нечетных слоях, а нечетные слои обновлялись на основе нормализованных действий в четных слоях». .

На изображении ниже НС обучалась на MNIST в течение 60 эпох. Для каждого изображения скрытые слои были инициализированы восходящим проходом. Производительность сети оценивалась путем запуска ее на 8 итерациях, при этом каждая из 10 меток выбирала метку с наивысшим «средним качеством» за 3–5 итераций. В целом ошибка теста составила 1,31%.

Эксперименты с набором данных CIFAR-10

Алгоритм FF также был протестирован на наборе данных CIFAR-10. Для контекста этот набор данных состоит из 50 000 обучающих изображений размером 32 x 32 с 3 цветовыми каналами для каждого пикселя. Изображения имеют очень сложный фон из-за их высокой изменчивости. Это затрудняет хорошее моделирование изображений с учетом ограниченных обучающих данных. Полносвязные сети дополняются 2 или 3 скрытыми слоями при обучении с использованием обратного распространения; таким образом, все полученные результаты были получены с использованием сверточных нейронных сетей.

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

Сеть содержит 2 или 3 скрытых слоя по 3072 ReLU в каждом. Каждый скрытый слой имеет топографическую карту 32 x 32 с 3 скрытыми единицами в каждом месте. Скрытый блок имеет «рецепторное поле 11 x 11 в нижнем слое, поэтому он имеет 363 восходящих входа». Хотя производительность FF не так высока, как у обратного распространения, она лишь незначительно хуже. Мы можем увидеть производительность этих устройств в таблице ниже.

Последовательное обучение с алгоритмом «вперед-вперед»

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

Давайте возьмем задачу научиться предсказывать следующий символ в строке на основе предыдущих 10 символов. Это можно сделать, просто используя скрытые слои для получения признаков более высокого порядка предыдущей строки из 10 символов. После этого действия скрытых единиц можно использовать в качестве входных данных для функции softmax, которая может предсказать распределение вероятностей всех возможных следующих персонажей. Наиболее распространенным способом обучения этой модели является обратное распространение ошибки, но алгоритм FF предоставляет более реалистичную альтернативу.

Чтобы проверить это, в статье из басен Эзопа были извлечены 248 строк по 100 символов. Все прописные буквы были преобразованы в строчные, а если символы не были частью 30-символьного алфавита, они были удалены. Первые 10 символов считались «данными/контекстом», и нейронная сеть была обучена предсказывать последние 90 слоев. Каждый из скрытых слоев имел 2000 ReLU. Вот визуализация:

Скрытые слои обучаются с использованием 10 строк символов из реальных данных в качестве «положительных данных». Строки, в которых последний символ заменен предсказанием, считаются «отрицательными данными». Вот изображение, которое проходит через FF и в результате предсказывает следующий символ.

Будущая работа/мысли

Алгоритм «вперед-вперед» имеет большие перспективы на будущее, поскольку он затрагивает ключевые области, в которых обратное распространение не работало в прошлом. Более того, он также может давать аналогичные результаты обратного распространения. Будет интересно посмотреть, как приложения сети Forward-Forward экстраполируются за пределы примеров, обсуждаемых в этой статье.

Если вам понравилась эта статья, не стесняйтесь хлопать и делиться ею! Вы можете поймать меня на LinkedIn, и если вы хотите ознакомиться с некоторыми другими моими работами, вот мой личный сайт :)

Ссылки

  1. Диксон, Б. (2022, 19 декабря). Что такое алгоритм вперед-вперед, новая техника искусственного интеллекта Джеффри Хинтона? TechTalks. https://bdtechtalks.com/2022/12/19/forward-forward-algorithm-geoffrey-hinton/
  2. Хинтон, Г., и Брейн, Г. (nd). Алгоритм вперед-вперед: некоторые предварительные исследования. Получено 27 декабря 2022 г. с https://www.cs.toronto.edu/~hinton/FFA13.pdf.
  3. Семен Костадинов. (2019, 8 августа). Понимание алгоритма обратного распространения. Середина; На пути к науке о данных. https://towardsdatascience.com/understanding-backpropagation-algorithm-7bb3aa2f95fd
  4. Вуд, Т. (2019, 17 мая). Слой Softmax. Глубокий ИИ. https://deepai.org/machine-learning-glossary-and-terms/softmax-layer