YJango的Batch Normalization介绍

做法

设,每个batch输入是 x=[x_0,x_1,x_2,...,x_n] (其中每个 x_i 都是一个样本, n 是batch size) 假如在第一层后加入Batch normalization layer后, h_1 的计算就倍替换为下图所示的那样。

  • 矩阵 x 先经过 W_{h_1} 的线性变换后得到 s_1:因为减去batch的平均值 \mu_B 后, b 的作用会被抵消掉,所以没必要加入 b (红色删除线)。将 s_1 再减去batch的平均值 \mu_B ,并除以batch的标准差 \sqrt{\sigma_B+\epsilon} 得到 s_2\epsilon 是为了避免除数为0的情况所使用的微小正数。\mu_B=\frac {1}{m} \sum^m_{i=0}W_{h_1}x_{i,:}\sigma^2_B=\frac {1}{m} \sum^m_{i=0}(W_{h_1}x_{i,:}-\mu_B)^2:但 s_2 基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,引入两个新的parameters: \gamma 和 \beta\gamma 和 \beta 是在训练时网络自己学习得到的。
  • 将 s_2 乘以 \gamma 调整数值大小,再加上 \beta 增加偏移后得到 s_3
  • 为加入非线性能力, s_3 也会跟随着ReLU等激活函数
  • 最终得到的 h_1 会被送到下一层作为输入。

需要注意的是,上述的计算方法用于在训练。因为测试时常会只预测一个新样本,也就是说batch size为1。若还用相同的方法计算 \mu_B ,\mu_B 就会是这个新样本自身, s_1-\mu_B 就会成为0。

所以在测试时,所使用的 \mu 和 \sigma^2 是整个训练集的均值 \mu_P 和方差 \sigma^2_P 。

而整个训练集的均值\mu_P和方差 \sigma^2_P 的值通常也是在训练的同时用移动平均法来计算。

超智能体
超智能体

分享简单易懂深度学习知识。

入门批标准化
1
相关数据
激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

批次规模技术

一个批次中的样本数。例如,SGD 的批次规模为 1,而小批次的规模通常介于 10 到 1000 之间。批次规模在训练和推断期间通常是固定的;不过,TensorFlow 允许使用动态批次规模。

推荐文章
暂无评论
暂无评论~