在阅读本文之前,建议首先阅读"简单易学的机器学习算法--word2vec的算法原理"(眼下还没公布).掌握例如以下的几个概念: 什么是统计语言模型 神经概率语言模型的网络结构 CBOW模型和Skip-gram模型的网络结构 Hierarchical Softmax和Negative Sampling的训练方法 Hierarchical Softmax与Huffman树的关系 有了如上的一些概念,接下来就能够去读word2vec的源代码. 在源代码的解析过程中,对于基础知识部分仅仅会做简…
word2vec源代码解析之word2vec.c 近期研究了一下google的开源项目word2vector,http://code.google.com/p/word2vec/. 事实上这玩意算是神经网络在文本挖掘的一项成功应用. //以下是我对word2vec.c的凝视 //具体算法能够參考论文,或者看这篇博客 http://www.cnblogs.com/downtjs/p/3784440.html // Copyright 2013 Google Inc. All Rights Rese…
Spring类的继承结构图: Spring运用了大量的模板方法模式和策略模式,所以各位看源代码的时候,务必留意,每个继承的层次都有不同的作用.然后将同样的地方抽取出来,依赖抽象将不同的处理依照不同的策略去处理. 步骤A. 读取 Resource 文件形成 Document 模型  类图: XmlBeanFactory -> XmlBeanDefinitionReader           Spring 使用 XmlBeanDefinitionReader 来读取并解析 xml 文件,XmlBe…
本节主要介绍的是libFM源码分析的第五部分之二--libFM的训练过程之Adaptive Regularization的方法. 5.3.Adaptive Regularization的训练方法 5.3.1.SGD的优劣 在"机器学习算法实现解析--libFM之libFM的训练过程之SGD的方法"中已经介绍了基于SGD的FM模型的训练方法,SGD的方法的最大优点是其训练过程很简单,只需在计算的过程中求解损失函数对每一个参数的偏导数,从而实现对模型参数的修改. 我们都知道,FM模型对正则…
本节主要介绍的是libFM源码分析的第五部分之一--libFM的训练过程之SGD的方法. 5.1.基于梯度的模型训练方法 在libFM中,提供了两大类的模型训练方法,一类是基于梯度的训练方法,另一类是基于MCMC的模型训练方法.对于基于梯度的训练方法,其类为fm_learn_sgd类,其父类为fm_learn类,主要关系为: fm_learn_sgd类是所有基于梯度的训练方法的父类,其具体的代码如下所示: #include "fm_learn.h" #include "../…
本节主要介绍的是libFM源码分析的第四部分--libFM的训练. FM模型的训练是FM模型的核心的部分. 4.1.libFM中训练过程的实现 在FM模型的训练过程中,libFM源码中共提供了四种训练的方法,分别为:Stochastic Gradient Descent(SGD),Adaptive SGD(ASGD),Alternating Least Squares(ALS)和Markov Chain Monte Carlo(MCMC),其中ALS是MCMC的特殊形式,实际上其实现的就是SGD…
本节主要介绍的是libFM源码分析的第三部分--libFM的模型处理. 3.1.libFM中FM模型的定义 libFM模型的定义过程中主要包括模型中参数的设置及其初始化,利用模型对样本进行预测.在libFM中,首先定义FM模型,在fm_model类中实现对FM模型的定义,fm_model类在"\libfm-1.42.src\src\fm_core\fm_model.h"中.在定义fm_model类之前,使用到了一些数据类: #include "../util/matrix.h…
Java Arrays.sort源代码解析 Java Arrays中提供了对所有类型的排序.其中主要分为Primitive(8种基本类型)和Object两大类. 基本类型:采用调优的快速排序: 对象类型:采用改进的归并排序. 一.对于基本类型源码分析如下(以int[]为例): Java对Primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用归并排序.对这一区别,sun在<<The Java Tutorial>>中做出的解释如下: The so…
缓存 1.官方文档 MyBatis 包括一个非常强大的查询缓存特性,它能够非常方便地配置和定制. MyBatis 3 中的缓存实现的非常多改进都已经实现了,使得它更加强大并且易于配置. 默认情况下是没有开启缓存的,除了局部的session 缓存,能够增强变现并且处理循环 依赖也是必须的.要开启二级缓存,你须要在你的 SQL 映射文件里加入一行: <cache/> 字面上看就是这样. 这个简单语句的效果例如以下: ·        映射语句文件里的全部 select语句将会被缓存. ·     …
转载请标明出处:一片枫叶的专栏 android开发过程中常常会用到缓存.如今主流的app中图片等资源的缓存策略通常是分两级.一个是内存级别的缓存,一个是磁盘级别的缓存. 作为android系统的维护者google也开源了其缓存方案,LruCache和DiskLruCache.从android3.1開始LruCache已经作为android源代码的一部分维护在android系统中.为了兼容曾经的版本号android的support-v4包也提供了LruCache的维护,假设App须要兼容到andr…