当前位置: 首页 > news >正文

批次标准化Batch Normalization

批次标准化Batch Normalization

目录

  • 批次标准化Batch Normalization
    • 为什么需要批次标准化
      • 产生上述变化趋势不匹配的原因
    • 处理方法
      • 处理方法的优化
    • Batch Normalization的引出
    • Testing时的相应处理

批次标准化Batch Normalization

第五节 2021 - 类神经网络训练不起来怎么办 (五) 批次标准化 (Batch Normalization)

📌Batch Normalization可以直接改变error surface的崎岖

为什么需要批次标准化

因为在训练的过程中,会存在着损失函数对多个weight权重模型参数的偏导变化趋势不匹配(即有smooth光滑的也有steep陡峭的),如下图:

在这里插入图片描述

产生上述变化趋势不匹配的原因

以下面简单的模型来解释上述变化趋势的不匹配 该模型只有两个特征值输入,也就只对应两个权重参数;
当w1产生变化时,若输入的特征值的变化阶层很小比如1到2这种,那么w1的变化就不会对loss产生较大的影响,从而对应上图中smooth的曲线
当w2产生变化时,若输入的特征值的变化阶层很大比如1到100到200这种,那么w2的变化就会对loss产生较大的影响,从而对应上图的steep的曲线

在这里插入图片描述

📌为了消除这种模型参数偏导变化趋势不同的error surface造成的training的困难,需要对输入的每个样本的特征值进行处理,使得它们的变化阶层相近,这种技巧就叫做Feature Normalization

处理方法

对每个样本的特征向量进行标准化,其公式如下:

x i ′ = x i − μ σ x^{i'}= \frac {x^i-\mu} {\sigma} xi=σxiμ

这里的μ即是所有样本的特征向量作算术和(向量相应位置上的数值相加)再取平均;∑即是进行均方差的求解,即:

μ = 1 n ∑ x i , σ = 1 n ( x i − μ ) 2 \mu=\frac {1} {n} \sum x^i,\sigma=\sqrt{\frac {1} {n}(x^i-\mu)^2} μ=n1xi,σ=n1(xiμ)2

📌经过标准化的处理,所有样本的特征向量的平均值即为0,方差即为1

在这里插入图片描述

📌不仅刚开始的输入值需要做Normalization每个之前神经元的输出,均需要在下一个神经元的激活函数之前进行Normalization处理(一般是激活函数前后进行标准化差异不大,但由于sigmoid的曲线在0附近偏导最大,若在sigmoid之后再normalization会导致gradient值偏大),如下图:

在这里插入图片描述

上图即是一个大的分类网络,网络在原来的基础上多了均值和均方差的计算即对输入值的标准化。
且本来特征值的输入改变并不会影响其他z的改变,但是因为均值和均方差的改变使得其他z也发生了改变

处理方法的优化

最后求的所有样本的均值为0,方差为1。但有时我们并不想要这样分布的特征向量,所以将特征向量标准化的式子更改为下图:其中γ与β均为模型参数,一般开始训练时γ为1向量,β为0向量

在这里插入图片描述

这样做的目的是在训练刚开始时将特征向量的分布近似相同,从而减轻训练难度,更快的进行参数的更新,之后再在训练的过程中逐渐由机器改变γ与β的值

Batch Normalization的引出

因为一次性对所有样本计算均值和均方差对GPU或CPU的要求较高,所以为了减少硬件需求,我们引入了Batch的概念。
故只需要对Batch内的样本进行求均值和均方差然后对Batch内样本的特征向量进行标准化,从而进行参数的更新(此时Batch不能太小也不能太大
Batch太大太小对训练的影响见上述标题批次Batch)

Testing时的相应处理

因为Batch
Normalization是对一定量的样本进行一次训练。而在测试时我们一般是有了一个样本就对模型输入特征值进行预测,此时如果再求μ和σ即会导致标准化后为0
因此Testing时的μ和σ有专门的计算方法Moving Average,如下:

μ t = p × μ t ′ + ( 1 − p ) × μ i , μ i 为每一次 b a t c h 的均值 , μ t ′ 即为上次的 μ t . 按照该式递归求解 μ t \mu_{t}=p \times \mu_{t'}+(1-p) \times \mu ^i,\mu^i为每一次batch的均值,\mu_{t'}即为上次的\mu_t.按照该式递归求解\mu_t μt=p×μt+(1p)×μi,μi为每一次batch的均值,μt即为上次的μt.按照该式递归求解μt

σ t = p × σ t ′ + ( 1 − p ) × σ i , σ i 为每一次 b a t c h 的均方差 , σ t ′ 即为上次的 σ t . 按照该式递归求解 σ t \sigma_{t}=p \times \sigma_{t'}+(1-p) \times \sigma ^i,\sigma^i为每一次batch的均方差,\sigma_{t'}即为上次的\sigma_t.按照该式递归求解\sigma_t σt=p×σt+(1p)×σi,σi为每一次batch的均方差,σt即为上次的σt.按照该式递归求解σt

相关文章:

  • wordpress 4.8 漏洞/深圳优化公司样高粱seo
  • 潍坊网站建设 诸城/seo网站优化方法
  • linux增加网站/如何做个网站推广自己产品
  • html5做网站/图片搜索识图入口
  • wordpress移动端底部导航/谷歌ads广告投放
  • wordpress附件页面/app拉新推广代理
  • Callable接口_JUC的常见类_多线程环境使用ArrayList
  • SpringBoot数据访问Redis
  • 【数据结构】手撕八大排序算法
  • 生物信息数据存储、管理规范
  • RNN从理论到实战【实战篇】
  • 【第25天】SQL进阶-查询优化- performance_schema系列实战二:锁问题排查(全局读锁)(SQL 小虚竹)
  • C# 中的闭包一个小问题
  • 《Buildozer打包实战指南》第二节 安装Kivy和Buildozer
  • 达梦数据库导入dmp文件
  • linux基功系列之man帮助命令实战
  • Transformer模型详解相关了解
  • Eclipse 连接 SQL Server 数据库教程