Note for SoloLearn SQL

本文主要关于SQL的基本语法的笔记,来自SoloLearn。基本概念介绍数据库数据库数据库是指以利于容易地连接、有效管理和更新的方式来管理的一系列的数据。数据库由储存相关联的信息的表格组成,举例来说,假设我们需要建立一个如YouTube的网站,那么我们需要数据库来存储视频信息、用户名与密码以及评论等等。数据库表格数据库表格用类似Excel的方式存储和展示数据,数据库通常由许多的表格构成,例如想象一个由名字和电话号码构成的表格。primary keyprimary key是表格中特殊的一列,主要特性是每行都有独特的primary key不能为null例如下图中,ID是个primary key的好选择,因为可能会有重名的情况。什么是SQL我们已经理解了什么是数据库,那么理解什么是SQL就很简单了。SQL 全称是结构化序列语言(Structured Query Language)。SQL用于连接和操作数据库,而MySQL指的是一种能理解SQL的程序语言。可以这么说,SQL是一种标准,而有许多遵循这个版本却自带许多特性的程序语言的实现。SQL可以:插入、更新、删除数据库里的记录创建新的数据库、表格、存储程序和外观从数据库取回数据SQL语句 SELECT基本SQL语句SHOW DATABASES:返回服务器上所有数据库的序列SHOW TABLES:返回当前数据库上的所有表格SHOW COLUMNS FROM customers:返回选定表格内的列信息SELECT 语句12SELECT column_listFROM table_name在制定表格内选中一列或者多列语法规则多行语句SQL允许同时运行多句语句12SELECT FirstName FROM customers;SELECT City FROM customers;大小写不敏感SQL是大小写不敏感的,如下三行是同样的效果123select City from customers;SELECT City FROM customers;sElEct City…

0 Comments

理解LSTM网络

Recurrent Neural Networks(RNN)人类是依靠自己过往的经验来学习,如同我们在读文章时,每一时刻,我们对于当前的概念的理解总要添加上对于之前获取的知识经验,总之,我们的思维是有持续性的。传统的神经网络模型无法做到这一点,而这也是它的主要缺陷之一。循环神经网络解决了这个难题,所谓循环,简单来说其结构允许信息在网络内留存,也即是,网络是有记忆的。上图中,表示A表示神经网络的一块,在$$t$$时刻有输入$$X_t$$和输出$$h_t$$,这结构很简单,特别的是中间那一环,表示信息可以在网络内保存和传递。以上的循环结构也可以拆解为下面的串列结构来理解:我们可以把一个网络块的循环看成是多个相同的网络之间信息的传递,而这样的结构也就意味着,RNN天生就适合处理与序列相关的数据,如时间序列、NLP中的语言模型、音乐等。近年来RNN的成功应用是与LSTM划不开联系的。接下来就给大家介绍LSTM网络。##长期依赖问题RNN能够利用之前的信息来帮助当前的处理,这是我们对于RNN的期待。但是RNN能够做到这一点是有条件的:需要解决长期依赖问题。举个例子,例如我们需要预测如下句子中的最后一个单词:“the clouds are in the sky”,因为有关的信息与其被需要的位置的距离不远,所以RNN可以轻易解决这个问题。但是当预测需要更早的信息的时候呢?例如“I grew up in France… I speak fluent French.” 这时候有关的信息与其被需要的位置的距离可能很远。而此时,RNN变得很难处理这个问题。理论上,RNN应该可以解决这类“长期依赖问题”,但是实际上却无法做到。幸运的是,LSTM可以解决这个问题!LSTM 网络Long Short Term Memory networks,简称为LSTM,是一种可以学习长期依赖的RNN。那么,LSTM为何具有这种能力呢?我们先来看看标准的RNN形式:形式很简单,tanh层接受当前时刻的输入$$X_t$$以及上一时刻传来的记忆信息,输出$$h_t$$及记忆信息。而LSTM在标准的RNN形式下,网络增加到了四层。此图中,黄色的框格代表神经网络层,粉红色的圆圈代表逐点运算,例如向量相加或者相乘,单条黑色的线代表向量的传输,合并的黑色的线代表向量的连接,分叉的黑色线代表向量的复制(同一向量传送到不同的方向)。##LSTM网络核心理念LSTM的核心就是网络内上面的那条水平线,称为cell state $$C_t$$,类似于传送带的功能,它在整个网络内直线传送,只做一些线性的变动,它代表着的是RNN中不变的信息。LSTM具有对cell state进行增减信息的功能,是靠如下的部件–gate完成的。gate由一个sigmoid层和逐点乘操作构成,我们都知道sigmoid函数输出的是一个介于0和1之间的数,那么gate的作用就显而易见了:通过sigmoid层的输入决定gate的输入有多少能被输入。而LSTM具有三个gate,都是为了保持和控制cell state。分步理解LSTMLSTM结构的第一步是决定我们应该把多少信息从cell state里面丢弃。这是有一个叫做“forget gate”的部分完成的。其接收$$h_{t-1}$$和$$x_t$$,输出一个0和1之间的数,再与上一时刻的cell state$$C_{t-1}$$做逐点乘。下一步则是决定把多少的新信息存储在cell state里面。首先,一个称为“input…

0 Comments

Rephil和MapReduce: 描述长尾数据的数学模型

Google Rephil是Google AdSense背后广告相关性计算的头号秘密武器。但是这个系统没有发表过论文。只是其作者(博士Uri Lerner和工程师Mike Yar)在2002年在湾区举办的几次小规模交流中简要介绍过。所以Kevin Murphy把这些内容写进了他的书《Machine Learning: a Probabilitic Perspecitve》里。在吴军博士的《数学之美》里也提到了Rephil。 Rephil的模型是一个全新的模型,更像一个神经元网络。这个网络的学习过程从Web scale的文本数据中归纳海量的语义——比如“apple”这个词有多个意思:一个公司的名字、一种水果、以及其他。当一个网页里包含”apple”, “stock”, “ipad”等词汇的时候,Rephil可以告诉我们这个网页是关于apple这个公司的,而不是水果。 这个功能按说pLSA和LDA也都能实现。为什么需要一个全新的模型呢? 从2007年至今,国内外很多团队都尝试过并行化pLSA和LDA。心灵手巧的工程师们,成功的开发出能学习数万甚至上十万语义(latent topics)的训练系统。但是不管大家用什么训练数据,都会发现,得到的大部分语义(相关的词的聚类)都是非常类似,或者说“重复”的。如果做一个“去重”处理,几万甚至十万的语义,就只剩下几百几千了。 这是怎么回事?   如果大家尝试着把训练语料中的低频词去掉,会发现训练得到的语义和用全量数据训练得到的差不多。换句话说,pLSA和LDA模型的训练算法没有在意低频数据。 为什么会这样呢?因为pLSA和LDA这类概率模型的主要构造单元都是指数族分布(exponential family)。比如pLSA假设一个文档中的语义的分布是multinomial的,每个语义中的词的分布也是multinomial的。因为multinomial是一种典型的指数族分布,这样整个模型描述的海量数据的分布,不管哪个维度上的marginalization,都是指数族分布。在LDA中也类似——因为LDA假设各个文档中的语义分布的multinomial distributions的参数是符合Dirichlet分布的,并且各个语义中的词的分布的multinomial distributions的参数也是符合Dirichlet分布的,这样整个模型是假设数据是指数族分布的。 可是Internet上的实际数据基本都不是指数族分布的——而是长尾分布的。至于为什么是这样?可以参见2006年纽约时报排名畅销书The Long Tail: Why the Future…

0 Comments

note for CS224d:1

最近学习了斯坦福的CS224d课程,该课 程的主要内容是神经网络在自然语言处理领域的应用。 这里记录相关的学习笔记,大概分 成以下几个部分:word2vec,窗口分类,神经网络,循环神经网络,递归神经网络,卷积 神经网络。 ##为什么需要深度学习 传统的机器学习方法都是人为的设计特征或者表示,深度学习的目的是希望能够通过神经网络让机器自动学习到有效的特征表示,这里所说的深度学习更偏向于关注各种类型的神经网络。探索机器学习的原因主要有以下几方面:   人工设计的特征常常定义过多,不完整并且需要花费大量的时间去设计和验证 自动学习的特征容易自适应,并且可以很快的学习 深度学习提供了一个弹性的,通用的学习框架用来表征自然的,视觉的和语言的信息。 深度学习可以用来学习非监督的(来自于生文本)和有监督的(带有特别标记的文本,例如正向和负向标记) 在2006年深度学习技术开始在一些任务中表现出众,为什么现在才热起来? 深度学习技术受益于越来越多的数据 更快的机器与更多核CPU/GPU对深度学习的普及起了很大的促进作用 新的模型,算法和idea层出不穷 通过深度学习技术提升效果首先发生在语音识别和机器视觉领域,然后开始过渡到NLP领域 深度学习在所有的NLP层次(音素、形态学、句法、语义)都得到了应用,而所有的NLP层次的表示都涉及到向量(Vectors),下面主要讲如何用向量来表示词。 ##词向量 ###语义词典 我们要如何表示一个词的意思呢?常识上,在词典中我们通过更加简单常用的词来构成例句来解释一个词的意思。那在计算机中,我们通常使用Wordnet来表示词义: ![](/images/2016/06/Screenshot from 2016-06-01 20-44-21.png) 但语义词典存在如下问题: 语义词典资源很棒但是可能在一些细微之处有缺失,例如这些同义词准确吗:adept, expert, good, practiced,…

0 Comments