双非美团一面

BN层作用

BN层是对输入进行操作,具体是求得均值和方差以后,每个数减去均值除以标准差。

如果你对高斯分布还有印象,你会知道,我们在把高斯分布从某个分布转化为标准高斯分布的时候,用的也是这个公式。

大多数情况,我们也会假设我们的数据是服从高斯分布的。所以这样的操作,其实就是把分布尽可能转化为同一个分布。

那么为什么要把不同批次的输入,都转化为同一个分布呢?

因为你不能保证你的每个数据都是同一个分布的(有噪声),同时,在网络还没收敛的时候,网络的每一层变化,也无法让每个

数据都变成同一分布,(一个序列经过一个复杂函数变换以后,还能保证是同一个分布吗?)这里的每个数据指的是每一个batch。

而一旦数据不是同一个分布,那会非常麻烦。具体来说会有两个很明显的问题:

1.破坏分布后会破坏原有数据的信息。将导致训练过慢。

2.由于输入的值域发生了变化,将导致向量乘法相似度计算失效,导致拟合很难。

为了解决上述问题,采用归一化的方法。由于是每个batch都做了归一化,所以叫做BN。

具体回答:

1.加快训练

2.防止梯度衰减或爆炸

3.减少过拟合,提高泛化能力

介绍自注意力机制:

输入是一个向量序列,首先加入位置嵌入或其他东西,然后经过三个形状相同的矩阵,变成三个形状相同的向量序列,

其中kq相乘,得到一个n*n矩阵,代表注意力权重,然后与剩下那个v矩阵相乘,得到输出序列。

如果构造了多个头,那么把这些输出序列cat在一起,在经过一个矩阵乘法变回等大矩阵。

介绍SGD到Adam:

SGD是随机梯度下降,优化公式上,只利用了当前的梯度。有一个超参且一直不变。

这样会带来两个问题:

1.随着优化的加深,超参应该要设置得更小才行,否则就会一直震荡

2.每次优化不仅要考虑当前的梯度,还应该考虑已经积累的梯度

于是设置了动量这个概念,可以结合之前的梯度,防止陷入局部震荡。

也调整了学习率的设置,让学习率得以动态变化。

寻找两个有序数列的中位数:

这道题有两个做法,是力扣原题(好像是第5道)O(n+m)复杂度的方法就不讲了。

1.问题可以被放大为:寻找两个有序数列的第k位数。在这里,这个k是中位值。

对比他们的k/2位数时,若a的这位数大于b的这位数,则代表b中这位数之前的数必定不是

第k位数。这样就可以排除b中前面的这些数了。问题将变为在a和剩下的b中,找出第(k-k/2)的数。再次调用就行了。

2.利用中位数的性质,在a和b中某一个数列(比如a)中,找到一个数,满足aj>bi-1 and aj < bi,且j + i == (m+n)/2

注意奇偶的区别就行了。

全部评论

相关推荐

炫哥_:哥们项目描述里面vector和mysql之类的都要写吗,直接开头技术栈巴拉巴拉就行了,完全不是技术点啊
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务