揭开深度学习数学概念的神秘面纱

本文概述

  • 标量和向量
  • 矩阵和张量
  • 行列式
  • 特征值和特征向量
  • NORM功能
  • 矩阵分解
  • 奇异值分解
  • 摩尔-彭罗斯伪逆
  • hadamard乘积
  • 信息熵
  • Kullback-Leibler发散
  • 梯度下降
  • 总结
数据科学是一个跨学科领域, 它使用数学和高级统计数据进行预测。所有数据科学算法都直接或间接使用数学概念。扎实的数学知识将帮助你开发创新的数据科学解决方案, 例如推荐系统。如果你擅长数学, 它将使你轻松过渡到数据科学。作为数据科学家, 你必须利用数学的基本概念来解决问题。
除数学外, 你还需要领域知识, 编程技能, 业务技能, 分析能力和好奇心态。数据科学家无法逃避数学。你必须灌输和教自己数学和统计学的基础知识才能成为数据科学家。
在本教程中, 你将探索数据科学(或特别是深度学习)的基本数学概念, 例如:
  • 标量和向量
  • 矩阵和张量
  • 行列式
  • 特征值和向量
  • NORM功能
  • 矩阵分解
  • 奇异值分解
  • 摩尔-彭罗斯伪逆
  • hadamard乘积
  • 信息熵
  • Kullback-Leibler发散
  • 梯度下降
标量和向量
  • 标量:标量是通过标量乘法处理空间向量的单个数字。
  • 向量:向量V是项目的有序集合。向量是数字数组, 可以是行或列。向量可以加在一起, 并且可以乘以一个称为定标器的实数。
揭开深度学习数学概念的神秘面纱

文章图片
图片来源
# Import numpy module import numpy as np# creating a vector v = np.array([1, 2, 3, 4, 5]) print(v)

[1 2 3 4 5]

# Vector Operations # Import numpy module import numpy as np# Create two vector a = np.array([1, 2, 3, 4, 5]) b = np.array([1, 2, 3, 4, 5])# adding two vectors add = a + b print("Addition:", add)# Vector Subtraction sub = a - b print("Subtraction:", sub)# Vector Multiplication mul = a * b print("Multiplication:", mul)# Vector Division div = a / b print("division", div)

Addition: [ 2468 10] Subtraction: [0 0 0 0 0] Multiplication: [ 149 16 25] division [1. 1. 1. 1. 1.]

矩阵和张量
  • 矩阵:矩阵是代表变换的数字的N-D数组。你可以将矩阵视为诸如” 比例” , “ 旋转” , “ 剪切” 和” 翻转” 之类的变换。它将空间中的单个点转换为空间中的不同点。
# Import numpy module import numpy as np# create 2*2 matrix a1=np.array([[1, 2], [3, 4]]) a2=np.array([[1, 2], [3, 4]])# Dot Product dot_product = np.dot(a1, a2) print("Dot Product: \n", dot_product)# Cross Product cross_product = np.cross(a1, a2) print("Cross Product: \n", cross_product)

Dot Product: [[ 7 10] [15 22]] Cross Product: [0 0]

两个向量的点积表示一个向量在另一个向量上的投影, 两个向量的叉积使一个向量可以识别两个向量可以位于的平面。
  • 张量:有时候, 你将需要一个具有两个以上维度并且每个数组具有不同维度的数组, 这些数组排列在称为张量的网格中。张量维数称为其等级。标量和向量也是张量的一种。零阶张量是缩放器, 一阶张量是向量。
揭开深度学习数学概念的神秘面纱

文章图片
图片来源
行列式 行列式是表示矩阵因数的标量值, 通过它可以探索长度(一维), 面积(2-维), 体积(3-维)。如果行列式为2, 则是体积的两倍(3维), 或者如果行列式为1, 则不会影响体积(以3维为单位)。如果行列式为0, 则它??没有逆, 因为零乘以0将得到零。
揭开深度学习数学概念的神秘面纱

文章图片
【揭开深度学习数学概念的神秘面纱】特性:
  • 矩阵的乘积是矩阵的行列式的乘积:det(M1M2)= det(M1)det(M2)。
  • 矩阵的行列式等于特征值的乘积。
  • 如果将矩阵乘以常数, 则行列式将按det(cM)= cN det(M)进行更改。 N是矩阵的维数。
如果你的矩阵表示可拉伸的玩具, 则该矩阵的行列式将显示你拉伸了玩具的程度。
# Import numpy module import numpy as np# Create 2*2 matrix arr=np.array([[1, 2], [3, 4]])# Compute Determinant of a matrix arr_det=np.linalg.det(arr)# Print the Computed Determinant print("Determinant:", arr_det)

Determinant: -2.0000000000000004

特征值和特征向量 方阵A的特征向量是非零向量, 因此乘以A仅会改变v的比例。
揭开深度学习数学概念的神秘面纱

文章图片
图片来源
特征向量也称为特征向量。它是一个非零向量, 仅在应用线性变换时才随标量因子变化。
特征向量是线性变换的旋转轴。这些轴在方向上是固定的, 特征值是矩阵放大或缩小的比例因子。特征值也称为特征值或特征根。换句话说, 你可以说特征值是固定的直线或平面, 这限制了线性变换的行为, 而线性变换的特征值是失真的因素。
行列式告诉你在线性变换中按比例缩放的形状区域。这就是为什么特征值的乘积等于行列式的原因。
# Import numpy module import numpy as np# Create 2*2 matrix arr=np.array([[1, 2], [3, 4]])# Find eigenvalues and eigenvectors eigenvalues, eigenvectors = np.linalg.eig(arr)# print the eigenvalues and eigenvectors print("Eigen Values: \n", eigenvalues) print("Eigen Vectors:\n", eigenvectors)

Eigen Values: [-0.372281325.37228132] Eigen Vectors: [[-0.82456484 -0.41597356] [ 0.56576746 -0.90937671]]

NORM功能 有时你想测量向量的大小。范数功能可帮助你测量向量的大小。它为向量空间中除零向量之外的向量分配严格的正长度。它包括L ^ p范数。它将向量映射到非负值。它等效于向量和矩阵的欧几里得距离。它等于最大的奇异值。
揭开深度学习数学概念的神秘面纱

文章图片
# import numpy module import numpy as np# Create 3*3 Matrix a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# Compute norm a_norm = np.linalg.norm(a)# print the norm of function print(a_norm)

16.881943016134134

矩阵分解 矩阵分解, 也称为矩阵分解。它用于将矩阵拆分为其组成部分。矩阵因式分解等效于数字的因式分解, 例如将10分解为2 x5。用于求解线性方程。
可以使用以下矩阵分解技术:
  • LU分解适用于正方形矩阵, 并将矩阵分解为L和U分量。
  • QR分解适用于m x n个矩阵(不限于平方矩阵), 并将矩阵分解为Q和R分量。它不限于像LU分解这样的正方形矩阵。
  • Cholesky分解用于求解线性回归的线性最小二乘以及模拟和优化方法。
  • 下一部分将解释奇异值分解。
奇异值分解 在上一节中, 我们已经看到了分解为特征向量和特征值的矩阵的特征分解。奇异值分解是一种矩阵分解方法, 可分解为奇异矢量和奇异值。它在信号处理, 心理学, 社会学, 气候, 大气科学, 统计和天文学方面提供了各种有用的应用程序。
揭开深度学习数学概念的神秘面纱

文章图片
  • M是一个m×m矩阵
  • U是m×n的左奇异矩阵
  • Σ是一个n×n对角矩阵, 具有非负实数。
  • V是m×n的右奇异矩阵
  • V *是n×m矩阵, 是V的转置。
# Import numpy module import numpy as np# Create 3*3 matrix a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])# Decomposition of matrix using SVD U, s, Vh = np.linalg.svd(a, full_matrices=False)U, s, Vh

(array([[-0.27067357, -0.61678044, 0.69789573], [-0.65939972, -0.2937857 , -0.62152182], [-0.20244298, -0.3480035 , -0.06765408], [-0.67152413, 0.64200111, 0.34939247]]), array([18.0376394 , 2.34360292, 0.38870323]), array([[-0.46961711, -0.51018039, -0.72053851], [ 0.87911451, -0.19502274, -0.43488368], [-0.08134773, 0.83766467, -0.54009299]]))

# Generate the initial matrix new_a = np.dot(U, np.dot(np.diag(s), Vh))# Print original matrix print(new_a)

[[1. 3. 4.] [5. 6. 9.] [1. 2. 3.] [7. 6. 8.]]

摩尔-彭罗斯伪逆 矩阵的伪逆被广义化为逆矩阵。它用于计算最小二乘解。 Moore-Penrose逆是矩阵伪逆的最流行形式。
揭开深度学习数学概念的神秘面纱

文章图片
# Import numpy module import numpy as np# Create 3*3 matrix a = np.array([[1, 3, 4], [5, 6, 9], [1, 2, 3], [7, 6, 8]])# Compute the (Moore-Penrose) pseudo-inverse of a matrix. inv=np.linalg.pinv(a)# Print pseudo-inverse of a matrix. print(inv)

[[-0.370370370.03703704 -0.111111110.18518519] [ 1.56296296 -1.2962963-0.111111110.71851852] [-0.844444440.944444440.16666667 -0.57777778]]

hadamard乘积 Hadamard乘积或Schur乘积是两个相同维原始矩阵的按元素乘积。它也称为按元素乘积。它比矩阵乘积简单。 Hadamard产品用于JPEG有损压缩算法。 Hadamard产品是可交换的, 关联的和分布式的。它很容易获得逆, 并简化了幂矩阵的计算。
揭开深度学习数学概念的神秘面纱

文章图片
Hadamard产品广泛应用于各种领域, 例如卫星传输中的代码校正, 信息论, 密码学, 模式识别, 神经网络, 最大似然估计, JPEG有损压缩, 多元统计分析和线性建模。
# Import numpy module import numpy as np# Create 2*2 matrix a1 and a2 a1=np.array([[1, 2], [3, 4]]) a2=np.array([[1, 2], [3, 4]])# Element wise multiplication hadamard_product = np.multiply(a1, a2)# Print hadamard distance print("Hadamard Product: \n", hadamard_product)

Hadamard Product: [[ 14] [ 9 16]]

信息熵 “ 随机变量的信息熵是一种试图表征随机变量不可预测性的函数。” (信息熵和互信息)” , 用于在树的构建的每个步骤中构建自动决策树;使用信息熵标准进行特征选择。模型选择基于最大信息熵原理, 从冲突的模型中, 信息熵最高的模型是最好的。
“ 如果随机变量X采用集合χ= {x1, x2, … , xn}中的值, 并且由概率分布P(X)定义, 则我们将随机变量的信息熵写为, “ (信息熵和互信息)
揭开深度学习数学概念的神秘面纱

文章图片
“ 如果将上述等式中的对数取为2的底数, 则信息熵以位表示。如果将对数取为自然对数, 则信息熵以nat表示。更普遍地, 信息熵被表示为以位为单位。” (信息熵和互信息)
# Import scipy and numpy module import scipy.stats import numpy as np# Create an array a=np.array([1, 1, 2, 3, 1, 3, 4, 2, 5, 6, 3, 2, 4, 3])# Compute probability distribution a_pdf=scipy.stats.norm.pdf(a)# Calculate the entropy of a distribution for given probability values. entropy = scipy.stats.entropy(a_pdf) # get entropy from probability values print("Entropy: ", entropy)

Entropy:1.6688066853941022

Kullback-Leibler发散 Kullback-Leibler散度是两个概率分布的相对信息熵。它测量一个分布与另一个参考概率分布的距离(相似性或不相似性)。 0 Kullback-Leibler散度的值表示两个分布相同。可以表示为
揭开深度学习数学概念的神秘面纱

文章图片
听起来确实像是距离测量, 但事实并非如此。这是因为它本质上是不对称的, 这意味着该指标不是可交换的。通常, 你可以说D(p, q)≠D(q, p)。 KL散度经常用于无监督的机器学习技术” 可变自动编码器” 中。
# Import scipy.stats and numpy module import scipy.stats import numpy as np# Create numpy arrays a=np.array([1, 1, 2, 3, 1, 3, 4, 2, 5, 6, 3, 2, 4, 3]) b=np.array([1, 1, 3, 4, 2, 4, 5, 2, 5, 6, 3, 2, 4, 3])# Compute probability distribution a_pdf=scipy.stats.norm.pdf(a) b_pdf=scipy.stats.norm.pdf(b)# compute relative entropy or KL Divergence kl_div=scipy.stats.entropy(a_pdf, b_pdf)print("KL Divergence: ", kl_div)

KL Divergence:0.26732496641464365

梯度下降 梯度下降是最著名的算法之一, 用于优化线性回归, 逻辑回归和神经网络的系数和偏差。这是一个迭代过程, 可找到任何给定函数的最小值。
揭开深度学习数学概念的神秘面纱

文章图片
图片来源
揭开深度学习数学概念的神秘面纱

文章图片
图片来源
三种类型的梯度下降算法:整批, 随机和小批量梯度下降。全批次梯度下降使用整个数据集来计算梯度, 而随机梯度下降使用数据集的样本来计算梯度。小批量梯度下降是随机梯度下降和批量梯度下降的组合。训练集分为多个小组, 称为批次。这些小批次逐一计算损失并平均最终损失结果。
总结 恭喜, 你已完成本教程的结尾!
你学习了深度学习的基本数学概念, 例如标量, 向量, 矩阵, 张量, 行列式特征值, 特征向量, NORM函数, 奇异值分解(SVD), Moore-Penrose伪逆, Hadamard乘积, 信息熵Kullback-Leibler发散和梯度下降。
沿途, 你还使用NumPy和SciPy在python中实践了这些概念。
如果你想了解有关Python的更多信息, 请参加以下srcmini课程:
  • SciPy的聚类方法
  • Python中的无监督学习
  • Python中的统计思维(第1部分)
  • Python中的统计模拟

    推荐阅读