Sa1ka

God's in his heaven, all's right with the world.

线性分类器

前言 最近一直在看一些传统机器学习算法,相比深度学习,传统计算学习算法的理论基础比较扎实,各种分析也更为透彻,往往一些基础简单的算法背后有着各种各样有意思的联系,比如 SVM 与 LR 的区别只是在于损失函数略有不同,而 LR 实际上是最大熵模型的一种特殊表现形式。因此在这里详细总结一下最近的这些感悟。 线性分类器 分类问题是机器学习中最基础的一个问题,其中线性分类问题更是万物之源。我们先...

DataParallel pytorch 代码阅读

前言 最近在做大规模深度神经网络并行的事情,因此模型的多卡并行训练成了必须的事情.并行化可在在模型或者数据两个层面上进行,相比模型并行,数据并行更容易实现而且额外的开销的更小,模型并行一般在模型十分巨大的情况下才会使用(比如一个超大的神经网络,无法存储在一张 GPU 内). 虽然 Pytorch 在多机多卡方面做的并不如 MXNet,但是其提供的 DataParallel (DP) 和 ...

OpenNMT pytorch 代码阅读

前言 OpenNMT 是一个开源神经网络机器翻译项目, 许多出名的工作都是在这个项目之上进行的. 目前它主要有3个实现: OpenNMT-lua, 是该项目最初的实现, 采用了 LuaTorch. 里面包含了所有的 feature. OpenNMT-py, OpenMNT-lua 的一个 clone, 采用 pytorch, 比较适合 research. OpenNMT-t...

Factorized Softmax for Language Modeling

基于神经网络的语言模型 对于基于神经网络的语言模型 neural networks based language models, 所占计算比重最大往往是 softmax 之前的大矩阵乘法. 如隐层大小为 $h$, 输出词表大小为 $V$, 那么其计算复杂度为 $O(hV)$, 随 $V$ 的增大呈线性增长. 要想提升模型的效率, 必须在这块上做出改进. 改进的方向主要有两种: s...

随机误差与高斯分布

前言 高斯分布是我们常用的一个概率分布,特别是在处理误差时,一个最常用假设就是误差呈高斯分布: 这个公式有很多漂亮的性质,在这里就不做过多的说明。本文主要探讨一下为什么误差分布一般会呈高斯分布以及高斯分布的一些直观含义? 误差度量与最小二乘法 日常生活中,最常用的误差度量方法是欧式距离,文章 《Mean squared error: Love it or leave it?》做出...

多直线拟合

问题描述 直线拟合是数据挖掘中最最最基本的算法之一了,如果给定一群点,让你直接用一根直线去拟合,那么这就是最基本的线性回归问题。但是如果给定如下一群点,这群点里可能存在多根直线需要拟合呢? 此时显然无法用线性回归直接求解了,因为我们根本不知道哪些点是属于哪根直线的。 求解思路 暴力求解法 基本思想 先说一种最暴力的方法,既然我们的目的是找出那三根直线,那不如先把所有可能直线枚举...

理解EM

Expectation-Maximization(EM)算法是机器学习里的经典算法之一,每次学习它的时候总有新的收获,因此在这里就总结一下。 问题提出 EM算法的目的是为了解决含隐变量模型的参数估计问题。那么含隐变量模型的参数估计难在哪里呢,这里以高斯混合模型(Gaussian Mixture Model, GMM)为例。 GMM模型的基本假设是这样的,我们得到的数据是由多个高斯生成的...

C++ STL中 next permutaion 的原理

今天在学习C++ STL的时候发现了一个很有趣而且很实用的函数,也就是针对顺序容器的一个排列函数:next_permutation,其函数原型如下: next_permutation的函数原型如下: template<class BidirectionalIterator> bool next_permutation( BidirectionalIterator _...

Min Stack

这是LeetCode上的一道Easy难度的题目,问题描述如下: Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) – Push element x onto stack. pop() – Remo...

Hello World!

print "hello world!"