第五章:速记Day5-灵析社区

英勇黄铜

问题 1:工业界中遇到上亿的图像检索任务,如何提高图像对比效率?

假设原图像输出的特征维度为2048维,通过哈希的索引技术,将原图的2048维度映射到128维度的0/1值中,再进⾏特征维度对⽐。

问题 2:了解正则化么?

正则化是针对过拟合而提出的,以为在求解模型最优的是一般优化最小的经验风险,现在在该经验风险上加入模型复杂度这一项(正则化项是模型参数向量的范数),并使用一个 rate 比率来权衡模型复杂度与以往经验风险的权重。

如果模型复杂度越高,结构化的经验风险会越大,现在的目标就变为了结构经验风险的最优化,可以防止模型训练过度复杂,有效的降低过拟合的风险。 奥卡姆剃刀原理,能够很好的解释已知数据并且十分简单才是最好的模型。

问题 3:线性分类器与非线性分类器的区别以及优劣?

如果模型是参数的线性函数,并且存在线性分类面,那么就是线性分类器,否则不是。

  • 常见的线性分类器有:LR、贝叶斯分类、单层感知机、线性回归。
  • 常见的非线性分类器:决策树、RF、GBDT、多层感知机。

SVM两种都有(看线性核还是高斯核)。

  • 线性分类器速度快、编程方便,但是可能拟合效果不会很好。
  • 非线性分类器编程复杂,但是效果拟合能力强。

问题 4:BN 和 LN 区别

Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。

区别:

  • LN 中同层神经元输入拥有相同的均值和方差,不同的输入样本有不同的均值和方差;
  • BN 中则针对不同神经元输入计算均值和方差,同一个 batch 中的输入拥有相同的均值和方差。

所以,LN 不依赖于 batch 的大小和输入 sequence 的长度,因此可以用于 batchsize 为 1 和 RNN 中

sequence 的 normalize 操作。

问题 5:讲讲 self attention

Self Attention 与传统的 Attention 机制非常的不同:

传统的 Attention 是基于 source 端和 target 端的隐变量(hidden state)计算 Attention 的,得到的结果是源端的每个词与目标端每个词之间的依赖关系。

但 Self Attention 不同,它分别在 source 端和 target 端进行,仅与 source input 或者 target input 自身相关的 Self Attention,捕捉 source 端或 target 端自身的词与词之间的依赖关系;

然后再把 source 端的得到的 self Attention 加入到 target 端得到的 Attention 中,捕捉 source 端和 target端词与词之间的依赖关系。

因此,self Attention Attention 比传统的 Attention mechanism 效果要好,主要原因之一是,传统的Attention 机制忽略了源端或目标端词与词之间的依赖关系,同时还可以有效获取源端或目标端自身词与词之间的依赖关系。

问题 6:Bert 的预训练过程

Bert 的预训练主要包含两个任务,MLM 和 NSP,Masked Language Model 任务可以理解为完形填空,随机 mask 每一个句子中 15% 的词,用其上下文来做预测;Next Sentence Prediction 任务选择一些句子对 A 与 B,其中 50% 的数据 B 是 A 的下一条句子,剩余 50% 的数据 B 是语料库中随机选择的,学习其中的相关性。

BERT 预训练阶段实际上是将上述两个任务结合起来,同时进行,然后将所有的 Loss 相加。

问题 7:Pre Norm 与 Post Norm 的区别

在同一设置下,Pre Norm(也就是Norm and add)的效果是要优于 Post Norm(Add and Norm)的,但是单独调整的话,Post Norm 的效果是更好的,Pre Norm 结构无形地增加了模型的宽度而降低了模型的深度,Post Norm 每 Norm 一次就削弱一次恒等分支的权重,所以 Post Norm 反而是更突出残差分支的。

问题 8:GPT 与 BERT 的区别

(1) GPT 是单向模型,无法利用上下文信息,只能利用上文;而 BERT 是双向模型。

(2) GPT 是基于自回归模型,可以应用在 NLU 和 NLG 两大任务,而原生的 BERT 采用的基于自编码模型,只能完成 NLU 任务,无法直接应用在文本生成上面。

问题 9:递归有什么特点

函数调用形成栈帧,该函数所定义的所有临时(局部)变量都在该函数的栈帧内进行空间开辟。函数返回时自动释放该函数的栈帧结构。

不合法的递归容易产生栈溢出。合法的递归是有限次的。

问题 10:解决哈希碰撞的方法

1.开放地址法(再散列法)

开放地执法有一个公式: Hi=(H(key)+di) MOD m i=1,2,…,k(k<=m-1)

其中,m 为哈希表的表长;di 是产生冲突的时候的增量序列。

  • 如果 di 值可能为 1,2,3,…m-1,称线性探测再散列。
  • 如果 di 取1,则每次冲突之后,向后移动1个位置.如果 di 取值可能为 1,-1,2,-2,4,-4,9,-9,16,-16,…kk,-kk(k<=m/2),称二次探测再散列。
  • 如果 di 取值可能为伪随机数列。称伪随机探测再散列。

2.再哈希法 Rehash

当发生冲突时,使用第二个、第三个、哈希函数计算地址,直到无冲突时。

这种方法是同时构造多个不同的哈希函数:

Hi=RH1(key) i=1,2,…,k

当哈希地址 Hi=RH1(key)发生冲突时,再计算 Hi=RH2(key)……,直到冲突不再产生。

这种方法不易产生聚集,但增加了计算时间。

3 .链地址法(拉链法)

将所有关键字为同义词的记录存储在同一线性链表中,基本思想就是,将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行。链地址法适用于经常进行插入和删除的情况。

4.建立一个公共溢出区

假设哈希函数的值域为 [0,m-1], 则设向量 HashTable [0…m-1] 为基本表,另外设立存储空间向量 OverTable[0…v] 用以存储发生冲突的记录。

阅读量:238

点赞量:0

收藏量:0