神经网络的核心组件是层,它是一种数据处理模块,通俗的说可以将它堪称数据过滤器,进去一些数据,出来的数据更加有用。具体来说,层从输入数据中提取表示——我们期望这种表示有助于解决手头上的问题。
输入网络的数据表示
张量(tensor) :数据容器(多维numpy数组),张量的维度(dimension)通常叫作轴(axis)
标量(scalar) | 向量(vector) | 矩阵(matrix) | 更高维张量 | |
---|---|---|---|---|
0D张量 | 1D张量 | 2D张量 | 3D张量 | |
阶ndim | 0 | 1 | 2 | 3 |
形状shape | ( ) | (5,) | (3,4) | (6,7,8) |
注意:维度很容易混淆,所以自己比较喜欢将tensor的一个轴称之为阶,而倾向于维度表示成元素个数
一般的tensor格式
一般来说,深度学习中的所有数据张量的第一个轴都是样本轴(样本维度)
一般使用的数据张量情况:
向量 2D (samples,features)
时间序列或者序列 3D(samples,timesteps,features) 按照惯例,时间轴始终是第二个轴
图像 4D (samples,height,width,channels)或者 (samples, channels, height, width) 约定:通道在后(TensorFlow)和通道在前(Theano),Keras同时支持
视频 5D (samples,frames, height,width,channels)或者(samples,frames, channels,height,width)
深度学习的几何解释
神经网络完全由一系列张量运算组成,而这些张量运算都只是输入数据的几何变换,所以可以将神经网络理解为在高纬空间中进行的非常复杂的几何变换。
让纸球恢复平整就是机器学习的内容:为复杂的、高度折叠的数据流形找到简洁的表示。
神经网络的“引擎”:基于梯度的优化
深度学习中一个训练循环的过程如下:
(1) 抽取训练样本 x 和对应目标 y 组成的数据批量
(2) 在 x 上运行网络[这一步叫作前向传播(forward pass)],得到预测值 y_pred
(3) 计算网络在这批数据上的损失,用于衡量 y_pred 和 y 之间的距离
(4) 更新网络的所有权重,使网络在这批数据上的损失略微下降 关键
小批量随机梯度(SGD)下降步骤:
(1) 抽取训练样本 x 和对应目标 y 组成的数据批量。
(2) 在 x 上运行网络,得到预测值 y_pred。
(3) 计算网络在这批数据上的损失,用于衡量 y_pred 和 y 之间的距离。
(4) 计算损失相对于网络参数的梯度[一次反向传播(backward pass)]。
(5) 将参数沿着梯度的反方向移动一点,比如W -= step * gradient,从而使这批数据上的损失减小一点。