1 Star 0 Fork 0

iint/notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
20201028dzh.md
20210505大组会.md
210服务器使用方法.md
4MedianofTwoSortedArray.md
51单片机.md
8大主流服务器程序线程模型.md
ArrayList与LinkedList.md
BNCT.md
C#正则表达式.md
C++的typedef.md
C连接mysql.md
FCN.md
G401.md
History命令用法.md
Interpretbytesaspackedbinarydata.md
IoU.md
K-means聚类算法的理解与案例实战.md
Liner Models.md
Linux下快速比较两个目录的不同.md
MRI-CT工作的数据处理02.md
MRI-CT工作的数据处理03.md
MRI-CT工作的数据处理全过程.md
MRI-CT工作的数据预处理01.md
MRI-CT工作的结果分析01.md
MySQL学习笔记.md
OFDR技术.md
PCA.md
PIL图像处理库简介.md
Paper210309_深度学习预测剂量分布.md
PyTorch常用代码段整理.md
Pythonlambda介绍.md
Pythonxrange()函数.md
Python与C的交互.md
Python中os.sep.join()和os.path.join()的用法和区别.md
Python利用生成器读取大文件数据.md
Python可视化.md
Python将字符串作为变量名.md
Python常用的内建模块.md
Python常用第三方模块.md
Python标准库shutil用法实例详解.md
Python正则表达式.md
Python直接反投影重建CT.md
Python类型注解.md
Python类装饰器.md
Python计算皮尔逊相关系数.md
Python通过钩子远程加载模块.md
Python静态类方法.md
Pytorch中train和eval用法区别.md
Pytorch的BatchNorm层使用中容易出现的问题.md
Pytorch的transforms.md
SQL高质量语句.md
Ubuntu压缩及解压文件.md
__slots__是个什么玩意儿.md
batch_normalization.md
centos7 计划任务 定时运行sh.md
conda.md
cpp list node.md
cpp11并发与多线程.md
cppSTLunordered_map容器用法详解.md
cpphashmap.md
cpp中auto类型用法总结.md
cpp中const的用法.md
cpp中lambda函数.md
cpp中malloc、calloc、realloc函数的用法.md
cpp中set用法详解.md
cpp中using的用法.md
cpp中减去'0'的作用(-'0').md
cpp中的内联函数.md
cpp之namespace常见用法.md
cpp信号处理.md
cpp基础.md
cpp左值引用和右值引用.md
cpp异常处理trycatchthrow.md
cpp提高.md
cpp文件读写.md
cpp核心.md
cpp类中成员变量的初始化.md
cpp预处理器.md
effectivePython.md
github_tutorial.md
https与http.md
k折交叉验证.md
latex.md
leetcode-001.md
leetcode1.TwoSum.md
leetcode11.ContainerWithMostWater.md
leetcode12.IntegertoRoman.md
leetcode131.PalindromePartitioning.md
leetcode15.3Sum.md
leetcode17.LetterCombinationsofaPhoneNumber.md
leetcode22.GenerateParentheses.md
leetcode24.SwapNodesinPairs.md
leetcode3.LongestSubstringWithoutRepeatingCharacters.md
leetcode39.CombinationSum.md
leetcode43.MultiplyStrings.md
leetcode5.LongestPalindromicSubstring.md
leetcode6.ZigZagConversion.md
matplotlib colorbar颜色卡自定义偏移量.md
matplotlib.md
matplotlib_tutorial.md
matplotlib的一些小技巧.md
matplotlib风格.md
mcgpu.md
mysql批量删除重复行.md
namedtuple的使用.md
numpy索引和切片.md
office正则.md
pandas.md
pychram快捷键.md
python-mvisdom.server报[Errno98]Addressalreadyinuse错误解决办法.md
python.md
python_cookbook.md
python关于sorted里面key,reverse以及lamdba,operator这几个鸟人.md
python发送邮件.md
python拟合曲线.md
python正则.md
python爬虫实例-iint入组培训.md
python获取当前目录下的所有文件.md
python装饰器.md
python调用dll动态链接库及ctypes的使用.md
python透明图片和不透明图片叠加合成.md
python闭包.md
python骚操作.md
pytorch分割二分类的两种形式.md
pytorch分布式.md
reids是什么.md
shell.md
shell_cookbook.md
str和repr.md
tqdm.md
vector的六种创建和初始化方法.md
visdom服务启动时提示Downloadingscripts,thismaytakealittlewhile解决...
wordpress迁移.md
yolact.md
中值滤波优化图像结果.md
为什么说relu是激活函数.md
云南旅游计划.md
什么是cpp.md
什么是图神经网络.md
从贝叶斯方法谈到贝叶斯网络.md
优势:杀死乏氧细胞乏氧细胞定义.md
传能线密度.md
使用Python把超大文件当成数组读取.md
共线性.md
利用python快速发送博客到wordpress.md
制作h5py数据集.md
医学图像分割数据集制作.md
医学影像一些概念.md
单例模式.md
南航高性能计算平台介绍.md
卷积的优化.md
原理这就是网络.md
口诀理解Python闭包与装饰器.md
回调函数callback.md
图像分割损失函数设计.md
图像的全变分和去噪.md
基于深度学习的自然图像和医学图像分割:网络结构设计.md
基于蝴蝶网络的双能CT图像域双材料分解.md
多级反馈队列调度算法详解.md
大组会文献汇报.md
安装私有的包.md
将CT值转换为器官组织的one_hot编码.md
工厂模式.md
常见分类算法及他们的优缺点.md
平衡二叉树、B树、B+树、B树.md
应用层.md
快速理解numpy的axis.md
批量删除excel单元格中的换行符.md
损失函数在医学图像分割问题中的应用.md
数值分析作业01.md
数据降维.md
数理逻辑——命题逻辑的基本概念.md
朴素贝叶斯原理及python实现.md
机器学习中,频率派和贝叶斯派有什么核心差异?.md
机器学习十大算法.md
深度学习调参技巧.md
理解主成分分析.md
用Pytorch踩过的坑.md
用python更新主图数据库.md
白化.md
硼中子俘获治疗.md
神经网络不收敛的11个问题.md
神经网络中的注意力机制.md
神经网络工作基本流程.md
群论.md
自动抢羽毛球馆预约.md
英语演讲稿.md
计算机网络.md
计算机网络01-概念、基础.md
设计模式.md
详解AVL树基础篇.md
读写二进制数组数据.md
贝叶斯vs频率派.md
迭代.md
阿里云oss搭建个人图床和网盘.md
雷登变换.md
顺序容器.md
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
batch_normalization.md 5.19 KB
一键复制 编辑 原始数据 按行查看 历史
nuaazs 提交于 4年前 . first

1. What is BN? 顾名思义,batch normalization嘛,就是“批规范化”咯。Google在ICML文中描述的非常清晰,即在每次SGD时,通过mini-batch来对相应的activation做规范化操作,使得结果(输出信号各个维度)的均值为0,方差为1.

最后的“scale and shift”操作则是为了让因训练所需而“刻意”加入的BN能够有可能还原最初的输入(即当[公式]),从而保证整个network的capacity。(有关capacity的解释:实际上BN可以看作是在原模型上加入的“新操作”,这个新操作很大可能会改变某层原来的输入。当然也可能不改变,不改变的时候就是“还原原来输入”。如此一来,既可以改变同时也可以保持原输入,那么模型的容纳能力(capacity)就提升了。)

imgimg

关于DNN中的normalization,大家都知道白化(whitening),只是在模型训练过程中进行白化操作会带来过高的计算代价和运算时间。

因此本文提出两种简化方式:

  1. 直接对输入信号的每个维度做规范化(“normalize each scalar feature independently”)
  2. 在每个mini-batch中计算得到mini-batch mean和variance来替代整体训练集的mean和variance. 这便是Algorithm 1.

2. How to Batch Normalize? 怎样学BN的参数在此就不赘述了,就是经典的chain rule:

imgimg

3. Where to use BN? BN可以应用于网络中任意的activation set。文中还特别指出在CNN中,BN应作用在非线性映射前,即对[公式]做规范化。另外对CNN的“权值共享”策略,BN还有其对应的做法(详见文中3.2节)。

4. Why BN? 好了,现在才是重头戏--为什么要用BN?BN work的原因是什么? 说到底,BN的提出还是为了克服深度神经网络难以训练的弊病。其实BN背后的insight非常简单,只是在文章中被Google复杂化了。 首先来说说“Internal Covariate Shift”。文章的title除了BN这样一个关键词,还有一个便是“ICS”。大家都知道在统计机器学习中的一个经典假设是“源空间(source domain)和目标空间(target domain)的数据分布(distribution)是一致的”。如果不一致,那么就出现了新的机器学习问题,如,transfer learning/domain adaptation等。而covariate shift就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同,即:对所有[公式],[公式],但是[公式]. 大家细想便会发现,的确,对于神经网络的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能“指示”的样本标记(label)仍然是不变的,这便符合了covariate shift的定义。由于是对层间信号的分析,也即是“internal”的来由。 那么好,为什么前面我说Google将其复杂化了。其实如果严格按照解决covariate shift的路子来做的话,大概就是上“importance weight”(ref)之类的机器学习方法。可是这里Google仅仅说“通过mini-batch来规范化某些层/所有层的输入,从而可以固定每层输入信号的均值与方差”就可以解决问题。如果covariate shift可以用这么简单的方法解决,那前人对其的研究也真真是白做了。此外,试想,均值方差一致的分布就是同样的分布吗?当然不是。显然,ICS只是这个问题的“包装纸”嘛,仅仅是一种high-level demonstration。 那BN到底是什么原理呢?说到底还是为了防止“梯度弥散”。关于梯度弥散,大家都知道一个简单的栗子:[公式]。在BN中,是通过将activation规范为均值和方差一致的手段使得原本会减小的activation的scale变大。可以说是一种更有效的local response normalization方法(见4.2.1节)。

5. When to use BN? OK,说完BN的优势,自然可以知道什么时候用BN比较好。例如,在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。

Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/iint/notes.git
git@gitee.com:iint/notes.git
iint
notes
notes
master

搜索帮助