DL:训练
百度:
1.BN的全称,BN的作用,为什么能解决梯度消失?
(https://www.cnblogs.com/guoyaohua/p/8724433.html)
全称:Batch Normalization批标准化。作用:BN就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。
原因:而BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布(意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。)
2.Dropout的原理(模型平均)
(https://blog.csdn.net/u013989576/article/details/70174411)
每一批样本训练,暂时删除一部分神经元。
原理:1.每次随机删除,相当于训练了多个模型,取了平均效果提升,减少过拟合。2.提高网络的鲁棒性(每次网络不同,权值更新不依赖特定的特征)
3.过拟合解决的方法
(https://blog.csdn.net/heyongluoyao8/article/details/49429629)
1.Early stopping (提前停止):每个迭代期的最后都计算在验证集上的分类准确率,一旦分类准确率已经饱和,就停止训练。这个策略被称为提前停止。
2. 数据集扩增:即和已有的数据是独立同分布的,或者近似独立同分布的。一般有以下方法:
1)、从数据源头采集更多数据 2)、复制原有数据并加上随机噪声 3)、重采样 4)、根据当前数据集估计数据分布参数,使用该分布产生更多数据等
3.正则化方法:
L1正则:损失函数后加1次权重w绝对值。L2正则加权重w平方和。
4.Dropout
5.BN
4.写出常用的激活函数及其导数
1.Sigmoid:原:导:
特点:1、梯度消失 2、不以零为中心 、3计算成本高
2.tanh函数:原:导:
特点:1、以零为中心 2、梯度小时
3.ReLu 函数:原导
特点:1、不以零为中心2、x<0,权重无法更新;x=0,梯度未定义(现实中求导x=0的一边)
4.softmax函数(自己加的)
5.L1和L2的比较
L2与L1的区别在于,L1正则是拉普拉斯先验,而L2正则则是高斯先验。它们都是服从均值为0,协方差为1λ1λ。当λ=0λ=0时,即没有先验)没有正则项,则相当于先验分布具有无穷大的协方差,那么这个先验约束则会非常弱,模型为了拟合所有的训练集数据, 参数ww可以变得任意大从而使得模型不稳定,即方差大而偏差小。λλ越大,标明先验分布协方差越小,偏差越大,模型越稳定。即,加入正则项是在偏差bias与方差variance之间做平衡tradeoff(来自知乎)。
6.BN一般放在哪里?
一般是深度学习中用于加速训练速度和一种方法,一般放置在卷积层(conv层)或者全连接层之后(激活层之前)
7.如何解决梯度消失和梯度爆炸
梯度消失:
逐层“预训练”(pre-training)+对整个网络进行“微调”(fine-tunning)
选择合适的激活函数
batch normalization 批规范化:通过对每一层的输出规范为均值和方差一致的方法,消除了 w 带来的放大缩小的影响
残差结构
LSTM
梯度爆炸:
梯度剪切( Gradient Clipping)
权重正则化
选择合适的激活函数
batch normalization 批规范化,
RNN 的 truncated Backpropagation through time ,LSTM
NLP:
1.Attention、Transformer、BERT实现细节
Attention:http://mini.eastday.com/mobile/171227123803276.html、https://blog.csdn.net/baidu_36161077/article/details/81066001
通过将decoder的每一时刻输出隐态h与encoder所有隐态h1-hn,match匹配(如余弦相似度),归一化后softmax得出对应时刻的权重α。将权重α与当前时刻隐态h相乘输入到下一时刻的decoder即可。
attention transformer
Transformer:https://zhuanlan.zhihu.com/p/44121378
position attention:将encoding后的数据与embedding数据求和,加入了相对位置信息(用不同频率的sine和cosine函数直接计算)
encode: 第一层:Multi-head self-attention--
第二层:全连接层 之所以是position-wise是因为处理的attention输出是某一个位置i的attention输出。
decode:后两层与encode一样,多了一个attention的sub-layer放到第一层。因为decoder有训练真实数据,这层attention加了mask,防止收到未来的真实数据影响。
BERT:https://blog.csdn.net/yangfengling1023/article/details/84025313
输入:位置embedding 单词embedding 句子embedding 三个相加即BERT的输入
预训练:简单而言,模型会从数据集抽取两句话,其中 B 句有 50% 的概率是 A 句的下一句,然后将这两句话转化前面所示的输入表征。现在我们随机遮掩(Mask 掉)输入序列中 15% 的词,并要求 Transformer 预测这些被遮掩的词,以及 B 句是 A 句下一句的概率这两个任务。
2.词向量 降维是如何实现的
首先embedding:
(1)提取文章所有的单词,把其按其出现的次数降许(这里只取前5000个),比如单词‘network’出现的次数最多,编号ID为0,依次类推…
(2)每个编号ID都可以使用50000维的二进制(one-hot)表示
(3)最后,我们会生产一个矩阵M,行大小为词的个数50000,列大小为词向量的维度(通常取128或300),比如矩阵的第一行就是编号ID=0,即network对应的词向量。
3.神经网络多层感知机训练过程,手写一下
4.RNN参数大小。推导。
5.LSTM公式、GRU公式
6.word2vec和glove优劣
https://blog.csdn.net/u012879957/article/details/82735057
W2V:
Continuous Bag-of-Words(CBOW):通过上下文预测当前词出现的概率;Continuous Skip-gram:根据当前词预测上下文。
如果 vocabulary 大小为1万时, 当输入样本 ( "fox", "quick") 到神经网络时, “ fox” 经过 one-hot 编码,在输出层我们期望对应 “quick” 单词的那个神经元结点输出 1,其余 9999 个都应该输出 0。在这里,这9999个我们期望输出为0的神经元结点所对应的单词我们为 negative word. negative sampling 的想法也很直接 ,将随机选择一小部分的 negative words,比如选 10个 negative words 来更新对应的权重参数。
缺点:context 很小,没有使用全局的cooccur,所以实际上对cooccur的利用很少
glove:对word-pair cooccur进行建模,拟合不同word-pair的cooccur之间的差异
区别:
-
两者最直观的区别在于,word2vec是“predictive”的模型,而GloVe是“count-based”的模型。具体是什么意思呢?
-
不采用 negative sampling 的word2vec 速度非常快,但是准确率仅有57.4%。
- 只告诉模型什么是有关的,却不告诉它什么是无关的,模型很难对无关的词进行惩罚从而提高自己的准确率
- 在python的gensim这个包里,gensim.models.word2vec.Word2Vec默认是不开启negative sampling的,需要开启的话请设置negative参数,如何设置文档中有明确说明gensim: models.word2vec
- 当使用了negative sampling之后,为了将准确率提高到68.3%,word2vec就需要花较长的时间了(8h38m)
-
相比于word2vec,因为golve更容易并行化,所以速度更快,达到67.1%的准确率,只需要花4h12m。
-
由于GloVe算法本身使用了全局信息,自然内存费的也就多一些,相比之下,word2vec在这方面节省了很多资源