《Deep Learning with Python》学习记录(一):数学基础

在这里插入图片描述

数据表示,张量

张量是矩阵向任意维度的推广(注意,张量的维度(dimension)通常叫作轴(axis))。

标量(0D 张量)

仅包含一个数字的张量叫作标量(scalar,也叫标量张量、零维张量、0D 张量)。
标量张量有 0 个轴( ndim == 0 )。张量轴的个数也叫作阶(rank)。下面是一个 Numpy 标量。
在这里插入图片描述

向量(1D 张量)

数字组成的数组叫作向量(vector)或一维张量(1D 张量)。一维张量只有一个轴。
在这里插入图片描述
在这里插入图片描述

矩阵(2D 张量)

向量组成的数组叫作矩阵(matrix)或二维张量(2D 张量)。矩阵有 2 个轴(通常叫作行和列)。你可以将矩阵直观地理解为数字组成的矩形网格。
在这里插入图片描述
在这里插入图片描述
第一个轴上的元素叫作行(row),第二个轴上的元素叫作列(column)。在上面的例子中,[5, 78, 2, 34, 0] 是 x 的第一行, [5, 6, 7] 是第一列。

3D 张量

将多个矩阵组合成一个新的数组,可以得到一个 3D 张量,你可以将其直观地理解为数字组成的立方体。下面是一个 Numpy 的 3D 张量
在这里插入图片描述
在这里插入图片描述

四维张量

在这里插入图片描述
在这里插入图片描述
shape属性中的元素大于等于3时,可以用3维空间来理解。
shape=(3, 4, 2)时,表示3行4列深度为2的张量
shape=(2, 3, 4, 2)时,表示有2个 3行4列深度为2的张量
shape=(6, 2, 3, 4, 2)时,表示有6个四维张量,这个四维张量又可以表示为2个 3行4列深度为2的张量。

关键属性

张量是由以下三个关键属性来定义的。
**轴的个数(阶)😗*例如,3D 张量有 3 个轴,矩阵有 2 个轴。
形状:这是一个整数元组,表示张量沿每个轴的维度大小(元素个数)。例如,前面矩阵示例的形状为 (3, 5) ,3D 张量示例的形状为 (3, 3, 5) 。向量的形状只包含一个元素,比如 (5,) ,而标量的形状为空,即 ()。
数据类型:这是张量中所包含数据的类型,例如,张量的类型可以是 float32 、 uint8 、 float64 等。在极少数情况下,你可能会遇到字符( char )张量。

数据批量的概念

深度学习中所有数据张量的第一个轴(0 轴,因为索引从 0 开始)都是样本轴(samples axis,有时也叫样本维度)。
深度学习模型不会同时处理整个数据集,而是将数据拆分成小批量。
在这里插入图片描述
第一个轴(0 轴)叫作批量轴(batch axis)或批量维度(batch dimension)。
在这里插入图片描述

向量数据

其中第一个轴是样本轴,第二个轴是特征轴。
在这里插入图片描述

时间序列数据或序列数据

在这里插入图片描述
时间轴始终是第 2 个轴(索引为 1 的轴)。
在这里插入图片描述

图像数据

图像通常具有三个维度:高度、宽度和颜色深度。
图像张量始终都是 3D 张量,灰度图像的彩色通道只有一维。
如果图像大小为 256×256,那么 128 张灰度图像组成的批量可以保存在一个形状为 (128, 256, 256, 1) 的张量中,而 128 张彩色图像组成的批量则可以保存在一个形状为 (128, 256, 256, 3) 的张量中。
在这里插入图片描述
图像张量的形状有两种约定:通道在后(channels-last)的约定(在 TensorFlow 中使用)和通道在前(channels-first)的约定(在 Theano 中使用)。Google 的 TensorFlow 机器学习框架将颜色深度轴放在最后: (samples, height, width, color_depth) 。与此相反,Theano将图像深度轴放在批量轴之后: (samples, color_depth, height, width) 。如果采用 Theano 约定,前面的两个例子将变成 (128, 1, 256, 256) 和 (128, 3, 256, 256) 。Keras 框架同时支持这两种格式。

视频数据

视频可以看作一系列帧,
每一帧都是一张彩色图像。由于每一帧都可以保存在一个形状为 (height, width, color_depth) 的 3D 张量中,因此一系列帧可以保存在一个形状为 (frames, height, width,
color_depth) 的 4D 张量中,而不同视频组成的批量则可以保存在一个 5D 张量中,其形状为(samples, frames, height, width, color_depth) 。
在这里插入图片描述

神经网络的“齿轮”:张量运算

有三个张量运算:输入张量和张量 W 之间的点积运算( dot )、得到的 2D 张量与向量 b 之间的加法运算( + )、最后的 relu 运算。 relu(x) 是 max(x, 0) 。

逐元素运算

relu 运算和加法都是逐元素(element-wise)的运算,即该运算独立地应用于张量中的每个元素,也就是说,这些运算非常适合大规模并行实现。
在这里插入图片描述

广播

如果将两个形状不同的张量相加,较小的张量会被广播(broadcast),以匹配较大张量的形状。
广播包含以下两步:
(1) 向较小的张量添加轴(叫作广播轴),使其 ndim 与较大的张量相同。
(2) 将较小的张量沿着新轴重复,使其形状与较大的张量相同。
在这里插入图片描述
在这里插入图片描述

张量点积

点积运算,也叫张量积,是最常见也最有用的张量运算。与逐元素的运算不同,它将输入张量的元素合并在一起。
在 Numpy 和 Keras 中,都是用标准的 dot 运算符来实现点积。
在这里插入图片描述

张量变形

张量变形是指改变张量的行和列,以得到想要的形状。变形后的张量的元素总个数与初始张量相同。
在这里插入图片描述

深度学习的几何解释

对于三维的情况,下面这个思维图像是很有用的。想象有两张彩纸:一张红色,一张蓝色。
将其中一张纸放在另一张上。现在将两张纸一起揉成小球。这个皱巴巴的纸球就是你的输入数据,每张纸对应于分类问题中的一个类别。神经网络(或者任何机器学习模型)要做的就是找到可以让纸球恢复平整的变换,从而能够再次让两个类别明确可分。通过深度学习,这一过程
可以用三维空间中一系列简单的变换来实现,比如你用手指对纸球做的变换,每次做一个动作,

神经网络的“引擎”:基于梯度的优化

我们的第一个神经网络示例中,每个神经层都用下述方法对输入数据进行变换。
在这里插入图片描述
W 和 b 都是张量,均为该层的属性。它们被称为该层的权重。
开始,这些权重矩阵取较小的随机值,这一步叫作随机初始化(random initialization)。
W 和 b 都是随机的, relu(dot(W, input) + b) 肯定不会得到任何有用的表示。虽然得到的表示是没有意义的,但这是一个起点。下一步则是根据反馈信号逐渐调节这些权重。这个逐渐调节的过程叫作训练,也就是机器学习中的学习。
上述过程发生在一个训练循环(training loop)内,其具体过程如下。
(1) 抽取训练样本 x 和对应目标 y 组成的数据批量。
(2) 在 x 上运行网络[这一步叫作前向传播(forward pass)],得到预测值 y_pred 。
(3) 计算网络在这批数据上的损失,用于衡量 y_pred 和 y 之间的距离。
(4) 更新网络的所有权重,使网络在这批数据上的损失略微下降。

张量运算的导数:梯度

梯度(gradient)是张量运算的导数。它是导数这一概念向多元函数导数的推广。多元函数是以张量作为输入的函数。
在这里插入图片描述

随机梯度下降

给定一个可微函数,理论上可以用解析法找到它的最小值:函数的最小值是导数为 0 的点,因此你只需找到所有导数为 0 的点,然后计算函数在其中哪个点具有最小值。
这一方法应用于神经网络,就是用解析法求出最小损失函数对应的所有权重值。可以通
过对方程 gradient(f)(W) = 0 求解 W 来实现这一方法。这是包含 N 个变量的多项式方程,其中 N 是网络中系数的个数。N=2 或 N=3 时可以对这样的方程求解,但对于实际的神经网络是无法求解的,因为参数的个数不会少于几千个,而且经常有上千万个。
基于当前在随机数据批量上的损失,一点一点地对参数进行调节。
在这里插入图片描述
方法叫作小批量随机梯度下降(mini-batch stochastic gradient descent,又称为小批量 SGD)。术语随机(stochastic)是指每批数据都是随机抽取的

在这里插入图片描述
直观上来看,为 step 因子选取合适的值是很重要的。如果取值太小,则沿着曲线的下降需要很多次迭代,而且可能会陷入局部极小点。如果取值太大,则更新权重值之后
可能会出现在曲线上完全随机的位置。
以将梯度下降沿着二维损失曲面可视化
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值