理解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这个名字的时候,我的第一直觉就是:这是从认知心理学里面的人脑注意力模型引入的概念。若干年前,也就是在我年轻不懂事的花样年华里,曾有一阵子沉迷于人脑的工作机制,大量阅读了认知心理学方面的书籍和论文,而一般注意力模型会作为书籍的单独一章来讲。下面请允许我显摆一下鄙人渊博的知识。
注意力这东西其实挺有意思,但是很容易被人忽略。让我们来直观地体会一下什么是人脑中的注意力模型。首先,请您睁开眼并确认自己处于意识清醒状态;第二步,请找到本文最近出现的一个“At ...
DTW加速算法FastDTW简介
DTW采用动态规划来计算两个时间序列之间的相似性,算法复杂度为O(N2)。当两个时间序列都比较长时,DTW算法效率比较慢,不能满足需求,为此,有许多对DTW进行加速的算法:FastDTW, SparseDTW, LB_Keogh, LB_Improved等。在这里我们介绍FastDTW。
1. 标准DTW算法
在DTW中,我们要寻找的是一个归整路径,如下图所示:
最终我们想要得到的是这条路径经过的所有点的坐标(i,j)对应的X和Y两个时间序列的点Xi和Yj的距离(比如欧几里得距离)之和,亦即我们需要求得代价矩阵最右上角的元素D(i,j)。而根据动态规划的思想:
要求得D(i,j)必须要知道D(i-1,j), D(i-1,j-1), D(i,j-1)等,以此类推,我们需要求得整个D矩阵,才能得到最终的D(i,j),亦即算法的时间复杂度为O(N2)。
2. DTW常用加速手段
常用的DTW加速手段有:
(1). 限制。亦即减少D的搜索空间,下图中阴影部分为实际的探索空间,空白的部分不进行探索。
(2). 数据抽象。亦即把之前长度为N的时间序列规约成长度为M(M<N) ...
Dynamic Time Warping
动态时间调整(Dynamic Time Warping, DTW)是一种衡量两个时间序列之间的相似度的方法,主要应用在语音识别领域来识别两段语音是否表示同一个单词。
1. DTW方法原理
在时间序列中,需要比较相似性的两段时间序列的长度可能并不相等,在语音识别领域表现为不同人的语速不同。而且同一个单词内的不同音素的发音速度也不同,比如有的人会把‘A’这个音拖得很长,或者把‘i’发的很短。另外,不同时间序列可能仅仅存在时间轴上的位移,亦即在还原位移的情况下,两个时间序列是一致的。在这些复杂情况下,使用传统的欧几里得距离无法有效地求的两个时间序列之间的距离(或者相似性)。
DTW通过把时间序列进行延伸和缩短,来计算两个时间序列性之间的相似性:
如上图所示,上下两条实线代表两个时间序列,时间序列之间的虚线代表两个时间序列之间的相似的点。DTW使用所有这些相似点之间的距离的和,称之为归整路径距离(Warp Path Distance)来衡量两个时间序列之间的相似性。
2. DTW计算方法:
令要计算相似度的两个时间序列为X和Y,长度分别为|X|和|Y|。
2.1归整路径(Warp P ...
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 周)再进行组队,以充分发挥组队的效果(类似于模型集
成,模型差异性越大,越有可能有助于效果的提升,超越单模型的效果)。当然也可 ...
使用Keras进行数据处理
任何机器学习模型对所需数据的规范和格式都有一定的要求,在深度学习中通常要求输入算法的数据为一个多维矩阵的形式,因此,在建模之前都要对原始数据进行处理.
Keras针对几种常见的输入数据形态,提供了几个易于使用的工具来处理数据,包括针对序列模型的数据预处理,针对文本模型的文字预处理,以及针对图片输入的预处理.所有函数都在Keras.preprocessing这个模块里面.
文字预处理
在文本建模实践中,一般都需要把原始文本进行分词,标记化处理,对于已经读入的文字的预处理包含以下几个步骤:
分词
建立索引
序列补齐
转化为矩阵
批处理
分词
分词主要利用到text.text_to_word_sequence函数,可以按照给定的分隔符进行分割文本,
1234keras.preprocessing.text.text_to_word_sequence(text, filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n', ...
Keras中的模型
在keras中主要有两大类深度学习模型: 一类是序列模型(Sequential);另一类是通用模型(Model),其中的差异主要体现在拓扑结构上.
序列模型
可以说序列模型是通用模型的一个子类,这种模型各层之间是依次顺序的线性关系,通常是叠加形式构造深度学习模型,比如:
12345678from keras.models import Sequentialfrom keras.layers import Dense,Activationmodel = Sequential()model.add(Dense(32,input_shape=(784,)))model.add(Activation('relu'))model.add(Dense(10))model.add(Activation("softmax"))
通用模型
通用模型可以用来设计比较复杂,任意结构的深度学习模型,比如:
12345678910111213141516from keras.layers import Input,Densefrom keras.models import Model# 定义输入层,主要是 ...
Kaggle债务违约预测冠军经验分享
债务违约预测是Kaggle中的一个比赛,本文将介绍取得第一名成绩的方法,本次比赛的目标包括两个方面。其一是建立一个模型,债务人可以通过它来更好地进行财务方面的决策。其二是债权人可以预测这个债务人何时会陷入到财务方面的困境。最终目的是,通过预测未来两年内债务违约的概率,来改进现有的信用评分制度。这是一个极度复杂和困难的Kaggle挑战,因为银行和各种借贷机构一直都在不断地寻找和优化信用评分的算法。这个模型是银行用来判定是否准许某一笔贷款的。根据这个模型提供的信息,银行可以更好地作出决策,借贷者也可以更好地进行财务方面的规划,以免将来陷入债务危机。
本次挑战允许团队使用集成模型和算法,如XGBoost, Gradient Boosting, 随机森林(Random Forest), 限制玻尔兹曼机(Restricted Boltzman Machine Neural Networks), Adaboost。以及使用先进的堆叠技术(stacking)和投票分类器来准确地预测违约概率。
我们的测量和排名严格使用ROC曲线的AUC值。我们遵照了Agile过程,来确保我们分块、并行地完成关键的任 ...
Exploration data analysis(unfinished)
主要是常用的画图函数
主要是常用的数据分析函数模块
加载所需要模块
1234567import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snscolor = sns.color_palette()# pd.options.mode.chained_assignment = None%matplotlib inline
读取数据
12train = pd.read_json("train.json")test = pd.read_json("test.json")
显示前5行
1train.head()
从上可以看到数据类型都有:数值型,类别型,时间特征,文本特征…
查看数据的行数:
12print("Train Rows: ",train.shape[0])print("Test Rows: ",test.shape[0])
条形图
利用矩阵条的高度反映数值变量的集中趋势,某一类别下出现个数等等,比如
123456int_level = train['intere ...