Основные понятия глубокой нейронной сети
Прежде чем изучать принципы обучения модели машинного обучения глубокой нейронной сети (DNN), остановимся на том, чего мы пытаемся достичь. Машинное обучение связано с прогнозированием метки на основе некоторых признаков определенного наблюдения. Проще говоря, модель машинного обучения — это функция, которая вычисляет y (метку) из x (функции): f(x)=y.
Простой пример классификации
Предположим, что наблюдение состоит из некоторых измерений пингвина.
В частности, это следующие измерения:
- длина клюва пингвина;
- высота клюва пингвина;
- длина ласты пингвина;
- вес пингвина.
В этом случае функции (x) являются вектором четырех значений или математически, x=[x1,x2,x3,x4].
Предположим, что метка, которую мы пытаемся предсказать (y), является видом пингвина, и что существует три возможных вида, которые это может быть:
- Adelie
- Дженту
- Chinstrap
Это пример проблемы классификации , в которой модель машинного обучения должна прогнозировать наиболее вероятный класс, к которому относится наблюдение. Модель классификации делает это путем прогнозирования метки, состоящей из вероятности для каждого класса. Другими словами, y — это вектор трех значений вероятности; один для каждого из возможных классов: y=[P(0),P(1),P(2)].
Обучение модели машинного обучения происходит с помощью наблюдений, для которых уже известна правильная метка. Например, у вас могут быть следующие измерения признаков для образца Adelie :
x=[37.3, 16.8, 19.2, 30.0]
Вы уже знаете, что это пример Adelie (класс 0), поэтому идеальная функция классификации должна привести к метке, которая указывает на 100% вероятность для класса 0, и 0% вероятность для классов 1 и 2:
y=[1, 0, 0]
Модель глубокой нейронной сети
Так как же мы будем использовать глубокое обучение для создания модели классификации пингвинов? Рассмотрим пример:
Модель глубокой нейронной сети для классификатора состоит из нескольких слоев искусственных нейронов. В нашем случае существует четыре слоя:
- Входной слой с нейроном для каждого ожидаемого входного значения (x).
- Два так называемых скрытых слоя, каждый из которых содержит пять нейронов.
- Выходной слой, содержащий три нейрона — по одному для каждого значения вероятности класса (y), прогнозируемого моделью.
Из-за многоуровневой архитектуры сети такая модель иногда называется многослойной перцепторной. Кроме того, обратите внимание, что все нейроны в входных и скрытых слоях подключены ко всем нейронам в последующих слоях - это пример полностью подключенной сети.
При создании подобной модели необходимо определить входной слой, поддерживающий ряд признаков, которые будет обрабатывать модель, и выходной слой, отражающий количество выходных данных, которые он должен создать. Можно выбрать, сколько скрытых слоев нужно включить, и сколько нейронов будет в каждом из них. Однако контролировать входные и выходные значения для этих слоев невозможно, так как они определяются процессом обучения модели.
Обучение глубокой нейронной сети
Процесс обучения для глубокой нейронной сети состоит из нескольких итерации, называемых эпохами. Для первой эпохи сначала следует назначить значения случайной инициализации для значений веса (w) и предвзятости b . Затем выполняются следующие действия.
- Признаки для наблюдений за данными с известными значениями меток передаются во входной слой. Как правило, эти наблюдения группируются в пакеты (часто называются мини-пакетами).
- Затем нейроны применяют свою функцию и в случае активации передают результат в следующий слой до тех пор, пока выходной слой не выдаст прогноз.
- Прогноз сравнивается с фактическим известным значением, а также вычисляется величина дисперсии между прогнозируемыми и истинными значениями (которые мы называем потерей).
- В зависимости от результатов пересчитанные значения весов и смещения вычисляются для уменьшения потерь, и эти корректировки передаются обратно нейронам в слоях сети.
- Следующая эпоха повторяет прямую передачу пакетного обучения с измененными значениями веса и смещения, повышая точность модели (уменьшая потери).
Примечание.
Обработка обучающих признаков в пакетном режиме повышает эффективность процесса обучения за счет одновременной обработки нескольких наблюдений в виде матрицы признаков с векторами весов и смещений. Линейные алгебраические функции, работающие с матрицами и векторами, также используются в обработке трехмерной графики, поэтому компьютеры с графическими процессорами (GPU) обеспечивают значительно более высокую производительность для обучения моделей глубокого обучения, чем компьютеры, имеющие только центральные процессоры (CPU).
Более подробные сведения о функциях потерь и обратном распространении
В предыдущем описании процесса глубокого обучения упоминалось, что потери из модели вычисляются и используются для корректировки значений веса и смещения. Как именно это работает?
Вычисление потерь
Предположим, что один из примеров, переданных через учебный процесс, содержит признаки образца Adelie (класс 0). Правильные выходные данные из сети должны иметь следующий вид: [1, 0, 0]. Теперь предположим, что выходные данные, созданные сетью, имеют следующий вид: [0,4, 0,3, 0,3]. Сравнивая их, для каждого элемента можно вычислить абсолютную дисперсию (иными словами, насколько отличается прогнозируемое значение от ожидаемого) как [0,6, 0,3, 0,3].
В действительности, так как мы имеем дело с несколькими наблюдениями, мы обычно агрегируем дисперсию (например, путем возведения в квадрат отдельных значений дисперсии и вычисления среднего значения) и в результате получаем одно среднее значение потерь, такое как 0,18.
Оптимизаторы
А теперь самое интересное. Потери вычисляются с помощью функции, которая работает с результатами последнего слоя сети, который также является функцией. Последний слой сети работает с выходными данными из предыдущих слоев, которые также являются функциями. Таким образом, вся модель, начиная от входного слоя и заканчивая вычислением потерь, является одной большой вложенной функцией. Функции имеют несколько действительно полезных характеристик, в число которых входят следующие:
- возможность концептуализации функции в виде графика для сравнения ее выходных данных с каждой из ее переменных;
- Вы можете использовать разностный расчет для вычисления производных функции в любой момент относительно его переменных.
Рассмотрим первую из этих возможностей. Построим линию функции, чтобы показать сравнение отдельного значения веса с потерями, и отметим на этой линии точку, где текущее значение веса совпадает с текущим значением потерь.
Диаграмма, отображающая фунцию потерь с текущими значениями веса и потерь, представленными в виде точки на графике.
Теперь применим вторую характеристику функции. Производный от функции для данной точки указывает, увеличивается ли наклон (или градиент) выходных данных функции (в данном случае потеря) увеличивается или уменьшается относительно переменной функции (в данном случае значение веса). Положительная производная означает, что функция растет, а отрицательная производная означает, что она снижается. В нашем случае в изображенной точке для текущего значения веса у функции есть уклон вниз. Другими словами, увеличение значения веса приведет к снижению показателя потерь.
Мы используем оптимизатор для применения этого же трюка для всех переменных веса и предвзятости в модели и определения того, в каком направлении необходимо настроить их (вверх или вниз), чтобы уменьшить общий объем потери в модели. Существует несколько часто используемых алгоритмов оптимизации, включая стохастический градиентный спуск (SGD), адаптивный метод изменения скорости обучения (ADADELTA), адаптивную оценку момента (Adam) и другие; все они предназначены для настройки весов и сдвигов с целью минимизации потерь.
Скорость обучения
Возникает следующий очевидный вопрос: насколько оптимизатор должен корректировать значения весов и смещений? Если взглянуть на график для значения веса, можно увидеть, что при незначительном увеличении веса строка функции идет вниз (потери уменьшаются), но при его значительном увеличении строка функции начнет снова подниматься, поэтому фактически идет увеличение потерь, и после следующей эпохи может потребоваться уменьшить значение веса.
Размер корректировки управляется параметром, заданным для обучения, который называется скоростью обучения. Низкая скорость обучения влечет за собой незначительные корректировки (поэтому для снижения потерь данных может потребоваться больше эпох), в то время как высокая скорость обучения приводит к значительным корректировкам (поэтому минимальных значений может не быть вообще).