Учебное пособие по глубокому обучению для веб-разработчиков — нормализация данных и инициализация параметров

искусственный интеллект глубокое обучение JavaScript

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

Статистика и машинное обучение

существуетTensorflow,PyTorchТеперь, когда фреймворки машинного обучения становятся мейнстримом, кажется немного устаревшим возвращаться и говорить о статистике. Точно так же, как практики, работающие с данными, теперь предпочитают называть себя учеными данных, а не аналитиками данных, статистика, похоже, уступила силу машинного обучения. Но так ли это на самом деле? Является ли машинное обучение лучшим выбором, чем статистика для всех проблем с данными?

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

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

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

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

iris

Как видно из приведенного выше рисунка, разница между сортом setosa и сортами versicolor и virginica очень велика, а последние два сорта относительно неотличимы.

Предположим, теперь мы хотим обучить модель глубокого обучения, чтобы определить, является ли цветок разноцветным. трудно получить сходящийся результат.Общее Изображение функции потерь показано ниже:

cost

Скорость обучения: 0,01, время обучения: 1000, нейроны скрытого слоя: 10

Это доказывает, что в исходном пространстве набора данных Iris лишай и виргиника почти неразделимы (имеются перекрывающиеся части), то есть в исходном пространстве, какую бы сложную кривую вы ни рисовали, одна сторона — лишай, на другая сторона виргиния.

Столкнувшись с таким результатом, автор использовалdeeplearning-jsПри обучении первой модели мое сердце сжалось, и я заподозрил, что где-то в коде есть ошибка, из-за которой модель не сходится.

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

Еще один пример из жизни, который может быть не совсем точным. Чтобы разделить два миллиона яблок на две категории, если вы можете точно собрать всю информацию о двух миллионах яблок, то вы должны быть в состоянии использовать всю эту информацию, чтобы найти некоторые признаки для классификации двух миллионов яблок. Другими словами, это почти невозможно найти два миллиона яблок, очень похожих друг на друга, поэтому они должны быть различимы. Но если речь идет о классификации двадцати яблок, то самый быстрый способ — найти эксперта по яблокам (знания в предметной области), чтобы классифицировать двадцать яблок по каким-то конкретным измерениям, но также может быть в крайних случаях, что эти двадцать яблок настолько похожи, что они совершенно неразделимы.

Эксперт по яблокам в приведенном выше примере представляет традиционную статистику, и есть много статистических данных, таких как анализ главных компонентов (PCA) и другие методы, помогающие уменьшить размерность данных. Для традиционной статистики высокоширотные наборы данных не могут быть обработаны, процесс редукции данных очень длительный, и в процессе редукции данных будет утеряно много информации, содержащейся в исходном наборе данных.

Машинное обучение как раз наоборот: с помощью сверхвысокой вычислительной эффективности графических процессоров оно пытается захватить всю доступную информацию в сверхвысокоразмерном пространстве и, наконец, соответствует пригодной для использования модели. Таким образом, нетрудно понять, почему машинное обучение работает лучше, чем структурированные данные при обработке неструктурированных данных (таких как изображения, текст, голос и т. д.), фундаментальная причина заключается в том, что объем информации, которую несут сами эти неструктурированные данные, очень велик. Например, изображение размером 256*256 пикселей само по себе представляет собой 65 536-мерные данные, не говоря уже о том, что обычный мобильный телефон может делать фотографии тысяч за тысячами пикселей.

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

нормализация данных

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

нормализация данныхявляется одним из очень эффективных методов, в настоящее времяdeeplearning-jsПоддерживаются два метода нормализации данных:

Feature scaling:

equation1

Standard score:

equation2

В чем смысл стандартизации данных? Давайте посмотрим на картинку ниже:

standard

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

Давайте сравним производительность набора данных Iris без нормализации данных и с включенной нормализацией данных в deeplearning-js:

Нормализация данных не включена:

cost2

Нормализация данных не включена, скорость обучения: 0,01, время обучения: 500, нейроны скрытого слоя: 200

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

Включите нормализацию данных:

cost3

Нормализация данных включена, скорость обучения: 0,01, время обучения: 500, нейроны скрытого слоя: 200

Из 150 образцов модель может правильно судить о 142, то есть лишь малую часть лишай и вирджинику все же не удается правильно различить. Мы можем продолжать приближаться к 100% точности, увеличивая количество раз обучения, но из распределения первого набора данных Iris мы видим, что некоторые образцы лишай и виргиника почти совпадают, поэтому даже в пространстве После преобразования все еще очень трудно их различить.

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

инициализация параметра

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

Как показано на рисунке ниже, модель глубокого обучения состоит из такой послойной нейронной сети:

nn

Выразите это формулой:

equation3

Взяв в качестве примера набор данных Iris, наш входной слой представляет собой матрицу [4, 150], тогда матрица значений веса W первого скрытого слоя должна быть матрицей [x1, 4], так что две матрицы могут быть Dot вычисление произведения, где x1 — количество нейронов в первом скрытом слое. После первого слоя на выходе становится матрица [x1, 150], что означает, что форма матрицы весов следующего скрытого слоя должна быть [x2, x1], количество столбцов такое же, как и в предыдущем слое. , а количество строк зависит от количества нейронов в этом слое. И так далее, поскольку количество столбцов в каждом скрытом слое равно количеству строк в предыдущем слое, нам нужно только ввести количество нейронов в текущем слое при инициализации параметров.

С другой стороны, поскольку смещение b аддитивно к W·A, это означает, что форма b должна быть такой же, как у W·A.

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

в глубоком обучении-jsinitializeParametersПример API:

const initialParameters = initializeParameters([{
  size: trainSet.input.shape[0], // 输入层神经元个数等于原始输入数据集的行数,即输入数据维度数
}, {
  size: 10, // 第一个隐藏层神经元个数
  activationFunc: 'relu', // 第一个隐藏层激活函数
}, {
  ... // 第 N 个隐藏层
}, {
  size: trainSet.output.shape[0], // 输出层神经元个数等于原始输出数据集的行数,即输出数据维度数
  activationFunc: 'sigmoid', // 输出层激活函数
}],
  0,      // 初始化权重值时使用的平均数,默认为 0
  1,      // 初始化权重值时使用的方差,默认为 1
  0.01,   // 初始化权重值时使用的比例,默认为 1,建议使用 0.01 防止数值膨胀得过快
);

/*
initialParameters = {
  W1: Array2D,
  b1: Array2D,
  W2: Array2D,
  b2: Array2D,
  ...
  Wl: Array2D, // 第 l 层
  bl: Array2D, // 第 l 层
}
*/

резюме

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