一些基本概念

  • 张量:张量可以看作是向量、矩阵的自然推广,我们用张量来表示广泛的数据类型。

  • 张量的阶数有时候也称为维度,或者轴,轴这个词翻译自英文axis。譬如一个矩阵[[1,2],[3,4]],是一个2阶张量。

  • 函数式模型:

    • 在Keras 0.x中,模型其实有两种,一种叫Sequential,称为序贯模型,也就是单输入单输出,一条路通到底,层与层之间只有相邻关系,跨层连接统统没有。这种模型编译速度快,操作上也比较简单。
    • 第二种模型称为Graph,即图模型,这个模型支持多输入多输出,层与层之间想怎么连怎么连,但是编译速度慢。可以看到,Sequential其实是Graph的一个特殊情况。
  • batch:现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。所以Keras的模块中经常会出现batch_size,就是指批的大小。

  • epochs指的就是训练过程中数据将被“轮”多少次。

BN层(batch normalize)、LN层(Layer Normalization)

  • 在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。
  • ,在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。
  • BN通过mini-batch的输入样本近似的计算normalize中的均值和方差,既同一个minibatch中的输入拥有相同的均值和方差。
  • BN于LN不同的是,LN中同层中所有的神经元输入都拥有相同的均值和方差。
  • 在传统RNN中,recurrent unit经过累加求和后的输入(summed input)的量级会随着训练进行发生波动,导致梯度爆炸或梯度消失发生。加入LN之后,Normalization term会对summed input的进行尺度变换,使RNN在training和inference时更加稳定。
  • 实践证明,LN用于RNN进行Normalization时,取得了比BN更好的效果。但用于CNN时,效果并不如BN明显。

WN层(weight normalization)

  • 对深度学习网络权值W进行normalization的操作公式如下:

  • 通过一个标量g和一个向量V对权重向量W进行尺度变换。标量g的值一般为||W||,即权重W的大小。
  • 如此便解耦了权重向量的范数和方向,加速了收敛,保证了gradient的稳定,不会爆炸或者消失;同时解决了BN的数据依赖性,计算开销也降低了许多;