如何用深度学习处理结构化数据
这篇博客主要关注的是深度学习领域一个并不非常广为人知的应用领域:结构化数据。本文作者为旧金山大学(USF)在读研究生 Kerem Turgutlu。
使用深度学习方法按照本文所介绍的步骤处理结构化数据有这样的好处:
1.快
2.无需领域知识
3.表现优良
在机器学习/深度学习或任何类型的预测建模任务中,都是先有数据然后再做算法/方法。这也是某些机器学习方法在解决某些特定任务之前需要做大量特征工程的主要原因,这些特定任务包括图像分类、NLP 和许多其它「非常规的」数据的处理——这些数据不能直接送入 logistic 回归模型或随机森林模型进行处理。相反,深度学习无需任何繁杂和耗时的特征工程也能在这些类型的任务取得良好的表现。大多数时候,这些特征需要领域知识、创造力和大量的试错。当然,领域专业知识和精巧的特征工程仍然非常有价值,但这篇文章将提及的技术足以让你在没有任何领域知识的前提下向 Kaggle 竞赛的前三名看齐,参阅:http://blog.kaggle.com/2016/01/22/rossmann-store-sales-winners-interview-3rd-plac ...
一个绘制neo4j数据模型工具-Arrows
Arrows是一个基于javascript的绘制neo4j数据模型的工具.可以使用它绘制整个关系图谱的数据模型,并进行演示。需要注意的是: 不支持中文.
最后呈现的效果如下所示:
Arrows页面相当简洁,如下:
主要的功能有:
使用+Node创建一个新的node
沿着node的边拖动得到节点与节点之间的关系
可以拖动得到带有关系边的node,也可以连接已有的两个node构成关系
双击node或者边可以对node或者关系进行编辑,比如命名或者增加属性(以’key’:"value"形式))
有两种不同的风格:一种是粗大风格,另一种时细小风格
可以对构建好的数据模型保存成svg格式或者截图保存.
支持导出成cypher语句并在neo4j终端运行
新建一个node
新建一个节点,可以通过+Node键增加没有带边的node,相互独立,也可以通过拖动已有的node构建一个相连并且有方向的node.比如:
通过+Node键
通过拖动已有node
拖动node,我们需要把鼠标位于node的边缘,如图所示:
拖动之后,会得到一个带有关系指向的node,如图所示 ...
Densely Connected Convolutional Networks
这篇文章是CVPR2017的oral,非常厉害。文章提出的DenseNet(Dense Convolutional Network)主要还是和ResNet及Inception网络做对比,思想上有借鉴,但却是全新的结构,网络结构并不复杂,却非常有效!众所周知,最 近一两年卷积神经网络提高效果的方向,要么深(比如ResNet,解决了网络深时候的梯度消失问题)要么宽(比如GoogleNet的 Inception),而作者则是从feature入手,通过对feature的极致利用达到更好的效果和更少的参数。
先列下DenseNet的几个优点,感受下它的强大:
1.减轻了vanishing-gradient(梯度消失)
2.加强了feature的传递
3.更有效地利用了feature
4.一定程度上较少了参数数量
在深度学习网络中,随着网络深度的加深,梯度消失问题会愈加明显,目前很多论文都针对这个问题提出了解决方案,比如ResNet,Highway Networks,Stochastic depth,FractalNets等,尽管这些算法的网络结构有差别,但是核心都在于:create sho ...
使用Neo4j和Cypher快速批量更新图数据的5个建议
当通过程序向图数据库中写入大量数据的时候,你会希望它能够高效的处理。
下面这些方式不是十分有效:
将值直接写入到语句中,而不是通过参数的方式
每一个更新都通过一个Transaction发送一个请求
通过一个Transaction发送大量的单个请求
生成一个巨大复杂的语句(几百行),然后通过一个Transaction进行提交
在一个Transaction中,发送一个巨大的请求,会导致OOM错误
正确的方法
你需要构造尽可能小的请求,并且语句格式固定(这样可以利用缓存),然后通过参数方式进行使用。
每一个请求可以只修改一个属性,或者修改整个子图(上百个节点),但是它的语句结构必须是一致的,否则就不能使用缓存。
UNWIND
为了实现这个目标,你只需要在你单次请求的前面加上一个UNWIND语句。UNWIND会将大量的数据(高达10k或者50k条实体)分散成一行一行的,每一行都包含一次更新所需要的全部信息。
你添加一个{batch}参数,并且将它的值设置成一个Map列表,其中可以包含你的数据(10k或者50k条)。这些数据会被打包成一个完整的请求,并且符合语法结构,还 ...
TensorFlow学习笔记——深度学习中的epochs,batch_size,iterations详解
深度学习框架中涉及很多参数,如果一些基本的参数如果不了解,那么你去看任何一个深度学习框架是都会觉得很困难,下面介绍几个新手常问的几个参数。
batch
深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。 ...
Snapshot Ensembles Train 1, get M for free
Snapshot Ensembles(Huang et al,2017)是最近提出的一种聪明的技术,该方法训练一个单一的模型,使用cosine annealing learning rate schedule方法,首先使用一个较大学习率并快速收敛到一个局部最小值。然后保存模型参数,接着重新使用一个较大的学习率开始进行优化,然后重复这些步骤M次。最后,所有保存的模型Snapshot都是整体的。
摘要
众所周知,使用多个深度网络模型进行融合比单个深度网络模型更加准确和稳健,但是,独立训练多个深度网络,会存在巨大的工程量以及需要大量的时间问题. 论文作者通过训练一个神经网络来得到近似融合的效果,沿着优化路径收敛到几个局部最小值并保存模型参数.为了快速收敛,作者使用了cyclic learning rate schedules ,既简单又高效.在CIFAR-10,CIFAR-100和SVHN上都取得了最好的结果。图1很直观的展示了作者的思路.
Snapshot Ensembles
我们知道如果单个模型之间有较低的test error又保持多样性,则进行融合会得到更好的结果。在单次训练中,S ...
理解RNN
主要有一下几个内容:
1.1 引出循环神经网络
1.2 RNN 讲解
1.3 为什么可以参数共享的简单理解
1.4 RNN 的训练
1.5 RNN 几种架构
1.6 引出下文:Long-Term 依赖问题
1.7 为什么可以参数共享的简单理解
1.1 引出循环神经网络
在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如时序问题,比如你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。这个时候,我们怎么办呢?下面有两种解决方案
一种思路是记忆之前的分类器的状态,在这个基础上训练新的分类器,从而结合历史影响,但是这样需要大量历史分类器
重用分类器,只用一个分类器总结状态,其他分类器接受对应时间的训练,然后传递状态,这样就避免了需要大量历史分类器,而且还比较有效的解决了这个问题。而这样一种东西是什么呢?没错,就是 RNN(循环神经网络)
1.2 RNN 讲解
RNN 出现的目的是来处理序列数据的。RNN 之 ...
Introduction to Pseudo-Labelling-A Semi-Supervised learning technique
我们在解决监督机器学习的问题上取得了巨大的进步。这也意味着我们需要大量的数据来构建我们的图像分类器。但是,这并不是人类思维的学习方式。一个人的大脑不需要上百万个数据来进行训练,需要通过多次迭代来完成相同的图像来理解一个主题。它所需要的只是在基础模式上用几个指导点训练自己。显然,我们在当前的机器学习方法中缺少一些东西。我们能否可以建立一个系统,能够要求最低限度的监督,并且能够自己掌握大部分的任务。
本文将介绍一种称为伪标签(Pseudo-Labelling)的技术。我会给出一个直观的解释,说明伪标签是什么,然后提供一个实际的实现。
什么是半监督学习?
比方说,我们有一个简单的图像分类问题。训练数据由两个被标记的图像Eclipse(日食)和Non-eclipse(非日食)组成,如下所示。
我们需要从非日食图像中对日食的图像进行分类。但是,问题是我们需要在仅仅两张图片的训练集上建立我们的模型。
因此,为了应用任何监督学习算法,我们需要更多的数据来构建一个鲁棒性的模型。为了解决这个问题,我们找到了一个简单的解决方案,我们从网上下载一些图片来增加我们的训练数据。
但是,对于监督的方法,我们 ...
自然语言处理中的Attention Model:是什么及为什么
要是关注深度学习在自然语言处理方面的研究进展,我相信你一定听说过Attention Model(后文有时会简称AM模型)这个词。AM模型应该说是过去一年来NLP领域中的重要进展之一,在很多场景被证明有效。听起来AM很高大上,其实它的基本思想是相当直观简洁的。本文作者可以对灯发誓:在你读完这篇啰里啰嗦的文章及其后续文章后,一定可以透彻了解AM到底是什么,以及轻易看懂任何有关论文看上去复杂的数学公式部分。怎么样,这广告打的挺有吸引力吧,尤其是对那些患有数学公式帕金森病的患者。
引言
当我第一次看到机器学习领域中的Attention Model这个名字的时候,我的第一直觉就是:这是从认知心理学里面的人脑注意力模型引入的概念。若干年前,也就是在我年轻不懂事的花样年华里,曾有一阵子沉迷于人脑的工作机制,大量阅读了认知心理学方面的书籍和论文,而一般注意力模型会作为书籍的单独一章来讲。下面请允许我显摆一下鄙人渊博的知识。
注意力这东西其实挺有意思,但是很容易被人忽略。让我们来直观地体会一下什么是人脑中的注意力模型。首先,请您睁开眼并确认自己处于意识清醒状态;第二步,请找到本文最近出现的一个“Att ...
Summary of kaggle competition experience
Kaggle 于 2010 年创立,专注数据科学,机器学习竞赛的举办,是全球最大的数据科学社区和数据竞赛平台。在 Kaggle 上,企业或者研究机构发布商业和科研难题,悬赏吸引全球的数据科学家,通过众包的方式解决建模问题。而参赛者可以接触到丰富的真实数据,解决实际问题,角逐名次,赢取奖金。诸如 Google,Facebook,Microsoft 等知名科技公司均在 Kaggle 上面举办过数据挖掘比赛。2017年3月,Kaggle 被 Google CloudNext 收购。
1 参赛方式
可以以个人或者组队的形式参加比赛。组队人数一般没有限制,但需要在 Merger Deadline 前完成组队。为了能参与到比赛中,需要
在 Entry Deadline 前进行至少一次有效提交。最简单地,可以直接提交官方提供的 Sample Submission。关于组队,建议先
单独个人进行数据探索和模型构建,以个人身份进行比赛,在比赛后期(譬如离比赛结束还有 2~3 周)再进行组队,以充分发挥组队的效果(类似于模型集
成,模型差异性越大,越有可能有助于效果的提升,超越单模型的效果)。当然也可以 ...