如何理解批量归一化?

批量归一化(Batch Normalization, BN) 在理解这一部分的时候,我查阅了很多资料,但对于BN的具体实现以及作用还是不太清楚,前几天当面询问了老师,他给了我一个更容易理解的例子,我觉得很好,从他的例子再去看其他资料的解释,就很容易理解了。 原理 批量归一化的核心是对每一层网络的输入数据,计算出它们的均值和标准差,然后将这些数据进行标准化,使得这些数据的分布更接近标准正态分布(即均值为0,方差为1)。同时,为了不影响模型的学习能力,BN还会引入两个可训练的参数:缩放参数和偏移参数,这样即使数据被归一化了,网络仍然可以通过调整这两个参数来学习不同的特征。 如何理解? 批量归一化(Batch Normalization, BN)可以用一个简单的比喻来理解: 假设你在一个班级里,大家都要参加一次考试,但考试前每个人的学习状态不一样:有的人状态好,有的人状态差。如果直接考试,可能成绩会有很大波动,影响整体表现。 为了让大家在一个相对公平的状态下考试,老师先给大家做了一些准备活动,让每个人的状态都差不多,比如让大家一起做深呼吸、放松心情、统一考试前的精神状态。这样一来,每个人的初始状态更接近,考试的表现就更稳定了。 在深度学习中,批量归一化就类似于这个准备活动。它在每一层网络计算之前,先对数据进行一次“整理”,让数据的状态更一致。具体来说,它会对输入到每一层的批量数据进行归一化处理,调整数据的分布,使得每一层网络在处理这些数据时,能够更稳定、高效。 下面我们举一个例子: 假设你班上有五个学生,他们在考试前的学习状态(可以看作每个学生的“分数分布”)如下: 小明:状态 90 分 小红:状态 70 分 小刚:状态 50 分 小丽:状态 60 分 小强:状态 80 分 这时候,直接让他们去考试,最终成绩可能会因为初始状态的不同而差异很大。为了让大家在一个更公平的状态下考试,老师决定在考试前先做一个“批量归一化”的准备活动。 批量归一化的过程 1. 计算均值: 首先,老师计算一下大家状态的平均值: \[ \text{平均状态} = \frac{90 + 70 + 50 + 60 + 80}{5} = 70 \] 2. 计算标准差: 然后,老师计算一下大家状态的标准差(衡量数据的分散程度): \[ \text{标准差} = \sqrt{\frac{(90-70)^2 + (70-70)^2 + (50-70)^2 + (60-70)^2 + (80-70)^2}{5}} \approx 14.14 \] 3. 状态归一化: 接下来,老师会调整每个人的状态,使得它们的分布更加均匀。具体做法是:每个人的状态减去均值,再除以标准差,让数据的均值变为 0,标准差变为 1。...

八月 11, 2024 · 1 分钟