Прошлые домены не функционирует! Используйте адрес
ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
Вообще, пока что выделяют три поколения нейронных сетей, где наиболее популярное на сегодня -- второе. Также существует такая специфическая вещь, как иерархическая темпоральная память, о ней даже будет пара слов в конце. Но давайте обо всем по порядку.
Итак, с чего же все началось? А началось все с публикации МакКаллока и Питца [ https://link.springer.com/article/10.1007/BF02478259 ] кто найдет в публикации ошибку в первых 4 предложениях после абстракта -- тот молодец (но на тот момент ошибкой не было, я полагаю). Если совсем грубо, то в данной статье были высказаны две довольно важные мыслишки:
1) Нейроны работают принципу все-или-ничего, то есть, используют пороговую функцию активации (о функциях активации сказано ниже)
2) Сети таких нейронов вполне себе способны аппроксимировать логические функции.
Ну, теоретическая возможность выражения в терминах нейронных сетей логических функций, конечно, дело хорошее, но как же это сделать на практике? Ответ на это был дан чуть позже, на основе исследований такого замечательного человека, как Дональд Хэбб. Он совершил достаточно интересное наблюдение:
"When an axon of cell A is near enough to excite a cell B and repeatedly or persistently takes part in firing it, some growth process or metabolic change takes place in one or both cells such that A's efficiency, as one of the cells firing B, is increased"
или, чуть короче и понятнее: "cells that fire together wire together", что в переводе означает примерно следующее: чем чаще два нейрона одновременно становятся активными, тем сильнее между ними синаптическая связь. Следует, однако, заметить, что мало близкого расположения аксона, для образования полноценной синаптической связи должен произойти еще ряд событий. На основе данного наблюдения было разработано Дельта-правило Видроу-Хоффа. И вроде бы все нормально шло, разрабатывали всякие Розенблатты свои перцептроны, но вдруг появился Марвин Минский и начал затирать про ограниченность нейронных сетей, а именно, указал на тот факт, что нейронки того времени были неспособны решить простейшую логическую задачку под названием XOR а значит, не были способны адекватно решать задачи с линейно неразделимыми классами элементов, хотя на самом деле двухслойному перцептрону Розенблатта это вполне себе по силам, если не путать с однослойным перцептроном. Вот подобная критика нейронок и спровоцировала первую "зиму" нейросетей -- падение интереса в академических кругах и финансирования.
Однако затем был изобретен метод обратного распространения ошибки чем-то напоминающий обратное распространение импульса от сомы нейрона вниз по дендритному дереву. К нейроночкам снова начал расти интерес. На самом деле, здесь уже можно (и даже нужно) говорить о втором поколении нейросетей, поскольку для применения обратного распространения функция активации должна быть всюду дифференцируемой.
Настало время поговорить про функции активации. Итак, что же представляет из себя стандартный нейрон сеток второго и третьего поколений? Взвешенный сумматор, т.е. такую штуку, которая берет выходное значение предыдущего нейрона, умножает его на силу их синаптической связи и аккумулирует у себя где-нибудь. Делает так для всех входных нейронов, затем пропускает получившуюся сумму через функцию активации и получает свое собственное значение активации. Так вот, в первом поколении была только одна функция активации -- пороговая. Т.е., если сумма всех помноженных на нужные веса синапсов входных значений превысила некоторый порог, то нейрон отдает вышестоящим нейронам единичку, иначе -- нихера.
Хорошо, но как же применяется обратное распространение ошибки? О какой ошибке идет речь? А вот о какой. Возьмем обычную такую многослойную полносвязную сеть, запилим ей на последнем слое n нейронов, где n -- размерность выходного вектора, который мы взялись, на свою голову, предсказывать. Подадим сетке на вход нужные значения, получим на выходе вектор размерностью n с ответом сети (вектор O). Затем возьмем вектор, который мы ХОТЕЛИ БЫ увидеть в ответ на поданные данные (вектор T). А теперь пройдемся по всем позициям от 1 до n, суммируя квадраты разницы между элементами по соответствующим индексам [(O_1 - T_1)^2 + ... + (O_n - T_n) ^ 2], а затем просто разделим на два. Вот мы и получили меру ошибочности ответа нашей сети. И вот эту уже меру мы можем обратно по сети распространять. Тут уже найдете сами, чай не маленькие. После распространения всех значений ошибок по всем нейронам сети нам остается применить стохастический градиентный спуск с нужными параметрами вроде скорости обучения -- и все, шаг обучения закончен, можно приступать к следующему. Как можно видеть, ничего сложного или сверхъестественного в этом процессе нет, простые рутинные расчеты которые мне пиздец как лень приводить, поэтому ограничусь только упоминаниями названий нужных алгоритмов.
Теперь стоит упомянуть тот факт, что существуют как сети прямого распространения, так и сети с обратными связями. Собственно, перцептроны -- эталонный пример сетей прямого распространения, прямиком из парижской палаты мер и весов. Сети с обратными связями еще называются рекуррентными (recurrent). Мне дико лень приводить такие никому не всравшиеся вещи, как сети Хопфилда, поэтому я лучше сразу перескочу к Long Short-Term Memory -- LSTM [ https://www.bioinf.jku.at/publications/older/2604.pdf ]. Шикарная вещь. Для многих задач нейронных сетей их раньше хватало с головой (да и сейчас частенько можно ими и ограничиться). Где-то слышал вскукареки про возможность реализации LSTM-ками требующих полноты по Тьюрингу алгоритмов, но что-то как-то я сильно в этом сомневаюсь, т.к. объем доступной LSTM памяти пиздецки ограничен. Вот с LSTM и ей подобными рекуррентными сетями стало лучше видно на практике, что нейронные сети подвержены таким нехорошим вещам, как взрыв или затухание градиентов.
Для борьбы с этим явлением, а также с явлением чрезмерного подстраивания под изученные образцы с неспособностью к адекватной работе в реальности, т.е. переобучением, были созданы всяческие штуки для регуляризации.
К примеру, штраф на силу синаптической связи был бы такой же штраф, но за силу родственной связи в некоторых заведениях..., или dropout (когда с определенной вероятностью выходной сигнал нейрона вне зависимости от входа равен 0).
Множество таких методов существует, и каждый чем-нибудь да помогает, если не переборщить.
Но, вероятно, следует пояснить разницу между сетью прямого распространения и рекуррентной. Сеть прямого распространения -- это как математическая функция, ты ей X, она тебе некоторый Y, не зависящий от предыдущего поданного сетке значения.
А вот рекуррентная сеть уже полезна для обработки имеющих какую-то внутреннюю связь последовательностей. Внимательный анон мог к этому моменту понять, что текст является крайне годным примером такой последовательности. А вот помешаный на деньгах анон мог подумать о предсказании финансовых котировок. Да, предпринимались и предпринимаются попытки делать обе эти вещи. Вообще, область машинного обучения, связанная и текстом, называется NLP (Natural Lanugage Processing, в переводе -- обработка естественного языка). Кстати, обработка естественного языка вполне себе может помочь в предсказании рыночных котировок, поскольку дает нейронке возможность оценивать эту вашу политоту.
Нельзя начать пояснять за нейронки, ни разу не упомянув сверточные сети. Все успехи нейронок с обработкой изображений или видео (а зачастую и текста) так или иначе связаны со сверточными сетями но, возможно, в дальнейшем будут уже связаны с капсульными сетями. Как они работают -- прошу погуглить самостоятельно, ничего сложного в них нет, это просто неполносвязные сети с общими синаптическими весами.
Но ведь видео -- это последовательность кадров, спросит анон, как же сеть прямого распространения может обрабатывать видео, если ничего не помнит о предыдущем входе? А вот тут, товарищи, в дело вступает комбинация из CNN (Convolutional Neural Network) и RNN (Recurrent Neural Network).