深度学习与计算机视觉(PB-08)-应用深度学习最佳途径
在Starter Bundle第10章中,我们提到了训练一个神经网络模型所需要的四个因素,即:
数据集
loss函数
神经网络结构
优化算法
有了这四个因素,实际上我们是可以训练任何深度学习模型,但是,我们如何训练得到一个最优的深度学习模型?如果效果达不到理想效果,又该如何去优化模型?
在深度学习实践中,你会发现,深度学习最难的部分其实是如何根据模型的准确性/损失曲线来进行下一步操作。如果模型的训练错误率太高,该如何处理?如果模型的验证错误率很高,又该如何处理?当验证错误率与训练错误率相差不大,而测试集错误率很高,这又该如何处理?
在这一章中,我们将讨论深度学习在应用时的一些技巧,首先是经验准则,根据经验准则来优化模型。然后是决策准则,根据决策准则来决定是从头开始训练深度学习模型还是应用迁移学习。通过本章内容,你将会对专业的深度学习实践者在训练他们自己的网络时使用的经验法则有一个很好的理解。
训练准则
以下内容主要来自于在第30届神经信息处理系统大会(NIPS 2016)中,吴恩达教授发表演讲:《利用深度学习开发人工智能应用的基本要点(Nuts and Bolts of Buil ...
Know-Evolve-Deep Temporal Reasoning for Dynamic KG
对于带有时序属性的大规模事件数据,需要动态更新的知识图谱来保存知识图谱中关系的时序信息(每条边包含时间属性)。本文提出了 Know-Evolve 这种基于神经网络的动态知识图谱来学习实体在不同时刻的非线性表示。在动态知识图谱中,事件由四元组表示,相比于普通的三元组,增加了时间信息,因此在动态知识图谱中,实体之间的可能通过多个相同的关系连接,但是这些关系会关联到不同的时序信息。Know-Evolve 中,使用时间点过程(temporal point process)来描述时间点的影响。
前言
事件的发生,重现都伴随着时间的变化而变化,例如下图,时序知识图谱中每条边都有与之相关的时间属性。而静态知识图谱忽略了时间概念,无法具有对事件的推理能力。因此,大多数工作都关注于实体-关系的表示,学习现有的知识推断未知的事实。但这些方法缺乏利用时序知识图谱表示的底层数据中丰富的时序动态的能力,除了关系(结构)依赖之外,有效地捕获跨事件的时间依赖性有助于提高对实体行为的理解,以及它们如何随着时间的推移对事件的生成做出贡献。
时间点过程
在时间点过程中,某一时刻发生某事件的概率可以表示为
f(t)=λ ...
Plot Python XGBoost feature importances
对xgboost的特征重要性进行可视化。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283## 加载模块import numpy as npimport pandas as pdimport xgboost as xgbfrom scipy import sparseimport matplotlib.pyplot as pltfrom pylab import plot, show, subplot, specgram, imshow, savefigimport randomimport operatorfrom sklearn.cross_validation import train_test_splitfrom sklearn.preprocessing import LabelEncoder, OneHotEn ...
深度学习与计算机视觉(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在语音识别,语 ...