вычислить с помощью нейронных сетей, не являются линейными. Функции, позволяющие различать изображения кошек, собак, или птиц, сложны и совсем не линейны. Только сочетание нелинейностей и наличия нескольких слоев позволяет сети вычислять (или аппроксимировать) функции такого типа. Теоремы показывают, что сеть, состоящая из «линейной – нелинейной – линейной» укладки, является универсальным аппроксиматором: она может аппроксимировать любую функцию настолько точно, насколько это необходимо, при условии, что промежуточный слой имеет достаточное количество единиц. Чтобы правильно аппроксимировать сложную функцию, сеть такого типа может потребовать наличия огромного количества промежуточных единиц. Но, в целом, для представления сложной функции эффективнее будет использовать сеть со сравнительно небольшим числом слоев.
Есть одно замечание: в сети с прямой связью все единицы на одном слое получают входные данные от всех единиц на предыдущем слое. Но большинство нейронных сетей имеют особую архитектуру соединений, в которой единицы на одном слое получают входные данные только из небольшой части предыдущего слоя. Мы рассмотрим это в следующей главе на примере сверточных сетей.
В процессе обучения желаемый выход системы соответствует желаемой конфигурации единиц последнего слоя. Такие единицы считаются «видимыми», поскольку их выход является общим выходом системы. Единицы предыдущих слоев считаются «скрытыми», поскольку ни инженер, ни алгоритм не знают, какой желаемый выход требуется задать им.
Как же тогда установить желаемые выходы для скрытых единиц? Эта проблема, называемая «передачей ответственности»[51], и является предметом глубокого обучения…
Непрерывные нейроны
Небольшое отступление. До начала 1980-х гг. архитектура машин строилась на бинарных нейронах, которые выдавали положительный выходной сигнал, когда взвешенная сумма их входов превышала пороговое значение. Они выдавали –1, когда взвешенная сумма снижалась. Таким образом, у них было два возможных состояния выходного сигнала: либо +1, либо –1 (некоторые предпочитают нейроны с выходом 1 или 0).
Недостатком использования пороговых значений является дискретизация функции стоимости: когда вес меняется лишь на небольшую величину, это изменение может не повлиять на выходной сигнал нейрона. И наоборот, если вес изменяется на достаточную величину, происходит внезапное переключение выхода нейрона с –1 на +1, или с +1 на –1. Если изменение происходит до выхода из сети, это приводит к резкому изменению функции стоимости.
Другими словами, небольшое изменение параметров может не привести к изменению функции стоимости или, наоборот, вызвать резкое изменение. «Горный пейзаж» функции стоимости трансформируется в последовательность горизонтальных слоев, разделенных вертикальными отрезками. Методы градиентного спуска в такой модели не работают. Короче говоря, бинарные нейроны несовместимы с обучением по алгоритму градиентного спуска.
Рис. 5.2. Нелинейные передаточные функции, используемые в многослойных нейронных сетях
Слева: сигмовидная функция, которая непрерывно изменяется от 0 до 1 и записывается как y = 1/(1 + exp(–x)). В центре: гиперболический тангенс, идентичный сигмоиде, но принимающий значения от –1 до +1. Справа: функция «положительной части» (также называемая ReLU) для блока линейной ректификации, где y = x, если x положителен или равен 0. Последняя функция широко используется в современных нейронных сетях.
Как только вычислительная мощность компьютеров стала достаточно велика, появились «улучшенные» нейроны. Выход нейрона больше не прыгает от –1 до +1, а функция, применяемая к взвешенной сумме, больше не похожа на лестницу. Непрерывный выход имеет форму S-образной кривой.
В Главе 4 мы увидели, что все методы обучения основаны на минимизации функции стоимости. Вы должны уметь вычислять градиент относительно параметров системы, то есть знать, в каком направлении и на сколько нужно изменить все параметры для уменьшения функции стоимости. Помните, что обучение системы и уменьшение количества ошибок, которые она допускает на этапе обучения, – это одно и то же.
С этими улучшенными нейронами даже малейшее изменение входного параметра нейрона, отраженного во взвешенной сумме, приводит к изменению выходного сигнала нейрона. И шаг за шагом увеличение или уменьшение данного параметра, сколь бы ни были малы эти изменения, автоматически приводит к изменению конечного выхода системы и, следовательно, к изменению функции стоимости. Такая непрерывность позволяет использовать методы градиентного спуска для обучения многослойных сетей.
Мой HLM
Еще одна ретроспектива: в начале 1980-х гг. интерес научного сообщества к алгоритмам обучения заметно остыл. Нейроны по-прежнему были бинарными. Не было возможности аналитического вычисления градиентов (никто об этом и не думал). Что касается помех – возьмите вес, измените его и посмотрите, как он влияет на выход – это было слишком неэффективно для обширных сетей с большим количеством показателей веса… Сплошная головная боль!
Когда выход оказывался неверным, для каких именно нейронов в сети алгоритм должен постулировать ошибку? Какой вес нужно менять? Как рассчитать его изменение?
Я читал старые статьи на эту тему. Множество попыток предпринималось в 1960-х, но уже в 1970-х наступило молчание. Фукусима – один из немногих, кто проявил упорство. Его когнитрон действительно представлял собой многослойную сеть, но особого типа. Его нейроны не были бинарными, они пытались соответствовать тому, что было известно о биологических нейронах. Все слои, кроме последнего, обучались без учителя. Мы еще не говорили об этом методе. Суть его заключается в том, что каждая группа нейронов могла автоматически обнаруживать категории паттернов. Но эти паттерны не определялись конечной задачей, они идентифицировались по частоте встречаемости: если паттерн вертикального контура часто появлялся на входе группы нейронов, то при его обнаружении такая группа выделяла один нейрон из группы. Все эти операции и составляли процедуру обучения.
Рис. 5.3. Иллюстрация к моей статье о HLM
В 1985 г. на конгрессе Cognitiva я представил многослойную сетевую архитектуру с локальными подключениями. Ее обучали на специально подготовленных примерах: приведенные в прямоугольниках фигуры представляли собой крошечные символы – искаженные или трудные для чтения изображения.
Только последний слой когнитрона, также, как и перцептрона, обучался с учителем для минимизации ошибок распознавания. Не самый эффективный способ, потому что внутренние слои не обучались специально под поставленную задачу. Они могли, например, научиться обнаруживать закономерности, бесполезные для решения конечной задачи. Скажем, разница между толстой и тонкой линиями бесполезна для распознавания символов.
В 1981 или 1982 г., когда я еще работал в ESIEE (Парижская высшая школа инженеров по электротехнике и радиоэлектронике, см. Главу 2), у меня возникла идея создать алгоритм обучения многослойной сети, которую я назвал HLM (от англ. Hierarchical Learning Machine – иерархическая обучающаяся машина)[52]. Она состояла из множества одинаковых нейронов, расположенных послойно. У меня были интуитивные догадки, более или менее обоснованные математически, и я отчасти вслепую приступил к программированию, чтобы проверить идею на практике. Время шло. Я все еще был одержим этим