BN网络的一个问题
人工智能吧
全部回复
仅看楼主
level 4
BN网络的算法核心就是gama beta 的数据重构,让网络自身学习这两个参数,然后恢复前一层学到的数据特征,那我的疑惑是,既然都要恢复成原来数据的分布,为什么还要将数据一开始归一化呢??
这一点我不是很理解。希望大家指正。
2021年06月21日 07点06分 1
level 12
归一化不冲突,归一化在行或列上进行的是线性变换,不破坏原来的数据分布的非线性,是仅改变了幅度的等效变换而已。只要预测数据与训练数据作了相同的变换,最后是线性相似的。所以很多都先归一化一下,结果只会更好,最多浪费点运算。
2021年06月21日 10点06分 2
因为这个算法我理解的是最后一步,就是最后学习得出的scale Shift 的参数,会将数据又转化成BN之前的数据,那不就等于BN没用了么。
2021年06月21日 10点06分
神经网络不归一化其实也没啥,不同特征振幅有差异,权值上会校正的,但差异大了会影响训练效果,大的很大,那正则化等操作的作用就相抵触了,学习时也不好达到理想区域。
2021年06月21日 10点06分
@胡梦柯5 那您能说一下,为什么要添加scale Shift两个参数呢
2021年06月21日 10点06分
但BN层确实是可以替代归一化层的,只不过先用归一化较统一,就象做东西,都标准化操作了,用着方便。
2021年06月21日 10点06分
level 4
借用网上的一段话来阐述下我的困惑:
BN核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢。当然,这是我的理解,论文作者并未明确这样说。但是很明显这里的scale和shift操作是会有争议的,因为按照论文作者论文里写的理想状态,就会又通过scale和shift操作把变换后的x调整回未变换的状态,那不是饶了一圈又绕回去原始的“Internal Covariate Shift”问题里去了吗,感觉论文作者并未能够清楚地解释scale和shift操作的理论原因。
2021年06月24日 01点06分 4
这个线性区与非线性区指的是调整工作区域前,会部分工作于不太好的区域(比较非线性),就象sigmoid接近上下限时很非线性,中间近似线性但实际也是非线性。归一化后,则容易使之工作于工作起来较好的区域,即使之工作于线性较好的区间。总的说来,一般都是非线性的,但转换到较线性的区间工作更好。
2021年06月24日 01点06分
最后再转换回来以便后续块的处理,要不然,这几层工作于线性较好的区间,不意味着它的输出在下几层仍能工作于线性较好的区间。
2021年06月24日 01点06分
@胡梦柯5 我梳理一下流程啊:数据->输入层->bn层->relu层,就是个例子哈。训练到最后阶段,假设结果可以 训练的非常好,bn层最后重构两个参数训练的可以将数据还原成原始数据的样貌,那么bn层不就是没用了,那我还要bn层有什么用呢。bn层不就是确保进入激活层的数据分布更好么?
2021年06月24日 01点06分
@- 您觉得是不是我对BN层的流程有误解啊,对不起我有点笨,就是不是很理解这个BN的流程[泪]
2021年06月24日 02点06分
level 4
我梳理一下流程啊:数据->输入层->bn层->relu层,就是个例子哈。训练到最后阶段,假设结果可以 训练的非常好,bn层最后重构两个参数训练的可以将数据还原成原始数据的样貌,那么bn层不就是没用了,那我还要bn层有什么用呢。bn层不就是确保进入激活层的数据分布更好么?
2021年06月24日 01点06分 5
那发动机换档有没有用呢,也是上坡时、平路时都分别为了保持在线性工作区,否则费油与动力输出的增减非线性,上坡换了档,平路又换回来,那不是搞了一圈又回来了?
2021年06月24日 03点06分
何必搞个多档,直接搞成上坡与平路都能工作在效率最高的不就好了,都是线性区,多好。
2021年06月24日 03点06分
那问题不在于换档的必要与否,而在于发动机不够好,没做到全区间线性。
2021年06月24日 03点06分
妹子和你身体不够全面,高频低频的运动都应当是你们的最佳工作区间。
2021年06月24日 03点06分
level 4
@胡梦柯5 @璐村惂鐢ㄦ埛_7SKAAD6馃惥
感谢二位的解答。但是我总是觉得我的疑惑和二位的解答不在一个道上。
我理解BN的作用主要是将数据往线性范围去拉,防止梯度消失之类的问题,这个我完全可以理解。我不理解的是scale和shift的含义,因为用BN层前几步的作用是为了更好地让数据在激活层运作,行,现在我把数据处理好了,也减去平均值了,也把方差变成1了,不就可以直接送到激活层,然后这样训练不就好了么,为什么还多此一举在激活层前,加入了scale和shift呢?我好不容易把数据拉到了线性区域,你倒好,还要通过每次不停地训练scale和shift参数把我的数据还原回去(原文作者的意思是最理想的状态是还原成原始数据?????what????这不是等于没加BN层了么?????作者在原文并没有解释这个含义)
按照作者的理想结果,scale shift参数将激活层前的数据还原成原始数据,那BN层不就等于无了么??我还训练个什么劲啊
2021年06月24日 04点06分 6
什么scale shift,scale可能指批归一化中间层前最初的归一化,或者就指批归一化时的除以方差的操作,这有啥不能理解的,有没有批归一化,前面归一化都可以啊,shift可能是指内部方差偏移,即没有批归一化时会进入到线性很差的区域,这样的不好的现象,批归一化就是要改善这个不良shift。
2021年06月24日 04点06分
如果它是英文的,将激活层前的数据还原成原始数据,可能意思是将数据还原到没有不良shift的区间。因为没有BN的话,神经网络会导致工作区间每一层都向不良区间乱偏。
2021年06月24日 04点06分
@胡梦柯5 哈哈,谢谢您的耐心回复,我慢慢理解啦!应该是我误解了原文作者的那句话,我懂啦,BN层中的参数还是按照梯度下降的方式训练出来的,如果数据经过BN层出来和原始数据分布一样,那就说明这一batch的数据本身分布就很好啦。多谢🙏
2021年06月24日 04点06分
一般的神经网络,每次非线性变换后,都相当于会带来方差偏移,例如均值非零,方差过小或过大,于是神经网络工作于不良区间。BN就是想纠正到良区间,这种纠正,意义上就相当于将数据恢复其良性。
2021年06月24日 05点06分
level 1
既然都要恢复成原来数据的分布,为什么还要将数据一开始归一化呢??
这一点我不是很理解。希望大家指正。
2021年06月25日 01点06分 8
我一开始也不是很理解他的意思,其实他的意思是每个batch都弄成正态分布,这样不会出现梯度弥散,然后通过重构,最后的最后,在你看整体你数据的时候,分布和你原来的数据是差不多的,因为整体数据的特征不能丢。
2021年06月25日 01点06分
因为你要知道,你的参数是通过网络训练出来的,参数最终变成什么样,都是朝着让你网络更好性能的方向变得。所以如果最后通过BN层的数据没有变化,你可以理解为,输入层中的数据,分布已经很好了,所以就算通过BN层,也没什么改变了
2021年06月25日 01点06分
level 12
BN网络,假定每一批数据,与数据全体都i.i.d,即小批量数据独立的与全体数据同一分布采样而来,那同一导某个神经元进行BN的小批量数据的均值与方差,最终与测试数据进行去均值除方差的这两参数基本相同,就算不同,也由于大量数据都训练过,也基本可以考虑成训练时用小批量数据的均值与方差,一致于预测时用所有数据的均值与方差,这样,训练时进行了小批量内去均值及除方差之BN层的操作,预测时也相当于能用全体数据去均值及除方差之BN层相似的操作。
2021年06月27日 11点06分 9
BN层每一个神经元的均值、方差、gamabeta不同,即单对各层激活层前的BN层来说,每BN层不同,每层内每一维都不同。训练时每批数参数及均值方差都在变,但训练完后,预测时全统一用大量数据训练好了(参数)或计算好了(均值方差)的。
2021年06月27日 12点06分
上面的同一导改成同一层。
2021年06月27日 12点06分
所以Batch必须随机采样。
2021年06月27日 12点06分
Batch尺寸可能还不宜太小。
2021年06月27日 12点06分
level 1
看这个免费课你就懂了很体系ke.lieweiai.com
2021年07月01日 02点07分 10
1