深度学习面试题22:批量归一化在实践中的应用

Posted mfryf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习面试题22:批量归一化在实践中的应用相关的知识,希望对你有一定的参考价值。

目录

  指数移动平均

  BN在卷积网络中的使用

  参考资料


假设已经训练好一个带有BN操作的卷积神经网络,但是在使用它预测时,往往每次只输入一个样本,那么经过该网络时,计算平均值和方差的意义就不大了,常采用的策略是计算训练阶段的平均值和方差的指数移动平均,然后在预测阶段使用它们作为BN操作时的平均值和方差。

指数移动平均

假设变量xt随时间t变化,按照以下规则定义其指数移动平均值

技术图片

假设α=0.7

当t=1时,x1=5,则ema(1)=x1=5

当t=2时,x2=10,则ema(2)=α*ema(1)+(1-α)*x2=0.7*5+(1-0.7)*10=6.5

当t=3时,x3=15,则ema(3)=α*ema(2)+(1-α)*x3=0.7*6.5+(1-0.7)*15=9.05

当t=4时,x4=20,则ema(4)=α*ema(3)+(1-α)*x4=0.7*9.05+(1-0.7)*20=12.335

经过四次运算后,最后的移动平均值为12.335

对应代码为:

技术图片
import numpy as np
import matplotlib.pyplot as plt
t = [1,2,3,4]
x = [5,10,15,20]
res = [x[0]]
for i in x[1:]:
    a = 0.7*res[-1]+0.3*i
    res.append(a)
plt.plot(t,x,"r")
plt.plot(t,res,"b")
View Code

技术图片

换一个复杂一点的图像观测指数移动平均,可以发现,他在会保留原来的走势,并且适应新的走势:

技术图片
import numpy as np
import random
import matplotlib.pyplot as plt
random.seed(20190725)
t = np.linspace(-5,5,100)
x = [-i**2+random.random()*15 for i in t]
res = [x[0]]
for i in x[1:]:
    a = 0.7*res[-1]+0.3*i
    res.append(a)
plt.plot(t,x,"r")
plt.plot(t,res,"b")
View Code

技术图片

 返回目录

 

BN在卷积网络中的使用

以下图BN操作为例说明:

技术图片

 

技术图片

 

技术图片

每个BN层最终都会保存一对最终的均值和方差,可以用于测试阶段

 返回目录

 

参考资料

《图解深度学习与神经网络:从张量到TensorFlow实现》_张平

Batch Normalization_ Accelerating Deep Network Training by Reducing Internal Covariate Shift

 返回目录

 

以上是关于深度学习面试题22:批量归一化在实践中的应用的主要内容,如果未能解决你的问题,请参考以下文章

深度学习面试题21:批量归一化(Batch Normalization,BN)

批量归一化Batch Normalization 动手学深度学习v2

Hulu机器学习问题与解答系列 | 二十三:神经网络训练中的批量归一化

第十八节,TensorFlow中使用批量归一化

BatchNormalization

matlab中啥叫归一化坐标