面经知识点整理

注:本文总结自rumor(面经酱)的思维导图,如有侵权,即可删除。

一、DNN:梯度消失与梯度爆炸

学习的大佬链接: https://zhuanlan.zhihu.com/p/76772734

       1. 结论

        梯度消失(爆炸),是由于网络层数过深,导致多个小于(大于)1的梯度值连乘,网络在bp回到接近输入层时,其梯度接近0(无穷大)造成的参数不更新(更新太大)。

         说明:对于每一层的o1有来年两种表示,其中NETo1经过线性变换后的值,OUTo1表示NETo1经过激活函数后的值。此处我们直接直接sigmoid激活函数,其它的激活函数类似。

        首先计算sigmoid激活函数的导数:令\sigma (x) = \frac{1}{1+e^{-x}}

则其导数为:

\sigma'(x) = \frac{e^{-x}}{(1+e^{-x})^{2}=\frac{1+e^{-x}-1}{(1+e^{-x})^{2}

=\sigma(x)-\sigma(x)^{2}=\sigma(x)(1-\sigma(x))

        2.原因解释

        使用均方误差MSE作为损失函数,则

 因此有loss对w5的导数为:

loss对w1的导数为:

 

         可以看出,loss对w5的导数主要与Co1、激活函数的导数,以及权重w5、w7有关(如果是中间层,则没有输入的事,因此不考虑i),由于Co1作为输出层的计算,一般不作考虑。

        在这里,影响导数的主要是激活函数的导数和权重。已知sigmoid函数的导数范围为(0, 0.25),而我们在初始化权重时,一般都是服从均值为0,方差为1的正态分布,因此有|\sigma '(z)w |<= 0.25, 经过连乘,则接近输入层的导数趋向于0,会导致几乎不更新,即梯度消失。

        反之,若|\sigma '(z)|>1, 通过连乘,则接近输入层的导数会很大,导致参数很剧烈,即梯度爆炸。但是一半不会出现梯度爆炸,因为z =w\cdot x+b,当w很大时,\sigma '(z)会很小,是的梯度不易爆炸。

3.解决方案:

        a.梯度爆炸

        使用梯度截断/正则化

         

         b.梯度消失

        1).改变激活函数

        relu(tanh的导数也小于1,因此只能缓解),但直接的relu会有0区间不更新的问题。

        2).batchnorm        

        通过归将输入输出一化到均值为0,方差为1的区间,使权重落在激活函数敏感的区域,梯度变化大,避免梯度消失,同时加快收敛

        3).残差结构

        保证总有线性通路

4. 与RNN中梯度消失的区别

       a. DNN中的梯度消失:网络接近输入层的梯度几乎不更新,导致网络退化为固定前几层网络,只更新后几层网络的浅层网络。

      b. RNN中的梯度消失:

       

        可以发现,随着网络层数的增加,W0的梯度一直正常更新。但是由于连乘的效应,在接近输入层的Wx和Ws的梯度, 会发生梯度消失;但在接近输出层的Wx和Ws不会发生梯度消失。由于RNN中一次任务的损失值为每一时刻损失值的叠加,因此在任一时刻整体的梯度不会消失(因为当下的梯度还在),只是前面的信息用不到了,即前面的梯度消失了,所以叫做梯度消失。

注:有人证明过:RNN的总梯度 = 每一时刻的梯度之和。

二、CNN:

1. 归纳偏置:特征的局部重要性(locality)和平移不变形(spatial invariance);与之对应的,RNN的归纳偏置为信息的顺序处理重要性;深度神经网络为层次化处理信息很重要。

注:归纳偏置会促使学习算法优先考虑具有某些属性的解(即在多种可行的拟合曲线中选择具有某种属性的曲线)

2.卷积核:

1)卷积核的尺寸实际上是3维的,即filter_size * filter_size * in_channel,通过这样的卷积核,才能使通道数由in_channel变为out_channel。

2)卷积过程的计算:

           a. CV领域:

                前提: 假设输入为64*64*3, filter_size为3*3,卷积核个数为100,步长为1,no padding。

        则: 输出大小为:62*62*100

        参数量为:(3*3*3 +1) * 100 = 2800(一般默认在卷积之后使用偏置b)

        计算量: (3*3*3+26)*100 = 5300(每个元素都要进行乘法,得到的27个元素还要进行加法,最终变为一个元素 -> 这是一个卷积核的计算量。然后 * 卷积核的个数100)

           b. NLP领域:

                前提:假设输入为64*300,filter_size为3,卷积核个数为100, 步长为1,no padding。

        则:输出大小为: 62*100(filter_size 默认为3*300(embedding的维度))

        参数量为: (3*300 + 1) * 100 = 90100 

        计算量为:(3*300 *2 -1)* 100 = 179900

注:卷积之后的尺寸:out = (input - filter + 2*padding) / stride + 1

3. 1*1卷积:(实际卷积尺寸为1*1*in_channel)

        a.作用:1)进行通道的升降维

                   2) channel间信息的交互

                   3)增加非线性特征:1*1可以保持尺寸不变,但是feature map已经变了,通过后面的非线性激活函数,即可以得到不同的非线性特征。

        b.与全连接层的区别:

                全连接层的输入尺寸是固定的,但是1*1卷积核的输入尺寸可以是任意的。

4.反向传播:https://zhuanlan.zhihu.com/p/81675803

        把卷积按照卷积核的滑动方式平铺为全连接层

        avg-pooling:相当于w=[1/4, 1/4, 1/4, 1/4]的卷积核

5.稀疏交互与权重共享

        a.稀疏交互:每个输出神经元仅与前一层特定局部区域的神经元存在连接权重

        b.权重共享:使得卷积层具有高度的平移不变性。

6.池化本质:降采样  https://zhuanlan.zhihu.com/p/136192775

        a.平均池化:避免估计方差过大,提取背景信息

        b.最大池化:避免估计均值偏移,提取纹理信息,减少无用信息的影响。

        c.全局池化:获取全局上下文信息。

三、RNN:

1. 归纳偏置:时序不变性

2. BPTT(back propogation through time): 按照时间序列的反向传播,本质上还是BP

3.梯度消失与梯度爆炸:DNN的时候已经说过了

4. LSTM:https://zhuanlan.zhihu.com/p/34203833

5. GRU:结构比LSTM简单,因此比LSTM收敛的快,但是如果数据量很大,LSTM是略优于GRU的

四、Bert:

1.token Embedding:

        1)为什么attention is all you need中要乘上sqrt(embedding)?

        因为位置编码使用的是sin/cos,值域比xavier初始化的token embedding大很多[-0.13, 0.13],所以需要乘以sqrt(embedding)做增强。但是bert中使用的是position embedding的方式,就没有必要了。

2. Scaled Dot Product:

        1)为什么是缩放点积,而不是点积模型?

        当输入信息的维度d比较大时,点积模型的值通常有比较大的方差,从而导致数据分布由均值0方差d -> 均值0方差d^2.另一方面,点积得到的数较大时,会落在softmax函数的饱和区,导致反向传播的梯度比较小,甚至接近于0。因此需要使用缩放点积。

        2)加法模型和乘法模型的区别:

        乘法模型的优势:直接利用矩阵的乘积,计算效率更高

                          缺陷:会产生较大的输出,一方面改变了输入的分布,一方面使输出落入了softmax函数的饱和区。

3. QKprojection:为什么是双线性点积模型?

        双线性点积模型,引入非对称性,更具健壮性(使得当前位置对自身的注意力得分不一定最高)

4. multi-head为什么有效?

        1)类似于CNN中的多通道,能够得到更多的特征,每个头都相当于在原来维度上的一种线性组合

        2)先切头再缩放点积,这样的点积维度d较小,避免梯度消失,通过注意力矩阵较小。最终能够实现在相同计算量下得到更多的特征信息。

5. FFN的作用

        FFN中的relu等激活函数是非线性变换的主要来源。

6.解读transformer的细节(https://www.zhihu.com/people/tang-pan-43-83)

        1)TWWT(权重共享)

        原因:1.embedding矩阵U是指定抽取,pre- softmax矩阵V是逐个点积,因此U没有V训练的充分。通过绑定,可以得到质量更高的embedding矩阵。(为什么可以绑定,两者的一列都是对某一单词的向量化表示,语义是相通的)

 

                   2. 此表大小比隐层的维度H高出一个数量级,这样能较低参数量,使模型收敛的更快。

        2) position encoding

注:必须要用正弦和余弦,因为这样通过三角函数的和角才能得到相对位置编码;但不是必须得是奇偶下标来分开使用sin和cos,只要分成两段就可以,因为后面的全连接层会重排坐标。

        3) LayerNormlization(LN):

        好处:1.使输出落在梯度敏感区,加快模型的训练

                   2.保证每次数据的分布相同,消除极端值,提高模型的稳定性

注:在梯度敏感区域,隐层的输出接近线性,模型表达能力会下降,因此引入gi和bi,对输出进行线性变换,稍稍改变输出的分布。(gi和bi是学习的参数)

        4) label smoothing(regularization):

          主要思想:一种正则化手段,避免过拟合,防止模型对某些样本过于confident。

           与dropout的区别:dropout用于隐层,LSR用于softmax层。

           具体实现:LSR为了让模型不过于贴合单点分布,会在真实分布中加入噪音,并叠加一个独立于样本数据的均匀分布。所以有

其中q(k)表示样本的类别为y(真实值)的概率,原文中均匀分布的参数为0.1。因此损失函数(交叉熵)变为         5)warmup (也叫做noam)

        好处:1. 模型在初始阶段不稳定,如果学习率过大,可能会不收敛,因此需要预热

                   2. 使用gradual warmup(线性warmup),在大batch size下能够更好的拟合出类似小batch size的梯度效果(bs放大k倍,则学习率也类似放大k倍) 

7.Bert的优缺点:

        1.优点

        bert作为预训练模型,利用了文本的双向信息,效果更好,而transformer在decoder部分使用了mask,让第i时刻只能获得前i-1个时刻的信息。

        2.缺点

        1)因为使用了mask,bert在预训练和微调时的结构不匹配

        2)只有15%的token被mask掉,模型收敛的比较慢

        3)bert在在做分词的时候,将每个token切分了,因此可能仅mask一个词的一部分,这样做预测任务会变的很容易 --> 改进:使用wwm

8. Bert的激活函数

Gelu:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值