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

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

Одним из основных источников информации для этой серии является книга Глубокое обучение, составленная тяжеловесами Яном Гудфеллоу, Йошуа Бенжио и Аароном Курвиллем. Я позаботился о том, чтобы структурировать эту статью, как исходный текст, но в ней есть код и другие материалы, а также различные объяснения. Я настоятельно рекомендую вам проверить это, потому что это бесплатный и замечательный ресурс! Я также углубляюсь в распознавание образов Кристофера Бишопса, машинное обучение, линейную алгебру и ее приложения Дэвида К. Лэя, Стивена Р. Лэя и Джуди Дж. Макдональд.

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

В линейной алгебре используются фундаментальные объекты:

  1. Скаляры: просто одно число. Тип следует указывать в том виде, в каком они представлены в тексте, например, это может быть вещественный скаляр (с плавающей запятой) или скаляр натурального числа (целое число).
  2. Векторы. Вектор - это одномерный список или массив чисел. Если вы знакомы с матрицами (читайте, если не знаете), то это матрица с одним столбцом. Порядок имеет значение в векторе, см. Рис. 1. для получения более подробной информации.
  3. Матрицы: это двумерные списки чисел, что означает, что мы должны идентифицировать каждый элемент, составляющий матрицу, с двумя индексами. Считайте их списками.
  4. Тензоры: многомерный массив, состоящий из более чем двух осей, это означает, что имеется n количеств измерений.

В приведенном ниже коде мы видим объекты, реализованные на Python с помощью модуля NumPy.

Итак, есть несколько основных объектов - что мы можем с ними сделать?

Необходимо изучить множество матричных операций. Следует отметить важную операцию транспонирование. Для матрицы A с размерами N x M транспонированная матрица A будет иметь размеры M x N.

Составив приведенное выше уравнение LaTeX, я понял, что мы также можем видеть это как гифку благодаря Викимедиа:

Скаляр можно рассматривать как тензор с одним значением, поэтому, поскольку есть только одна запись, транспонирование скаляра - это сам!

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

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

Как насчет умножения матриц на матрицы? Наиболее интуитивно понятной версией будет поэлементный продукт или продукт Адамара, который обозначается как:

Примером поэлементного продукта может быть:

Мы также можем перемножать матрицы с немного другой размерностью. Учитывая две матрицы, A и B, где A имеет такое же количество строк, что и столбцы B, мы можем умножить матрицу A на B. Это дает нам матричный продукт как матрицу C. Мы выполняем эту операцию следующим образом (для нематематиков греческий символ E является обозначением суммы по k элементам):

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

Следует отметить, что операции матричного произведения обладают некоторыми полезными математическими свойствами, например, являются распределительными. Это означает, что для некоторых матриц A, B и C запись A (B + C) означает запись AB + AC. Операции с матричным продуктом также ассоциативны; A (BC) совпадает с (AB) C.

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

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

Из этого мы видим, что единичная матрица не меняет никакого вектора, когда мы умножаем этот вектор на его единичную матрицу. Это верно для n-мерных векторов, и мы можем быстро увидеть код для этого здесь:

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

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

Функции, называемые нормами, используются для измерения размера (или длины) векторов в машинном обучении. Обычно они сопоставляют векторы с неотрицательными значениями и должны возвращать ноль, когда компоненты вектора полностью равны нулю. Хорошо известная норма, норма L2 или иначе известная как евклидова норма, рассчитывается следующим образом:

Еще одна популярная норма - это норма L1. Это очень просто:

При использовании L1 каждый раз, когда компонент X отклоняется от нуля на величину, размер нормы L1 увеличивается на такую ​​же пропорциональную величину.

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

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

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

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

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

Если ортогональные векторы не только ортогональны друг другу, но и имеют единичную норму, тогда у нас есть для них специальное имя; ортонормированный.

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

Это говорит нам о том, что транспонированная ортогональная матрица равна ее обратной матрице.

Кодовый эквивалент вышеупомянутой математики с ортогональной матрицей может быть:

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

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

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

Эти важные представления не всегда интуитивно понятны с первого взгляда; когда мы смотрим на матрицу M, вряд ли будет очевидно, что она сделает с вектором x, когда вы умножите два вместе. Если нам нужно изучить итерационный эффект M, т. Е. M в степени k итераций, тогда вычисления могут стать дорогостоящими, если мы их наивно.

Вспомните матрицу идентичности. Любой вектор, умноженный на матрицу, просто вернет тот же вектор! Для этого такого вектора легко представить, как он изменится после k количества итераций умножения его на M; вообще не будет никаких изменений; независимо от того, сколько раз вы умножали вектор и единичную матрицу!

Собственный вектор, принадлежащий матрице M, - это любой вектор, масштабируемый только при умножении на M. Более формально это приводит к следующему уравнению:

Учитывая, что M может быть матрицей, описывающей геометрическую операцию, которая в принципе может растягивать и вращать векторы. При этом собственный вектор x будет только растягиваться, а не поворачиваться.

Одно из значений слова «собственный» - характеристика. Я думаю, что интуитивно понятно, что собственный вектор x является характеристическим вектором матрицы M. Таким образом, собственные векторы - это способы разложения матриц способами, раскрывающими их функциональные свойства. Предположим, что матрица M имеет n линейно независимых собственных векторов, называемых x1, x2 и т. Д. Мы можем объединить все собственные векторы в матрицу X. Все собственные значения могут быть преобразованы в вектор, и мы можем вычислить собственное разложение M следующим образом:

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

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

Последняя тема этой статьи - Анализ основных компонентов (PCA). PCA используется для уменьшения размеров набора данных при минимизации количества потерянной информации. PCA - хороший пример eigendecomposition и некоторых других вещей, о которых мы узнали в этой статье. Наслаждаться!

Спасибо, что зашли так далеко - я очень ценю, что вы нашли время прочитать мою статью!

Я хотел бы услышать от вас, пожалуйста, напишите мне здесь или в твиттере, и если вам понравилась эта статья, то оставьте несколько аплодисментов и дайте мне подписаться!

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