深度学习与计算机视觉(PB-07)-优化算法
在之前的章节中,我们只研究和使用了随机梯度下降法(SGD)来优化网络模型,但是,在深度学习中还有其他高级的优化算法,这些高级方法可以加速训练过程或者提高准确度:
在可接受的准确度下,高级算法可以减少训练时间(比如更少的迭代次数epochs)。
模型可以更好的适应其他超参数,而不仅仅是学习率。
理想情况下,可以获得比SGD更高的分类准确度。
随着深度学习的不断发展,新的优化技术层出不穷,每一种新的优化技术都试图改进SGD算法,并且可以自适应学习速率。正如我们所知道的,在给定学习率情况下,SGD算法对网络中的所有参数进行同等的优化。但是,考虑到学习率既是优化网络过程中最重要的参数之一,又很难把握学习率的大小。因此,相关学者提出了,随着网络训练的进行,可以自适应地调整学习速率(某些情况下,可能是每一个超参数)的算法。
在本章中,我们将回顾自适应学习率相关算法。
自适应学习率
为了理解本节中的每一种优化算法,我们将用伪代码——特别是更新步骤,来表示。本章的大部分内容来自于Karpathy[26]和Ruder[27]对优化方法的概述文章。在此基础上,对原文描述内容做一定的修改,使内容更易于 ...
深度学习在知识图谱构建中的应用
DeepDive系统在数据处理阶段很大程度上依赖于NLP工具,如果NLP的过程中存在错误,这些错误将会在后续的标注和学习步骤中被不断传播放大,影响最终的关系抽取效果。为了避免这种传播和影响,近年来深度学习技术开始越来越多地在关系抽取任务中得到重视和应用。
深度学习模型介绍
本章主要介绍一种远程监督标注与基于卷积神经网络的模型相结合的关系抽取方法以及该方法的一些改进技术。
Piecewise Convolutional Neural Networks(PCNNs)模型
PCNNs模型由Zeng et al.于2015提出,主要针对两个问题提出解决方案:
针对远程监督的wrong label problem,该模型提出采用多示例学习的方式从训练集中抽取取置信度高的训练样例训练模型。
针对传统统计模型特征抽取过程中出现的错误和后续的错误传播问题,该模型提出用 piecewise 的卷积神经网络自动学习特征,从而避免了复杂的NLP过程。
下图是PCNNs的模型示意图:
PCNNs模型主要包括以下几个步骤:
实验证明,PCNNs + 多实例学习的方法 Top N 上平均值比单纯 ...
深度学习与计算机视觉(PB-06)-模型集成
在本章中,我们将探讨集成方法的概念——多个分类器合并成一个大型元分类器的过程。将多个模型的平均结果最为最终结果,可以比随机的单一模型获得更高的性能(比如准确度)。事实上,几乎你所看到的在ImageNet数据挑战赛上获得最佳的结果都是通过集成多个卷积神经网络结果得到的。
首先,我们将讨论下Jensen不等式,这是集成方法的关键。然后,我们相互独立地训练多个CNN模型,并对每个CNN模型进行评估,最后,将多个训练好的cnn模型融合成一个元分类器,并评估元分类器的性能。
集成方法
集成方法通常指的是训练“大量”的模型(其中‘量’的确切值取决于分类任务),然后通过投票或平均方法将多个模型的输出结果合并成一个结果,以提高分类的准确性。事实上,集成方法并不是专门针对深度学习和卷积神经网络的。一直以来我们使用了很多集成方法,比如AdaBoost[18]和Random forest[19]等技术都是集成方法的典型例子。
比如在随机森林中,我们独立地训练多棵决策树[20,21],并由这些决策树组成一个大森林,最后利用组合得到的森林进行预测。如图6.1所示,随机森林由多棵决策树组成,每棵决策树都会返回一 ...
知识图谱数据构建的“硬骨头”
作为近年来搜索领域和自然语言处理领域的热点,知识图谱正引领着搜索引擎向知识引擎的转变。在阿里的“神马搜索”中,知识图谱及其相关技术的广泛应用不仅能帮助用户找到最想要的信息,更能让用户有意想不到的知识收获。
背景简介
为了不断提升搜索体验,神马搜索的知识图谱与应用团队,一直在不断探索和完善图谱的构建技术。其中,开放信息抽取(Open Information Extraction),或称通用信息抽取,旨在从大规模无结构的自然语言文本中抽取结构化信息。它是知识图谱数据构建的核心技术之一,决定了知识图谱可持续扩增的能力。
本文聚焦于开放信息抽取中的重要子任务——关系抽取,首先对关系抽取的各种主流技术进行概述,而后结合业务中的选择与应用,重点介绍了基于DeepDive的方法,并详述它在神马知识图谱数据构建工作中的应用进展。
关系抽取概述
关系抽取技术分类
现有的关系抽取技术主要可分为三种 :
有监督的学习方法:该方法将关系抽取任务当做分类问题,根据训练数据设计有效的特征,从而学习各种分类模型,然后使用训练好的分类器预测关系。该方法的问题在于需要大量的人工标注训练语料,而语料标注工作通常非常 ...
Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification
关系分类在自然语言处理时一个很重要的语义处理任务,目前state-of-the-art的系统非常依赖于词汇量,例如WordNet等,还有一个问题是重要的信息不知道在句子中的什么位置。因此,本文提出基于attention构建双向LSTM网络(attention-based bidirectional long short-term memory networks (att-BLSTM)),用于capture句子中的重要信息。并从作者的实验中可以看出,性能较好,而且需要注意的是该论文的模型没有使用任何的基于词汇构造而成的特征,仅仅依赖于词向量。
主要内容
model
可以从图中看到,该论文在处理模型之前,也做了词向量跟位置向量的处理,模型结构如下图所示:
这里我们主要简单说明下每一层的作用:
1.输入层:将原始句子输入该层
2.embedding层:将每一个单词映射到一个低维向量
3.LSTM层:利用BLSTM模型从step(2)中得到高级特征
4.attention层:产生一个权重向量,并与LSTM的每一个时间点上word-level特征相乘得到sentence-level特征向量 ...
从零构建LSTM
本文将基于PyTorch框架中从头开始构建LSTM,以更好地了解其内部工作原理。
LSTM的基础
LSTM是RNN中一个较为流行的网络模块。主要包括输入,输入门,输出门,遗忘门,激活函数,全连接层和输出。其结构如下:
上图中每一个大绿色块代表一个LSTMcell,可以看到中间的LSTMcell 里面有四个黄色小框,每一个小黄框代表一个前馈网络层,就是经典的神经网络结构,小黄框里面符号代表该层的激活函数,即1、2、4的激活函数时sigmoid,而3的激活函数时tanh。
整个LSTMCell的具体计算公式如下
更加详细的关于LSTM内容见于博文理解LSTM
接下来,我们结合框架实现来分析一些LSTM内部工作原理,首先我们看看Pytorch和Keras关于LSTM的使用的方式。
** Pytorch**
pytoch中的LSTM api使用方式如下:
1class torch.nn.LSTM(*args, **kwargs)
参数列表
input_size:x的特征维度
hidden_size:隐藏层的特征维度
num_layers:lstm隐层的层数,默认为1
bias:Fals ...
理解LSTM
人类并不是每时每刻都从一片空白的大脑开始他们的思考。在你阅读这篇文章的时候,你都是基于自己已经拥有的对先前所见词的理解来推断当前词的真实含义,我们不会将所有的东西都全部丢弃,然后用空白的大脑进行思考。我们的思想拥有持久性。
传统的神经网络并不能做到这点,看起来也像是一种巨大的弊端。例如,假设你希望对电影中的每个时间点的时间类型进行分类。传统的神经网络应该很难来处理这个问题——使用电影先前的时间推断后续的事件。
RNN解决了这个问题。RNN是包含循环的网络,允许信息的持久化。
在上面的示例图中,神经网络的模块,A 正在读取某个输入xix_ixi,并输出一个值hih_ihi,循环可以使得信息可以从当前步传递到下一步。
这些循环使得RNN看起来非常神秘。然而,如果你仔细想想,这样也不比一个正常的神经网络难于理解。RNN可以被看做是同一神经网络的多次复制,每个神经网络某块会把消息传递给下一个。所以,如果我们将这个循环展开:
链式的特征揭示了RNN本质上是与序列和列表相关的。他们是对于这类数据的最自然的神经网络架构。
并且RNN也已经被人们应用了!在过去几年中,应用RNN在语音识别,语 ...
深度学习与计算机视觉(PB-05)-网络微调
在第3节中,我们学习了如何将预训练好的卷积神经网络作为特征提取器。通过加载预训练好的模型,可以提取指定层的输出作为特征向量,并将特征向量保存到磁盘。有了特征向量之后,我们就可以在特征向量上训练传统的机器学习算法(比如在第3节中我们使用的逻辑回归模型)。当然对于特征向量,我们也可以使用手工提取特征方法,比如SIFT[15],HOG[14],LBPs[16]等。
一般来说,在计算机视觉任务中,深度学习相关的迁移学习主要有两种类型:
1.将网络当作特征提取器。
2.删除现有网络的全连接层,添加新的FC层,并微调这些权重识别新的类别数据。
第3节中,介绍了第一种方法。下面我们介绍另一种类型的迁移学习,如果有足够的数据,它实际上可以超越特征提取方法,这种方法称为微调,即我们利用新的数据对网络权重进行微调。首先,我们对预训练好的卷积神经网络(如VGG,ResNet或Inception等,一般是在大型数据集上训练得到的)的最后一组全连接层做截断处理(即删除网络中的top层),然后,我们用一组新的全连接层与截断的已训练好的模型进行拼接,组成一个新的完整模型,并随机初始化权重[注意:这里的初始化权 ...
常用的机器学习算法衡量指标
你可能在你的机器学习研究或项目中使用分类精度、均方误差这些方法衡量模型的性能。当然,在进行实验的时候,一种或两种衡量指标并不能说明一个模型的好坏,因此我们需要了解常用的几种机器学习算法衡量指标。本文整理介绍了最常用的机器学习算法衡量指标:分类精度、对数损失、混淆矩阵、曲线下面积、F1分数、平均绝对误差、均方误差…。相信阅读之后你能对这些指标有系统的理解。(后续会不断的增加)
评估机器学习算法是项目的一个重要部分。你的模型可能在用一个指标来评论时能得到令人满意的结果,但用其他指标(如对数损失或其他指标)进行评估时,可能会给出较差的结果。大多数时候,我们使用分类的准确性来衡量我们的模型的性能,然而这还不足真正判断我们的模型。在这篇文章中,我们将介绍可用的不同类型的评估指标。
1. 常见的衡量指标
1.1 分类精度
1.2 对数损失
1.3 混淆矩阵
1.4 曲线下面积(AUC))
1.5 F1分数
1.6 平均绝对误差
1.7 均方误差
1.8 均方根误差
1.9 Gini系数
1.10 KS指标
1.1分类精度
当我们使用`准确性`这个术语时,指的就是分类精度。它是正确预测数与样本 ...
深度学习与计算机视觉(PB-04)-rank-N准确度
在我们深入讨论高级深度学习主题(如迁移学习)之前,先来了解下rank-1、rank-5和rank-N准确度的概念。当你在阅读深度学习相关文献时,尤其是关于计算机视觉和图像分类,你很可能会看到关于rank-N 准确度。例如,几乎所有在ImageNet数据集上验证的机器学习方法的论文都给出了rank-1和rank-5准确度 (我们将在本章后面解释为什么需要使用rank-1和rank-5准确度).
rank-N准确度指标与传统的评估指标有何不同呢?在本节中,我们将讨论rank-N准确度内容以及如何实现它。最后将其应用于在Flower-17和CALTECH-101数据集上。
rank-N准确度
通过一个例子来解释rank-N准确度概念。假设我们正在评估一个训练在CIFAR-10数据集上的神经网络模型,CIFAR-10数据集包括10个类:飞机,汽车,鸟、猫、鹿、狗、青蛙、马、船和卡车。给定一张输入图像(如图4.1左)
图4.1 左:青蛙, 右:汽车
模型返回的结果是表4.1左的类标签概率信息。
![](https://lonepatient-1257945978.cos.ap-chengdu ...