- Оригинальный адрес:Linear Algebra for Deep Learning
- Оригинальный автор:Vihar Kurama
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:maoqyhz
- Корректор:kezhenxu94,luochen1992
Математика, стоящая за каждым проектом глубокого обучения.
глубокое обучениеЭто область машинного обучения, включающая некоторые алгоритмы искусственной нейронной сети, которые имитируют структуру и функции человеческого мозга.
Линейная алгебрапредставляет собой непрерывную, а не дискретную форму математики, с которой у многих ученых-компьютерщиков мало опыта. Понимание линейной алгебры очень важно для понимания и использования многих алгоритмов машинного обучения, особенно алгоритмов глубокого обучения.
Почему математика?
Линейная алгебра, теория вероятностей и исчисление — это три «языка», из которых состоит машинное обучение. Изучение этих математических знаний поможет глубже понять лежащий в основе механизм алгоритма и разработать новые алгоритмы.
Когда мы доберемся до сути, все, что стоит за глубоким обучением, — это математика. Поэтому понимание базовых знаний линейной алгебры имеет решающее значение перед изучением глубокого обучения и программирования.
Основными структурами данных, лежащими в основе глубокого обучения, являются скаляры, векторы, матрицы и тензоры. Давайте используем эти структуры данных для решения всех основных задач линейной алгебры программным путем.
скаляр
Скалярединый номер, который также можно рассматривать как тензор ранга 0. Обозначение x∈ℝ означает, что x является скаляром и принадлежит множеству действительных значений ℝ.
Ниже приведены представления различных наборов чисел в глубоком обучении. ℕ представляет набор положительных целых чисел (1,2,3,…). ℤ представляет собой набор целых чисел, объединяющих положительные, отрицательные и нулевые значения. ℚ представляет собой набор рациональных чисел.
В Python есть несколько встроенных скалярных типов,int,float,complex,bytes and Unicode. В Numpy, библиотеке Python, есть 24 новых примитивных типа данных для описания различных типов скаляров. Информацию о типах данных см.Документация.
Определите скаляры и связанные с ними операции в Python:
Следующие фрагменты кода объясняют применение некоторых арифметических операторов к скалярам.
# 内置标量
a = 5
b = 7.5
print(type(a))
print(type(b))
print(a + b)
print(a - b)
print(a * b)
print(a / b)
<class 'int'>
<class 'float'>
12.5
-2.5
37.5
0.6666666666666666
Следующий фрагмент кода может проверить, является ли данная переменная скалярной.
import numpy as np
# 判断是否为标量的函数
def isscalar(num):
if isinstance(num, generic):
return True
else:
return False
print(np.isscalar(3.1))
print(np.isscalar([3.1]))
print(np.isscalar(False))
True
False
True
вектор
Вектор — это упорядоченный массив сингулярных чисел, пример тензора первого порядка. Вектор — это фрагмент объекта, называемый векторным пространством. Векторное пространство можно рассматривать как совокупность всех возможных векторов определенной длины (или размерности). Трехмерное векторное пространство с действительным знаком, обозначаемое как ℝ^3, часто используемое для математического представления нашей реальной концепции трехмерного пространства.
Чтобы однозначно найти компонент вектора, i-й скалярный элемент вектора записывается как x[i].
В глубоком обучении векторы обычно представляют собой векторы признаков, примитивные компоненты которых определяют корреляцию конкретных признаков. Эти элементы могут включать в себя относительную важность интенсивности группы пикселей в двумерном изображении или исторические значения цен различных финансовых инструментов.
Определите векторы и связанные с ними операции в Python:
import numpy as np
# 定义向量
x = [1, 2, 3]
y = [4, 5, 6]
print(type(x))
# 这样做不会得到向量和
print(x + y)
# 使用 Numpy 进行向量相加
z = np.add(x, y)
print(z)
print(type(z))
# 向量叉乘
mul = np.cross(x, y)
print(mul)
<class 'list'>
[1, 2, 3, 4, 5, 6]
[5 7 9]
<class 'numpy.ndarray'>
[-3 6 -3]
матрица
Матрица представляет собой прямоугольный массив чисел и является примером тензора второго порядка. Если m и n — положительные целые числа, то есть m, n∈ℕ, то матрица размера m×n содержит m*n чисел с m строками и n столбцами.
Полная матрица m на n может быть записана как:
Часто полезно сокращать полное матричное отображение следующим выражением:
В Python мы используем библиотеку Numpy, которая помогает нам создавать N-мерные массивы. Массивы в основном можно рассматривать как матрицы, мы используем матричный метод и строим матрицу из списков.
$python
>>> import numpy as np
>>> x = np.matrix([[1,2],[2,3]])
>>> x
matrix([[1, 2],
[2, 3]])
>>> a = x.mean(0)
>>> a
matrix([[1.5, 2.5]])
>>> # 对矩阵求均值。(其中 axis 不设置值,对 m*n 个数求均值,返回一个实数;axis = 0:压缩行,对各列求均值,返回 1* n 矩阵;axis =1 :压缩列,对各行求均值,返回 m *1 矩阵)。
>>> z = x.mean(1)
>>> z
matrix([[1.5],
[2.5]])
>>> z.shape
(2, 1)
>>> y = x - z
matrix([[-0.5, 0.5],
[-0.5, 0.5]])
>>> print(type(z))
<class 'numpy.matrixlib.defmatrix.matrix'>
Определите матрицы и связанные с ними операции в Python:
сложение матриц
Матрицы могут быть дополнены скалярами, векторами и другими матрицами. Каждая операция имеет точное определение. Эти методы часто используются в машинном обучении и глубоком обучении, поэтому стоит потратить время на их ознакомление.
# 矩阵加法
import numpy as np
x = np.matrix([[1, 2], [4, 3]])
sum = x.sum()
print(sum)
# Output: 10
матрица к матрице сложения
C = A + B (**A и B должны иметь одинаковые размеры**)
shape
метод возвращает размеры матрицы,add
Метод принимает два матричных аргумента и возвращает сумму двух матриц. Если размеры двух матриц не совпадаютadd
Метод выдаст исключение о невозможности добавления.
# 矩阵与矩阵相加
import numpy as np
x = np.matrix([[1, 2], [4, 3]])
y = np.matrix([[3, 4], [3, 10]])
print(x.shape)
# (2, 2)
print(y.shape)
# (2, 2)
m_sum = np.add(x, y)
print(m_sum)
print(m_sum.shape)
"""
Output :
[[4 6]
[7 13]]
(2, 2)
"""
матричное и скалярное сложение
Добавляет данный скаляр ко всем элементам в данной матрице.
# 矩阵与标量相加
import numpy as np
x = np.matrix([[1, 2], [4, 3]])
s_sum = x + 1
print(s_sum)
"""
Output:
[[2 3]
[5 4]]
"""
Умножение матрицы и скаляра
Умножает заданный скаляр на все элементы заданной матрицы.
# 矩阵与标量的乘法
import numpy as np
x = np.matrix([[1, 2], [4, 3]])
s_mul = x * 3
print(s_mul)
"""
[[3 6]
[12 9]]
"""
умножение матриц
Матрица A размерности (m x n) умножается на матрицу B размерности (n x p), в результате чего получается матрица C размерности (m x p).
# 矩阵乘法
import numpy as np
a = [[1, 0], [0, 1]]
b = [1, 2]
np.matmul(a, b)
# Output: array([1, 2])
complex_mul = np.matmul([2j, 3j], [2j, 3j])
print(complex_mul)
# Output: (-13+0j)
Транспонирование матрицы
С помощью транспонирования вы можете преобразовывать векторы-строки в векторы-столбцы и наоборот:
A=[a_ij_]mxn
AT=[a_ji_]n×m
# 矩阵转置
import numpy as np
a = np.array([[1, 2], [3, 4]])
print(a)
"""
[[1 2]
[3 4]]
"""
a.transpose()
print(a)
"""
array([[1, 3],
[2, 4]])
"""
Тензор
Более обобщенная сущность — тензор, который инкапсулирует скаляры, векторы и матрицы. В физике и машинном обучении иногда необходимо использовать тензоры более двух порядков.
Вместо использования вложенных матриц мы объявляем тензоры с помощью библиотеки Python, такой как TensorFlow или PyTorch.
Определите простой тензор в PyTorch:
import torch
a = torch.Tensor([26])
print(type(a))
# <class 'torch.FloatTensor'>
print(a.shape)
# torch.Size([1])
# 创建一个 5*3 的随机 torch 变量。
t = torch.Tensor(5, 3)
print(t)
"""
0.0000e+00 0.0000e+00 0.0000e+00
0.0000e+00 7.0065e-45 1.1614e-41
0.0000e+00 2.2369e+08 0.0000e+00
0.0000e+00 0.0000e+00 0.0000e+00
nan nan -1.4469e+35
[torch.FloatTensor of size 5x3]
"""
print(t.shape)
# torch.Size([5, 3])
Операции с тензорами в Python:
import torch
# 创建张量
p = torch.Tensor(4,4)
q = torch.Tensor(4,4)
ones = torch.ones(4,4)
print(p, q, ones)
"""
Output:
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
1.6009e-19 4.4721e+21 6.2625e+22 4.7428e+30
3.1921e-09 8.0221e+17 5.1019e-08 8.1121e+17
8.1631e-07 8.2022e+17 1.1703e-19 1.5637e-01
[torch.FloatTensor of size 4x4]
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
1.8217e-44 1.1614e-41 0.0000e+00 2.2369e+08
0.0000e+00 0.0000e+00 2.0376e-40 2.0376e-40
nan nan -5.3105e+37 nan
[torch.FloatTensor of size 4x4]
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
[torch.FloatTensor of size 4x4]
"""
print("Addition:{}".format(p + q))
print("Subtraction:{}".format(p - ones))
print("Multiplication:{}".format(p * ones))
print("Division:{}".format(q / ones))
"""
Addition:
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
1.6009e-19 4.4721e+21 6.2625e+22 4.7428e+30
3.1921e-09 8.0221e+17 5.1019e-08 8.1121e+17
nan nan -5.3105e+37 nan
[torch.FloatTensor of size 4x4]
Subtraction:
-1.0000e+00 -1.0000e+00 -1.0000e+00 -1.0000e+00
-1.0000e+00 4.4721e+21 6.2625e+22 4.7428e+30
-1.0000e+00 8.0221e+17 -1.0000e+00 8.1121e+17
-1.0000e+00 8.2022e+17 -1.0000e+00 -8.4363e-01
[torch.FloatTensor of size 4x4]
Multiplication:
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
1.6009e-19 4.4721e+21 6.2625e+22 4.7428e+30
3.1921e-09 8.0221e+17 5.1019e-08 8.1121e+17
8.1631e-07 8.2022e+17 1.1703e-19 1.5637e-01
[torch.FloatTensor of size 4x4]
Division:
0.0000e+00 0.0000e+00 0.0000e+00 0.0000e+00
1.8217e-44 1.1614e-41 0.0000e+00 2.2369e+08
0.0000e+00 0.0000e+00 2.0376e-40 2.0376e-40
nan nan -5.3105e+37 nan
[torch.FloatTensor of size 4x4]
"""
Дополнительная документация по тензорам и PyTorchкликните сюда.
важная ссылка
Начало работы с глубоким обучением в Python:
- Deep Learning with Python: The human brain imitation.
- Introduction To Machine Learning: Машинное обучение — это идея учиться на примерах и опыте без явного программирования.Вместо…
заключительные замечания
Спасибо за чтение. Если вы нашли эту историю полезной, пожалуйста, нажмите ? ниже, чтобы поделиться любовью.
Специальная благодарностьSamhita AllaВклад в эту статью.
Если вы обнаружите ошибки в переводе или в других областях, требующих доработки, добро пожаловать наПрограмма перевода самородковВы также можете получить соответствующие бонусные баллы за доработку перевода и PR. **Постоянная ссылка на эту статью** в начале статьи — это ссылка MarkDown на эту статью на GitHub.
Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS, [интерфейс](https://github.com/xitu/gold-miner# интерфейс), [бэкенд](https://github.com/xitu/gold-miner#backend), [блокчейн] (https:/ /github.com/xitu/gold-miner# блокчейн), [продукт](https://github.com/xitu/gold-miner# продукт), [дизайн](https://github .com/xitu/gold -miner# дизайн), [искусственный интеллект](https://github.com/xitu/gold-miner# искусственный интеллект) и другие поля, если вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.