机器学习李宏毅学习笔记8


前言

Batch normalization 批次标准化
(训练技巧)


一、训练中遇到的问题

feature normalization
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
当error surface崎岖的时候,训练比较难,能不能移平error surface从而简化训练。

二、Batch normalization-training

当w1和w2斜率差很多的情况
在这里插入图片描述
假设一个model
在这里插入图片描述
当w1改变时L改变,当x1很小时,w1有一个变化时,对L的变化很小。当x2都很大时,w2有一个小变化时,L的变化都很大。就会产生不同方向斜率非常不同的error surface。

如果能给dimension同样的数值范围,就可以制造比较好的error surface,让training更好一点。
在这里插入图片描述
如何让不同的dimension,有接近的数值范围。有多种不同的方法,这些方法统称feature normalization。
其中一种方法是,把所有训练资料的特征向量集合起来,把所有向量中各个维度的数值集合起来,计算每个维度的平均值,将原来向量中的xi-i维度的平均值,再除以这个维度的标准差,这个过程叫做标准化。并将新生成的数值写回向量中。
在这里插入图片描述
做完这个过程后,这个维度上的平均值是0,差异是1。会让做梯度下降时,Loss收敛的更快。
在这里插入图片描述
在做接下来的计算时,但对于W2来说生成的zi和ai也是一种输入,如果zi不同维度之间的分布依然有很大的差异的话,在训练第二层W2时,也会出现困难。所以,也应该对zi或ai做feature normalization。对z做feature normalization或对a做feature normalization的结果差异不大。如果用sigmoid做feature normalization,对z做feature normalization好一点。
假设对z做feature normalization,
在这里插入图片描述
在这里插入图片描述
但是zi的均值和标准差都是根据z1,z2,z3算出来的。不做feature normalization的时候,改变z1,只会改变1。但是做了feature normalization之后,z1,z2,z3之间有关联了,改变z1时,2,3都会改变。这就会形成一个大的network,有很多输入,计算均值和标准差,输出一堆。当训练资料里面data太多时,丢到一个network,gpu的存储无法把所有都加载,那只会考虑一个batch里面的data。每次对一个batch里面的数据,算均值、标准差,算着一个batch的feature normalization。
在这里插入图片描述
做batch normalization的时候还会进行一个运算,算出后,进行如下操作
在这里插入图片描述
在这里插入图片描述

2.Batch normalization-testing

在testing时,有时候不是把所有测试资料一次性给你,这时你无法分为一个一个的batch,每次传进来并累计到一个batch在计算时不现实的(线上实时系统),而你使用Batch normalization的时候是一个一个batch的进行的,你算平均值和标准差是基于一个batch的。在pytorch中,他的处理方法是,在训练时,你每个batch算出来的平均值和标准差,都会去算moving average。
在这里插入图片描述
这个p也是要调的参数(0.1)。
在这里插入图片描述
用这个新的平均值和新的标准差,代替之前的。


总结

学习视频地址:https://www.bilibili.com/video/BV1zA411K7en/?p=13&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=3a369b537e1d34ff9ba8f8ab23afedec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值