Batch Normalization详细解读

Batch Normalization论文解读 BN原理分析前言为什么会产生梯度消失和梯度爆炸?梯度消失梯度爆炸提出背景什么是Internal Covariate ShiftInternal Covariate Shift会带来什么问题如何缓解Internal Covariate ShiftBatch Normalization 整体思路思路算法inference阶段BN的使用BN的优势: BN这篇论文,我看了很久,是时候来归纳总结一下论文的整... 阅读详情

这篇文章是论文 Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift 的翻译,其中精简了部分内容的同时解释了相关的概念,如有错误,敬请指教。

Abstract

在神经网络训练过程中,前一层权重参数的改变会造成之后每层输入样本分布的改变,这造成了训练过程的困难。为了解决这个问题,通常会使用小的学习率和参数初始化技巧,这样导致了训练速度变慢,尤其是训练具有饱和非线性的模型。我们将这一现象定义为internal covariate shift,并提出通过规范化输入来解决。将标准化作为模型架构的一部分,并且对每一个training mini-batch使用标准化来增强算法的效果。BN允许我们使用更高的学习率,并且不用太过关心初始化。同时由于有正则化的效果,有时还能省略Dropout,加速模型训练。BN在ImageNet上的测试取得了很好的效果。

1 Introduction

SGD(Stochastic gradient descent)是一种训练神经网络的有效方法。SGD的改进算法,如momentum、Adagrad都应用广泛。SGD通过优化权重参数来减小loss:
权重参数优化
训练过程中的mini-batch的梯度计算如下:
这里写图片描述

使用mini-batch的优点如下:

  • mini-batch的梯度是对整个数据集梯度的估计,当数据集过大时,计算量暴增,使用mini-batch能提高梯度更新的效率(可参考GoodFellow的DeepLearning教材)
  • 对于含有m个单独样本的mini-batch的一次计算比单独计算m次更快,这得益于并行计算。

虽然SGD简单有效,但是超参数调整十分麻烦,尤其是学习率和初始化。由于每层网络都受到之前所有网络的影响,随着网络加深,每层网络参数的微小变化都会被之后的网络逐渐放大。
每层网络参数的变化会导致一些问题,因为之后的网络必须适应新的分布。假设有一个网络的loss为:
这里写图片描述
其中F1,F2为任意变换,内层的函数
这里写图片描述
可以看成是外层函数的一个参数,即:
这里写图片描述
对于一步梯度更新:
这里写图片描述
可以看做是独立的网络F2,输入为x。输入分布的特殊性质可以使得训练过程更高效,比如训练集和测试集完全相同的时候。因此,如果固定x的分布,参数就不用再补偿因为x的分布改变引起的变化。
在子网络中固定输入的分布对于外层网络有积极的影响。考虑一个具有sigmoid激活函数的网络:
这里写图片描述
其中,W和b是需要学习的参数,g(x)为sigmoid函数。由sigmoid函数的性质可知,当x的绝对值增大时,g的导数会逐渐减小至零。这意味着对于所有的x=Wu+b,除开绝对值较小的部分,其余的x值都会使梯度逐渐消失(gradient vanish)。由于x受W和b的影响,改变这两个参数有可能使得x的很多维度陷入饱和的非线性区,降低收敛速度。这个效应会随着网络层数的加深变得愈发明显。在实践过程中,这个问题通常可以使用ReLU来解决,但是如果可以控制非线性输入的分布更加稳定,就可以使优化器更少陷入饱和区域,以达到加速的目的。

2 Towards Reducing Internal Covariate Shift

我们将 Internal Covariate Shift1 定义为训练过程中网络参数的改变引起的网络激活函数分布的改变。BN的目标是减少 Internal Covariate Shift ,以达到加速的目的。已知的是,如果网络的输入进行了白化23,训练时会收敛得更快。这可以通过线性变换,使得输入为零均值,单位方差,并且去除了相关性的数据分布。白化操作可以通过直接更改网络或者改变优化算法来实现。但是如果直接对原始数据进行白化,需要计算输入x的协方差矩阵和求逆,计算量会很大。这促使我们寻找一种替代的方法来完成输入标准化,并且在参数更新过程中不需要对整个数据集进行分析。
注:
1. 白化的解释可参考 UFLDL的教程4
2. Covariate Shift的解释可以参考这里

3 Normalization via Mini-Batch Statistics

因为对每一层的输入进行白化代价太大,这里作出两个必要的简化。

独立地标准化每一个标量特征(均值为零,方差为1),而不是将输入层和输出层的特征一起进行白化。对于一个d维的输入,标准化每一个单独的维度的公式为:
这里写图片描述
其中,期望和方差都是在 整个数据集 上进行计算。LeCun5 的文献表明,这种标准化的过程即使在数据没有去除相关性的条件下,仍然可以加速收敛。
注意,如果简单地对一层的输入进行标准化可能会影响这一层的表达能力。比如在使用sigmoid激活函数的时候,如果简单地将输入数据进行零均值单位方差标准化,将使得原始数据更加集中,对应于sigmoid函数的中间部分,也就是只使用了函数的线性区域。详细的解释可以参考 这里 为避免这一问题,可以使用重构变换:
这里写图片描述
其中的参数 γ(k) 和 β(k) 代表了放缩和平移的变换参数,需要和原始模型的参数一起学习。这样能恢复模型的表达能力。
注:对于重构变换的理解是,在标准化的过程中减去了均值,这相当于对原始数据的平移;除以标准差,这相当于对原始数据的放缩。因此重构变换可以考虑为反向的过程,即先进行放缩,也就是乘上 γ(k) ;再进行平移,也就是加上 β(k) ,只不过这两个参数需要进行学习。最特殊的情况是,如果设置 γ(k)=Var[x(k)]−−−−−−−√ 和 β(k)=E[x(k)] ,就可以恢复原始的数据。
在每个训练步骤的参数更新是基于整个训练集的情况下,我们可以使用整个训练集的来标准化激活函数。但是这对于SGD不可行,因此作出第二个简化:
因为在SGD中使用mini-batches,每一个mini-batches在每一次激活过程中产生均值和方差的估计。这样,标准化过程使用的统计数据就能在梯度反向传播过程中用上。注意使用mini-batches是通过方差的每一个单独的维度进行的,而不是协方差。如果是协方差的情况,将需要进行规范化,因为mini-batch的大小可能比白化的激活函数要少,这将导致协方差矩阵奇异。
考虑一个mini-batch B,大小为m。BN算法流程如下:
这里写图片描述
其中, ε 是为保证数值稳定性添加到mini-bacth中的常数。
BN算法可以添加到网络中来控制激活。注意到BN()并不是单独地在每一个训练样本中处理激活,而是既依赖训练样本,也依赖于mini-batch中的其他样本。经过伸缩和平移变换的 y 传播到其他层。如果忽略ε ,只要每一个mini-batch的元素是从同一个分布中采样, x^ 的取值分布都满足零均值和单位方差。子网络的输入具有固定的均值和方差。虽然所有 x^(k) 的联合分布会在训练过程中发生改变。由于标准化子网络的引入会加速子网络的训练过程,最终加速整个网络的训练过程。
在训练过程中需要反向传播 ℓ 的梯度,同时需要计算BN中参数的梯度,使用链式法则,简化前的公式为:
这里写图片描述
因此,BN是一个可微的变换,并且引入了正则化的效果。这保证了在模型训练时,每一层展示出更少的内部internal covariate shift的输入中进行学习,因此加速了训练过程。更重要的是,学习到的仿射变换参数可以保证网络的容量不受影响。

3.1 Training and Inference with Batch-Normalized Networks

对于BN的实际应用,原先接受 x 作为输入的单层网络现在接受BN(x) 作为输入。使用BN的网络可以用SGD及相关的改进算法(如Adagrad)来进行优化。但是在推理过程中,不需要网络进行标准化,而是希望网络的输出只依赖于原始的输入。因此,在网络训练完成后,使用如下公式:
这里写图片描述
即使用整个数据集所有样本,而不是一个mini-batch的统计资料。如果忽略 ε ,标准化的激活就具有和训练时相同的零均值和单位方差。使用无偏方差估计:
这里写图片描述
其中,期望是在mini-batch上进行计算,标准差是在所有样本上进行计算。因为均值和方差在推理过程中都是固定的,标准化只是一个用于激活中的线性变换。下图是使用BN的网络的训练步骤:
这里写图片描述

3.2 Batch-Normalized Convolutional Networks

BN可以被应用到任何网络的激活中。考虑一个如下的变换:
这里写图片描述
其中, W 和b 是学习到的参数, g() 是非线性函数比如sigmoid或者ReLU。我们在非线性运算之前添加BN,即标准化 x=W+b 。当然,也可以直接标准化输入层中的 u ,但是由于u 其他非线性函数的输出,在训练过程中它的分布可能会发生改变。对它的一阶和二阶矩进行约束无法消除covariate shift。反之, x=W+b 则更可能具有一个对称、非稀疏的分布,更加近似正态分布。标准化这个分布更有希望产生一个具有稳定分布的激活。
注意到标准化 x=W+b 的过程中,偏差 b ,可以忽略(去均值的过程)。因此,z=g(BN(Wu+b)) 可以替换为:
z=g(BN(Wu))
BN变换是应用到 x=Wu 的每一个维度。在每一个维度都具有一对独立的参数 γ(k) , β(k) 。
对于卷级层,我们希望标准化过程符合卷积的一些性质以便于同一个特征图中的不同位置的元素,都可以使用相同的标准化。为了实现这一点,我们对一个mini-batch中的所有位置的激活同时进行标准化。对于一个大小为 m 的mini-batch,特征图的尺寸为p∗q,我们使用的有效mini-batch大小为 m′=m∗pq ,在每一个特征图中学习到一对 γ(k) , β(k) 参数,而不是在每一处激活中(有点类似于权值共享)。

3.3 Batch Normalization enables higher learning rates

通常,大的学习率会造成单层的参数放大,在反向传播的过程中,又会造成梯度的放大。但是如果使用BN的话,反向传播过程可以不受影响。假设放大倍数为 a
这里写图片描述
不难推出:
这里写图片描述
由于放大过程不会影响单层的Jacobian矩阵,最终也不会影响反向传播。更重要的是,更大的权重会导致更小的梯度,因此BN具有稳定参数增长的作用。
我们可以猜想BN可能导致Jacobian矩阵具有接近于1的奇异值,这对于训练过程是有利的6。考虑两个相邻的层,同时对这两个层进行标准化输入。假设两个层之间的变换为:
z^=F(x^)
如果假定 z^ 和 x^ 都属于正太分布并且不相关,那么
F(x^)≈Jx^ 对于给定的模型参数就近似于一个线性变换。并且如果 z^ 和 x^ 都具有单位协方差,即 I=cov[z^]=Jcov[x^]JT=JJT ,因此 J 的所有奇异值为1,这在反向啊传播的过程中可以稳定梯度的量级。实际的变换是非线性的,标准化之后的输入也不可能完全保证正态分布或者完全独立,但是BN仍然可以使反向传播的过程表现得更好。

4 Experiments

4.1 Activations over time

为了验证BN对于covariate shift的抑制作用,在MNIST数据集上进行验证。使用3个全连接层,每层100个神经元。每一个隐含层计算y=g(Wu+b),激活函数为sigmoid,使用正态分布初始化 W 。loss使用交叉熵代价函数。训练50000步,每一个mini-batch有60个样本。实验结果见Figure 1。
这里写图片描述
从图(a)中可以看出,BN在少量数据的条件下能显著提高正确率。(b)(c)给出了15%、50%和85%的输入数据在整个训练过程中分布的差异,可以看到BN使得分布更加平滑,减少了internal covariate shift。

4.2 ImageNet classification

在Inception network中使用momentum优化器,mini-batch样本数为32,并使用3.2节中针对卷积的BN方法。

4.2.1 Accelerating BN Networks

简单地在网络中使用BN,并不能完全发挥出BN的优势,因此对网络的参数作出如下改变:

  • 增大学习率
  • 去除Dropout层
  • 减少L2正则
  • 增大学习率衰减
  • 去除LRN
  • 更加彻底地打乱训练样本
  • 减少图像亮度失真

4.2.2 Single-Network Classification

在LSVRC2012数据集上训练如下网络:

  • Inception:学习率0.0015
  • BN-Baseline:Inception+BN
  • BN-x5:Inception+BN+4.2.1中的改进,学习率0.0075
  • BN-x30:与BN-x5类似,初始学习率为0.045
  • BN-x5-Sigmoid:与BN-x5类似,但是使用sigmoid函数而不是ReLU
    Figure 2给出了验证集上整个训练过程中的正确率,可以看出,达到Inception相同正确率的水平,BN-x5训练步数最少。
    这里写图片描述

Figure 3给出了最大正确率和训练步数的表格:
这里写图片描述

5 Conclusion

给出keras中卷积层的BN实现的源代码:

input_shape = self.input_shape  
reduction_axes = list(range(len(input_shape)))  
del reduction_axes[self.axis]  
broadcast_shape = [1] * len(input_shape)  #len()用来统计行数
broadcast_shape[self.axis] = input_shape[self.axis]  
if train:  
    m = K.mean(X, axis=reduction_axes)  #求各维度均值
    brodcast_m = K.reshape(m, broadcast_shape)  #展开均值
    std = K.mean(K.square(X - brodcast_m) + self.epsilon, axis=reduction_axes)   #求方差
    std = K.sqrt(std)  #求标准差
    brodcast_std = K.reshape(std, broadcast_shape)  #展开标准差
    mean_update = self.momentum * self.running_mean + (1-self.momentum) * m  #更新均值
    std_update = self.momentum * self.running_std + (1-self.momentum) * std  #更新方差
    self.updates = [(self.running_mean, mean_update),  
                     (self.running_std, std_update)]  
    X_normed = (X - brodcast_m) / (brodcast_std + self.epsilon)  #标准化
else:  
    brodcast_m = K.reshape(self.running_mean, broadcast_shape)  
    brodcast_std = K.reshape(self.running_std, broadcast_shape)  
    X_normed = ((X - brodcast_m) /  
                 (brodcast_std + self.epsilon))  
out = K.reshape(self.gamma, broadcast_shape) * X_normed + K.reshape(self.beta, broadcast_shape) 

References


  1. Improving predictive inference under covariate shift by weighting the log-likelihood function ↩
  2. LeCun, Y., Bottou, L., Orr, G., and Muller, K. Efficient
    backprop. In Orr, G. and K., Muller (eds.), Neural Networks:
    Tricks of the trade. Springer, 1998b. ↩
  3. Wiesler, Simon and Ney, Hermann. A convergence analysis
    of log-linear training. In Shawe-Taylor, J., Zemel,
    R.S., Bartlett, P., Pereira, F.C.N., andWeinberger, K.Q.
    (eds.), Advances in Neural Information Processing Systems
    24, pp. 657–665,Granada, Spain, December 2011. ↩
  4. http://ufldl.stanford.edu/wiki/index.php/%E7%99%BD%E5%8C%96 ↩
  5. LeCun, Y., Bottou, L., Orr, G., and Muller, K. Efficient
    backprop. In Orr, G. and K., Muller (eds.), Neural Networks:
    Tricks of the trade. Springer, 1998b. ↩
  6. Saxe, Andrew M., McClelland, James L., and Ganguli,
    Surya. Exact solutions to the nonlinear dynamics
    of learning in deep linear neural networks. CoRR,
    abs/1312.6120, 2013. ↩
Batch Normalization论文解读+详细面经 1. 提出原因 2. 作用 3. 原理 4. 细节 阅读详情

相关推荐

Batch Normalization:深层网络训练加速的经典解读

解读 Ioffe 与 Szegedy 2015 年提出的 Batch Normalization:从内部标准化、可学习缩放平移、训练/推理差异到 D2L LeNet 实验,说明它为何能加速深层网络训练并带来一定正则化。

XD的博客 369

Batch Normalization的诅咒

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”作者:Sahil Uppal编译:ronghuaiyang导读batch normalization时的一些缺陷。Batch N...

AI公园 623

小知识点系列(十三) 本文(2万字) | 解读 Normalization | Batch Normalization | Layer | Instance | Group | Weight |

人工智能专栏 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程。

专注于人工智能学习,总结 953

Batch Normalization (训练、测试、优点、缺点)

一、使用顺序: Conv=>BN=>ReLU=>dropout=>Conv BN本质上是解决传播过程中的梯度消失问题 二、训练 下图面试常考! 训练时前向传导过程公式: 理解: 1. 这个可学习重构参数 γ、β,让我们的网络可以学习恢复出原始网络所要学习的特征分布。(因为如果没有 γ、β ,那相当于我这一层网络所学习到的特征分布被你搞坏了) 2. 这个 scale 和 shift ,它们的主要作用就是找到一个线性和非线性的平衡点,既能享受非线性较强的表达能力,有.

ac540101928的专栏 3428

实验吧 损坏的U盘镜像

        从网站上可以下载一个CTF.hdd的文件,使用winHex打开,可以知道这是一个exFAT格式的文件。        用binwalk检查一下,发现文件中包含两个zip文件,使用foremost进行提取。一个压缩包需要密码解压缩,另一个解压后发现Password.txt文件。说明另一个压缩包的密码与checksum有关。        通过查看exFAT文件系统格式可以得知如何计算...

xingyyn78的博客 3512

滑模控制概述

滑模控制概述1.滑模控制概念2.滑模控制原理3.滑模控制设计步骤4.研究现状5.发展趋势5.1自适应滑模变结构控制5.2模糊滑模控制5.3神经网络与滑模控制的结合 1.滑模控制概念   滑模控制(Sliding Mode Control,SMC)是一种特殊类型的变结构控制(Variable Structure Control,VSC),因此又称之为滑模变结构控制,是近年来广泛应用和发展的一种控制方法。滑模控制本质上是一种非线性控制,即控制结构随时间变化而变化。滑模变结构控制是非线性系统中普遍采用的一种分析方

shiyi20190828的博客 2万+

Batch Normalization(批量归一化精解)---key point系列(六)

Batch Normalization(批量归一化)干货精讲

T_just_for_tomorrow的博客 449

【Arc GIS 零基础教学】土地利用类型图的绘制方法

​Hi,我是胡学长!今天教大家怎么利用Arc GIS 绘制土地利用类型图。土地利用类型图是表达土地资源的利用现状、地域差异和分类的专题地图。它是研究土地利用的重要工具和基础资料,同时也是土地利用调查研究的主要成果之一。在编制土地利用图的基础上,对当前利用的合理程度和存在的问题、进一步利用的潜力、合理利用的方向和途径,进行综合分析和评价。因此,土地利用图是调整土地利用结构,因地制宜进行农业、工矿业和交通布局、城镇建设、区域规划、国土整治、农业区划等的一项重要科学依据。......

一起来交流学习吧 1万+

Batch Normalization 详解 李宏毅

李宏毅老师详解Batch-normalization,相见恨晚,留着复习用YouTube链接:https://www.youtube.com/watch?v=BZh1ltr5Rkg&t=538s哔哩哔哩链接:https://www.bilibili.com/video/av16540598...

Pichairen 4169

Revit获取族预览图

最近做到和族库相关的功能需要获取到族文件的预览图,在RevitAPI中提供了ElementType.GetPreviewImage方法,但是前提就是你是在Revit里面操作的,并且已经拿到了Symbol对象实例,才可以调用此方法。然后在网上找了另外一种方式,通过读取Revit文件,在REVITPREVIEW4.0字段截取文件信息,将其转换为图片格式。 一、使用RevitAPI中ElementType.GetPreviewImage方法 [Autodesk.Revit.Attributes.Transac.

weixin_44631419的博客 1757

RK3588开发笔记-USB3.0接口调试

RK3588平台是一款强大的处理器,但要充分发挥其性能,需要正确调试其各种接口,包括USB 3.0接口。USB 3.0接口提供了更快的数据传输速度,但也可能面临一些问题。本篇博客将介绍如何在RK3588平台上调试USB 3.0接口,以确保其稳定性和性能。RK3588芯片具有强大的USB资源,包括多个USB接口和高速数据传输能力。RK3588通常具有多个USB接口,包括USB 2.0和USB 3.0。USB 2.0用于低速和全速设备连接,而USB 3.0则用于高速设备连接。

flypig has a dream! 2560

Batch Normalization(BN)简单理解

Batch Normalization 主要的目的是:使得神经网络训练过程中的每一层输出同输入保持相同的分布。 一. Internal Covariate Shift 问题 指在训练过程中,中间隐藏层的输入分布不停地变化,使得模型很难学习到稳定的规律。 Batch Norm的基本思想就是:能不能让每个隐藏节点的激活输入分布固定下来呢? Batch Norm是收到对图像进行白话(whiten)--- 对输入的图像变化到以0为均值,单位方差的正态分布---那么神经网络收敛速...

weixin_43120238的博客 849

Python爬虫:爬取拼多多平台商品信息、销量、价格等数据

在本篇博客中,我们将深入探讨如何使用Python爬虫技术爬取拼多多平台的商品信息,包括商品的标题、销量、价格等详细数据。拼多多的商品页面通常是分页展示的,因此我们需要遍历多个页面,获取所有商品的信息。每个商品在拼多多平台上都有一个唯一的商品ID,我们可以通过该ID访问商品页面。通过以上的技术方案和代码示例,你已经掌握了如何使用Python爬虫获取拼多多平台上的商品信息、销量、价格等数据。等技术,解决拼多多平台的反爬虫机制,成功抓取我们所需的商品数据。,我们能够应对拼多多的反爬虫机制,稳定地获取到商品数据。

2201_76125261的博客 3656

Batch Normalization论文解读与Inception V2代码简析

目录 论文阅读 代码简析 小结 论文阅读 Inception V2是Inception家族的一个中间件产物,在论文Rethinking the Inception Architecture for Computer Vision中提到了Inception V2的概念,但是google的代码实现却是命名为Inception V3。从google实现的Inception...

stesha_chen的博客 5604

国科大学习资料--VLSI测试与可测试设计--2020期末考试试题

国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 国科大学习资料–VLSI测试与可测试设计–2020期末考试试题 一、概念题 1简述可测试性测度与两个主要的测度指标的含义; 2以March C-算法为例,说明March算法的构成,以及March C-算法的故障覆盖率; 3“效果-原因”诊断法和“原因效果诊断法”的不同; 4列举四条扫描设计时出现的问 题及解决办法; 5最少写出1149.1与1500的五点不同; = = = = =

无名何许人的博客 1150

鸿宇多用户商城user.php RCE漏洞复现

鸿宇多用户商城 user.php 存在任意命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 1622

解读Batch Normalization

目录 目录 1-Motivation 2-Normalization via Mini-Batch Statistics 测试 BN before or after Activation 3-Experiments本次所讲的内容为Batch Normalization,简称BN,来源于《Batch Normalization: Accelerating Deep Network Training b

shuzfan的专栏 3万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Batch Normalization 的原理解读

1:motivation 作者认为:网络训练过程中参数不断改变导致后续每一层输入的分布也发生变化,而学习的过程又要使每一层适应输入的分布,因此我们不得不降低 学习率、小心地初始化。作者将分布发生变化称之为 internal covariate shift。对于深度学习这种包含很多隐层的网络结构,在训练过程中,因为各层参数老在变,所以每个隐层都会面临covariate shift的问题,也就

ZhikangFu的专栏 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

BN:Batch Normalization 解读

随机梯度下降法(SGD)对于训练深度网络简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率、参数初始化、权重衰减系数、Drop out比例等。这些参数的选择对训练结果至关重要,以至于我们很多时间都浪费在这些的调参上。那么使用BN之后,你可以不需要那么刻意的慢慢调整参数。 1.我们知道数据在输入到神经网络之前要进行预处理,其中包括数据增强,裁剪、归一化等操作,这会使网络对数据分布达到更好的训练效果。 2.那是不是考虑将每一层网络的输出也经过一次预处理再输送到下一层网络,通过这样的做法使网络.

weixin_41405284的博客 670

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深入解读Batch Normalization

对BatchNorm的误解 (重点问题写在前面)如果你在看到这篇博客之前已经看了不少BatchNorm相关的博客或者知乎文章,相信你会看到不少对BatchNorm这样的描述:BatchNorm的作用是把每层神经网络的输出(输入)的分布强行拉回均值为0、方差为1的标准正态分布。首先,这种描述是错误的,如果BatchNorm的作用是这个,那不就把前面神经元学习到的数据分布给破坏了,这样反而学不到任何东西。因此作者引入了可训练参数γ\gammaγ和β\betaβ,使得数据的分布不会局限在均值为0、方差为1。第二个

m0_47355331的博客 1230

深度学习: Batch Normalization论文详细解读

BN使得每层网络输出分布相对稳定,可以使用更大的学习率加速模型。BN使得模型对网络中的参数不那么敏感,简化调参过程,使得网络学习更加稳定。BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题。BN具有一定的正则化效果。

Hanze的博客 2081
上一篇: TensorFlow实现Softmax Regression手写数字识别
下一篇: ResNet详细解读
东风逍遥游
博客等级 码龄11年 56粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值