文章目录

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

偏置项.

  • 神经网络中,进行运算后,通常要对结果加上一个偏置项 Bias\rm BiasBias,记输入数据为 XXX,参数为 WWW,运算为 ∗*∗,偏置项为 bbb,则上述过程表述为:Z=X∗W+b(1)Z=X*W+b\tag{1}Z=X∗W+b(1)
  • 后续经过激活函数 σ(⋅)\sigma(·)σ(⋅),通常为 Sigmoid,ReLU\rm Sigmoid,ReLUSigmoid,ReLU 等非线性函数,得到本层输出数据 AAA,该过程表述如下:A=σ(Z)(2)A=\sigma(Z)\tag{2}A=σ(Z)(2)
  • 关于偏置项 Bias\rm BiasBias 的作用理解有很多角度,下面摘录个人认为易于理解且直观的观点:

偏置实际上是对神经元激活状态的控制,当偏置存在时,xxx 较小时 yyy 的值就可以很大,就可以较快的将该神经元激活。

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


Batch-Normalize.

  • 在介绍 Batch−Normalize\rm Batch-NormalizeBatch−Normalize 之前,需要简单提及归一化输入,即将训练数据 {xi∣i=1,2,⋯,N}\{x_i|i=1,2,\cdots,N\}{xi​∣i=1,2,⋯,N} 变换为均值为 0⃗\vec 00,方差为 111 的数据。具体做法是对训练集分别计算均值向量与方差:μ=1N∑i=1Nxi\mu=\frac1N\sum_{i=1}^Nx_iμ=N1​i=1∑N​xi​xi′=xi−μ,i=1,2,⋯,N(step.1)x_i'=x_i-\mu~,~i=1,2,\cdots,N\tag{step.1}xi′​=xi​−μ , i=1,2,⋯,N(step.1)σ2=1N∑i=1N(xi′)2\sigma^2=\frac1N\sum_{i=1}^N\big(x_i'\big)^2σ2=N1​i=1∑N​(xi′​)2xi′′=xi′σ(step.2)x_i''=\frac{x_i'}{\sigma}\tag{step.2}xi′′​=σxi′​​(step.2)

Nomalize Input.

  • 关于归一化输入操作所带来的益处,AndrewNg\rm Andrew~NgAndrew Ng 的阐述是较为清晰直观的。以二维情况为例,易于作图和理解。当输入数据的不同特征取值范围区别较大,如 1≤x1≤1000,0≤x2≤11\leq x_1\leq1000,0\leq x_2\leq11≤x1​≤1000,0≤x2​≤1,会导致它们对应参数 w1,w2w_1,w_2w1​,w2​ 的取值范围区别较大,从而优化算法在寻找损失函数最小值时,类似于在下图中一个狭长的山谷中搜索:
  • 绘制其等高线图如下所示:
    在这样一个参数空间内搜索时,优化算法需要使用较小的学习率,否则极易在接近最小值点时越过它。但整个参数搜索过程依旧是振荡的,可以看到在 b=−wb=-wb=−w 方向上,很小步幅的移动就会越过多条等高线。
  • 经过归一化操作后,数据不同特征的取值范围大致接近,从而代价函数的参数空间类似与下图中这样各方向大致相同的空间:
    观测上图所示的等高线图,无论优化算法起始点如何,相较于狭长等高线,都能够更快、更有效地找到最优值点。高维空间中的情况可以从上述二维平面中类推,代价函数的参数空间倾向于在各个维度上尺度大致相等,更容易运行优化算法。
  • 最后需要提醒的一点是,对训练集计算出均值、方差并进行归一化操作后,在测试集上运行算法时,应使用训练集计算出的均值、方差数值,而非在测试集上重新计算。这样确保训练集、测试集经历了相同的归一化过程。

BN.

  • 下面的内容关于本篇主题 Batch−Normalize\rm Batch-NormalizeBatch−Normalize,该算法由 SergeyLoffe\rm Sergey~LoffeSergey Loffe 和 ChristianSzegedy\rm Christian~SzegedyChristian Szegedy 提出,其操作与归一化输入大体相同,但归一化的对象是神经网络中间层的输出。Batch−Normalize\rm Batch-NormalizeBatch−Normalize 使得参数搜索更加容易,并且网络对于超参数的选择更加稳定。
  • 在实践中,我们通常对未激活输出 ZZZ 进行 Batch−Normalize\rm Batch-NormalizeBatch−Normalize,假设 {zi∣i=1,2,⋯,M}\{z_i|i=1,2,\cdots,M\}{zi​∣i=1,2,⋯,M} 是神经网络某一隐层的未激活输出集合,Batch−Normalize\rm Batch-NormalizeBatch−Normalize 的具体操作如下:μ=1M∑i=1Mzi\mu = \frac1M\sum_{i=1}^Mz_iμ=M1​i=1∑M​zi​σ2=1M∑i=1M(zi−μ)2\sigma^2=\frac1M\sum_{i=1}^M(z_i-\mu)^2σ2=M1​i=1∑M​(zi​−μ)2zi′=zi−μσ2+ϵ,i=1,2,⋯,M(3)z_i'=\frac{z_i-\mu}{\sqrt{\sigma^2+\epsilon}}~,~i=1,2,\cdots,M\tag{3}zi′​=σ2+ϵ​zi​−μ​ , i=1,2,⋯,M(3)
  • (3)(3)(3) 中 ϵ\epsilonϵ 是很小的常数,用于避免 σ2=0\sigma^2=0σ2=0 时方差无定义,此时 {zi′∣i=1,2,⋯,M}\{z_i'|i=1,2,\cdots,M\}{zi′​∣i=1,2,⋯,M} 是具有零均值、单位方差的隐层输出数据。但对于下一隐层而言,接收到的输入数据来自于不同的分布会更有意义,因此在上述归一化过程后,我们计算:z~i=γ⋅zi′+β,i=1,2,⋯,M(4)\tilde z_i=\gamma\cdot z_i'+\beta~,~i=1,2,\cdots,M\tag{4}z~i​=γ⋅zi′​+β , i=1,2,⋯,M(4)
  • 这里 z~i\tilde z_iz~i​ 具有均值 β\betaβ,方差 γ2\gamma^2γ2,并且注意 γ,β\gamma,\betaγ,β 均是模型中的参数,是可以为优化算法所学习的,其遵循的更新规则和一般神经网络中的 W,bW,bW,b 完全一致。接下来使用 {z~i∣i=1,2,⋯,M}\{\tilde z_i|i=1,2,\cdots,M\}{z~i​∣i=1,2,⋯,M} 替代原本的未激活输入,进入激活函数并向前传播。A=σ(Z~)A=\sigma(\tilde Z)A=σ(Z~)
  • 如果加入了 Batch−Normalize\rm Batch-NormalizeBatch−Normalize 操作,那么 (1)(1)(1) 中的偏置项就不发挥作用了,因为无论 bbb 取何值,在标准归一化操作时都会被减去,而偏置功能转由参数 β\betaβ 承担,这一点在实现时需要注意。

  • 对于 (4)(4)(4) 存在的意义,可以通过下图中 Sigmod\rm SigmodSigmod 函数值来获得一个直观理解:
    如果所有的未激活输出都服从零均值、单位方差,那么意味着激活函数接收到的数据总是聚集在 000 附近的近似线性区域内,网络很难拟合到更多的特征。

Why it works.

  • Batch−Normalize\rm Batch-NormalizeBatch−Normalize 能够加速网络训练,是由于它针对隐层输出进行了类似归一化输入的操作,使得优化算法得到一定程度的提速;另外,BN\rm BNBN 还增强了网络的稳定性,具体地说,网络中深层参数会更加 robust\rm robustrobust,当浅层参数发生变化时,深层参数不会表现出过大的波动。
  • 我们考虑网络的第 l,l+1l,l+1l,l+1 层,其未激活输出记为 zzz,参数记为 w.w.w. 第 lll 层的未激活输出为 zlz^lzl,它由下式计算得到:zl=wl⋅al−1(5)z^l=w^l\cdot a^{l-1}\tag{5}zl=wl⋅al−1(5)如果应用 BN\rm BNBN 算法,那么会对 zlz^lzl 进行处理得到 z~l\tilde z^lz~l,z~l\tilde z^lz~l 拥有固定的均值 β\betaβ 和方差 γ2.\gamma^2.γ2.
  • 这意味着即使在网络参数更新后,即使影响 zlz^lzl 值的前层参数 w1,w2,⋯,wlw^1,w^2,\cdots,w^lw1,w2,⋯,wl 发生变化,导致 zlz^lzl 的分布发生变化,但经过 BN\rm BNBN 后的未激活输出 z~l\tilde z^lz~l 限制了这种数据分布变化的剧烈程度,因为 z~l\tilde z^lz~l 必须具有均值 β\betaβ 和 方差 γ2.\gamma^2.γ2.
  • 限制数据分布变化程度的意义在于:如果我们根据数据 (X,y)(X,y)(X,y) 学习到了某个映射规则 fff,而此时输入数据 XXX 的分布发生变化,那么映射规则 fff 则需要重新学习,该问题称为 CovariateShift.\rm Covariate~Shift.Covariate Shift. 而 BN\rm BNBN 通过固定均值、方差来控制数据分布变化程度,从而增强了网络深层参数的稳定性。
  • 一种直观的理解是,BN\rm BNBN 弱化了深度网络各层之间的依赖性,使得各层以一定的独立性去学习特征。

  • 另外,BN\rm BNBN 带来的意外之喜是,由于通常和 Mini−BatchGradientDescent\rm Mini-Batch~Gradient~DescentMini−Batch Gradient Descent 算法配合使用,因此每轮训练的均值和方差都是只在一个 mini−batch\rm mini-batchmini−batch 上计算的,所以它在每一层的激活输出上增加了噪音。
  • 减去均值,除以标准差带来的噪音意味着 BN\rm BNBN 和 Dropout\rm DropoutDropout 类似,带有轻微的正则化效果,网络的后层不会过分地倚重前层某一个节点,从而不会出现某个连接权重过分大导致过拟合出现。

测试数据.

  • 前面提到 (3)(3)(3) 中 μ,σ2\mu,\sigma^2μ,σ2 在训练时是针对每个 mini−batch\rm mini-batchmini−batch 计算的,但进行测试时,我们通常只有很少的数据作为输入,因此对于均值、方差的计算需要另寻出路。
  • 常见的解决方案是,对训练阶段计算得到的均值、方差进行指数加权平均得到 μ∗,σ2∗\mu^*,\sigma^{2*}μ∗,σ2∗ 作为测试阶段使用的 BN\rm BNBN 计算量。
  • 指数加权平均 ExponentialWeightedAverage\rm Exponential~Weighted~AverageExponential Weighted Average 针对一组数据 {θi∣i=1,2,⋯,n}\{\theta_i|i=1,2,\cdots,n\}{θi​∣i=1,2,⋯,n},输出一组数据 {vt∣t=0,1,2,⋯,n}\{v_t|t=0,1,2,\cdots,n\}{vt​∣t=0,1,2,⋯,n},其计算规则如下所示:v0=0v_0=0v0​=0v1=ρv0+(1−ρ)θ1v_1=\rho v_0+(1-\rho)\theta_1v1​=ρv0​+(1−ρ)θ1​v2=ρv1+(1−ρ)θ2v_2=\rho v_1+(1-\rho)\theta_2v2​=ρv1​+(1−ρ)θ2​⋮\vdots⋮vt=ρvt−1+(1−ρ)θt(6)v_t=\rho v_{t-1}+(1-\rho)\theta_t\tag{6}vt​=ρvt−1​+(1−ρ)θt​(6)
  • 其中 ρ\rhoρ 是权重参数,上述计算规则得出的 vtv_tvt​ 近似等于 ttt 之前 11−ρ\cfrac1{1-\rho}1−ρ1​ 个数据的均值(包括 ttt ),常用 ρ=0.9\rho=0.9ρ=0.9,此时均值窗口大小为 10.10.10.

指数加权平均.

  • 观察 (6)(6)(6) 不难发现,指数加权平均实际等价于对过去的数据乘以一个按照指数 ρx\rho^xρx 衰减的权重后再求平均。(6)(6)(6) 中 vtv_tvt​ 可以展开如下:vt=(1−ρ)[θt+ρθt−1+ρ2θt−2+⋯+ρt−1θ1](7)v_t=(1-\rho)\big[\theta_t+\rho\theta_{t-1}+\rho^2\theta_{t-2}+\cdots+\rho^{t-1}\theta_1\big]\tag{7}vt​=(1−ρ)[θt​+ρθt−1​+ρ2θt−2​+⋯+ρt−1θ1​](7)数学上通常以 1e\cfrac1ee1​ 为临界值,(7)(7)(7) 中所有小于 1e\cfrac1ee1​ 的权重忽略不记,得到:ρx=1e\rho^x=\frac1eρx=e1​x=1ln⁡(1/ρ)(8)x=\frac1{\ln(1/\rho)}\tag{8}x=ln(1/ρ)1​(8)
  • 当 ρ→1\rho\rightarrow1ρ→1 时 ln⁡(1/ρ)\ln(1/\rho)ln(1/ρ) 与 1−ρ1-\rho1−ρ 极为接近,二者极限均为 000,作图如下所示:
  • 所以近似认为 vtv_tvt​ 表示过去 11−ρ\cfrac1{1-\rho}1−ρ1​ 个数值的指数加权均值,这一点从 (7)(7)(7) 中乘积第一项 1−ρ1-\rho1−ρ 来理解也是极为自然的。
import numpy as np
import matplotlib.pyplot as pltx = 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)')

【PyTorch】偏置项 bias 与 Batch-Normalize相关推荐

  1. 神经网络为什么需要加偏置项(bias)?

    文章目录 一.什么是 bias? 二.bias 的作用 一.什么是 bias? 偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term) ...

  2. Batch Normalize的几点说明

    前言 前面也讲过部分Batch Normalize的内容,单独拿出来成文,是因为感觉这方法非常赞,加快训练速度十几倍不等,模型越复杂越受益. 一句话总结BN:对每层输入加同分布约束,再加参数线性变换学 ...

  3. batchnomal_pytorch的batch normalize使用详解

    torch.nn.BatchNorm1d() 1.BatchNorm1d(num_features, eps = 1e-05, momentum=0.1, affine=True) 对于2d或3d输入 ...

  4. PyTorch数据归一化处理:transforms.Normalize及计算图像数据集的均值和方差

    PyTorch数据归一化处理:transforms.Normalize及计算图像数据集的均值和方差 1.数据归一化处理:transforms.Normalize 1.1 理解torchvision 1 ...

  5. BP算法,用梯度下降法更新权值W与偏置项b

    Bp算法实际是输出的误差函数对每一个参数求导,输出层可以直接求出,非输出层则有链式法则求导.这里以上图5层神经网络为例进行说明. 一   符号说明: 1)这里使用激活函数为sigmoid函数:     ...

  6. 归纳偏置 (Inductive Bias)

    一.概念 Inductive Bias一般翻译为归纳偏置/归纳偏差(归纳偏置应该更容易理解些),是一个关于机器学习算法的目标函数的假设.其实说的是模型的指导规则. 归纳是自然科学中常用的两大方法(归纳 ...

  7. 【机器学习】浅谈 归纳偏置 (Inductive Bias)

    目录 一.概念 二.例子 三.意义 一.概念 在机器学习中,很多学习算法经常会对学习的问题做一些关于目标函数的必要假设,称为 归纳偏置 (Inductive Bias). 归纳 (Induction) ...

  8. 神经网络中的偏置项b到底是什么?

    前言 很多人不明白为什么要在神经网络.逻辑回归中要在样本X的最前面加一个1,使得 X=[x1,x2,-,xn] 变成 X=[1,x1,x2,-,xn] .因此可能会犯各种错误,比如漏了这个1,或者错误 ...

  9. 神经网络为什么要加偏置?---bias与费米能级εF

    神经网络不加偏置也可以运行也就是说偏置bias对于神经网络来说不是必须的,那为什么一定要加偏置,有仿生学解释,但是人脑的分子数量是mol量级的,光蛋白质就有几万种,这么复杂的结构应该不是加一个偏置就能 ...

最新文章

  1. asyncdata 获取参数_载入页面初始数据(asyncData)《 Nuxt.js:异步数据 》
  2. oracle hint push_pred,hints的push_pred应用-Oracle
  3. 在JSP中读取POST的JSON数据
  4. 数据结构 2018统考题【找出数组中未出现的最小正整数】
  5. PostgreSQL数据库的注入
  6. Flume 1.7 源码分析(四)从Source写数据到Channel
  7. 贪心策略——活动选择问题
  8. unzip命令找不到
  9. JAVA中字符串函数subString的用法小结
  10. ViewStub基本用法
  11. LD_PRELOAD实现API劫持
  12. 超大图片(4000×3000像素)的畸变矫正,python+OpenCV实现
  13. Linux_Ubuntu快捷键截屏
  14. (建议收藏) | Spring Boot集成JSON Web Token(JWT)【知识积累】
  15. CAPM模型和Alpha策略
  16. 常微分方程matlab求解英文文献,常微分方程及其matlab求解毕业论文设计
  17. 土旦:关于display:flex碰上white-space nowrap 影响布局的问题
  18. react点击后高亮显示
  19. micropython教程nucleo-f767zi开发板_NUCLEO-F767ZI开发板评测
  20. 如何设计一个落地页,才算得上是一个好的落地页?

热门文章

  1. Stimulsoft Reports.JAVA 2022.4.3 Crack
  2. 访问网站php直接下载,访问php文件自动下载及502问题-Go语言中文社区
  3. 2023年的COSO,会有什么不一样?
  4. 【C语言】预处理的深入理解(第一期)
  5. STM32 HAL WS2812B PWM+DMA控制
  6. 好的文章中插画必不可少,插画的作用是什么呢?带你了解插画。
  7. 【Web架构】静态站点生成器概述 Gatsby ,Hugo 和Jekyll对比
  8. 关于工程导论的读书计划表
  9. 基于实践的LabVIEW零基础入门视频教程
  10. 关于APIC的一些概念