文章目录

  • 偏置项.
  • Batch-Normalize.
  • Nomalize Input.
  • BN.
  • Why it works.
  • 测试数据.
  • 指数加权平均.


偏置项.

  • 神经网络中,进行运算后,通常要对结果加上一个偏置项 pytorch huberloss函数 pytorch bias_数据,记输入数据为 pytorch huberloss函数 pytorch bias_数据_02,参数为 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_03,运算为 pytorch huberloss函数 pytorch bias_数据_04,偏置项为 pytorch huberloss函数 pytorch bias_数据_05,则上述过程表述为:pytorch huberloss函数 pytorch bias_pytorch huberloss函数_06
  • 后续经过激活函数 pytorch huberloss函数 pytorch bias_归一化_07,通常为 pytorch huberloss函数 pytorch bias_方差_08 等非线性函数,得到本层输出数据 pytorch huberloss函数 pytorch bias_归一化_09,该过程表述如下:pytorch huberloss函数 pytorch bias_pytorch huberloss函数_10
  • 关于偏置项 pytorch huberloss函数 pytorch bias_数据

偏置实际上是对神经元激活状态的控制,当偏置存在时,pytorch huberloss函数 pytorch bias_数据_12 较小时 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_13

做模式识别,本质是要提取某种全局信息,所以提取的过程就是要抛弃局部信息保留整体信息,增加偏置这个参数,就是调整丢弃的局部信息的比例或者能量,没有这个参数,对信息的抛弃率的调整的灵活性就欠缺。


Batch-Normalize.

  • 在介绍 pytorch huberloss函数 pytorch bias_归一化_14 之前,需要简单提及归一化输入,即将训练数据 pytorch huberloss函数 pytorch bias_数据_15 变换为均值为 pytorch huberloss函数 pytorch bias_归一化_16,方差为 pytorch huberloss函数 pytorch bias_方差_17 的数据。具体做法是对训练集分别计算均值向量与方差:pytorch huberloss函数 pytorch bias_归一化_18pytorch huberloss函数 pytorch bias_数据_19pytorch huberloss函数 pytorch bias_数据_20pytorch huberloss函数 pytorch bias_归一化_21

Nomalize Input.

  • 关于归一化输入操作所带来的益处,pytorch huberloss函数 pytorch bias_归一化_22 的阐述是较为清晰直观的。以二维情况为例,易于作图和理解。当输入数据的不同特征取值范围区别较大,如 pytorch huberloss函数 pytorch bias_方差_23,会导致它们对应参数 pytorch huberloss函数 pytorch bias_方差_24 的取值范围区别较大,从而优化算法在寻找损失函数最小值时,类似于在下图中一个狭长的山谷中搜索:
  • 绘制其等高线图如下所示:
    在这样一个参数空间内搜索时,优化算法需要使用较小的学习率,否则极易在接近最小值点时越过它。但整个参数搜索过程依旧是振荡的,可以看到在 pytorch huberloss函数 pytorch bias_方差_25
  • 经过归一化操作后,数据不同特征的取值范围大致接近,从而代价函数的参数空间类似与下图中这样各方向大致相同的空间:
    观测上图所示的等高线图,无论优化算法起始点如何,相较于狭长等高线,都能够更快、更有效地找到最优值点。高维空间中的情况可以从上述二维平面中类推,代价函数的参数空间倾向于在各个维度上尺度大致相等,更容易运行优化算法。
  • 最后需要提醒的一点是,对训练集计算出均值、方差并进行归一化操作后,在测试集上运行算法时,应使用训练集计算出的均值、方差数值,而非在测试集上重新计算。这样确保训练集、测试集经历了相同的归一化过程。

BN.

  • 下面的内容关于本篇主题 pytorch huberloss函数 pytorch bias_归一化_14,该算法由 pytorch huberloss函数 pytorch bias_数据_27pytorch huberloss函数 pytorch bias_pytorch huberloss函数_28 提出,其操作与归一化输入大体相同,但归一化的对象是神经网络中间层的输出。pytorch huberloss函数 pytorch bias_归一化_14 使得参数搜索更加容易,并且网络对于超参数的选择更加稳定。
  • 在实践中,我们通常对未激活输出 pytorch huberloss函数 pytorch bias_归一化_30 进行 pytorch huberloss函数 pytorch bias_归一化_14,假设 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_32 是神经网络某一隐层的未激活输出集合,pytorch huberloss函数 pytorch bias_归一化_14 的具体操作如下:pytorch huberloss函数 pytorch bias_归一化_34pytorch huberloss函数 pytorch bias_方差_35pytorch huberloss函数 pytorch bias_归一化_36
  • pytorch huberloss函数 pytorch bias_数据_37pytorch huberloss函数 pytorch bias_数据_38 是很小的常数,用于避免 pytorch huberloss函数 pytorch bias_数据_39 时方差无定义,此时 pytorch huberloss函数 pytorch bias_归一化_40 是具有零均值、单位方差的隐层输出数据。但对于下一隐层而言,接收到的输入数据来自于不同的分布会更有意义,因此在上述归一化过程后,我们计算:pytorch huberloss函数 pytorch bias_数据_41
  • 这里 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_42 具有均值 pytorch huberloss函数 pytorch bias_数据_43,方差 pytorch huberloss函数 pytorch bias_方差_44,并且注意 pytorch huberloss函数 pytorch bias_方差_45 均是模型中的参数,是可以为优化算法所学习的,其遵循的更新规则和一般神经网络中的 pytorch huberloss函数 pytorch bias_归一化_46 完全一致。接下来使用 pytorch huberloss函数 pytorch bias_归一化_47 替代原本的未激活输入,进入激活函数并向前传播。pytorch huberloss函数 pytorch bias_数据_48
  • 如果加入了 pytorch huberloss函数 pytorch bias_归一化_14 操作,那么 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_50 中的偏置项就不发挥作用了,因为无论 pytorch huberloss函数 pytorch bias_数据_05 取何值,在标准归一化操作时都会被减去,而偏置功能转由参数 pytorch huberloss函数 pytorch bias_数据_43

  • 对于 pytorch huberloss函数 pytorch bias_归一化_53 存在的意义,可以通过下图中 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_54 函数值来获得一个直观理解:
    如果所有的未激活输出都服从零均值、单位方差,那么意味着激活函数接收到的数据总是聚集在 pytorch huberloss函数 pytorch bias_方差_55

Why it works.

  • pytorch huberloss函数 pytorch bias_归一化_14 能够加速网络训练,是由于它针对隐层输出进行了类似归一化输入的操作,使得优化算法得到一定程度的提速;另外,pytorch huberloss函数 pytorch bias_数据_57 还增强了网络的稳定性,具体地说,网络中深层参数会更加 pytorch huberloss函数 pytorch bias_方差_58,当浅层参数发生变化时,深层参数不会表现出过大的波动。
  • 我们考虑网络的第 pytorch huberloss函数 pytorch bias_归一化_59 层,其未激活输出记为 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_60,参数记为 pytorch huberloss函数 pytorch bias_数据_61pytorch huberloss函数 pytorch bias_归一化_62 层的未激活输出为 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_63,它由下式计算得到:pytorch huberloss函数 pytorch bias_方差_64如果应用 pytorch huberloss函数 pytorch bias_数据_57 算法,那么会对 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_63 进行处理得到 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_67pytorch huberloss函数 pytorch bias_pytorch huberloss函数_67 拥有固定的均值 pytorch huberloss函数 pytorch bias_数据_43 和方差 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_70
  • 这意味着即使在网络参数更新后,即使影响 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_63 值的前层参数 pytorch huberloss函数 pytorch bias_数据_72 发生变化,导致 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_63 的分布发生变化,但经过 pytorch huberloss函数 pytorch bias_数据_57 后的未激活输出 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_67 限制了这种数据分布变化的剧烈程度,因为 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_67 必须具有均值 pytorch huberloss函数 pytorch bias_数据_43 和 方差 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_70
  • 限制数据分布变化程度的意义在于:如果我们根据数据 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_79 学习到了某个映射规则 pytorch huberloss函数 pytorch bias_方差_80,而此时输入数据 pytorch huberloss函数 pytorch bias_数据_02 的分布发生变化,那么映射规则 pytorch huberloss函数 pytorch bias_方差_80 则需要重新学习,该问题称为 pytorch huberloss函数 pytorch bias_数据_83pytorch huberloss函数 pytorch bias_数据_57
  • 一种直观的理解是,pytorch huberloss函数 pytorch bias_数据_57

  • 另外,pytorch huberloss函数 pytorch bias_数据_57 带来的意外之喜是,由于通常和 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_87 算法配合使用,因此每轮训练的均值和方差都是只在一个 pytorch huberloss函数 pytorch bias_方差_88
  • 减去均值,除以标准差带来的噪音意味着 pytorch huberloss函数 pytorch bias_数据_57pytorch huberloss函数 pytorch bias_pytorch huberloss函数_90

测试数据.

  • 前面提到 pytorch huberloss函数 pytorch bias_数据_37pytorch huberloss函数 pytorch bias_数据_92 在训练时是针对每个 pytorch huberloss函数 pytorch bias_方差_88
  • 常见的解决方案是,对训练阶段计算得到的均值、方差进行指数加权平均得到 pytorch huberloss函数 pytorch bias_归一化_94 作为测试阶段使用的 pytorch huberloss函数 pytorch bias_数据_57
  • 指数加权平均 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_96 针对一组数据 pytorch huberloss函数 pytorch bias_方差_97,输出一组数据 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_98,其计算规则如下所示:pytorch huberloss函数 pytorch bias_数据_99pytorch huberloss函数 pytorch bias_数据_100pytorch huberloss函数 pytorch bias_方差_101pytorch huberloss函数 pytorch bias_方差_102pytorch huberloss函数 pytorch bias_数据_103
  • 其中 pytorch huberloss函数 pytorch bias_方差_104 是权重参数,上述计算规则得出的 pytorch huberloss函数 pytorch bias_归一化_105 近似等于 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_106 之前 pytorch huberloss函数 pytorch bias_方差_107 个数据的均值(包括 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_106 ),常用 pytorch huberloss函数 pytorch bias_方差_109,此时均值窗口大小为 pytorch huberloss函数 pytorch bias_方差_110

指数加权平均.

  • 观察 pytorch huberloss函数 pytorch bias_归一化_111 不难发现,指数加权平均实际等价于对过去的数据乘以一个按照指数 pytorch huberloss函数 pytorch bias_归一化_112 衰减的权重后再求平均。pytorch huberloss函数 pytorch bias_归一化_111pytorch huberloss函数 pytorch bias_归一化_105 可以展开如下:pytorch huberloss函数 pytorch bias_方差_115数学上通常以 pytorch huberloss函数 pytorch bias_方差_116 为临界值,pytorch huberloss函数 pytorch bias_归一化_117 中所有小于 pytorch huberloss函数 pytorch bias_方差_116 的权重忽略不记,得到:pytorch huberloss函数 pytorch bias_归一化_119pytorch huberloss函数 pytorch bias_数据_120
  • pytorch huberloss函数 pytorch bias_归一化_121pytorch huberloss函数 pytorch bias_归一化_122pytorch huberloss函数 pytorch bias_pytorch huberloss函数_123 极为接近,二者极限均为 pytorch huberloss函数 pytorch bias_方差_55,作图如下所示:
  • 所以近似认为 pytorch huberloss函数 pytorch bias_归一化_105 表示过去 pytorch huberloss函数 pytorch bias_方差_107 个数值的指数加权均值,这一点从 pytorch huberloss函数 pytorch bias_归一化_117 中乘积第一项 pytorch huberloss函数 pytorch bias_pytorch huberloss函数_123
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1e-5,1,1e3)
y1 = 1-x
y2 = np.log(1/x)

plt.xlabel('x')
plt.ylabel('y')
plt.plot(x,y1,'ro',label = 'y=1-x')
plt.plot(x,y2,'bo',label = 'y=ln(1/x)')