原址

每个深度学习项目背后的数学知识。

深度学习是机器学习的一个子领域,涉及一些模仿人脑结构和功能的人工神经网络算法。

线性代数是一种连续的而非离散的数学形式,许多计算机科学家对它几乎没有经验。对于理解和使用许多机器学习算法,特别是深度学习算法,理解线性代数是非常重要的。

为什么是数学?

线性代数,概率论和微积分是组成机器学习的三种“语言”。学习这些数学知识将有助于深入理解底层算法机制,并且开发新的算法。

当我们深入到底层时,深度学习背后的一切都是数学。因此在学习深度学习和编程之前,理解基本的线性代数知识是至关重要的。

来源

深度学习背后的核心数据结构是标量,矢量,矩阵和张量。让我们使用这些数据结构,通过编程的方式来解决所有基本的线性代数问题。

标量

标量是单个数字,也可以视为 0 阶张量。符号 x∈ℝ 表示 x 是一个标量,属于一组实数值 ℝ。

以下是深度学习中不同数集的表示。ℕ 表示正整数集合 (1,2,3,…)。ℤ 表示结合了正值,负值和零值的整数集合。ℚ 表示有理数集合。

在 Python 中有一些内置的标量类型,intfloatcomplexbytes 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 Trueelse:return Falseprint(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]

矩阵

矩阵是由数字组成的矩形阵列,是 2 阶张量的一个例子。如果 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 npx = np.matrix([[1, 2], [4, 3]])sum = x.sum()
print(sum)
# Output: 10

矩阵与矩阵相加

C = A + B (**A 与 B 的维度需要相同 **)

shape 方法返回矩阵的维度,add 方法接受两个矩阵参数并返回这两个矩阵的和。如果两个矩阵的维度不一致 add 方法将会抛出一个异常,说无法将其相加。

# 矩阵与矩阵相加import numpy as npx = 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 npx = np.matrix([[1, 2], [4, 3]])
s_sum = x + 1
print(s_sum)
"""
Output:
[[2 3][5 4]]
"""

矩阵与标量的乘法

将给定的标量乘以给定矩阵中的所有元素。

# 矩阵与标量的乘法import numpy as npx = np.matrix([[1, 2], [4, 3]])
s_mul = x * 3
print(s_mul)
"""
[[3  6][12  9]]
"""

矩阵乘法

维度为(m x n)的矩阵 A 和维度为(n x p)的矩阵 B 相乘,最终得到维度为(m x p)的矩阵 C。

来源

# 矩阵乘法import numpy as npa = [[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 npa = np.array([[1, 2], [3, 4]])
print(a)
"""
[[1 2][3 4]]
"""
a.transpose()
print(a)
"""
array([[1, 3],[2, 4]])
"""

张量

更加泛化的实体 —— 张量,封装了标量、矢量和矩阵。在物理科学和机器学习中,有时需要使用超过两个顺序的张量。

来源

我们使用像 TensorFlow 或 PyTorch 这样的 Python 库来声明张量,而不是使用嵌套矩阵来表示。

在 PyTorch 中定义一个简单的张量:


import torcha = 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+000.0000e+00  7.0065e-45  1.1614e-410.0000e+00  2.2369e+08  0.0000e+000.0000e+00  0.0000e+00  0.0000e+00nan         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+001.6009e-19  4.4721e+21  6.2625e+22  4.7428e+303.1921e-09  8.0221e+17  5.1019e-08  8.1121e+178.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+001.8217e-44  1.1614e-41  0.0000e+00  2.2369e+080.0000e+00  0.0000e+00  2.0376e-40  2.0376e-40nan         nan -5.3105e+37         nan
[torch.FloatTensor of size 4x4]1  1  1  11  1  1  11  1  1  11  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+001.6009e-19  4.4721e+21  6.2625e+22  4.7428e+303.1921e-09  8.0221e+17  5.1019e-08  8.1121e+17nan         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+001.6009e-19  4.4721e+21  6.2625e+22  4.7428e+303.1921e-09  8.0221e+17  5.1019e-08  8.1121e+178.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+001.8217e-44  1.1614e-41  0.0000e+00  2.2369e+080.0000e+00  0.0000e+00  2.0376e-40  2.0376e-40nan         nan -5.3105e+37         nan
[torch.FloatTensor of size 4x4]
"""

有关张量和 PyTorch 的更多文档点击这里。

深度学习中所需的线性代数知识相关推荐

  1. 一文读懂深度学习中的矩阵微积分

    点击视学算法标星,更快获取CVML新技术 鱼羊 编译整理 量子位 报道 | 公众号 QbitAI 想要真正了解深度神经网络是如何训练的,免不了从矩阵微积分说起. 虽然网络上已经有不少关于多元微积分和线 ...

  2. 机器学习与深度学习中的数学知识点汇总

    点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,每天 8:25 送达 来源:SIGAI 在机器学习与深度学习中需要大量使 ...

  3. 深度学习中的线性代数知识详解

    1. 基础概念 标量(scalar) 一个标量就是一个单独的数,一般用小写的的变量名称表示. 向量(vector) 一个向量就是一列数,这些数是有序排列的: ⎡⎣⎢⎢⎢⎢x1x2...x5⎤⎦⎥⎥⎥⎥ ...

  4. 深度学习中的3个秘密:集成、知识蒸馏和蒸馏

    作者:Zeyuan Allen-Zhu 来源:AI公园 编译:ronghuaiyang 在现在的标准技术下,例如过参数化.batch-normalization和添加残差连接,"现代&quo ...

  5. 深度学习中的知识蒸馏技术(下)

    本文概览: 写在前面: 这是一篇介绍知识蒸馏在推荐系统中应用的文章,关于知识蒸馏理论基础的详细介绍,请看我的这篇文章: 深度学习中的知识蒸馏技术(上) 1. 背景介绍 1.1 简述推荐系统架构 如果从 ...

  6. 深度学习中的核心知识

    深度学习中的核心知识 前向运算 计算输出值的过程称为前向传播 前提:网络结构已知(两个方面:1. 每个层的构造 卷积/池化 2. 每个层的参数) 难点:1.f函数如何定义 2.每层的参数 (通过反向传 ...

  7. 【干货】深度学习中的线性代数---简明教程

    作者 | Vihar Kurama 编译 | 专知 整理 | Mandy 线性代数对于理解机器学习和深度学习内部原理至关重要,线性代数是有关连续值的数学.许多计算机科学家在此方面经验不足,传统上计算机 ...

  8. 机器学习知识总结 —— 12. 机器与深度学习中常用术语 [D-J]

    文章目录 Darknet Data / 数据 Dataset / 数据集 Deploy / 部署 Differentiable / 可微的 Distributed / 分布式 Domain Speci ...

  9. 深度学习中的数学-线性代数

    深度学习中的数学-线性代数 1 矩阵和向量相乘 1.1 标准乘积 1.2 元素对应乘积 2 线性相关和生成子空间 3 特征分解 4 奇异值分解 推荐书目 参考 1 矩阵和向量相乘 1.1 标准乘积 如 ...

最新文章

  1. G20国家科技竞争力大盘点,中国科研创新表现突出,人工智能变道超车
  2. windows时间同步软件_有没有好用的windows时间管理软件?这款便签软件帮你
  3. Sencha 自定义组件函数回调
  4. python expect模块_Python基础教程:用Python怎么telnet到网络设备
  5. js导出的xlsx无法打开_vue将数据导出为excel文件就是如此简单
  6. 如何利用路由器防止DoS拒绝服务疯狂***
  7. Atitit 翻页功能的解决方案与版本历史 v4 r49
  8. 小小一款代码编辑器竟然也可以有程序运行之功能——Sublime Text3运行各种语言程序的总结
  9. 教程篇(7.0) 02. FortiGate安全 安全架构 ❀ Fortinet 网络安全专家 NSE 4
  10. (附源码)计算机毕业设计SSM加油站管理信息系统
  11. 架构的原则、范式及治理
  12. GridView,GridLayout
  13. 什么是MISRA?如何满足该行业标准?
  14. Incorporating visual features into word embeddings:A bimodal autoencoder-based approach
  15. ESXi社区版网卡驱动2022年3月更新
  16. my read travel
  17. 路由概述与静态路由、默认路由、浮动路由基本配置
  18. DD-WRT 的优点
  19. python 股票市场分析实战
  20. 小米MIx3 miui11国际版本地化

热门文章

  1. spring +mybatis 事务不会滚
  2. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十九) 落雷!治疗!陷阱!连锁闪电!多段群伤!魔法之终极五重奏②...
  3. Office 浏览器
  4. HTTP请求字符限制和HTTP状态码
  5. 10个最棒的jQuery视频插件
  6. 责任分配矩阵和raci的区别_有限责任公司实现盈利,当年就一定可以分红吗?...
  7. python中的leap_Python-规则打破了leap年?
  8. Tomcat的下载及环境变量配置
  9. Oracle、MySql、SQLServer 数据库分页查询语句
  10. 什么是mysql事物定义_MySQL中事务概念的简洁学习教程