⑴ Siamese Network 孪生网络简介
“匹配”这类任务有着很广泛的应用场景,例如NLP中的文本匹配,推荐领域的物品召回等任务。由此,学术界和工业界提出了很多不同的方法和模型来解决匹配问题,大知饥并致力于效果提升。本篇文章介绍一种经典的网络模型Siamese Network(孪生神经网络),该模型能够处理但不局限于“匹配”问题,下面一起来看下。
个人心得:
Wikipedia:
https://en.wikipedia.org/wiki/Siamese_neural_network
Siamese Network的模型架构如图所示。可以看出,该模型的设计思路非常符合“匹配”的直观感受,即将输入pair通过特征变换后进行交叉得到分值(eg. 相似度)。
整个模型可以分为三步:
本节我们以NLP文本匹配任务为例介绍Siamese Network的设计思路。针对文本匹配的Siamese Network设计实例如下图所示。
我们可以看滚返到,模型输入层是待匹配的sentence pair,经过同猛答一个编码器转换后,得到其embedding特征编码向量。进一步,将两个embedding向量进行交互组合,最后送入全连接层得到分类预测结果。其实抽象出来,在文本匹配任务中,Siamese Network可以拆解为,将输入转换到同一个特征空间,然后进行向量交互匹配(类似于余弦相似度),最后进行特征变换使得模型能够学习到针对不同任务的不同参数。
本文我们介绍了孪生神经网络Siamese Network的设计思路和原理,并结合文本匹配来进行阐述。Siamese Network原理简单,适用范围广,可以作为很多场景的一个不错的baseline模型。
⑵ 如何理解人工智能神经网络中的权值共享问题
权值(权重)共享这个词是由LeNet5模型提出来的。以CNN为例,在对一张图偏进行卷积的过程中,使用的是同一个卷积核的参数。比如一个3×3×1的卷积核,这个卷积核内9个的参数被整张图共享,而不会因为图像内位置的不同而改变卷积核内的权系数。说的再直白一些,就是用一个卷积核不改变其内权系数的情况下卷积处理整张图片(当然CNN中每一层不会只有一个卷积核的,这样说只是为了方便解释而已)。
⑶ ENAS:首个权值共享的神经网络搜索方法,千倍加速 | ICML 2018
论文: Efficient Neural Architecture Search via Parameter Sharing
神经网络结构搜索(NAS)目前在图像分类的模型结构设计上有很大的成果,但十分耗时,主要花在搜索到的网络(child model)的训练。论文的主要工作是提出 Efficient Neural Architecture Search (ENAS),强制所有的child model进行权重共享,避免从零开始训练,从而达到提高效率的目的。虽然不同的模型使用不同的权重,但从迁移学习和多任务学习的研究结果来看,将当前任务的模型A学习到的参数应用于别的任务的模型B是可行的。从实验看来,不仅共享参数是可行的,而且能带来很强的表现,实验仅用单张1080Ti,相对与NAS有1000x倍加速
NAS的搜索结果可以看作是大图中的子图,可以用单向无环图(DAG)来表示搜索空间,每个搜索的结构可以认为是图2的DAG一个子网。ENAS定义的DAG为所有子网的叠加,其中每个节点的每种计算类型都有自己的参数,当特定的计算方法激活时,参数才使用。因此,ENAS的设计允许子网进行参数共享,下面会介绍具体细节
为了设计循环单元(recurrent cell),采用 节点的DAG,节点代表计算类型,边代表信息流向,ENAS的controller也是RNN,主要定义:1) 激活的边 2) 每个节点的计算类型。在NAS(Zoph 2017),循环单元的搜索空间在预先定义结构的拓扑结构(二叉树)上,仅学习每个节点的计算类型,而NAS则同时学习拓扑结构和计算类型,更灵活
为了创建循环单元,the controller RNN首先采样 个block的结果,取 , 为当前单元输入信息(例如word embedding), 为前一个time step的隐藏层输出,具体步骤如下:
注意到每对节点( )都有独立的参数 ,根据选择的索引决定使用哪个参数,因此,ENAS的所有循环单元能同一个共享参数集合。论文的搜索空间包含指数数量的配置,假设有N个节点和4种激活函数,则共有 种配置
ENAS的controller为100个隐藏单元的LSTM,通过softmax分类器以自回归(autoregressive fashion)的方式进行选择的决定,上一个step的输出作为下一个step的输入embedding,controller的第一个step则接受空embedding输入。学习的参数主要有controller LSTM的参数 和子网的共享权重 ,ENAS的训练分两个交叉的阶段,第一阶段在完整的训练集上进行共享权重 学习,第二阶段训练controller LSTM的参数
固定controller的策略 ,然后进行 进行随机梯度下降(SGD)来最小化交叉熵损失函数的期望 , 为模型 在mini-batch上的交叉熵损失,模型 从 采样而来
梯度的计算如公式1, 上从 采样来的,集合所有模型的梯度进行更新。公式1是梯度的无偏估计,但有一个很高的方差(跟NAS一样,采样的模型性能差异),而论文发现,当 时,训练的效果还行
固定 然后更新策略参数 ,目标是最大化期望奖励 ,使用Adam优化器,梯度计算使用Williams的REINFORCE方法,加上指数滑动平均来降低方差, 的计算在独立的验证集上进行,整体基本跟Zoph的NAS一样
训练好的ENAS进行新模型构造,首先从训练的策略 采样几个新的结构,对于每个采样的模型,计算其在验证集的minibatch上的准确率,取准确率最高的模型进行从零开始的重新训练,可以对所有采样的网络进行从零训练,但是论文的方法准确率差不多,经济效益更大
对于创建卷积网络,the controller每个decision block进行两个决定,这些决定构成卷积网络的一层:
做 次选择产生 层的网络,共 种网络,在实验中,L取12
NASNet提出设计小的模块,然后堆叠成完整的网络,主要设计convolutional cell和rection cell
使用ENAS生成convolutional cell,构建B节点的DAG来代表单元内的计算,其中node 1和node 2代表单元输入,为完整网络中前两个单元的输出,剩余的 个节点,预测两个选择:1) 选择两个之前的节点作为当前节点输入 2) 选择用于两个输入的计算类型,共5种算子:identity, separable convolution with kernel size 3 × 3 and 5 × 5, and average pooling and max pooling with kernel size 3×3,然后将算子结果相加。对于 ,搜索过程如下:
对于rection cell,可以同样地使用上面的搜索空间生成: 1) 如图5采样一个计算图 2) 将所有计算的stride改为2。这样rection cell就能将输入缩小为1/2,controller共预测 blocks
最后计算下搜索空间的复杂度,对于node i ,troller选择前 个节点中的两个,然后选择五种算子的两种,共 种坑的单元。因为两种单元是独立的,所以搜索空间的大小最终为 ,对于 ,大约 种网络
节点的计算做了一点修改,增加highway connections,例如 修改为 ,其中 , 为elementwise乘法。搜索到的结果如图6所示,有意思的是:1) 激活方法全部为tanh或ReLU 2) 结构可能为局部最优,随机替换节点的激活函数都会造成大幅的性能下降 3) 搜索的输出是6个node的平均,与mixture of contexts(MoC)类似
单1080Ti训练了10小时,Penn Treebank上的结果如表1所示,PPL越低则性能越好,可以看到ENAS不准复杂度低,参数量也很少
表2的第一块为最好的分类网络DenseNet的结构,第二块为ENAS设计整个卷积网络的结果(感觉这里不应有micro search space),第三块为设计单元的结果
全网络搜索的最优结构如图7所示,达到4.23%错误率,比NAS的效果要好,大概单卡搜索7小时,相对NAS有50000x倍加速
单元搜索的结构如图8所示,单卡搜索11.5小时, ,错误率为3.54%,加上CutOut增强后比NASNet要好。论文发现ENAS搜索的结构都是局部最优的,修改都会带来性能的降低,而ENAS不采样多个网络进行训练,这个给NAS带来很大性能的提升
NAS是自动设计网络结构的重要方法,但需要耗费巨大的资源,导致不能广泛地应用,而论文提出的 Efficient Neural Architecture Search (ENAS),在搜索时对子网的参数进行共享,相对于NAS有超过1000x倍加速,单卡搜索不到半天,而且性能并没有降低,十分值得参考
⑷ 文稿匹配是什么意思
文本匹配:
1. 概述
文本匹配,旨在研究两段文本之间的关系。常用于文本语义相似度(Semantic Textual Similarity & Paraphrase Identification)、问答匹配、自然语言推理(Natural Language Inference/ Recognizing Textual Entailment)、信息检索(Information Retrieval)等领域。
常见的文本匹配策略分为两种:表示式(Representation-Based)和交互式(Interaction-Based)。
表示式策略基于孪生神经网络(Siamese Network)架构,两个主干网络共享权重,在起始阶段,即对两段文本进行独立处理。首先,在统一的语义空间中,基于神经网络对两段文本各自计算其表征(语义向量);而后,基于得到的文本表征,来计算两段文本的相似度。
这样得到的单句文本表征,不会随着句子对(sentence pair)的变陪散化而变化,因此只需一次计算,即可离线判枣存储文本的表征。两个极芦冲氏具代表性的工作为DSSM、Sentence-BERT。
⑸ 人工智能CNN卷积神经网络如何共享权值
首先权值共享就是滤波器共享,滤波器的参数是固定的,即是用相同的滤波器去扫一遍图像,提取一次特征特征,得到feature map。在卷积网络中,学好了一个滤波器,就相当于掌握了一种特征,这个滤波器在图像中滑动,进行特征提取,然后所有进行这样操作的区域都会被采集到这种特征,就好比上面的水平线。
⑹ JUST技术:基于时空孪生神经网络的轨迹识别
JUST团队-任慧敏 JUST时空数据
轨迹识别问题旨在验证传入的轨迹是否是由所要求的人员产生, 即给定一组单独的人员历史轨迹(例如行人,出租车司机)以及由特定人员生成 的一组新轨迹,判定两组轨迹是否由同一个人员生成。这个问题在许多实际应用中都很重要,例如出租车驾驶人员身份认证、汽车保险公司风险分析以及危险驾驶识别等。轨迹识别的现有工作除了需要轨迹数据之外,还需要其他来源的数据,如传感器、摄像头等,但这些数据无法普遍获得且成本较高。此外,目前的工作只能局限于已有的人员身份识别,无法扩展至未经训练的人员。为了应对这些挑战,在这项工作中,我们首次尝试通过提出一种新颖而有效的框架时空孪生网络(ST-SiameseNet),仅从观察到的轨迹数据匹配人员身份。对于每个人员,我们从他们的轨迹中提取特征,来预测每个人轨迹的羡老帆相似性。
一、问题背景
线上打车在现代社会越来越多地被应用,甚至说成为主流。根据纽约出租车协会数据显示(图1),截止2020年6月,纽约市每天有超过10万人次使用打车服务,线上打车服务占比超过70%。然而,随着行业从业人员的增加,从业人员就显得鱼龙混杂,经常会有安全事故被报道(图2)。尽管现在的平台会对司机进行实名认证,但仍会发生李代桃僵的事情。
如图3所示,除了出租车安全认证之外,这项技术在汽车的保险行业也有着发展前景,比如投保人与肇事者是否是同一人,或者该驾驶员是否有危险驾驶行为,例如酒驾,等等。于是我们提出了“Human Mobility Signature Identification”,即通过轨迹信息的挖掘,进而分析驾驶人的驾驶行为,最终判断驾驶人是否是同一人。
驾驶人员身份识别问题有很多相关工作,然而前期工作仍存在诸多问题,1)很多工作在识别司机的身份时,除GPS轨迹之外还需要额外的数据,例如车载的摄像机,方向盘和刹车的传感器等,这类数据成本高昂,很难普遍获取。2)一些工作利用传统的聚类或者多分类模型去识别司机身份,但这类方法识别数量有限,无法满足现实中识别百万级司机身份的需要。3)含友就我们所知,前期工作普遍存在泛化性不足的问题,模型面对训练集外的司机往往束手无策。
基于以上问题,我们提出了基于时空孪生神经网络的轨迹识别模型。该模型只依赖于GPS轨迹信息,可处理大规模驾驶员的识别问题,兄雹并且有较强的泛化能力,可识别未在训练集出现的驾驶员身份。
二、背景知识
首先,我们介绍一些相关的背景知识。我们提出了基于时空孪生神经网络的轨迹识别模型(ST-SiameseNet),那么什么是Siamese Network呢?Siamese是“孪生,连体”的意思,SiameseNetwork就如同字面的意思,是孪生神经网络,这一过程是通过共享权重实现的。将两个实体输入到同一个神经网络中,随后映射到新的空间,从而计算两个输入的相似度,从而判断二者是否属于同一个实体。基本模型框架如图4所示:
之所以将孪生神经网络引用至我们的模型,是因为其适合用于大规模实体的相似度判断。其学习的内容是实体间的相似度,因此未被训练过的数据仍然可以被拿来判断是否相似。
孪生神经网络已经解决了上述的后两个问题,即分类数量和泛化性。那么接下来就要解决第一个问题,数据成本。我们采用了易于获得的GPS行驶轨迹作为数据源。每个GPS点由经纬度和时间构成,一条轨迹则由一组GPS点构成。轨迹数据具有很强的时序性,因此我们引入LSTM来学习轨迹特征。为进一步挖掘轨迹数据的特征,我们从GPS数据中提取出司机的个人偏好,如最经常出现的位置、出发及结束时间、平均路程长度等等。与此同时,我们根据驾驶轨迹的状态,将轨迹分为了两类,例如出租车轨迹可分为载客轨迹与空车轨迹,私家车轨迹可分为上下班通勤以及日常生活轨迹等。
三、解决方案
在模型实现中,我们将出租车司机身份识别作为应用。GPS数据采自于2016年7月深圳出租车行驶记录,我们共筛选出2197位司机在10个工作日的GPS数据。
图5展示了我们模型的基本流程。首先,我们将获得的GPS数据转化为一个个对应的格子,使得经纬度信息转化为更适合计算机处理的x,y坐标及对应的时间ID。而后,我们根据出租车是否载客将出租车轨迹分为载客轨迹与空车轨迹,并且从轨迹中提取了司机的个人偏好,如经常出现的位置、出车收车时间、平均寻客路程及时间、平均载客路程及时间、每日接单数量等。
为识别出租车司机身份,需要对一名司机两天的轨迹或者两名司机一天的轨迹进行比较,用以判断这些轨迹是否产生于同一个人。为此,我们选取了一个工作日内的5条空车轨迹和5条载客轨迹,这个数据的选择覆盖了所收集的司机的情况。图6显示了ST-SiameseNet模型具体框架:
从整体来看,模型目的在于判断两天的轨迹是否属于同一个司机,所以在模型输入中等概率的选择同一个司机不同天,或者不同司机不同天的数据,即输入数据的正负样本概率相同。
区别于传统孪生神经网络只共享一个神经网络,我们将其扩展至共享三个神经网络,即LSTMD,LSTMs和FCN。前两个模块分别学习载客轨迹和空车轨迹特征,FCN模块学习司机行为偏好。由此,我们得到6个embedding对应模型的6个输入。最后,通过embeddings后经由全卷积网络获得非相似度。其中数值越接近1,不是同一人的可能性越大。
四、实验结果
我们在2197名司机10天的轨迹数据上验证了方法的有效性。表1在对比不同模型中,我们采用了500位司机的前5天作为训练数据,另外的197位司机的后5天作为测试数据,保证了数据的充足性和独立性。
对于SVM,由于无法输入轨迹信息,所以输入数据为司机个人偏好特征信息,经过绝对值相减后输入SVM,获得非相似度。对于FNN,区别在于是否包含个人偏好特征,两个输入GPS数据连接成一个大的数据输入FCN中,获得非相似度。这个对比旨在获取神经网络在提取特征方面的能力。对于Naïve Siamese,与我们提出的模型相比,只有一个FCN网络,而输入的GPS数据首尾相连组成一个长数据,通过FCN和embeddings后得到非相似度。
最后对比结果可以看到,我们提出的模型结构在各个指标上都有着优异的表现。而在同类模型的对比中,加入个人偏好的模型要比不加入偏好的模型性能表现要好,这也证明了除去轨迹特征外,司机的个人偏好对于相似度识别也有贡献。
此外,我们对模型泛化能力,也进行了轨迹天数与司机数量两方面的测试。图7是固定了500位司机,以工作日为变量的结果;图8是固定为5天的工作量,以司机数量为变量的结果。以图7为例,所有的数据集总共包含697位司机10个工作日的轨迹数据,其中500名司机作为训练集,197名司机为验证和测试集,假设训练集采用了头3天的数据做训练,那么验证集和测试集则使用剩余的后7天作为测试,以此类推。图8逻辑同理。
从上面的两幅图可以看出,随着训练天数和训练人数的增加,模型的泛化能力得到了提升,有效的避免了过拟合的问题。而且模型性能的拐点分别出现在5天的训练天数和500位司机的训练数量,之后的测试集结果增长不明显。说明500位司机和5个工作日的训练数量就能够获得较好性能的模型。
我们还进一步对比了轨迹运行模式与司机偏好特征对模型的影响。首先对比了运行模式对模型的影响,图9展示了不同运行模式下的测试准确率,粉色线包含了空车模式和载客模式,灰线仅包含了空车模式,黄线仅包含了载客模式。可以看出即使只包含有单一的运行模式,在一定程度上能够判断轨迹是否属于同一位司机。空车模式轨迹的准确率普遍高于载客模式轨迹的准确率,这与人的直觉是一致的,因为载客时司机无法选择目的地,而空车时不同司机会有不同的策略寻找乘客,因此可以更好的体现司机的特征。当两种运行模型同时作用于模型时,我们得到了最好的结果(粉色线)。与图7图8趋势一致,随着司机数量及训练天数的增加,模型的测试准确率有了提高。
图10对比了司机个人偏好在模型训练中的作用。红色线展示了轨迹数据及个人偏好作为输入时的测试集准确率,棕色线展示了只有轨迹数据的测试准确率,紫色线代表只有个人偏好特征作为输入的测试准确率。同图7图8趋势一致,随着司机数量及训练天数的增加,模型的测试准确率有了提高。在对比三种输入中,我们发现如果只使用司机的个人偏好特征作为输入,模型得到了较差的结果,这说明高度抽象的特征虽然在一定程度上可以识别司机,但也损失了很多其他有效信息。而单纯使用轨迹数据作为输入(棕色线),其准确率仍低于我们的模型(红色线),很可能是因为模型在处理轨迹数据时,很难获取全局的统计信息,比如平均寻客路程与时间,平均载客路程及时间等。当轨迹信息与个人偏好特征结合起来时,我们的模型得到了最优结果。
论文原文链接:https://www.aminer.cn/pub/5f03f3b611dc830562232050?conf=kdd2020
论文源码:https://github.com/huiminren/ST-SiameseNet
参考文献:
[1] Taxi, Uber, andLyft Usage in New York City. http://toddwschneider.com/posts/taxi-uber-lyft-usage-new-york-city/.
[2] A. MARSHALL. Uber’s New Features Put aFocus on Rider Safety . https://www.wired.com/story/ubers-new-features-focus-rider-safety/, 09 2019 .
鸣谢:
AITIME论道 对论文解析的初次整理
⑺ 一文看懂四种基本的神经网络架构
原文链接:
http://blackblog.tech/2018/02/23/Eight-Neural-Network/
更多干货就在我的个人博客 http://blackblog.tech 欢迎关注
刚刚入门神经网络,往往会对众多的神经网络架构感到困惑,神经网络看起来复杂多样,但是这么多架构无非也就是三类,前馈神经网络,循环网络,对称连接网络,本文将介绍四种常见的神经网络,分别是CNN,RNN,DBN,GAN。通过这四种基本的神经网络架构,我们来对神经网络进行一定的了解。
神经网络是机器学习中的一种模型,是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
一般来说,神经网络的架构可以分为三类:
前馈神经网络:
这是实际应用中最常见的神经网络类型。第一层是输入,最后一层是输出。如果有多个隐藏层,我们称之为“深度”神经网络。他们计算出一系列改变样本相似性的变换。各层神经元的活动是前一层活动的非线性函数。
循环网络:
循环网络在他们的连接图中定向了循环,这意味着你可以按照箭头回到你开始的地方。他们可以有复杂的动态,使其很难训练。他们更具有生物真实性。
循环网络的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。
循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
对称连接网络:
对称连接网络有点像循环网络,但是单元之间的连接是对称的(它们在两个方向上权重相同)。比起循环网络,对称连接网络更容易分析。这个网络中有更多的限制,因为它们遵守能量函数定律。没有隐藏单元的对称连接网络被称为“Hopfield 网络”。有隐藏单元的对称连接的网络被称为玻尔兹曼机。
其实之前的帖子讲过一些关于感知机的内容,这里再复述一下。
首先还是这张图
这是一个M-P神经元
一个神经元有n个输入,每一个输入对应一个权值w,神经元内会对输入与权重做乘法后求和,求和的结果与偏置做差,最终将结果放入激活函数中,由激活函数给出最后的输出,输出往往是二进制的,0 状态代表抑制,1 状态代表激活。
可以把感知机看作是 n 维实例空间中的超平面决策面,对于超平面一侧的样本,感知器输出 1,对于另一侧的实例输出 0,这个决策超平面方程是 w⋅x=0。 那些可以被某一个超平面分割的正反样例集合称为线性可分(linearly separable)样例集合,它们就可以使用图中的感知机表示。
与、或、非问题都是线性可分的问题,使用一个有两输入的感知机能容易地表示,而异或并不是一个线性可分的问题,所以使用单层感知机是不行的,这时候就要使用多层感知机来解决疑惑问题了。
如果我们要训练一个感知机,应该怎么办呢?
我们会从随机的权值开始,反复地应用这个感知机到每个训练样例,只要它误分类样例就修改感知机的权值。重复这个过程,直到感知机正确分类所有的样例。每一步根据感知机训练法则来修改权值,也就是修改与输入 xi 对应的权 wi,法则如下:
这里 t 是当前训练样例的目标输出,o 是感知机的输出,η 是一个正的常数称为学习速率。学习速率的作用是缓和每一步调整权的程度,它通常被设为一个小的数值(例如 0.1),而且有时会使其随着权调整次数的增加而衰减。
多层感知机,或者说是多层神经网络无非就是在输入层与输出层之间加了多个隐藏层而已,后续的CNN,DBN等神经网络只不过是将重新设计了每一层的类型。感知机可以说是神经网络的基础,后续更为复杂的神经网络都离不开最简单的感知机的模型,
谈到机器学习,我们往往还会跟上一个词语,叫做模式识别,但是真实环境中的模式识别往往会出现各种问题。比如:
图像分割:真实场景中总是掺杂着其它物体。很难判断哪些部分属于同一个对象。对象的某些部分可以隐藏在其他对象的后面。
物体光照:像素的强度被光照强烈影响。
图像变形:物体可以以各种非仿射方式变形。例如,手写也可以有一个大的圆圈或只是一个尖头。
情景支持:物体所属类别通常由它们的使用方式来定义。例如,椅子是为了让人们坐在上面而设计的,因此它们具有各种各样的物理形状。
卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。
卷积神经网络由三部分构成。第一部分是输入层。第二部分由n个卷积层和池化层的组合组成。第三部分由一个全连结的多层感知机分类器构成。
这里举AlexNet为例:
·输入:224×224大小的图片,3通道
·第一层卷积:11×11大小的卷积核96个,每个GPU上48个。
·第一层max-pooling:2×2的核。
·第二层卷积:5×5卷积核256个,每个GPU上128个。
·第二层max-pooling:2×2的核。
·第三层卷积:与上一层是全连接,3*3的卷积核384个。分到两个GPU上个192个。
·第四层卷积:3×3的卷积核384个,两个GPU各192个。该层与上一层连接没有经过pooling层。
·第五层卷积:3×3的卷积核256个,两个GPU上个128个。
·第五层max-pooling:2×2的核。
·第一层全连接:4096维,将第五层max-pooling的输出连接成为一个一维向量,作为该层的输入。
·第二层全连接:4096维
·Softmax层:输出为1000,输出的每一维都是图片属于该类别的概率。
卷积神经网络在模式识别领域有着重要应用,当然这里只是对卷积神经网络做了最简单的讲解,卷积神经网络中仍然有很多知识,比如局部感受野,权值共享,多卷积核等内容,后续有机会再进行讲解。
传统的神经网络对于很多问题难以处理,比如你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNN能够对任何长度的序列数据进行处理。
这是一个简单的RNN的结构,可以看到隐藏层自己是可以跟自己进行连接的。
那么RNN为什么隐藏层能够看到上一刻的隐藏层的输出呢,其实我们把这个网络展开来开就很清晰了。
从上面的公式我们可以看出,循环层和全连接层的区别就是循环层多了一个权重矩阵 W。
如果反复把式2带入到式1,我们将得到:
在讲DBN之前,我们需要对DBN的基本组成单位有一定的了解,那就是RBM,受限玻尔兹曼机。
首先什么是玻尔兹曼机?
[图片上传失败...(image-d36b31-1519636788074)]
如图所示为一个玻尔兹曼机,其蓝色节点为隐层,白色节点为输入层。
玻尔兹曼机和递归神经网络相比,区别体现在以下几点:
1、递归神经网络本质是学习一个函数,因此有输入和输出层的概念,而玻尔兹曼机的用处在于学习一组数据的“内在表示”,因此其没有输出层的概念。
2、递归神经网络各节点链接为有向环,而玻尔兹曼机各节点连接成无向完全图。
而受限玻尔兹曼机是什么呢?
最简单的来说就是加入了限制,这个限制就是将完全图变成了二分图。即由一个显层和一个隐层构成,显层与隐层的神经元之间为双向全连接。
h表示隐藏层,v表示显层
在RBM中,任意两个相连的神经元之间有一个权值w表示其连接强度,每个神经元自身有一个偏置系数b(对显层神经元)和c(对隐层神经元)来表示其自身权重。
具体的公式推导在这里就不展示了
DBN是一个概率生成模型,与传统的判别模型的神经网络相对,生成模型是建立一个观察数据和标签之间的联合分布,对P(Observation|Label)和 P(Label|Observation)都做了评估,而判别模型仅仅而已评估了后者,也就是P(Label|Observation)。
DBN由多个限制玻尔兹曼机(Restricted Boltzmann Machines)层组成,一个典型的神经网络类型如图所示。这些网络被“限制”为一个可视层和一个隐层,层间存在连接,但层内的单元间不存在连接。隐层单元被训练去捕捉在可视层表现出来的高阶数据的相关性。
生成对抗网络其实在之前的帖子中做过讲解,这里在说明一下。
生成对抗网络的目标在于生成,我们传统的网络结构往往都是判别模型,即判断一个样本的真实性。而生成模型能够根据所提供的样本生成类似的新样本,注意这些样本是由计算机学习而来的。
GAN一般由两个网络组成,生成模型网络,判别模型网络。
生成模型 G 捕捉样本数据的分布,用服从某一分布(均匀分布,高斯分布等)的噪声 z 生成一个类似真实训练数据的样本,追求效果是越像真实样本越好;判别模型 D 是一个二分类器,估计一个样本来自于训练数据(而非生成数据)的概率,如果样本来自于真实的训练数据,D 输出大概率,否则,D 输出小概率。
举个例子:生成网络 G 好比假币制造团伙,专门制造假币,判别网络 D 好比警察,专门检测使用的货币是真币还是假币,G 的目标是想方设法生成和真币一样的货币,使得 D 判别不出来,D 的目标是想方设法检测出来 G 生成的假币。
传统的判别网络:
生成对抗网络:
下面展示一个cDCGAN的例子(前面帖子中写过的)
生成网络
判别网络
最终结果,使用MNIST作为初始样本,通过学习后生成的数字,可以看到学习的效果还是不错的。
本文非常简单的介绍了四种神经网络的架构,CNN,RNN,DBN,GAN。当然也仅仅是简单的介绍,并没有深层次讲解其内涵。这四种神经网络的架构十分常见,应用也十分广泛。当然关于神经网络的知识,不可能几篇帖子就讲解完,这里知识讲解一些基础知识,帮助大家快速入(zhuang)门(bi)。后面的帖子将对深度自动编码器,Hopfield 网络长短期记忆网络(LSTM)进行讲解。
⑻ 从Siamse孪生网络到Sentence-BERT综述
文兄空本匹配一直是自然语言处理(NLP)领域一个基础且重要的方向,一般研究两段文本之间的关系。文本相似度计算、自然语言推理、问答系统、信息检索等,都可以看作针对不同数据和场景的文本匹配应用。
最近,我和小伙伴们参与了阿里天池““新冠疫情相似句对判定大赛”,比赛任务:根据真实场景下疫情相关的肺炎、支原体肺炎等患者提问句对,识别相似的患者问题,就是典型的文本相似匹配应用。 截止3月18日,我们团队在942支参赛队伍中排名第四。
借助比赛的机会,我重新系统梳理、总结了文本匹配的经验方法。本文将着重介绍文本匹配任务中的经典网络Siamse Network,它和近期预训练语言模型的组合使用,一些论文提及的调优技巧以及在此次比赛数据集上的效果检验等。
在正式开始介绍之前,我们先来看一个有趣的故事: 孪生网络的由来!
“Siamse”中的“Siam”袭尘森是古时泰国的称呼,中文译作暹罗,所以“Siamese”就是指“暹罗”人或“泰国”人。而“Siamese”在英语中是“孪生”的意思,这又是为什么呢?请看下图
十九世纪,泰国出生了一对连体婴儿“恩”和“昌”,当时的医学技术无法使两人分离出来,于是两人顽强地生活了一生。1829年他们被英国商人发现,进入马戏团,在全世界各地演出,1839年他们访问美国北卡罗莱那州成为“玲玲马戏团” 的台柱,最后成为美国公民。1843年4月13日跟英国一对姐妹结婚,恩生了10个小孩,昌生了12个。1874年,两人因病均于63岁离开了人间。他们的肝至今仍保存在费城的马特博物馆内。从此之后“暹罗双胞胎”(Siamese twins)就成了连体人的代名词,也因为这对双胞胎全世界开始重视这项特殊疾病。
由于结构具有鲜明的对称性,就像两个孪生兄弟,所以下图这种神经网络结构被研究人员称作“Siamese Network”,即孪生网络。
其中最能体现“孪生”的地方,在于网络具有相同的编码器(sentence encoder),即将文本转换为高维向量的部分(词嵌入)。网络随后对两段文本的特征进行交互,最后完成分类/相似预测。“孪生网络”结构简单,训练稳定,是很多文本任务不错的baseline模型。
孪生网络的具体用途是衡量两个输入文本的相似程度。例如,现在我们有两个文本 text1 和 text2,首先将文本分别输入 sentence encoder 进行特征提取和编码,将输入映射到新的空间得到特征向量 u和v;最终通过u、v的拼接组合,经过下游网络(比如全连接网络mlp)和激活函数来计算文本1和2的相似性。
整个过程有2个值得关注的点:
(1)在训练和测试过程中, 模型的编码器(sentence encoder)部分是权重共拍亩享的 ,这也是“孪生”一词的体现之处。编码器的选择非常广泛,传统的CNN、RNN和Attention、Transformer都可以。
(2)得到特征u、v后,可以直接使用距离公式,如cosine距离、欧式距离等得到两个文本的相似度。不过更通用的做法是,基于u和v构建用于建模两者匹配关系的特征向量,然后用额外的模型(mlp等)来学习通用的文本关系函数映射;毕竟我们的场景不一定只是衡量相似性,可能还有问答、蕴含等复杂任务。
基于孪生网络,还有人提出了 Triplet network 三连体网络。顾名思义,输入由三部分组成,文本1,和1相似的文本2,和1不相似的文本3。训练的目标非常朴素,期望让相同类别间的距离尽可能的小,让不同类别间的距离尽可能的大,即减小类内距,增大类间距。
自从2018年底Bert等预训练语言模型横空出世,NLP届的游戏规则某种程度上已经被大大更改了。在计算资源允许的条件下,Bert成为很多问题的优先选择;甚至有的时候,拿Bert跑一跑baseline,发现问题已经被解决了十之八九。
但是Bert的缺点也很明显,1.1亿参数量(base版本)使得预测、推理速度明显比CNN等传统网络慢了不止一个量级,对资源要求更高,也不适合处理某些任务。例如,从10000条句子中找到最相似的一对句子,由于可能的组合众多,需要完成49,995,000次推理计算;在一块现代V00GPU上使用Bert计算,将消耗65小时。
考虑到孪生网络的简洁有效,有没有可能将它和Bert强强联合取其精华呢?
当然可以,这正是论文 《Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks》 的工作,首次提出了 Sentence-Bert模型(以下简称SBert) 。SBert在众多文本匹配工作中(包括语义相似性、推理等)都取得了最优结果。更让人惊讶的是,前文所述的从10000条句子找最相似pair的任务,SBert仅需5秒就能完成!
让我们简短回顾此前Bert是怎么处理文本匹配任务的。
常规做法是将匹配任务转换成二分类任务(相似/不相似)。输入的两个文本拼接成一个序列(中间用一个特殊的符号“SEP”分割),经过12层(base-model)或24层(large-model)的multi-head Transformer模块编码后,将输出层的字向量取平均或者取第一个token位置“CLS”的特征作为句向量,经softmax完成最终分类。
但是论文作者 Nils Reimers 在实验中指出,这样的做法产生的结果并不理想(至少在处理语义检索和聚类问题时是如此),甚至往往比Glove词向量取平均的效果还差。
为了让Bert更好地利用文本信息,作者们在论文中提出了如下的SBert模型结构。是不是非常眼熟?对,这不就是之前见过的孪生网络嘛!
SBert沿用了孪生网络的结构,文本的encoder部分用同一个Bert来处理。之后,作者分别实验了CLS-token和2种池化策略(Avg-Pooling、Mean-Pooling),对Bert输出的字向量进行进一步特征提取、压缩,得到u、v。最后的u、v整合,作者提供了3种策略:
(1)针对分类任务,对u、v拼接组合,最后接入一个mlp网络,使用softmax进行分类输出,损失函数使用交叉熵;
(2)直接计算、输出余弦相似度;训练损失函数采取了均方根误差;
(3)如果输入的是三元组,论文种也给出了相应的损失函数。
总的来说,SBert直接使用Bert的原始权重进行初始化,在具体数据集上微调,训练过程和传统Siamse Network差异不大。但是这种训练方式能让Bert更好的捕捉句子之间的关系,生成更优质的句向量。在评估测试阶段,SBert直接使用余弦相似度来比较两个句向量之间的相似度,极大提升了推理速度。
有实验为证!作者在7个文本匹配相关的任务上做了对比实验,结果在其中的5个任务上,SBert都有更优表现。
此外,作者还做了一些有趣的消融实验。使用NLI和STS为代表的匹配数据集,在进行分类目标函数训练时,作者们测试了不同的整合策略,结果显示“(u, v, |u-v|)”的组合效果最好,这里面最重要的组成部分是元素差: (|u - v|) 。句向量之间的差异度量了两个句子嵌入的维度间的距离,确保相似的对更近,而不同的对更远。
此外,在Pool方法中,平均池化的效果要比另两种方法更好。
完善的实验过程帮助我们避免了不少坑。文章最后,作者对SBert和传统的一些句嵌入方法做了对比,SBert的计算效率要更高一些。其中的smart-batching是论文中的一个小trick,先将输入的文本按长度排序,这样同一个mini-batch的文本长度更加统一,padding填充处理时能显着减少填充的token。
我们将SBert模型在本次比赛的数据集上做了测试。使用数据增强后,线下的训练集和验证集数量分别是13,500和1000条句子组合。预训练模型权重选择的是roberta_wwm_large,训练过程中加入了对抗训练,通过在embedding层额外增加一些噪声点提升模型的泛化能力。
最终SBert单模型在线下验证集上的准确率是95.7%。直接使用Bert微调的方式,准确率为95.3%。
总的来说,我们做这次比赛的目的是为了积累更多的经验,尽可能将学术界的前沿算法和工业界结合,从而更好的将相关技术在实际项目中落地。
本文总体介绍了文本匹配任务中常用的网络结构Siamse Network,以及在此基础上改进而来的Sentence-BERT模型。
Siamse Network 简洁的设计和平稳高效训练非常适合作为文本匹配任务的baseline模型,包括不限于问答对话、文本蕴含、文本相似等任务;如果孪生网络不能有效解决,可以再尝试其他更复杂的模型。SBert则充分利用了孪生网络的优点和预训练语言模型强大的特征抽取优势,在众多匹配任务上取得了最优实验结果。
抛开具体任务不谈,SBert 可以帮助我们生成更好的句向量,在一些任务上可能产生更优结果。在推理阶段,SBert直接计算余弦相似度的方式,大大缩短了预测时间;在语义检索、信息搜索等任务中预计会有不错表现。同时, 得益于生成的高质量句嵌入特征,SBert也非常适合做文本聚类、新FAQ发现等工作。