李宏毅机器学习课程笔记EP12

【训练tips:批次标准化Batch Normalization】李宏毅2021/2022春机器学习课程笔记EP12(P48)

从今天开始我将学习李宏毅教授的机器学习视频,下面是课程的连接(强推)李宏毅2021/2022春机器学习课程_哔哩哔哩_bilibili。一共有155个视频,争取都学习完成吧。

那么首先这门课程需要有一定的代码基础,简单学习一下Python的基本用法,还有里面的NumPy库等等的基本知识。再就是数学方面的基础啦,微积分、线性代数和概率论的基础都是听懂这门课必须的。


之前在EP4(【类神经网络训练不起来怎么办】李宏毅2021/2022春机器学习课程笔记EP4(P19-P22) – -TobyKSKGD的个人博客-)的时候介绍了几个应对神经网络训练不起来的小tips,如果忘记了,这里有传送门。

本篇文章就在来补充一个训练模型的小tip。本次要说的是批次标准化(Batch Normalization)。

在训练模型的时候,我们可能会遇到Error surface比较崎岖的时候,这样子就会让我们比较难以训练模型。这里介绍一种新的方法:Feature Normalization,本次要说的是Feature Normalization中的一种,批次标准化(Batch Normalization)。形象一点说就是,既然这个Error surface比较崎岖会影响我们的训练,我们就直接把山给移平就好了。(这里老师说发动神罗天征把山移平,很中二HAHA)

假设说有上图右边这样子横轴变化平缓,纵轴变化陡峭的情况,我们就可以用Feature Normalization归一化的方法去给feature里面不同维度,让纵轴和横轴的参数都有同样的数值范围。

要是你有问什么会出现上图右边这样不好的Error surface这样子的问题,可以看上图右边的解释,这里就不再做阐述了,你只要知道,这种情况是会发生的就行了。

下面就是Feature Normalization的做法:

这里说的是Feature Normalization的其中一种可能性。接下去,我们一步一步地来看。

首先就是,Feature Normalization做的是怎么样的一步操作呢?

上面的x1到xR是所有训练资料的特征向量,让后下面蓝色框里面有下标的x表示特征向量中的元素。我们取一个维度(dimension)的元素x做处理(绿色框中选元素的方式)。我们要做的计算就是上图中的这个式子,里面的mi表示的是这一维度(dimension)的平均值,然后σi表示的是这一维度(dimension)的标准差。做完这一步操作之后,把就把所有的元素都变成了均值是0,方差是1,分布在0上下的数值。

这就是归一化的操作。

接下去,如果在深度学习中,我们的神经网络往往都很深,上一层的输出是下一层的输入这种情况很常见。但是作为新的输入,又会出现和之前一样的问题,所以我们又要再对上一层输出的参数做一次归一化。

顺便一提,在激活函数前还是后做归一化,最后的结果差别不会特别大,所以这个地方不需要纠结。

我们对上一层的输出Z做归一化的过程和上面差不多,这里把操作放到了上图的右下角,这里不做解释。

然后我们就会发现,做完归一化之后,如果我们的Z1一个参数假设说变化了的话,因为有μ和σ把后面的参数都关联起来了,所以后面的整个参数都会发生变化。因此我们把上图这些操作用红框框起来,表示说这是一个完整的巨大网络,里面是不可以拆分的。

因为GPU的内存有限,我们不可能把所有的资料数据全部一次放入。所以,我们要分批(batch)放,因此这个方法就叫做Batch Normalization它是Feature Normalization的一种。

因为归一化还是对数据进行了修改,所以为了防止归一化对输出产生不好的影响,我们把β和γ加回去。这里β和γ是神经网络自己学的参数,如果输出想要不平均是0,就让神经网络自己去学β和γ来调整Z hat的分布。为了防止加上β和γ,又会出现纵轴和横轴斜率差很多,Error surface不好的情况,实际上我们在做的时候,我们把γ初始化为都是1的向量,把β初始化为里面都是0的向量。

如果今天在线上,等一个batch输入都满了再做处理,这样子显然是不合理的。解决方法就是不需要存在batch,其实这里Pytorch都帮你做好了。

这里的操作就是用上图中的方法去计算μ bar和σ bar,式子里右边的μ bar指的是μ的平均值,然后用μ bar和σ bar去替换之前式子里的μ和σ就可以了。值得一提的是,上面式子里的p也是一个超参数是需要调的。

最后就是其他归一化的方法,名字就贴在下面,这里不再做讲解。


以上就是一个训练时候的小tips批次标准化Batch Normalization的介绍。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇