转:CRF++总结2

文章出处:http://blog.sina.com.cn/s/blog_5980285201018m6r.html

CRF++代码中还有LBFGS算法没有读,利用空闲时间仔细读了下,总结如下:
 
 

LBFGS算法

CRF++中与L-BFGS相关的代码都存放在lbfgs.h和lbfgs.cpp中

其中mcsrch函数用于线性搜索,找到给定搜索方向后合适的步长

lbfgs_optimize函数实现了L-BFGS算法。 

 

LBFGS算法的理论相关的最重要的论文:

[Jorge Nocedal; updating quasi-newton matrices with limited storage

是一个拟牛顿算法,它是70年代以来无约束最优化领域最佳的算法

其他的无约束最优化算法包括:最速下降法、牛顿法、共轭梯度法、DFP算法、BFGS算法等。

也可以参照下边这篇文章来了解一下:(这篇文章讲到了CRF++中LBFGS算法的几乎所有细节)

http://blog.pfan.cn/miaowei/52948.html(CRF++详解) 

 

直接读CRF++代码还是稍微有些恶心,参照以下几个链接中的文章读一下

http://code.google.com/p/bungee-view/source/browse/trunk/lbfgs/edu/cmu/cs/bungee/lbfgs/Mcsrch.java?r=108(mcsrch函数的java版本,注释稍微多一些)

 

http://blog.csdn.net/settingsun1225/article/details/6142739(LBFGS算法使用,讲的是其他版本的LBFGS算法细节)

这篇文章详细介绍了w_ 这个变量的内部数据存储情况:

C     THE WORK VECTOR W IS DIVIDED AS FOLLOWS:
C     ---------------------------------------
C     THE FIRST N LOCATIONS ARE USED TO STORE THE GRADIENT AND
C         OTHER TEMPORARY INFORMATION.
C     LOCATIONS (N+1)...(N+M) STORE THE SCALARS RHO.
C     LOCATIONS (N+M+1)...(N+2M) STORE THE NUMBERS ALPHA USED
C         IN THE FORMULA THAT COMPUTES H*G.
C     LOCATIONS (N+2M+1)...(N+2M+NM) STORE THE LAST M SEARCH
C         STEPS.
C     LOCATIONS (N+2M+NM+1)...(N+2M+2NM) STORE THE LAST M
C         GRADIENT DIFFERENCES.
C
C     THE SEARCH STEPS AND GRADIENT DIFFERENCES ARE STORED IN A
C     CIRCULAR ORDER CONTROLLED BY THE PARAMETER POINT.

 

有了这些帮助读LBFGS的C++版本就变得轻松加愉快了!

posted @ 2012-12-21 22:02  东嘉CEO  阅读(478)  评论(0编辑  收藏  举报