8、神经网络二:设置数据和损失

目录

8.1 设置数据及模型

8.1.1 数据预处理

8.1.2 权重初始化

8.1.3 批量标准化

8.1.4 正则化(L2/L1/Maxnorm/Dropout)

8.2 损失函数

8.3 总结


8.1 设置数据及模型

在上一章中,我们介绍了只有一个神经元的模型,它由一个点积,再跟一个非线性计算组成,以及将神经元排列成层的神经网络。这些选择定义了评分函数的新形式,扩展了我们在线性分类部分介绍的简单线性映射。具体来说,神经网络就是进行了一系列的线性映射与非线性激活函数交织的运算。本节将讨论更多的算法设计选项,比如数据预处理,权重初始化和损失函数。

8.1.1 数据预处理

对于一个数据矩阵X,常见数据预处理方法有三种,在这里我们假设x是大小[n xd](n是数据的数目,d是它们的维数)。

均值减法是最常见的预处理形式。它包括在数据中的每个个体特征中减去平均值,从几何上可以理解为在每个维度上都将数据云的中心都迁移到原点。在numpy中,这个操作这样写就可以了:X -= np.mean(X, axis = 0)。特别地,为了方便起见,从所有像素中减去单个值(例如X -= np.mean(X)),或者在三个颜色通道上单独地这样做也是很常见的。

标准化化是指对数据各维度进行标准化,使它们具有大致相同的尺度。实现这种标准化有两种常见的方式。第一种是先对数据做零中心化(zero-centered)处理,然后每个维度都除以其标准差,实现代码为 X /= np.std(X, axis = 0)。这种预处理的另一种形式将每个维度归一化,使得沿着维度的最小值和最大值分别为-1和1。如果你有理由相信不同的输入特征有不同的尺度(或单位),但它们应该对学习算法具有同等的重要性,那么应用这个预处理是有意义的。在图像处理场景,像素的相对尺度已经大致相等(在0到255的范围内),因此不必严格执行这种附加的预处理步骤。


通用数据预处理流水线。左:原始的二维输入数据。中间:数据以零为中心,减去每个维度中的均值。数据云现在以原点为中心。右:每个维度按其标准偏差再缩放。红线表示数据的长度,中间长度不等,右边等长。


PCA和白化是预处理的另一种形式。在这个过程中,数据首先以如上所述中心化。然后,我们可以计算协方差矩阵,它告诉我们数据中的相关结构:

# 假设输入数据矩阵X的尺寸为[N x D]
X -= np.mean(X, axis = 0) # 对数据进行零中心化(重要)
cov = np.dot(X.T, X) / X.shape[0] # 得到数据的协方差矩阵

数据协方差矩阵的(i,j)元素包含数据的第i和第j维之间的协方差。该矩阵的对角线上的元素是方差。此外,协方差矩阵是对称的和半正定的。我们可以计算数据协方差矩阵的奇异值分解。

U,S,V = np.linalg.svd(cov)

U的列是特征向量,S是装有奇异值的1维数组(因为cov是对称且半正定的,所以S中元素是特征值的平方)。为了去除数据相关性,将已经零中心化处理过的原始数据投影到特征基准上:

Xrot = np.dot(X,U) # 对数据去相关性

注意,U的列是一组正交向量(范数为1,且彼此正交),因此它们可以被视为基向量。因此,投影对应于X中的数据的旋转,使得新的轴是特征向量。如果我们要计算Xrot的协方差矩阵,我们会看到它现在是对角线。np.linalg.svd的一个好性质是,在其返回值U中,特征向量列按其特征值排序。我们可以使用这一点来减少数据的维数,只使用顶部的几个特征向量,并且丢弃数据没有方差的维度。这也有时被称为主成分分析(PCA)降维:

Xrot_reduced = np.dot(X, U[:,:100]) # Xrot_reduced 变成 [N x 100]

这么操作之后,我们将原始数据集从[nxd]减到[n x 100 ],保留包含最大方差的100个维度。通常情况下,通过在PCA简化的数据集上训练线性分类器或神经网络,可以获得非常好的性能,同时节省空间和时间。

最后一个在实践中会看见的转换方法是白化。白化操作采用特征基的数据,利用特征值对每个维度进行分割,从而对尺度进行归一化处理。这种变换的几何解释是,如果数据服从多变量的高斯分布,那么经过白化后,数据的分布将会是一个均值为零,且协方差相等的矩阵。该操作的代码如下:

# whiten the data:
# divide by the eigenvalues (which are square roots of the singular values)
Xwhite = Xrot / np.sqrt(S + 1e-5)

警告:夸大噪音。注意,分母中添加1e-5(或一个更小的常量)来防止除以零。这种转换的一个缺陷是,它可以极大地夸大数据中的噪声,因为它将所有维度(包括微小方差的不相关维度,主要是噪声)都拉伸到相同的数值范围。这在实践中可以通过更强的平滑(例如:采用比1e-5更大的值)来缓解。


PCA / Whitening. Left: Original toy, 2-dimensional input data. Middle: After performing PCA. The data is centered at zero and then rotated into the eigenbasis of the data covariance matrix. This decorrelates the data (the covariance matrix becomes diagonal). Right: Each dimension is additionally scaled by the eigenvalues, transforming the data covariance matrix into the identity matrix. Geometrically, this corresponds to stretching and squeezing the data into an isotropic gaussian blob.

PCA /白化。左:原始的2 -维输入数据。中间:PCA处理后。可以看出数据首先是零中心的,然后变换到了数据协方差矩阵的基准轴上。这样就对数据进行了解相关(协方差矩阵变成对角阵)。右边:每个维度都被特征值调整数值范围,将数据协方差矩阵变为单位矩阵。从几何上看,就是对数据在各个方向上拉伸压缩,使之变成服从高斯分布的一个数据点分布。

我们也可以尝试用CIFAR-10图像来可视化这些变换。CIFAR-10的训练集大小为50000×3072,其中每个图像被拉伸成3072维的行向量。然后,我们可以计算[3072×3072 ]协方差矩阵,并计算它的SVD分解(这可能是相对昂贵的)。计算出的特征向量在视觉上是什么样子的?图像可能有帮助:


左:49个图像的示例集。从左第二:3072个特征向量中的前144个。顶部特征向量占了数据中的大部分方差,并且我们可以看到它们对应于图像中的较低频率。从右第二:49个图像与PCA减少,使用这里显示的144个特征向量。也就是说,不是将每个图像表示为3072维向量,其中每个元素是某个位置和信道上的特定像素的亮度,上面的每个图像仅用144维向量表示,其中每个元素测量每个特征向量的多少加起来为m。把图像放大。为了可视化144个数字中保留了什么图像信息,我们必须转回到3072个像素的“像素”基础上。由于U是一个旋转,这可以通过乘以 U.transpose()[:144,:],然后可视化得到的3072个数作为图像。你可以看到图像略微模糊,反映了顶部特征向量捕获较低频率的事实。然而,大多数信息仍然保存。右:“白化”表示的可视化,其中沿着144个维度中的每一个的方差被压扁到相等的长度。这里,白化的144个数字通过乘以 U.transpose()[:144,:] 被旋转回到图像像素基。较低的频率(占大多数方差)现在可以忽

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值