美文网首页
深度学习讲稿(16)

深度学习讲稿(16)

作者: 山岳之心 | 来源:发表于2021-02-20 19:33 被阅读0次

3.12 Numpy 快速入门

在前面的小节中,我们已经讨论了两种新的数学工具:向量和矩阵。
在Numpy 中,你能够以多种方式创建向量和矩阵。大多数神经网络模型中常用的运算技巧已经在前面的代码中列出。注意创建一个向量和一个矩阵的过程是相同的。如果你只创建一个只有一行的矩阵,你就创建了一个向量。而且,与通常在数学中做的一样,我们通过行、列来创建矩阵。

让我们来看看一些可以对这些向量和矩阵做的运算。


import numpy as np

a = np.array([0,1,2,3])
b = np.array([4,5,6,7])
c = np.array([[0,1,2,3],[4,5,6,7]])
d = np.zeros((2,4))
e = np.random.rand(2,5)

## 查看输出
print(a)
print(b)
print(c)
print(d)
print(e)

## 做逐元素矩阵运算
print(a * 0.1)
print(c * 0.2)
print(a * b)
print(a * b * 0.2)
print(a * c)

## 下面的语句会出错
print(a * e)

虽然上面的运算式看上去很简单,但实际上并不容易理解。我们需要谨记一点,尽管这种乘法表达式很简单,但并不属于矩阵乘法代数。也就是说,这种乘法会扭曲信息,所以要非常小心这种操作。实际上,这种看似简单的乘法可以拆分成两步。第一步是做数据的清洗和过滤,第二步才是对数据的矩阵乘法。上面的计算中,第1,2个标量乘法是满足矩阵代数的,可以放心操作,它实际上代表的是向量或者矩阵的整体收缩或放大。第3种乘法则表面上看来不符合矩阵代数,但它实际代表的是向量的赋权,它可以写成矩阵乘法:
result = b \ diag(a) \quad (3.11)
其中 diag(a) 代表的是以向量 a 的元素为对角元素,其他非对角元为0的方矩阵。

用Numpy的语句写下,上面的语句为:

a = np.diag[list(a)] # 转换为对角矩阵
result = np.matmul(b,a) 
# 使用矩阵乘法, 注意我调换了a和b的位置
print(result) 

可以验证这个结果和 print(a * b) 得到的结果是一致的。

同样地,a * c 实际上也可以用矩阵表达出来。它的矩阵表达形式是result1 = c\ diag(a) \quad (3.12)
请你试着把这个式子表达为Numpy的形式,并且理解自己试试输出的结果。

但是,Numpy其实支持一种不符合矩阵代数的计算。比如

A = np.array([[0,1,2,3],[4,5,6,7]])
B = np.array([[1,1,1,1],[2,3,4,5]])
print(A*B)

这样计算的结果就是逐元素相乘,没有任何矩阵乘法的意义。而且这种乘法非常危险,它不报错。如果你在你的神经网络算法里面用了这样的乘法,那么请你记住,你可能完全改变了数据,你不能期待算法会有什么好的预测结果。因此,我不建议使用任何简化的乘法来处理矩阵。矩阵代数作为代数是严格自洽的,这意味着你使用它会很安全。但像上面的乘法却不是代数自洽的,使用它们会非常非常危险。我的建议是绝对不要使用这种乘法。

关于Numpy, 还有一个我们已经熟知的点乘算法。就是dot乘法。点乘要求左边矩阵的列数要等于右边矩阵的行数。比如我们看下面的一些代码:

import numpy as np
a = np.zeros((2,4))
b = np.zeros((4,3))
print(a.dot(b))

h = np.zeros((5,4)).T # T表示将矩阵转置,即行列互换
i = np.zeros((5,6))
print(h.dot(i))

你可以尝试更多的一些矩阵,来熟练这种点乘的法则。

实际上,矩阵不仅仅有点乘,还有向量的叉乘,矩阵的直乘,直和。但是这些概念超出神经网络学习的范畴了。所以我们暂时不需要去理解它们。但如果你对算法感兴趣,你需要知道,矩阵的知识非常深奥难懂,需要很长的时间你才能理解它们。但一旦你理解了它们,它会是你的秘密武器。

相关文章

  • 深度学习讲稿(16)

    3.12 Numpy 快速入门 在前面的小节中,我们已经讨论了两种新的数学工具:向量和矩阵。在Numpy 中,你能...

  • 深度学习讲稿(2)

    1.4 深度学习的当前应用 目前,深度学习已经和商业结合得非常多。这个算法本身已经深刻地改变了人类社会,而且在未来...

  • 深度学习讲稿(1)

    深度学习 I. 从AlphaGo谈起 大家听说过2015年10月, 英国DeepMind设计的人工智能AlphaG...

  • 深度学习讲稿(4)

    第2章: 基本概念 本章主要内容: 什么是深度学习、机器学习和人工智能? 什么是参数模型和非参数模型? 什么是监督...

  • 深度学习讲稿(5)

    2.3 监督机器学习 监督学习对数据集进行转换 监督学习是一种将一个数据集转换成另一个数据集的方法。例如,如果你有...

  • 深度学习讲稿(7)

    2.6 监督参数学习 简化描述:使用旋钮进行试错学习 监督参数学习机是一台具有固定数量的旋钮(参数)的机器,通过转...

  • 深度学习讲稿(6)

    2.5 参数学习和非参数学习 简化表述:试错学习 VS. 计数和概率。前面谈的内容将所有的机器学习算法分成两组:有...

  • 深度学习讲稿(3)

    1.5 准备工作 安装jupyter Notebook 和 Numpy Python 库强烈建议安装VScode...

  • 深度学习讲稿(8)

    2.7 无监督参数学习 无监督参数学习本质上是对数据进行分类,但是在数据分类之前已经对该数据有一定的标记。比如淘金...

  • 深度学习讲稿(25)

    5.3 随机梯度下降法 我们首先来看随机梯度下降法的运算顺序。前面我们已经讲了这种算法的学习逻辑。它对整个数据集要...

网友评论

      本文标题:深度学习讲稿(16)

      本文链接:https://www.haomeiwen.com/subject/pvuxfltx.html