深度学习必备数学知识之线性代数篇(附代码实现)

举报
技术火炬手 发表于 2018/09/17 15:09:46 2018/09/17
【摘要】 作者 | Vihar Kurama译者 | 李众望编辑 | Jane出品 | AI科技大本营【导读】线性代数是一种连续的、非离散的数学形式,许多计算机科学家对此缺乏应用经验,掌握线性代数对理解深度学习算法至关重要。今天AI科技大本营就为大家整理了学习过程中需要必备的线性代数知识,并附上代码实现,帮助大家加深理解。为什么数学是必要的?线性代数、概率论和微积分都是机器学习的“语言”。学习这些科目...

640?wx_fmt=jpeg


作者 | Vihar Kurama

译者 | 李众望

编辑 | Jane

出品 | AI科技大本营

【导读】线性代数是一种连续的、非离散的数学形式,许多计算机科学家对此缺乏应用经验,掌握线性代数对理解深度学习算法至关重要。今天AI科技大本营就为大家整理了学习过程中需要必备的线性代数知识,并附上代码实现,帮助大家加深理解。


为什么数学是必要的?


线性代数、概率论和微积分都是机器学习的“语言”。学习这些科目将有助于深入了解底层的算法机制和开发新的算法。从较低的层级来看,深度学习背后的一切都是以数学为基础的。因此,理解基础的线性代数对于探索深度学习和上手与深度学习相关的编程来说是必要的。


深度学习中的核心数据结构由标量、向量、矩阵和张量组成。从编程的角度来说,我们只需运用这些知识就能解决所有基本的线性代数问题。


640?wx_fmt=jpeg


参考阅读:

https://hadrienj.github.io/posts/Deep-Learning-Book-Series-2.1-Scalars-Vectors-Matrices-and-Tensors/


标量


标量仅用于表达值的大小,也是零阶张量的一个例子。符号 x ∈ ℝ 表示标量 x 属于实数值数组“ ℝ ”。


在深度学习中我们比较关注以下几个数集,ℕ、ℤ 和ℚ。ℕ 表示正整数集(1,2,3,...)。 ℤ 表示整数集,它包含了正值、负值和零值。 ℚ 表示可以由两个整数所构成的分数进行表达的有理数数集。


Python 中内置了少数几种标量类型,如 int,float,complex,bytes,Unicode。而在 Python 库 NumPy 中,有 24 种新的基本数据类型来描述不同类型的标量。


参考阅读:

https://docs.scipy.org/doc/numpy-1.14.0/reference/arrays.scalars.html


如何在Python中定义和运算标量?


以下代码片段解释了基础的标量(Scalars)运算。


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/fbd3406bd9ba2402465fb1c8f3d8b3a6#file-scalars-py


返回如下:


640?wx_fmt=png



以下代码片段用于检验所给的变量类型是否为标量。


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/b9ef648d47c1cb3db977f13fd3071dc6#file-is_scalar-py


返回如下:


640?wx_fmt=png


向量


向量是由多个单个数字组成的有序数组,也是一阶张量的一个例子。向量是向量空间中的片段。向量空间则可以被认为是在特定长度(或维度)中所有可能存在的向量集合。我们通常说的现实世界中的三维空间,在数学里可以用向量空间表达为 ℝ ^ 3。 


640?wx_fmt=jpeg


为了清晰明确地标示向量中的必要成分,向量中的第 i 个标量元素被记做 x[i] 。


在深度学习中,向量通常表示特征向量,它的原始成分则表示特定特征的相关程度。这些元素可以包括如二维图像中一组像素的强度的相关重要性,或是金融工具的横截面的历史价格值。


如何在 Python 中定义和运算向量?


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/7ede36aa2f5ba5e7f70960225a2d351e#file-vectors-py


返回如下:


640?wx_fmt=png



矩阵


矩阵是由数字构成的矩形阵列,是二阶张量的一个例子。若 m 和 n 为正整数( m,n ∈ N ),则 m × n 的矩阵中包含 m * n 个元素,由m 行和 n 列构成。


完整的 m × n 矩阵可写做:


640?wx_fmt=jpeg


我们通常会将上面的矩阵缩写为以下的表达式:


640?wx_fmt=jpeg


在 Python 里,我们会使用 numpy 库来帮助我们创建 n 维的数组,这基本上可以被认作为矩阵。我们将列表传入名为 matrix 方法来定义一个矩阵。


640?wx_fmt=png


如何在 Python 中定义和运算矩阵?


矩阵加法


矩阵可以与标量、向量或其他的矩阵进行相加。每一种加法都有一个精确的定义。这些技巧在机习和深度学习有着非常广泛而频繁的使用,所以它们值得你去熟悉。


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/1bdc39d126b4772f5a8e9d0b5185625f#file-matrix_addition-py


矩阵与矩阵的加法


C = A + B( A 和 B 的形状应当一致)


方法 shape 能够返回矩阵的形状,方法 add 会将传入的两个作为参数的矩阵相加,并返回相加的总和。若两个作为参数的矩阵的形状不一致,该方法则会提示存在“不能相加”的错误。


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/b25716665d72d5e6b50c9149718df076#file-m_m_addition-py


矩阵与标量的加法


将给定矩阵中的各个元素都与给定的标量进行相加


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/ba689ec9a07b1c50f69269454373359a#file-matrix_s_addition-py


矩阵与标量的乘法


将给定矩阵中的各个元素都与给定的标量进行相乘


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/5dcc0beeb7e48f0f271a75108401d34c#file-m_s_multiplication-py


矩阵之间的乘法


形状为 m x n 的矩阵 A 与形状为 n x p 的矩阵 B 相乘则会得到 形状为 m x p 的矩阵 C


640?wx_fmt=jpeg


参考阅读:

https://hadrienj.github.io/posts/Deep-Learning-Book-Series-2.2-Multiplying-Matrices-and-Vectors/


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/1510e248a117f0af6a3843a4307de7b2#file-matrix_mul-py


矩阵的转置


矩阵的转置可以使一个行向量变成一个列向量,或反方向操作亦成立作亦成立:

A = [aij]m x n

AT = [aji]n × m


640?wx_fmt=jpeg


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/3f2091377b3a1f36c402a203f25ffe33#file-martix_transpose-py


张量


笼统的来讲,张量包含了标量,向量,矩阵。有些时候,例如在物理及机器学习中,使用超过二阶的张量是非常必要的。


640?wx_fmt=jpeg


参考阅读:

https://refactored.ai/track/python-for-machine-learning/courses/linear-algebra.ipynb


我们通常不会将矩阵进行嵌套来表示张量,而是会使用像 tensoTflow 或者 PyTorch 这样的 Python 库来对张量进行表示张量 PyTorche 中定义一个简单的张量


640?wx_fmt=png


参考阅读:

https://gist.github.com/vihar/eb78a6171de9740b128cbff21fc0b6ea#file-tensors-py


一些在 Python 中其他的张量的运算操作


src:

https://gist.github.com/vihar/7b03ca54e4fe811e1053e09bdc1278b5#file-tensor_operations-py


640?wx_fmt=png

640?wx_fmt=png



更多关于张量和 PyTorch 的文档,请参阅

https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html


原文链接:

https://towardsdatascience.com/linear-algebra-for-deep-learning-506c19c0d6fa


本文章来源:CSDN社区,用户:AI科技大本营,版权归原作者所有

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。