某一变量的已知/未知会影响其他变量的相互独立性。
来自Udacity的CS217课
Tag: 机器学习
本文是对文章Basics of Convex Analysis的部分翻译,若本文对您的任何权益造成侵犯,请联系我。
This article is a partial translation of Basics of Convex Analysis, if this infringes any of your rights, please contact me.
次梯度以及一阶最优性条件
若下述不等式成立:
[latex]f(z) \geqslant{f(x)} + <z-x, y>, \forall z \in X.[/latex]
则我们说[latex]y\in X[/latex]是函数[latex]f \in \Gamma _0(X)[/latex]在[latex]x \in X[/latex]点上的一个次梯度,并且属于[latex]f[/latex]在该点(用[latex]\partial f(x)[/latex]表示)的一个次微分。
上述不等式表明函数[latex]f[/latex]的图像(graph)是由不等式右侧定义的超平面所(hyperplane)支撑的。一个次梯度因此也是这众多支持超平面其中一个的“斜率(slope)”。如果该函数在点[latex]x[/latex]处可微,则这样的次梯度有且仅有一个(即标准梯度),与此对应地,也只有一个支持超平面。相对地,如果一个函数在点[latex]x[/latex]处不可谓(比如,在[latex]x[/latex]处有个扭曲)那么就能有无穷多个支持超平面,并且相对应地,在该点的次微分是一个连续的次梯度的集合。
一个典型的例子是绝对值函数[latex]f(x)=|x|[/latex],它在0点是不可导的。但在这个点上,它可以由[latex]l(x)=\alpha x, \alpha \in [-1,1][/latex]组成的所有直线支持。这个集合即该函数在0点的次微分,用[latex]\partial f(0)[/latex]表示。
函数[latex]f(x)=|x|[/latex]的演示(粗线表示)以及其中两个支持直线(虚线表示)。这两条支持直线都有次微分[latex]\partial f(0)[/latex]中的斜率。注意,那条水平线也是支持超平面之一,表明[latex]0 \in \partial f(0)[/latex]。并且因此由一阶条件(下文定义),这个函数在原点有一个极小值。
现在,通过定义非限制问题中的一个最优点[latex]x^{\#}[/latex],必有[latex]f(z) \geqslant{f(x^{\#}) + <z-x, 0>}, \forall z \in x [/latex],并且因此0必须是函数[latex]f[/latex]在[latex]x^{\#}[/latex]点处的一个子梯度。
这就是一阶最优性条件(FOC):
[latex]x^{\#} \in arg min_{x}{f(x)} \Longleftrightarrow 0 \in \partial f(x^{\#})[/latex]
如果我们将次微分看做一个运算符那么,直观地,寻找极小可以看做“逆转”次微分并计算它在点0的值的过程,即[latex]x^{\#}=(\partial f)^{-1} (0)[/latex]。我们稍后再进一步介绍,但这个逆转次微分运算符的思路是非常重要的。
在继续之前,有必要提一下(并且这并不难理解)下述包含关系对于次微分的和是成立的:
[latex]\sum_{i}{\partial f_i} \subseteq \partial \sum_{i}{f_i} [/latex]
对关注的大部分问题而言,上述关系可以强化为相等的关系, 但注意如果[latex]0 \in \sum_{i}{\partial f_i (x^\dagger)}[/latex],则上述包含关系意味着[latex]0 \in \partial \sum_{i}{f_i (x^\dagger)}[/latex],这对于证明[latex]x^\dagger[/latex]是个极小值而言(这正是我们最感兴趣之处)足矣。
Information Cell Mixture Models 语义细胞混合模型
语义细胞混合模型是用于表示模糊概念的一种模型,我个人的理解嘛,是一种介于k-means与GMM之间的一个模型。具体论文可以看
Tang, Yongchuan, and Jonathan Lawry. “Information cells and information cell mixture models for concept modelling.” Annals of Operations Research195.1 (2012): 311-323.
下面做一些简要介绍。
基本概念及假设
一个语义细胞混合模型(Information Cell Mixture Model, ICMM)是由一组语义细胞[latex]L_i[/latex]构成的,每个语义细胞使用三元组[latex]<P_i, d_i, \delta_i>[/latex]表示,这三个符号分别表示原型,距离函数以及密度函数。其中原型的概念类似于k-means中的聚类中心,而距离、密度刻画了这个聚类中心的“势力范围”。下图就是一个例子,这个ICMM里面有两个语义细胞。
ICMM的概率密度
假设一个ICMM由[latex]n[/latex]个语义细胞构成,则可以根据每个语义细胞自身的概率密度函数及这个细胞的权重来界定整个ICMM的密度函数如下
[latex]\delta_{ICMM}(X)=\sum_{i=1}^{n} \delta_i (X) Pr(L_i)[/latex]
而每个语义细胞自身的密度函数,由一个指定的距离函数(文中用欧氏距离)和一个概率密度函数(文中用高斯密度函数)一起界定,即
[latex]\delta_{L_i}(X) = \delta_{i}(d_i(X,P_i)) [/latex]表示到X与原型的”距离”密度,而[latex]\delta[/latex]是一个高斯密度函数[latex]\delta(\epsilon|c_i, \sigma_i)[/latex].
上面这堆都是密度函数,最后算出来是个距离(也可以称之为相似度)的密度,那如果要求真正点X到ICMM的“距离”,就需要求密度函数在[latex][d(X, P_i), +\infty)[/latex]范围的积分了。
目标函数
跟其他的生成模型类似,就是最大似然估计,目标函数也就变成了整个(对数)期望最大化了。
[latex]maximize J(ICMM) = ln \delta_{ICMM}(DB)=\sum_{k=1}^{N}(ln \delta_{ICMM}(X_k))[/latex]
[latex]= \sum_{k=1}^{N} ln (\sum_{i=1}^{n}(\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i))[/latex]
其中DB表示数据集,k是训练集的样本,i是第i个语义细胞。
但是上面这个对数似然函数很难优化,因此引入一个隐含变量[latex]z_{ik}\in {0,1} [/latex]并且有[latex]\sum_{i=1}^{n} z_{ik} = 1[/latex],它表示由某一个语义细胞“生成”了整个ICMM。
参数更新
语义细胞的概率分布更新
引入了隐变量,很容易想到用EM来更新参数… EM就是两个步骤:1.利用现有的参数去更新隐变量;2.利用隐变量来更新参数
在我们的问题中,用隐变量[latex]z_{ik}[/latex]的最大似然估计来更新,即[latex]q_{ik}=E(z_{ik}|ICMM) = \frac{\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i)}{\sum_{i=1}^{n}\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i)}[/latex]
这里的参数c, sigma, Pr, L全都是有hat的hypothesis值,鄙人不熟悉latex,没有加上。
然后,之前的那个目标函数就转变为了
[latex]Q(.)=\sum_{k=1}^{N}\sum_{i=1}^{n}q_{ik}ln(\delta(\epsilon_{ik}|c_i, \sigma_i)Pr(L_i))[/latex]
这是一个带有约束条件(Pr权重加起来=1)最优化目标函数,所以引入Lagrange乘子[latex]\lambda[/latex]来进行变换。变换后的目标函数求最值的问题,就可以转化为偏导数=0的问题了。
更新语义细胞的概率密度
没错,又是“退而求其次”。上面写的那个目标Q,展开来是有一个高斯分布函数项的(见原文公式9),这样对Q最优化又有难度了。作者退了一步,,因为高斯分布是个[0,1]的值,它的ln是负数,因此把这一项[latex]-ln(…)[/latex]去掉,相当于加上了一个负数值的[latex]-ln(…)[/latex].
假设这个精简版的优化目标函数叫U,显然就有[latex]U<=Q[/latex],相当于U就是个lower-bound
那如果能不断提高U的话,原有的目标函数也能得到优化。还是类似,求最值=偏导数为0,在本文中就是[latex]\frac{\partial U}{\partial c_i} = 0[/latex]以及[latex]\frac{\partial U}{\partial \sigma_i} = 0[/latex]
解出来是这么两坨:
参数更新算法
终于..可以更新参数了,具体算法如下
- 利用k-means算法找出k个语义细胞的原型,初始化每个语义细胞的权重[latex]Pr(L_i)=1/n[/latex];
- 计算训练集到当前原型的距离[latex]\epsilon_{ik}=d(X_k, P_i)[/latex],这里用的是欧氏距离;
- 初始化距离密度函数的参数
- 计算第一轮的隐变量
;
- 迭代更新(EM),直到目标函数J收敛
GMM与ICMM
GMM与ICMM长得比较像,我觉得ICMM算是GMM的一个简化版本。GMM求的是每个样例做高斯分布的参数,而ICMM事先就假定好了有k个“原型”,先做了一轮k-means固定下了原型,再来做密度函数的参数更新。假设有N个sample,GMM就相当于是k=N的ICMM。因此从计算复杂度上来说,ICMM比GMM简单,当然了ICMM能表示的模型复杂度还需要调参(k)才能进一步优化。
用于Sentence Embedding的DSSM与LSTM:管中窥豹
前置废话:感觉实习这两个月真是顶得上实验室半年,想想对不起我的导师,跟现在相比之前天天像是在打酱油啊。
相关文献
- Huang, Po-Sen, et al. “Learning deep structured semantic models for web search using clickthrough data.” Proceedings of the 22nd ACM international conference on Conference on information & knowledge management. ACM, 2013.
- Palangi, Hamid, et al. “Deep sentence embedding using long short-term memory networks: Analysis and application to information retrieval.” IEEE/ACM Transactions on Audio, Speech, and Language Processing 24.4 (2016): 694-707.
DSSM一撇
DSSM了解的不是很多,但是这两篇文章有几处是类似的,隐隐地感觉后面这篇是借鉴前面的写出来的。
文章中DSSM的最终目标是实现一个神经网络模型,使得给定输入文档(片段)可以输出一个对应的向量,而通过向量之间的余弦相似度可以判断两个Query-Document的相似性[latex]R(Q,D)=cosine(y_Q,y_D)[/latex],然后拿这个就能做搜索排序了。
Word-Hashing
DSSM中用到了一个奇淫巧术,就是所谓的Word Hashing方法。我们知道,要将文字拿来处理,首先要表示成向量的形式(数值化),最普通的方法是做One-Hot Vector, 即每个单词对应一个feature值,出现就是1,没出现就是0. 但是单词表实在是太大了,这篇论文用到了一个叫Letter-N-Gram的技术,即将一个单词强行分成几个n-gram. 例如单词Hello做Letter-3-Gram,就会变成#HE, HEL, ELL, LLO, LO# 这样的表示方法(其中#代表开头或结尾)。由于处理的Query/Doc对中特殊字符会在数据预处理阶段被过滤,因此抛开单词大小写,a-z0-9#一共就26+10+1=37个字符,37*37*37=50653种可能性,相比词典来说小多了!
这个办法初看不是很靠谱,但是实验结果却是不错的。
正例/反例
训练神经网络需要给正例以及反例。不出意外地,这里用的是用户的click stream,即用户的点击数据。假设[latex]D[/latex]表示对于一个查询Q的所有候选文档,那么[latex]D^+[/latex]表示用户点击的文档作为正例,[latex]D^-[/latex]表示没有点击的作为负例。再根据上面提到的相似度[latex]R(Q,D)[/latex],可以做出一个softmax的后验概率:
[latex]P(D|Q)=\frac{exp(\gamma R(Q,D))}{\sum_{D’ \in D}exp(\gamma R(Q,D’))}[/latex]
通俗易懂,对吧。
神经网络结构
想要实战的,可以看看CNTK里面有一个类似的例子:网络定义文件在这里,不过这个文件里面已经是Word Hashing过之后的了,而且参数设置和论文里的不大一样。
上面Figure1可以根据每一列来看。输入的最底层是Query/Doc的高纬度的词向量(Term Vector),然后进入了Word Hashing阶段把高维词向量弄成了L3G之类的向量,维度大概在30k~50k之间,然后加了两个隐藏层后输出了最终的128维向量y。这个向量y在训练结束之后就是传说中的词向量了。然后两个词向量之间可以算出相似度,最终给出一个softmax算的后验概率[latex]P(D_i|Q)[/latex]。
训练整一坨神经网络要给一个优化目标,文中定义了一个loss function:
[latex]L(\Lambda)=-log\prod_{(Q,D^+)}P(D^+|Q)[/latex]
其中[latex]\Lambda[/latex]表示训练神经网络时的一堆参数。然后使用梯度下降之类的方法,把梯度一层层往回传就能调整参数了。
RNN与LSTM
RNN/LSTM具体是怎么工作的?要详细理解可以看这篇文章,讲得很透彻。这里只提到论文中的一些实现。
RNN
RNN的结构特点是下一个平行节点状态的信息是基于之前节点的。如上图,在本文的环境中,底下的x0,x1,x2,…可以看做一个个单词的输入,这一长串的节点连在一起就变成了一个句子。上面做DSSM时,一整句(段)话的词都拿来一起做Word Hashing,结果就是词汇之间的信息从一开始就会被忽略掉,如果换成了RNN,虽然最后拿到的还是个句子的向量,但是理论上训练出的模型会更加准确一些。中间层是Word Hashing之后的层,用的应该是和DSSM一样的Hashing方法。在最右侧(最后一个词)的激活输出就是Embedding好的句子,一个句子向量:)
但是RNN的引入会引出“梯度爆炸”或“梯度消失”的问题。数学原理不多说,考虑这个句子:I grew up in France… I speak fluent French. 假设我的任务是要训练一个RNN,根据之前的所有单词信息“猜”最后一个词汇French。在这句话中,显然最适合用来参考的是句子开头的那个词France,但是中间还隔了一大堆的“没卵用”词。在根据标签判断loss函数做梯度下降的时候,梯度一层层往回传,但由于中间隔的比较远,等轮到France这个词的时候已经几乎没有影响了。
LSTM-DSSM
LSTM处于什么位置呢?我把两个文章的对比图放在这边,基本上就能看出来了。左图里面用橙色圈出的结构,他的作用和右侧黑色虚线框里的东西是一样的,只是LSTM结构取代了原本比较“单纯”的多层网络的地位。所以这个论文的方法似乎可以叫做LSTM-DSSM.
所以对于怎么做学习,这个新文章的方法也是与它的前身很类似的:根据用户点击的Query-Doc来确定正例及反例(右图中的[latex]D^+[/latex]与[latex]D^-[/latex]),求一个最大似然,它等同于最小化下面这个公式中的参数[latex]\Lambda[/latex]。
[latex]L(\Lambda)=-log\prod_{(Q,D^+)}P(D^+|Q)=\sum_{r=1}^{n}l_r(\Lambda)[/latex]
其中,r对应第r条Query, j是这条Query对应的一条Document。
多说一句,这个Query-Doc的匹配过程有点像做Translation Model,只不过Translation Model有Encoding和Decoding两步,而这里只有Encoding的过程。
LSTM结构
简单来说,LSTM是一种RNN结构,里面通过一些Gate来实现“要不要记住/考虑XXX”的选择。LSTM根据需要有不同的具体实现,下图是论文中用到的结构:
这个结构分成了几个关键部位:Input Gate, Output Gate 和 Forget Gate. 可以看到这些Gate的实现是Sigmoid输出的(图中[latex]\sigma(.)[/latex]),所以值都在0-1之间;然后和前面的h(.)去做一个pointwise multiple(X),实现了“门”的功能。
- Input Gate决定了在这个LSTM结构中哪些值是要更新的,即是否要把当前的输入信息加入到隐藏层的状态;
- Output Gate决定了是否把当前这个LSTM的输出传到下一层去;
- Forget Gate决定了是否要保留当前一个节点的历史状态c(t-1),可以看到图中有一个圈状的结构
Crowd-BT算法模型 Part III [在线学习]
转载请注明来自http://boweihe.me/?p=1524
本文内容源自
Chen, X., Bennett, P. N., Collins-Thompson, K., & Horvitz, E. (2013, February). Pairwise ranking aggregation in a crowdsourced setting. InProceedings of the sixth ACM international conference on Web search and data mining (pp. 193-202). ACM.
第二部分还在努力学习,先把第三部分贴上来…有部分理解不全我就假装没看到了(捂脸)
在线学习:这个方法似乎是借鉴了Crowd-BT模型,但是最后参数更新的方法用了另外一套东西,可以独立于Crowd-BT的最优化而计算。
Crowd-BT算法模型 Part I [Bradley-Terry的延伸-模型基础]
转载请注明来自http://boweihe.me/?p=1524
本文内容源自
Chen, X., Bennett, P. N., Collins-Thompson, K., & Horvitz, E. (2013, February). Pairwise ranking aggregation in a crowdsourced setting. InProceedings of the sixth ACM international conference on Web search and data mining (pp. 193-202). ACM.
第一部分是对Crowd-BT中采用的模型的中文翻译及理解,不涉及后面的主动学习算法(因为暂时没看懂,哈哈)。
因为没弄懂Wordpress的公式插件,所以暂时用Word文档的截图了..
自然语言|机器学习 ::词向量
关于词向量工作原理的理解 http://blog.csdn.net/itplus/article/details/12782781
《机器学习实践》训练算法:从词向量计算概率 http://www.ituring.com.cn/article/32340
本文汇编了一些机器学习领域的框架、库以及软件(按编程语言排序)。
C++
计算机视觉
- CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库
- OpenCV—它提供C++, C, Python, Java 以及 MATLAB 接口,并支持 Windows, Linux, Android and Mac OS 操作系统。
通用机器学习
- MLPack
- DLib
- ecogg
- shark
Closure
通用机器学习
- Closure Toolbox—Clojure 语言库与工具的分类目录
Go
自然语言处理
- go-porterstemmer—一个 Porter 词干提取算法的原生 Go 语言净室实现
- paicehusk—Paice/Husk 词干提取算法的 Go 语言实现
- snowball—Go 语言版的 Snowball 词干提取器
通用机器学习
- Go Learn— Go 语言机器学习库
- go-pr —Go 语言机器学习包.
- bayesian—Go 语言朴素贝叶斯分类库。
- go-galib—Go 语言遗传算法库。
数据分析/数据可视化
- go-graph—Go 语言图形库。
- SVGo—Go 语言的 SVG 生成库。
Java
自然语言处理
- CoreNLP—斯坦福大学的 CoreNLP 提供一系列的自然语言处理工具,输入原始英语文本,可以给出单词的基本形式(下面 Stanford 开头的几个工具都包含其中)。
- Stanford Parser—一个自然语言解析器。
- Stanford POS Tagger —一个词性分类器。
- Stanford Name Entity Recognizer—Java 实现的名称识别器
- Stanford Word Segmenter—分词器,很多 NLP 工作中都要用到的标准预处理步骤。
- Tregex, Tsurgeon and Semgrex —用来在树状数据结构中进行模式匹配,基于树关系以及节点匹配的正则表达式(名字是“tree regular expressions”的缩写)。
- Stanford Phrasal:最新的基于统计短语的机器翻译系统, java 编写
- Stanford Tokens Regex—用以定义文本模式的框架。
- Stanford Temporal Tagger—SUTime 是一个识别并标准化时间表达式的库。
- Stanford SPIED—在种子集上使用模式,以迭代方式从无标签文本中学习字符实体
- Stanford Topic Modeling Toolbox —为社会科学家及其他希望分析数据集的人员提供的主题建模工具。
- Twitter Text Java—Java 实现的推特文本处理库
- MALLET -—基于 Java 的统计自然语言处理、文档分类、聚类、主题建模、信息提取以及其他机器学习文本应用包。
- OpenNLP—处理自然语言文本的机器学习工具包。
- LingPipe —使用计算机语言学处理文本的工具包。
通用机器学习
- MLlib in Apache Spark—Spark 中的分布式机器学习程序库
- Mahout —分布式的机器学习库
- Stanford Classifier —斯坦福大学的分类器
- Weka—Weka 是数据挖掘方面的机器学习算法集。
- ORYX—提供一个简单的大规模实时机器学习/预测分析基础架构。
数据分析/数据可视化
- Hadoop—大数据分析平台
- Spark—快速通用的大规模数据处理引擎。
- Impala —为 Hadoop 实现实时查询
Javascript
自然语言处理
- Twitter-text-js —JavaScript 实现的推特文本处理库
- NLP.js —javascript 及 coffeescript 编写的 NLP 工具
- natural—Node 下的通用 NLP 工具
- Knwl.js—JS 编写的自然语言处理器
数据分析/数据可视化
- D3.js
- High Charts
- NVD3.js
- dc.js
- chartjs
- dimple
- amCharts
通用机器学习
- Convnet.js—训练深度学习模型的 JavaScript 库。
- Clustering.js—用 JavaScript 实现的聚类算法,供 Node.js 及浏览器使用。
- Decision Trees—Node.js 实现的决策树,使用 ID3 算法。
- Node-fann —Node.js 下的快速人工神经网络库。
- Kmeans.js—k-means 算法的简单 Javascript 实现,供 Node.js 及浏览器使用。
- LDA.js —供 Node.js 用的 LDA 主题建模工具。
- Learning.js—逻辑回归/c4.5 决策树的 JavaScript 实现
- Machine Learning—Node.js 的机器学习库。
- Node-SVM—Node.js 的支持向量机
- Brain —JavaScript 实现的神经网络
- Bayesian-Bandit —贝叶斯强盗算法的实现,供 Node.js 及浏览器使用。
Julia
通用机器学习
- PGM—Julia 实现的概率图模型框架。
- DA—Julia 实现的正则化判别分析包。
- Regression—回归分析算法包(如线性回归和逻辑回归)。
- Local Regression —局部回归,非常平滑!
- Naive Bayes —朴素贝叶斯的简单 Julia 实现
- Mixed Models —(统计)混合效应模型的 Julia 包
- Simple MCMC —Julia 实现的基本 mcmc 采样器
- Distance—Julia 实现的距离评估模块
- Decision Tree —决策树分类器及回归分析器
- Neural —Julia 实现的神经网络
- MCMC —Julia 下的 MCMC 工具
- GLM —Julia 写的广义线性模型包
- Online Learning
- GLMNet —GMLNet 的 Julia 包装版,适合套索/弹性网模型。
- Clustering—数据聚类的基本函数:k-means, dp-means 等。
- SVM—Julia 下的支持向量机。
- Kernal Density—Julia 下的核密度估计器
- Dimensionality Reduction—降维算法
- NMF —Julia 下的非负矩阵分解包
- ANN—Julia 实现的神经网络
自然语言处理
- Topic Models —Julia 下的主题建模
- Text Analysis—Julia 下的文本分析包
数据分析/数据可视化
- Graph Layout —纯 Julia 实现的图布局算法。
- Data Frames Meta —DataFrames 的元编程工具。
- Julia Data—处理表格数据的 Julia 库
- Data Read—从 Stata、SAS、SPSS 读取文件
- Hypothesis Tests—Julia 中的假设检验包
- Gladfly —Julia 编写的灵巧的统计绘图系统。
- Stats—Julia 编写的统计测试函数包
- RDataSets —读取R语言中众多可用的数据集的 Julia 函数包。
- DataFrames —处理表格数据的 Julia 库。
- Distributions—概率分布及相关函数的 Julia 包。
- Data Arrays —元素值可以为空的数据结构。
- Time Series—Julia 的时间序列数据工具包。
- Sampling—Julia 的基本采样算法包
杂项/演示文稿
- DSP —数字信号处理
- JuliaCon Presentations—Julia 大会上的演示文稿
- SignalProcessing—Julia 的信号处理工具
- Images—Julia 的图片库
Lua
通用机器学习
- Torch7
- cephes —Cephes 数学函数库,包装成 Torch 可用形式。提供并包装了超过 180 个特殊的数学函数,由 Stephen L. Moshier 开发,是 SciPy 的核心,应用于很多场合。
- graph —供 Torch 使用的图形包。
- randomkit—从 Numpy 提取的随机数生成包,包装成 Torch 可用形式。
- signal —Torch-7 可用的信号处理工具包,可进行 FFT, DCT, Hilbert, cepstrums, stft 等变换。
- nn —Torch 可用的神经网络包。
- nngraph —为 nn 库提供图形计算能力。
- nnx—一个不稳定实验性的包,扩展 Torch 内置的 nn 库。
- optim—Torch 可用的优化算法库,包括 SGD, Adagrad, 共轭梯度算法, LBFGS, RProp 等算法。
- unsup—Torch 下的非监督学习包。提供的模块与 nn (LinearPsd, ConvPsd, AutoEncoder, …)及独立算法 (k-means, PCA)等兼容。
- manifold—操作流形的包。
- svm—Torch 的支持向量机库。
- lbfgs—将 liblbfgs 包装为 FFI 接口。
- vowpalwabbit —老版的 vowpalwabbit 对 torch 的接口。
- OpenGM—OpenGM 是 C++ 编写的图形建模及推断库,该 binding 可以用 Lua 以简单的方式描述图形,然后用 OpenGM 优化。
- sphagetti —MichaelMathieu 为 torch7 编写的稀疏线性模块。
- LuaSHKit —将局部敏感哈希库 SHKit 包装成 lua 可用形式。
- kernel smoothing —KNN、核权平均以及局部线性回归平滑器
- cutorch—torch 的 CUDA 后端实现
- cunn —torch 的 CUDA 神经网络实现。
- imgraph—torch 的图像/图形库,提供从图像创建图形、分割、建立树、又转化回图像的例程
- videograph—torch 的视频/图形库,提供从视频创建图形、分割、建立树、又转化回视频的例程
- saliency —积分图像的代码和工具,用来从快速积分直方图中寻找兴趣点。
- stitch —使用 hugin 拼合图像并将其生成视频序列。
- sfm—运动场景束调整/结构包
- fex —torch 的特征提取包,提供 SIFT 和 dSIFT 模块。
- OverFeat—当前最高水准的通用密度特征提取器。
- Numeric Lua
- Lunatic Python
- SciLua
- Lua – Numerical Algorithms
- Lunum
演示及脚本
- Core torch7 demos repository.核心 torch7 演示程序库
- 线性回归、逻辑回归
- 人脸检测(训练和检测是独立的演示)
- 基于 mst 的断词器
- train-a-digit-classifier
- train-autoencoder
- optical flow demo
- train-on-housenumbers
- train-on-cifar
- tracking with deep nets
- kinect demo
- 滤波可视化
- saliency-networks
- Training a Convnet for the Galaxy-Zoo Kaggle challenge (CUDA demo)
- Music Tagging—torch7 下的音乐标签脚本
- torch-datasets 读取几个流行的数据集的脚本,包括:
- BSR 500
- CIFAR-10
- COIL
- Street View House Numbers
- MNIST
- NORB
- Atari2600 —在 Arcade Learning Environment 模拟器中用静态帧生成数据集的脚本。
Matlab
计算机视觉
- Contourlets —实现轮廓波变换及其使用函数的 MATLAB 源代码
- Shearlets—剪切波变换的 MATLAB 源码
- Curvelets—Curvelet 变换的 MATLAB 源码(Curvelet 变换是对小波变换向更高维的推广,用来在不同尺度角度表示图像。)
- Bandlets—Bandlets 变换的 MATLAB 源码
自然语言处理
- NLP —一个 Matlab 的 NLP 库
通用机器学习
- Training a deep autoencoder or a classifier on MNIST digits—在 MNIST 字符数据集上训练一个深度的 autoencoder 或分类器[深度学习]。
- t-Distributed Stochastic Neighbor Embedding —获奖的降维技术,特别适合于高维数据集的可视化
- Spider—Matlab 机器学习的完整面向对象环境。
- LibSVM —支持向量机程序库
- LibLinear —大型线性分类程序库
- Machine Learning Module —M. A .Girolami 教授的机器学习课程,包括 PDF,讲义及代码。
- Caffe—考虑了代码清洁、可读性及速度的深度学习框架
- Pattern Recognition Toolbox —Matlab 中的模式识别工具包,完全面向对象
数据分析/数据可视化
- matlab_gbl—处理图像的 Matlab 包
- gamic—图像算法纯 Matlab 高效实现,对 MatlabBGL 的 mex 函数是个补充。
.NET
计算机视觉
- OpenCVDotNet —包装器,使 .NET 程序能使用 OpenCV 代码
- Emgu CV—跨平台的包装器,能在 Windows, Linus, Mac OS X, iOS, 和 Android 上编译。
自然语言处理
- Stanford.NLP for .NET —斯坦福大学 NLP 包在 .NET 上的完全移植,还可作为 NuGet 包进行预编译。
通用机器学习
- Accord.MachineLearning —支持向量机、决策树、朴素贝叶斯模型、K-means、高斯混合模型和机器学习应用的通用算法,例如:随机抽样一致性算法、交叉验证、网格搜索。这个包是 Accord.NET 框架的一部分。
- Vulpes—F#语言实现的 Deep belief 和深度学习包,它在 Alea.cuBase 下利用 CUDA GPU 来执行。
- Encog —先进的神经网络和机器学习框架,包括用来创建多种网络的类,也支持神经网络需要的数据规则化及处理的类。它的训练采用多线程弹性传播。它也能使用 GPU 加快处理时间。提供了图形化界面来帮助建模和训练神经网络。
- Neural Network Designer —这是一个数据库管理系统和神经网络设计器。设计器用 WPF 开发,也是一个 UI,你可以设计你的神经网络、查询网络、创建并配置聊天机器人,它能问问题,并从你的反馈中学习。这些机器人甚至可以从网络搜集信息用来输出,或是用来学习。
数据分析/数据可视化
- numl —numl 这个机器学习库,目标就是简化预测和聚类的标准建模技术。
- Math.NET Numerics—Math.NET 项目的数值计算基础,着眼提供科学、工程以及日常数值计算的方法和算法。支持 Windows, Linux 和 Mac 上的 .Net 4.0, .Net 3.5 和 Mono ,Silverlight 5, WindowsPhone/SL 8, WindowsPhone 8.1 以及装有 PCL Portable Profiles 47 及 344 的 Windows 8, 装有 Xamarin 的 Android/iOS 。
- Sho —Sho 是数据分析和科学计算的交互式环境,可以让你将脚本(IronPython 语言)和编译的代码(.NET)无缝连接,以快速灵活的建立原型。这个环境包括强大高效的库,如线性代数、数据可视化,可供任何 .NET 语言使用,还为快速开发提供了功能丰富的交互式 shell。
Python
计算机视觉
- SimpleCV—开源的计算机视觉框架,可以访问如 OpenCV 等高性能计算机视觉库。使用 Python 编写,可以在 Mac、Windows 以及 Ubuntu 上运行。
自然语言处理
- NLTK —一个领先的平台,用来编写处理人类语言数据的 Python 程序
- Pattern—Python 可用的 web 挖掘模块,包括自然语言处理、机器学习等工具。
- TextBlob—为普通自然语言处理任务提供一致的 API,以 NLTK 和 Pattern 为基础,并和两者都能很好兼容。
- jieba—中文断词工具。
- SnowNLP —中文文本处理库。
- loso—另一个中文断词库。
- genius —基于条件随机域的中文断词库。
- nut —自然语言理解工具包。
通用机器学习
- Bayesian Methods for Hackers —Python 语言概率规划的电子书
- MLlib in Apache Spark—Spark 下的分布式机器学习库。
- scikit-learn—基于 SciPy 的机器学习模块
- graphlab-create —包含多种机器学习模块的库(回归,聚类,推荐系统,图分析等),基于可以磁盘存储的 DataFrame。
- BigML—连接外部服务器的库。
- pattern—Python 的 web 挖掘模块
- NuPIC—Numenta 公司的智能计算平台。
- Pylearn2—基于 Theano 的机器学习库。
- hebel —Python 编写的使用 GPU 加速的深度学习库。
- gensim—主题建模工具。
- PyBrain—另一个机器学习库。
- Crab —可扩展的、快速推荐引擎。
- python-recsys —Python 实现的推荐系统。
- thinking bayes—关于贝叶斯分析的书籍
- Restricted Boltzmann Machines —Python 实现的受限波尔兹曼机。[深度学习]。
- Bolt —在线学习工具箱。
- CoverTree —cover tree 的 Python 实现,scipy.spatial.kdtree 便捷的替代。
- nilearn—Python 实现的神经影像学机器学习库。
- Shogun—机器学习工具箱。
- Pyevolve —遗传算法框架。
- Caffe —考虑了代码清洁、可读性及速度的深度学习框架
- breze—深度及递归神经网络的程序库,基于 Theano。
数据分析/数据可视化
- SciPy —基于 Python 的数学、科学、工程开源软件生态系统。
- NumPy—Python 科学计算基础包。
- Numba —Python 的低级虚拟机 JIT 编译器,Cython and NumPy 的开发者编写,供科学计算使用
- NetworkX —为复杂网络使用的高效软件。
- Pandas—这个库提供了高性能、易用的数据结构及数据分析工具。
- Open Mining—Python 中的商业智能工具(Pandas web 接口)。
- PyMC —MCMC 采样工具包。
- zipline—Python 的算法交易库。
- PyDy—全名 Python Dynamics,协助基于 NumPy, SciPy, IPython 以及 matplotlib 的动态建模工作流。
- SymPy —符号数学 Python 库。
- statsmodels—Python 的统计建模及计量经济学库。
- astropy —Python 天文学程序库,社区协作编写
- matplotlib —Python 的 2D 绘图库。
- bokeh—Python 的交互式 Web 绘图库。
- plotly —Python and matplotlib 的协作 web 绘图库。
- vincent—将 Python 数据结构转换为 Vega 可视化语法。
- d3py—Python 的绘图库,基于 D3.js。
- ggplot —和R语言里的 ggplot2 提供同样的 API。
- Kartograph.py—Python 中渲染 SVG 图的库,效果漂亮。
- pygal—Python 下的 SVG 图表生成器。
- pycascading
杂项脚本/iPython 笔记/代码库
- pattern_classification
- thinking stats 2
- hyperopt
- numpic
- 2012-paper-diginorm
- ipython-notebooks
- decision-weights
- Sarah Palin LDA —Sarah Palin 关于主题建模的电邮。
- Diffusion Segmentation —基于扩散方法的图像分割算法集合。
- Scipy Tutorials —SciPy 教程,已过时,请查看 scipy-lecture-notes
- Crab—Python 的推荐引擎库。
- BayesPy—Python 中的贝叶斯推断工具。
- scikit-learn tutorials—scikit-learn 学习笔记系列
- sentiment-analyzer —推特情绪分析器
- group-lasso—坐标下降算法实验,应用于(稀疏)群套索模型。
- mne-python-notebooks—使用 mne-python 进行 EEG/MEG 数据处理的 IPython 笔记
- pandas cookbook—使用 Python pandas 库的方法书。
- climin—机器学习的优化程序库,用 Python 实现了梯度下降、LBFGS、rmsprop、adadelta 等算法。
Kaggle 竞赛源代码
- wiki challange —Kaggle 上一个维基预测挑战赛 Dell Zhang 解法的实现。
- kaggle insults—Kaggle 上”从社交媒体评论中检测辱骂“竞赛提交的代码
- kaggle_acquire-valued-shoppers-challenge—Kaggle 预测回头客挑战赛的代码
- kaggle-cifar —Kaggle 上 CIFAR-10 竞赛的代码,使用 cuda-convnet
- kaggle-blackbox —Kaggle 上 blackbox 赛代码,关于深度学习。
- kaggle-accelerometer —Kaggle 上加速度计数据识别用户竞赛的代码
- kaggle-advertised-salaries —Kaggle 上用广告预测工资竞赛的代码
- kaggle amazon —Kaggle 上给定员工角色预测其访问需求竞赛的代码
- kaggle-bestbuy_big—Kaggle 上根据 bestbuy 用户查询预测点击商品竞赛的代码(大数据版)
- kaggle-bestbuy_small—Kaggle 上根据 bestbuy 用户查询预测点击商品竞赛的代码(小数据版)
- Kaggle Dogs vs. Cats —Kaggle 上从图片中识别猫和狗竞赛的代码
- Kaggle Galaxy Challenge —Kaggle 上遥远星系形态分类竞赛的优胜代码
- Kaggle Gender —Kaggle 竞赛:从笔迹区分性别
- Kaggle Merck—Kaggle 上预测药物分子活性竞赛的代码(默克制药赞助)
- Kaggle Stackoverflow—Kaggle 上 预测 Stack Overflow 网站问题是否会被关闭竞赛的代码
- wine-quality —预测红酒质量。
Ruby
自然语言处理
- Treat—文本检索与注释工具包,Ruby 上我见过的最全面的工具包。
- Ruby Linguistics—这个框架可以用任何语言为 Ruby 对象构建语言学工具。包括一个语言无关的通用前端,一个将语言代码映射到语言名的模块,和一个含有很有英文语言工具的模块。
- Stemmer—使得 Ruby 可用 libstemmer_c中的接口。
- Ruby Wordnet —WordNet 的 Ruby 接口库。
- Raspel —aspell 绑定到 Ruby 的接口
- UEA Stemmer—UEALite Stemmer 的 Ruby 移植版,供搜索和检索用的保守的词干分析器
- Twitter-text-rb—该程序库可以将推特中的用户名、列表和话题标签自动连接并提取出来。
通用机器学习
- Ruby Machine Learning —Ruby 实现的一些机器学习算法。
- Machine Learning Ruby
- jRuby Mahout —精华!在 JRuby 世界中释放了 Apache Mahout 的威力。
- CardMagic-Classifier—可用贝叶斯及其他分类法的通用分类器模块。
- Neural Networks and Deep Learning—《神经网络和深度学习》一书的示例代码。
数据分析/数据可视化
- rsruby – Ruby – R bridge
- data-visualization-ruby—关于数据可视化的 Ruby Manor 演示的源代码和支持内容
- ruby-plot —将 gnuplot 包装为 Ruby 形式,特别适合将 ROC 曲线转化为 svg 文件。
- plot-rb—基于 Vega 和 D3 的 ruby 绘图库
- scruffy —Ruby 下出色的图形工具包
- SciRuby
- Glean—数据管理工具
- Bioruby
- Arel
Misc
杂项
- Big Data For Chimps—大数据处理严肃而有趣的指南书
R
通用机器学习
- Clever Algorithms For Machine Learning
- Machine Learning For Hackers
- Machine Learning Task View on CRAN—R语言机器学习包列表,按算法类型分组。
- caret—R语言 150 个机器学习算法的统一接口
- SuperLearner and subsemble—该包集合了多种机器学习算法
- Introduction to Statistical Learning
数据分析/数据可视化
- Learning Statistics Using R
- ggplot2—基于图形语法的数据可视化包。
Scala
自然语言处理
- ScalaNLP—机器学习和数值计算库的套装
- Breeze —Scala 用的数值处理库
- Chalk—自然语言处理库。
- FACTORIE—可部署的概率建模工具包,用 Scala 实现的软件库。为用户提供简洁的语言来创建关系因素图,评估参数并进行推断。
数据分析/数据可视化
- MLlib in Apache Spark—Spark 下的分布式机器学习库
- Scalding —CAscading 的 Scala 接口
- Summing Bird—用 Scalding 和 Storm 进行 Streaming MapReduce
- Algebird —Scala 的抽象代数工具
- xerial —Scala 的数据管理工具
- simmer —化简你的数据,进行代数聚合的 unix 过滤器
- PredictionIO —供软件开发者和数据工程师用的机器学习服务器。
- BIDMat—支持大规模探索性数据分析的 CPU 和 GPU 加速矩阵库。
通用机器学习
- Conjecture—Scalding 下可扩展的机器学习框架
- brushfire—scalding 下的决策树工具。
- ganitha —基于 scalding 的机器学习程序库
- adam—使用 Apache Avro, Apache Spark 和 Parquet 的基因组处理引擎,有专用的文件格式,Apache 2 软件许可。
- bioscala —Scala 语言可用的生物信息学程序库
- BIDMach—机器学习 CPU 和 GPU 加速库.
http://www.08kan.com/gwk/MzA4NjA4MTkzMw/203089745/1/ca764aacc4c3601a8a608e219929ac1b.html
UFLDL教程的中文翻译——深层网络4篇
从自我学习到深层网络 From Self-Taught Learning to Deep Networks
深层网络概览 Deep Networks: Overview
栈式自编码算法 Stacked Autoencoders
微调多层自编码算法 Fine-tuning Stacked AEs
摘录其中的一句话,觉得挺有道理(嗯嗯嗯一定要搞得我已经通读所有文章的样子!):
为什么我们要使用深度网络呢?使用深度网络最主要的优势在于,它能以更加紧凑简洁的方式来表达比浅层网络大得多的函数集合。正式点说,我们可以找到一些函数,这些函数可以用
层网络简洁地表达出来(这里的简洁是指隐层单元的数目只需与输入单元数目呈多项式关系)。但是对于一个只有
层的网络而言,除非它使用与输入单元数目呈指数关系的隐层单元数目,否则不能简洁表达这些函数。
找到了一个比较好的网站,里面是一些[机器学习相关的教程,重要的是都是中文的,读起来比较快。
Homepage: http://www.cmlab.csie.ntu.edu.tw/~cyy/learning/