Основные принципы любого алгоритма глубокого обучения

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

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

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

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

Что такое линейная алгебра?

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

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

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

Скаляры

Скаляр - это числовой тензор 0-го порядка.

Примеры: температура, расстояние, скорость или масса.

Здесь все величины имеют величину, но не имеют «направления», кроме того факта, что они могут быть положительными или отрицательными.

Мы всю жизнь имели дело со скалярами; повседневные вычисления, которые вы делаете, основаны на скалярных числах. В Python существует несколько скалярных типов, таких как int, float, complex, bytes, Unicode.

Давайте посмотрим на некоторые операции, которые мы можем выполнять со скалярами -

a = 2  # Scalar 1
b = 5  # Scalar 2
print(a + b)   # 7    # Addition
print(a - b)   # -3   # Subtraction
print(a * b)   # 10   # Multiplication
print(a / b)   # 0.4  # Division

Векторы

Вектор - это список чисел или тензор 1-го порядка. Есть два способа интерпретировать, что это означает:

Один из способов представить вектор - это точка в пространстве. Затем вектор координирует эту точку и определяет ту точку в пространстве, где каждое число будет представлять компонент и размер вектора.

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

Пример вектора -

a = [4, 3]

Здесь у нас есть только вектор длиной два элемента, но он может расширяться до любого количества измерений в приложении. Размерность вектора - это количество элементов в массиве.

Длина вектора называется «величиной». Это расстояние от исходной точки до конечной точки. Мы можем вычислить величину вектора, используя теорему Пифагора (x² + y² = z²).

Сложение и вычитание векторов

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

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

a = [4, 3], b = [1, 2]

c = a + b

c = [4, 3] + [1, 2]

c = [4+1, 3+2]

c = [5, 5]

Вот как мы выполняем векторные сложения, и точно так же вы можете выполнять векторное вычитание.

Векторное умножение: точечные произведения

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

Есть два способа умножения векторов: скалярное произведение (скалярное произведение) и перекрестное произведение.

Скалярные произведения генерируют скалярное значение из произведения двух векторов.

Перекрестное произведение генерирует вектор из произведения двух векторов.

Здесь мы в основном сосредоточимся на скалярном произведении, поскольку это важно для нас.

Скалярное произведение вычисляется путем умножения каждого элемента в векторе на соответствующий ему элемент во втором векторе. Например -

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

Матрицы

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

Матрица размером m * n содержит m строк и n столбцов и содержит m * n элементов.

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

Добавление матрицы

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

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

Вот реализация сложения матриц -

Умножение матриц

Умножение матриц становится немного сложнее, поскольку несколько элементов в первой матрице взаимодействуют с несколькими элементами во втором элементе.

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

Вот простой пример умножения пары матриц 2 * 2:

Чтобы легко объяснить это с помощью визуализации -

Первая строка первой матрицы умножается (скалярное произведение) на первый столбец второй матрицы. Этот процесс продолжается до тех пор, пока мы не исчерпаем всю матрицу.

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

(m x n) матрица * (n x p) матрица дает матрицу размеров - (m x p).

Матрица транспонирования

Будет много раз, когда вам придется транспонировать матрицу при создании модели с нуля.

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

Тензоры

Добро пожаловать в n-мерное пространство. Теперь мы проходим мимо 2D-поверхностей и будем иметь дело с несколькими измерениями. Каждую структуру данных, которую мы обсуждали до сих пор, можно описать как тензор, например, вектор - это тензор первого порядка, а матрица - это тензор второго порядка.

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

Мы можем использовать библиотеки, такие как TensorFlow, NumPy или PyTorch, для выполнения наших операций с тензорами.

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