Search This Blog

Friday, November 11, 2011

强化学习(Reinforcement learning)

在强化学习(Reinforcement learning)中,学习主体自身通过训练,误差和反馈,学习在环境中完成目标的最佳策略。我们并没有直接告诉主体要做什么或采取那个动作,而是主体通过看那个动作得到了最多的奖励来自己发现。
强化学习由四部分组成:策略 奖励函数 值映射 和一个环境模型。
设计强化学习算法是要考虑三方面问题。
       一,如何表示状态空间和动作空间。
       二,如何选择建立信号以及如何通过学习来修正不同状态-动作对的值。
       三,  如何根据这些值来选择适合的动作。
       用强化学习方法研究未知环境下的机器人导航,由于环境的复杂性和不确定性,这些问题变得更复杂。
所谓强化学习是指从环境状态到动作映射的学习,以使动作从环境中获得的累积奖赏值最大.该方法不同于监督学习技术那样通过正例、反例来告知采 取何种行为,而是通过试错(trial and error)来发现最优行为策略。常用的强化学习算法包括TD(Temporal Difference)算法、Q学习算法、Sarsa算法等
标准的强化学习,智能体作为学习系统,获取外部环境的当前状态信息s,对环境采取试探行为u,并获取环境反馈的对此动作的评价r和新的环境状 态。如果智能体的某动作u导致环境正的奖赏(立即报酬),那么智能体以后产生这个动作的趋势便会加强;反之,智能体产生这个动作的趋势将减弱。在学习系统 的控制行为与环境反馈的状态及评价的反复的交互作用中,以学习的方式不断修改从状态到动作的映射策略,以达到优化系统性能目的。
据此可得出强化学习的目标是:学习从环境状态到行为的映射,使得智能体选择的行为能够获得环境最大的奖赏,使得外部环境对学习系统在某种意义下的评价 (或整个系统的运行性能)最佳。

http://en.wikipedia.org/wiki/Reinforcement_learning

Sunday, October 30, 2011

矩形相交算法

假定矩形是用一对点表达的(minx,miny)(maxx, maxy)
那么两个矩形rect1{(minx1,miny1)(maxx1, maxy1)}, rect2{(minx2,miny2)(maxx2, maxy2)}

相交的结果一定是个矩形,构成这个相交矩形rect{(minx,miny)(maxx, maxy)}的点对坐标是:
minx = max(minx1, minx2)
miny = max(miny1, miny2)
maxx = min(maxx1, maxx2)
maxy = min(maxy1, maxy2)

如果两个矩形不相交,那么计算得到的点对坐标必然满足
minx > maxx
或者
miny > maxy

判定是否相交,以及相交矩形是什么都可以用这个方法一体计算完成

Tuesday, September 27, 2011

Scalable Link Interface

http://en.wikipedia.org/wiki/Scalable_Link_Interface

Monday, September 19, 2011

Friday, September 9, 2011

host thread context

http://forums.nvidia.com/index.php?showtopic=72089
http://forums.nvidia.com/index.php?showtopic=200169

Wednesday, September 7, 2011

cuda context

http://forums.nvidia.com/index.php?showtopic=43545

Thursday, August 11, 2011

-o 表示产生目标文件。
-c 表示只编译代码但不进行链接,加改参数生成的目标文件是不能执行的(我们常用的链接库就是这样得来的)。

通常在只有一个源文件的情况下不需要加-c。但实际上大多数情况下C程序远不止1个源文件,当main函数需要调用不在同一源文件下的函数时就需要链接到包含该函数的目标文件。
举个例子:
/*main.c*/
#include<stdio.h>
int main(){
      test();
}

/*test.c*/
#include<stdio.h>
extern void test(){
}
gcc -c test.c -o test
   gcc test main.c -o main 
-c只编译不链接,生成object文件
如果不加-c只使用-o选项,gcc会调用ld来链接生成可执行的二进制文件
与-c类似的选项有-E只预处理,-s生成汇编文件 
 
    if main function is in the same .c file:
gcc -c test.c -o test
   gcc test -o test 
 
gcc -c traverse.c
生成.o文件 
gcc -o traverse  traverse.o(注意.o在后面)
生成可执行文件

如何写好外刊论文

如何写好外刊论文

有人归纳了外刊论文撰写的五个基本要求,即5C:正确(correctness)、清楚(clarity)、简洁(concision)、完整(completion)和一致性(consistency) 。只有满足这5点,才算是一篇合格的外刊文章。
1. Introduction:
Introduction是外刊文章最难写的部分之一(另外就是Discussion)。中文文章的缺陷就在于Introduction没有内涵,过于简 单,没有真正体现论文的研究起初和创新要素。外刊论文对于Introduction的要求是非常高的,一个好的Introduction相当于文章成功了 一半。所以大家应该在Introduction的撰写上下功夫。要写好Introduction,最重要的是要保持鲜明的层次感和极强的逻辑性,这两点是 紧密结的,即在符合逻辑性的基础上建立层层递进的关系。
A. 阐述自己研究领域的基本内容。要尽量简洁明了,不罗嗦;须知看文章者都是该领域的专家,所以一些显而易见的知识要用概括性的而不是叙述性的语言来描述。
B. 文献总结回顾。是Introduction的 重头戏之一,要特别着重笔墨来描写。一方面要把该领域内过去和现在的状况全面概括总结出来,不能有丝毫的遗漏,特别是最新的进展和过去经典文献的引用(这 是两个最容易出问题的地方,要极力避免;一旦审稿人指出这两个毛病,很可能意味着表明你做的不够深入或全面,负面作用非常明显)。另一方面,文献引用和数 据提供一定要准确,切记避免片面摘录部分结果而不反映文献的总体结果;引用的数据也要正确,特别是间接引用的数据(即不是从原文献中查到,而是从别人文献 中发现的另一篇文献的数据);数据出错会导致文章的印象特差!此外,引用文献时注意防止造成抄袭的印象,即不要原文抄录,要用自己的话进行总结描述。如果 审稿人正好是文献的引用者的话,原文照抄的结果一定会很糟糕。
C. 分析过去研究的局限性并阐明自己研究的创新点。这是整个Introduction的高潮,因而要慎之又慎。阐述局限性时,需要客观公正评价别人的工作,不 要把抬高自己研究的价值建立在贬低别人的工作之上(这是中文文章易犯的毛病),外刊论文写作万万不可如此,一定要遵循实事求是的原则来分析。在阐述自己的 创新点时,要紧紧围绕过去研究的缺陷性来描述,完整而清晰地描述自己的解决思路。需要注意文章的摊子不要铺的太大,要抓住一点进行深入的阐述。只要能够很 好的解决一个问题,就是篇好文章;创新性描述的越多越大,越容易被审稿人抓住把柄。中文文章的特点是创新性要多要大,而英文文章的特点恰恰相反,深入系统 的解决一到两个问题就算相当不错。
D. 总结性描述论文的研究内容,可以分为一二三四等几个方面来描述,为Introduction做最后的收尾工作。 至此,Introduction的写作算是大功告成。但是写完之后,还是要慎之又慎的仔细修改,琢磨每一个句子是否表达得恰当准确,这对 Introduction的修改完善至关重要。
2. Methods:
Methods部分描述论文实验过程,这一过程的写作相对较为简单,但是需注意的问题不少,重要的在于完整和科学。完整就是实验当中的每一个环节都要注意 到,不要顾此失彼,遗漏一些重要内容。Methods部分可按实验对象、实验设备、实验材料、实验记录、实验分析方法等来组织行文。只要能在以下4个方面 做到完整和科学的描述,相信写好Methods不是主要问题。
A. 实验对象一般是人、动物或一些组织等,它们的基本信息要描述明确;此外要注意国外刊物大多对牵扯到人或动物的实验都有一些特定要求,有些是不允许在人或动 物身上进行的实验操作,这需要认真阅读投稿刊物中关于实验的详细规定;如果违反这一规定,可能会不接受评审或发表。
B. 实验设备,要对仪器型号、生产厂家、实验过程中的用途等作详细说明;实验设备之间的连接要科学正确,不要给人混乱或操作错误的感觉。设备使用时一些必要的 步骤不可或缺,尤其是可能对实验结果造成特定影响的操作更要详细说明。这样做的好处是为了在Discussion中能够进行对应的分析。比如,一些设备在 使用前要校正(calibration),有的要求每阶段实验之后都要重新校正,以保证结果的正确性;一定要详细说明你的操作步骤或校正过程,便于评审人 分析你的结果。
C. 实验材料,不同学科有不同要求。总体上来说要注意说明材料选择的必要性,也就是对为什么要选择这种材料,最好有一定的说明。如果这点描述不清,可能会导致整个实验过程不成立。
D. 实验过程,就是清楚描述实验的整个操作流程,一般要附以实验流程图进行说明。流程图的画法很多,有文字式的,有文字和示意图结合的,不同实验有不同做法。 一般来说,可能后者多一些(实验性学科尤其如此),因为这样能使评审人对实验过程一目了然。如果示意图画得漂亮,还可以增加一些印象分。描述时要有鲜明的 层次感,对每个步骤之间的顺序和关联要描述清楚,不要造成实验过程混乱不堪的印象,因为评审人最终判断你的实验是否合理,是从这个过程描述得来的。
3. Results:
有人把Results和Discussion放在一起写,但是大多数论文都是分开的。这两种做法取决于文章的类型。如果你的结果在分析的同时进行讨论更加 合适,并不适合单独拿出来分析(或者是那样做很困难,导致Discussion成为鸡肋时),合在一起是合适的;反之就应该分开写。
A. Results的要求是翔实准确。准确是结果必须是真实的,不能伪造和篡改。翔实是提供最全面的分析结果,把一切从实验中得到的结果都提供给读者,不要故 意隐瞒或遗漏某些重要结果。从某种意义上来说,结果不够翔实并不导致论文直接被拒,但结果的真实性被怀疑文章就肯定被拒。
B. 结果提供一般是表和图。不同杂志对图表要求不完全一致,应根据杂志要求分别对待。表格能清晰展示论文获得的第一手结果,便于后人在研究时进行引用和对比。 图示能将数据的变化趋势灵活的表现出来,更直接和富于感染力。图表结合,能取长补短,使结果展现更丰富。目前,大家越来越喜欢提供各种各样的图,但杂志却 要尽量限制图的个数;因为会增加排版的困难,版面费和出版社的支出也就会增加。因此,建议大家在提供图时,尽量用最少的图提供最多的信息,最多不超过8 个。图片太多显得罗索和累赘,主编不会欣赏;必要时可用表格替代一些图。图片格式要求每个杂志不同,用tif格式较多,不推荐用bmp(jpg更不能 用)。有人说用矢量图清楚些,其实和tif没什么区别,只要足够清晰就行。黑白图片可免费,彩色图片绝对要收费,而且价格不菲。
C. Results和Discussion分开写时,Results部分尽量不要涉及对结果的评论,最多是总结陈述结果就可以了。否则造成这两部分的内容重 叠,显得累赘,从而对Discussion不利。结果的描述也要注意层次安排,要按照条理性要求分别描述,显得逻辑性较强。不要乱七八糟,降低论文的可读 性。
D. Results中大多要提供统计结果。方差分析的结果形式要根据刊物的格式给出,有的要求对分析值、自由度和概率都要详细的给出,有的只要分析值和概率就 可以了。概率可以用p=0.02或者p<0.03等形式给出,自由度的表达也有特殊要求。这些细节问题虽然关系不大,但是注意格式统一,不要乱七八 糟各自为战。统计分析结果过多时,可用表格给出,具体可参照SPSS软件分析之后的结果。如果论文结果部分通篇都是统计分析的数据,会显得凌乱不堪,表格 可以避免这种情况。
4. Discussion:
Introduction和Discussion是最难写的两部分。Discussion之所以难写,是因为这里面最能够显示一个作者研究问题的深度和广 度。深度就是论文对于提出问题的研究到了一个什么样的程度,广度指是否能够从多个角度来分析解释实验结果。要写好Discussion,大概可以分为下面 两个步骤:
A. 选择要深入讨论的问题。Results中有的结果是重要的,有的则可一笔带过。选择合适的结果在Discussion部 分进行深入讨论,是写好该部分首先要面临的问题。一般来说,可根据如下原则来判断:如果你的结果体现了实验的独特性,是其他研究中没有得到的,那这个结果 就是要重点讨论的问题;有些结果和前人的研究一致,并没有显著性差异,就应该一笔带过而无需深入讨论。Discussion的一个重要作用就是要突出自己 研究的创新性,并体现出显著区别于他人的特点,区别大和小是另外一个问题,重要的是要有区别、区别就是创新。
B. 对选中的问题按一定层次从多个角度进行讨论,说理要有根据、问题要讲清楚、讲透彻。选择的问题有时不只一个(多数情况是2个以上),因此要按一定层次描述 清楚。一般来说,把最重要的放在中间,次之的放开头和末尾。放在中间能将评审人的情绪带至高潮,前面是铺垫,后面是总结。这样的顺序似乎更合适。问题无论 大小,是否重要,都要从多个角度展开深入讨论:(1)首先要有类似结果的对比,说明自己结论的独特性;(2)其次要系统阐述为什么会有这样的结果,方法有 多种(从实验设计角度,从理论原理角度,从分析方法角度,或借鉴别人分析方法等等)。重要的是将这个问题深入阐述清楚,不能让人有意犹未尽之感(要做到这 点的确很困难,因为评审人总会提出新的问题,我们只可能尽量做到这一点罢了)。
C. Discussion部分还要注意保持和Results的一致性!就是结果和讨论要一一对应。千万不要出现按讨论的内容可以推出与实验相反的结论这种情 形,那证明你的讨论思路是彻底的失败或你的实验压根儿就是失败的。所以Discussion的文字描述和语言表达的精确性尤为重要。由于中英文表达的不 同,在投稿之前要尽量避免出现表达上的误解,如果论文因此被拒是很冤枉的。

5. Acknowledge & References:

Acknowledge主要分为两个:第一是表明研究的基金来源,中国一般都是Nature Science Foundation of China(NSFC,国家自然科学基金),美国大多是National Institute of Health(NIH, 美国国家卫生研究院)。写基金时一般要标注清楚基金号码(Grant Number),只有这样才算是该项基金的研究成果,也可以算做实验室的研究成果。须知没有任何一项研究成果是在没有资金资助的情况下完成的,所以这一点 非常必要。第二是对参与人员(没有列在作者中的研究人员)和单位表示感谢,如果通过一审和最终接受发表,还要添上对editor和anonymous reviewers的感谢,这是基本礼貌。
References重要在于格式。不同杂志对参考文献格式要求不一样,具体下来有所区别的可以分为:作者的写法,有的是简写在前,有的简写在后, 有的简写有点,有的简写没有点;文章的名字,有的要加上引号,有的没有引号;期刊的写法,有的要简写,有的要全称,有的要斜体,有的则不需要;年和期卷号 的顺序,有的是年在前,有的是年在后;期刊论文、书、学位论文、会议论文,四种引用的格式各不相同;文献的排列顺序,有的是按照字母的顺序,有的则是按照 在论文中出现的顺序用阿拉伯数字排序。基本上就是这些问题,看来很是琐碎,但是如果你的参考文献排列的乱七八糟,那就会使得评审人对你论文的印象很差,认 为你没有认知组织和撰写论文,造成一定的负面影响。所以,事情虽小,影响却大,还是要认真组织为好。
此外,论文在撰写时要自始至终都用英语写,千万不要先写中文再译成英文。这样写出来的文章肯定是中不中,英不英,而且极大浪费精力。宁可一开始写得 语法差一些,慢慢修改都比这种写法好。如果有同专业英语比较好的人帮助的话,这样写还会更省事。写作时行文时态要注意,中文没有时态问题,英文有,而且要 求还相当严格。一般来说,大多数情况下是过去时态,在Introduction文献回顾,Methods整个部分,Results结果总 结,Discussion中的大部分,都用过去时态陈述。其他情况下可以用一般时态来描述。时态之间的界限是比较严格的,最好是仔细的通读国外的论文,好 好分析一下,或者让有经验的人帮你把把关,这样比较好一些。
二、Writing Skills in English for Research Paper
写paper 注意九个环节:Preparation, Structure, Title, Abstracts, Introduction, Conclusion, Body of Paper, Recision, Acknowledgement。Preparation就是收集资料,找出灵感和方向,主要依靠的是journal in library。Structure是重点,paper的structure应该是两个triangle组成的:上面一个倒三角,下面一个正三角,意思就 是选题要宽(wide),研究方向要窄,然后最后的conclusion又发散开来。在paper的body前后都必须有declarative statement,用最少的字句表达出自己的观点,吸引读者。
Title必须清晰简短(clear,short),表达出自己唯一的topic以提升读者的兴趣(promote the interest of reader),然而title中切记不能出现abbreviation和自己的result。
Abstracts 是paper的一个缩写(miniature of whole paper),一定要简明扼要(less than 200 words,one paragraph),按照paper的顺序介绍主要研究对象(subject)、实验设计(design)、实验步骤(procedures)以及最后 结果(results),这种介绍必须让非专业的人员 (non-specialist) 能够看懂。
Introduction 同样要保证简短,顺序是一般背景介绍、别人工作成果、自己的研究目的及工作简介,其中介绍别人工作时只需介绍和自己最相关的方面(very relevant),而对自己的工作介绍不用说明细节,因为这个要放到body中去。不要忘记在介绍自己工作之前要有一个declarative statement。
Body部分可以分为methods、result和discussion三个部分:①Methods,详尽的介绍自己的实验方案以便于他人能够重 复自己的实验过程,对于通用的实验方案可以简略,重点要放到自己的独创方案上面(own procedures),按照实验的先后顺序介绍,为了文章的阅读方便,不要使用过多层次的subheadings,比如 subsubsubsection等等。②Result,使用text、table、figure等手段表达出来,其中table不要使用过多,而 figure必须保证图线清楚、注解明确,必要的时候还要对于自己的result中的一些结论进行解释说明。③Discussion,这个部分是为了以后 的study,在其中提出自己的problem或者是hypothesis,和别人的成果进行比较,暗示自己的主要收获,为后面的conclusion做 准备。
Conclusion中不要包含body以外的information,保持brief、neat和concise,一定要舍得结束自己的 paper;如果自己的paper只是project的一部分,稍做说明。Revison是在写完之后回头看看是否有逻辑上的错误,是否考虑到了读者兴 趣,自己的declarative statement是否令人满意,Brevity is the soul of literary construction。Acknowledgement,不要忘记,这个反应了一个人的个人品质。

Wednesday, August 10, 2011

cudaError_t cudaHostAlloc ( void **  ptr,


size_t  size,


unsigned int  flags 

)


Allocates count bytes of host memory that is page-locked and accessible to the device. The driver tracks the virtual memory ranges allocated with this function and automatically accelerates calls to functions such as cudaMemcpy(). Since the memory can be accessed directly by the device, it can be read or written with much higher bandwidth than pageable memory obtained with functions such as malloc(). Allocating excessive amounts of pinned memory may degrade system performance, since it reduces the amount of memory available to the system for paging. As a result, this function is best used sparingly to allocate staging areas for data exchange between host and device.
The flags parameter enables different options to be specified that affect the allocation, as follows.
  • cudaHostAllocDefault: This flag's value is defined to be 0 and causes cudaHostAlloc() to emulate cudaMallocHost().
  • cudaHostAllocPortable: The memory returned by this call will be considered as pinned memory by all CUDA contexts, not just the one that performed the allocation.
  • cudaHostAllocMapped: Maps the allocation into the CUDA address space. The device pointer to the memory may be obtained by calling cudaHostGetDevicePointer().
  • cudaHostAllocWriteCombined: Allocates the memory as write-combined (WC). WC memory can be transferred across the PCI Express bus more quickly on some system configurations, but cannot be read efficiently by most CPUs. WC memory is a good option for buffers that will be written by the CPU and read by the device via mapped pinned memory or host->device transfers.
All of these flags are orthogonal to one another: a developer may allocate memory that is portable, mapped and/or write-combined with no restrictions.
cudaSetDeviceFlags() must have been called with the cudaDeviceMapHost flag in order for the cudaHostAllocMapped flag to have any effect.
The cudaHostAllocMapped flag may be specified on CUDA contexts for devices that do not support mapped pinned memory. The failure is deferred to cudaHostGetDevicePointer() because the memory may be mapped into other CUDA contexts via the cudaHostAllocPortable flag.
Memory allocated by this function must be freed with cudaFreeHost().

Parameters:

ptr - Device pointer to allocated memory

size - Requested allocation size in bytes

flags - Requested properties of allocated memory
Returns:
cudaSuccess, cudaErrorMemoryAllocation
Note:
Note that this function may also return error codes from previous, asynchronous launches.
See also:
cudaSetDeviceFlags, cudaMallocHost, cudaFreeHost

Friday, July 15, 2011

旧房

二手房选房有讲究 买房前弄清八大问题

问题1:这房是什么朝向?

选购二手房,良好的朝向,可以保证有大量阳光通过窗户直射入室,改善住宅室内环境,如光、温度、卫生状况,对居住者的身心健康十分有利。

通常认为,住宅朝向以正南最佳,东西次之,朝北最次。当然,考虑朝向,除了上述因素外还应考虑开窗时所面对环境,即窗景。窗景应当趋利避害,趋优避劣。同层南北不同朝向的价格平均相差10%-15%,甚至20%以上,价格和朝向平衡后选择为佳。

问题2:采光与通风好吗?

采光面指用于采光的面积与房间面积的比例,比例越高,采光效果越好。采光窗户直接向外开设;间接采光指采光窗户朝向封闭式走廊、直接采光厅、厨房等开设。间接采光效果不如直接采光。

选购住宅时,其主要房间应有良好直接采光。一套住宅最好占据住宅楼的两个朝向,如板式住宅的南与北、东与西,塔式住宅的东与南、南与西等。如果只占据一个朝向时,通风效果就要差一些,这时可以考虑利用门窗、通风井、天井及机械装置通风。

问题3:功能区域和面积是如何分配的?

住宅应充分考虑住户的家庭结构和生活规律,使家庭使用功能细化。理想住宅中,起居空间由过厅、客厅、起居室、健身房、琴房、书房、工作室、卫生间、卧室、储藏室、阳台等组成,按各自功能可汇总为“污、洁、动、静”四大空间。

对于广大工薪阶层来说,以下的房子可能最适合您。

最 佳房型组合:三房一厅两卫双阳台,两房一大厅双卫双阳台或一房一厅一卫一阳台。这些房型是适合三代人口可分可合、自由分隔房型、建筑面积分别在 70-130平方米,主卧室15-25平方米含书房,次卧室10-12平方米,卫生间4-6平方米,阳台4-8平方米,工作阳台3-5平方米,洗衣房4万 平方米。其中,客厅是房型设计中的重心,客厅宽度不小于4米的大开间,能够体现房型设计中的“客厅效应”。大厅的功能主要是家庭起居、会客,最好其朝向为 南向或景观向。

问题4:这房有质量保证吗?

房屋质量问题主要起因于设计、施工中留下隐患,主要体现在结构、材料、功能设置、施工管理、质量监督等几个方面,由于专业性较强,一般购房者很难检验。

住宅性能的高低主要取决于建材质量的好坏,以及承重结构的连接形式、施工质量和地基的状态。购房者

必须认真审阅商品住宅楼的《住宅质量保证书》、《质检合格证书》、《住宅使用说明书》等相关证件来考察住宅楼的质量。

问题5:小区的环境与配套如何?

由于人们在冰冷“混凝土”盒子里被禁锢了许多年,现在随着居住质量的不断改善,居住环境的好坏成了一个不容忽视的问题,而且小区配套设施是否完善也是这个小区成熟与否的标志。

作为一名购房者应该认真考察一下自己将来生活的环境,不仅要求有较高绿地覆盖率和景观建设,而且还要真正能为己所用。另外还要考察所购买的楼房之间的间距、容积率、建筑密度和四周污染情况(如尽量远离工厂、马路、大商场)。

问题6:今后哪家物业公司管理?

物业服务的好坏是房屋是否升值一个重要因素。

好 的物业管理会给自己将来生活带来便利,而差的物业管理不仅会影响到自己的日常生活,还可能引发大量的纠纷。看房不可不问物业管理,要积极向有关人员打听负 责小区服务的物业管理公司,最好能查看他们的有关资质、实力的文件,亦可去他们现服务的其他小区打听有关他们的服务行为。

问题7:这房在几楼?

选择层次要考虑以下几个因素:遮挡及采光情况;生活便利程度;环境要求;家庭人口年龄构成及健康状况;住宅楼的总层数。

层次越高,遮挡越少,采光越好,且能避开低层次楼内外嘈杂环境及交通噪音和粉尘污染,特别适合于在家生活时间较短的中青年人居住;层次低,上下楼比较方便,适宜老年人居住,可增加其户外活动的机会。

说到不利一面,住宅楼的底层由于受遮挡可能性最大,且有污水外溢、地面潮湿的可能,人来人往安全性差。在购房者选择层次时往往不被看好;住宅楼顶层建筑质量问题发生频率高,如渗漏,并且存在隔热不好,供水不足,上下楼最为不便等缺陷。许多人买房最忌买底层和顶层。

问题8:电梯、楼梯是怎么设计的?

时下许多塔楼和小高层楼房中,电梯的质量已越来越不容忽视。有关电梯故障和事故时有发生,不仅给人们的生活带来不便,而且还威胁到人们的安全。

看房时要仔细查看该楼盘所用电梯品牌资质,是否有国家颁发的合格证书等。同时还要查看步行楼梯的安全情况,楼梯宽度是否符合标准,楼道是否畅通,发生危险情况时,是否有利于逃生等等
 

工薪阶层必读房经

工薪阶层必读房经

许多人并不富有,许多人长年累月就为了一套房子,许多人以富人居之,但并没有房子。观念使然。从普通收入阶层以及一般老百姓看,穷人越来越认为,一套属于自己的房子,置之终身之负亦不为憾。 穷人的房经,一是为自己打气,穷其一身,概而居之;穷人的房经,不为现买现卖,只为他乡事、他乡人、本地一员足矣。但高达十几倍的房价收入比,是为之却步,还是再向佛山行?
配偶经。
无论你单身一人还是两厢情愿,必须保证一方具备稳定的收入。这是保证一方奋不顾身、勇往直前的本钱。
无论多少,这个稳定的收入点是你谋得终身之愿的“星星之火”。
和谐经。
争吵不利于你得到你自己的房子。许多家庭为了买房经常拿争吵说事。争吵除了在感情的纸上面涂涂划划,还影响到购房决策,急功近利以致成为房奴的下品。只有和谐有利于双方共同谋划出买房储备。
借钱经。
有许多房户动用一切手段,说尽一切好话,做尽一切承诺,就为了在不当的时间居高拿下一套属于自己的房子。这是不可取的。我所指的借钱经,是不借则已的一种 借法,当你完成了购房布局后,如果徘徊在售楼部附近的时候,可以使出浑身解数借钱。正因为平时没多开口,情急之中往往能生智,智可换钱。
吃苦经。
为了火红的将来,你必须放弃温馨的现在,租房亦如此。这个吃苦是很讲究的,包括了素菜上桌、粗布上身、破絮上床、杀灭小孩的攀比与比富心理、教育小孩正当 的财富观与贫穷观等。换言之,除了让孩子形成正常的心理,保持良好的学习环境,其他则是可观瞻不可占有,可远望不可驻足。
选房经。
当你统一了家国,构建了和谐家境,了却了小孩求学心愿,余下的就是如何让自己的心得体会于现实的房子之上。
二手房是首选,一来房东肯定比开发商好对付,二来二手房龄较长者有个有利的位置,三来二手房有急于脱手的可以就利图个便宜,四来可将装修成本缩小并延后至小孩长大点以后或有闲钱之时。
缺陷房是首选。所谓缺陷房就是明眼人一看就有不足的房子,但千万别当厅室分布不合理但数量众多当好房。说穿了就是计划年代的房子最适合穷人居住。大体是没 有完整的客厅与餐厅,但通过二人世界的巧妙演绎,可以化劣为优,还可将作业间与办公间与双厅合而为一,成就大方的多功能的温馨之家。而且缺陷房往往布置于 一些前期的住区,可以使用上一些被社会遗弃的设备,如罐装煤气等。
人挤区是首选。人多是好事,配套不用担心,一般消费成本比中心商务区低很多,而且有些大型住区的教育设施针对普通老百姓开设,各项成本都较之普遍为低。
验证与咨询必不可少。你穷其一身圆梦之居,所以来不得半点虚假,验看各种证件,咨询出许多非完整产权房,熟悉各环节的收费,这种节约一个子儿是一个子儿才是穷当家的真本事。
如果确认你是穷人,还送上一经,不要自卑,也不要让自己的情绪向小孩传染,有比没有好,有得住比没工作要强,有个窝好教育与提升自己及家人的一些潜力。
相信自己,一切都会有的。

Thursday, July 14, 2011

FFT DIT

http://cnx.org/content/m12016/latest/

Friday, July 8, 2011

待办2011-07-08

买排骨
买裤子
买饭盒
买鸡精
整理箱子 收拾储物间
洗床单被套

一月内:买剪刀
三月内:买电池  充电器

Tuesday, May 24, 2011

听说看了这20部电影相当于读完清华大学经济管理学院

听说看了这20部电影相当于读完清华大学经济管理学院

查看日志列表 发表于
听说看了这20部电影相当于读完清华大学经济管理学院 在复杂的商业社会,你想创业,不懂经济、不懂商业、不懂人情世故、不懂法律边沿, 你只有勇气、只有梦想、只有天真,那么也就只有一场空。这20部电影都是商学院学生在学习商科时被要求必须看的影片,其中包括哈佛商学院一直首推的《华尔 街》,还有沃顿商学院排第一位的《颠倒乾坤》,斯坦福要求商科学生必看的《锅炉房》。看完之后,你会对商业运行的本质和规则有更深入的了解,对你的职场生 涯亦会有不小的帮助。
1.《华尔街》(Wall Street)(1987)

内部交易是违法的,不违法怎么能够发财,关键看如何违法的同时可以掩盖。不看这个影片怎么能够随便进入股市?

2.《拜金一族》(Glengarry Glenn Ross)(1992)

当房地产进入萧条的时候,美国房屋中介的销售顾问都在忙什么?看他们如何利用数据库,如何门到门地将房地产销售出去,如何在萧条期包装房地产,如何瞄准新婚家庭的住房需求。

3.《颠倒乾坤》(Trading Places)(1983)

经济是交易行为的代名词。只要有交易,就需要学会评估交易是否合算,就需要透视交易对方内心的秘密。交易中学到的核心法则,在世界上任何国家只要有交易的地方都适用。

4.《锅炉房》(Boiler Room)(2000)

难以想象的是违法交易几乎与证券市场形影不离。一个19岁的年轻人如此近距离地目睹财富的操纵过程,让谁富有,那不过是一个随机的选择。

5.《硅谷传奇》(Pirates of Silicon Valley)(1999)


比 尔&#8226;盖茨与斯蒂夫&#8226;乔布斯几乎在所有方面的看法、观点都是对立的,他们只有在一个事情上是共同的,那就是尽一切 可能封杀这个影片。硅谷的高科技公司是如何孵化的?不到25岁的年轻人利用了什么样的市场规则,又是如何让市场规则、让客户、让竞争对手形成一个共同体 的?层出不穷的阴谋笼罩在硅谷的上空。

6.《可口可乐小子》(The Coca—Cola Kid)(1985)


这是一个男孩用可乐创造一项事业的故事。作为一个碳酸饮料的营销从业员,他不得不回答一个问题,在边远的澳大利亚小镇,为什么没有一瓶可口可乐?营销是生意不可或缺的部分,尤其是在创业中不可缺少。

7.《发达之路》(The Secret of My Success)(1987)

主要讲述了美国堪萨斯的男孩在纽约飘荡的历程。如果纽约可以代表近100年人类商业活动的中心,那么,任何21世纪的年轻人,都不得不面对大城市的浮华、喧嚣和躁动。

8.《优势合作》(In Good Company)(2004)

大公司都是通过收购长大的,你会收购吗?知道收购后销售主管是怎么想的吗?知道销售人员背后议论什么吗?联想收购IBM失败的核心因素就是根本没有看懂这个影片。当公司与公司之间发生买卖的时候,作为公司一员的你,位置在哪里?

9.《巴塞罗那》(Barcelona)(1994)

美国人的销售方式真的可以通行全球吗?一个美国销售员在西班牙的销售经历让我们学到销售的价值观,销售对客户文化的处理方式,销售对客户关系的把握。

10.《甜心先生》(Jerry Maguire)(1996)

做生意要拿出诚意来。show me the money,让我看到钱才是真的,任何生意都如此。生意中没有牢靠的友谊,这是你在创业前必须要牢记的教训。

11.《上班一条虫》(Office Space)(1999)

办公室政治课实战教材。在市场经济环境中当公司遇到危机时,裁员的本质动机,员工对公司的作用的核心意义都是必须要学习的商业社会的基本规则。

12.《解构企业》(The Corporation)(2003)

18 世纪美国法律正式通过了一个企业可以是一个个人的组织行为后,仅仅两个多世纪,美国的这个公司法居然影响了全球,你可以在中国的公司法中也看到类似的描 述。这个冠之以法人的称号横行全球,世界每一个角度都受到影响。个人的贪婪、个人的欲望没有止境地膨胀,本片从最深刻的本质揭示了资本主义商业规则,并无 情地揭示了其存在的弊病。

13.《惊爆内幕》(The Insider)(1999)

商业社会的本质是货币自由交换,只要你情我愿,似乎交换什么都可以。交易中的商业价值,交易中的定价原理,商业信誉在交易中的作用都是这个影片中活生生地展示出来的,商科学生必须要理解金钱统治人类社会的必然结果,以及这种结果具备的不可逆的特性。

14.《影子大亨》(The Hudsucker Proxy)(1994)


一部票房不怎么样、但懂商业的人却说好的影片。一个公司的老板自杀了,但其公司还蒸蒸日上,董事会的实权人物开始行动,行动的目的当然是私欲横流。公司治理、企业董事会操作实战等都是这部影片中不可多得的实战教案。

15.《反垄断》(Antitrust)(2001)

一个斯坦福的电脑天才毕业后被科技大亨录用后负责发展全球通信系统,之后他发现原来自己是被用作侦察商业对手以达到垄断市场的目的。此片向微软的垄断幽了一默,讲述了一个有鲜明时代和全球意义的反对金钱和高科技垄断的故事。

16.《魔鬼营业员》(Rogue Trader)(1998)

1995 年,巴林银行,这家全球最古老的银行之一破产了,曾经是英国贵族最为信赖的金融机构,拥有200多年优异的经营历史,却没能逃过破产的结局。令人震惊的 是,这样一个惨痛的结局,却出自于一个普通的证券交易员尼克&#8226;李森之手。这部出自真实案例的电影是大家学习银行业务,尤其是投资业务 最好的教案。

17.《抢钱世界》(Other People's Money)(1991)

这也是一部基于美国真实故事改编的影片,从中可以了解商业法、企业兼并、商业诉讼规范、商业流程、兼并重组流程等。美国商业自由市场中到处充满了利己行为与利他行为的冲突和矛盾,也恰好是从这些冲突和矛盾中可以学到不同的动机,以及各种让人眼花缭乱的手段。

18.《败露》(Disclosure)(1994)

一 位踌躇满志的公司高管在一天中,不仅失去了原应属于自己的晋升机会,而且迎来了自己10年前的同居女友担任顶头上司。已有妻儿的他拒绝了女上司与他重温旧 梦的要求,于是,女上司耍出种种手腕在公司中排挤他,甚至诬称他对自己性骚扰。忍无可忍的他诉诸法律,在一位精明女律师的帮助下,与公司及那位霸道的女上 司展开了较量……片中体现的办公室政治、公司群体人际关系行为准则等都是难得的职场教材。

19.《男人百分百》(What Women Want)(2000)


一个小小的意外,让主角具备了能够阅读女性头脑的能力,这是一部用巧妙的方式揭示女性所思所想的影片。商业心理学、女性行为学、广告学等都是这部影片中可学习的亮点。

20.《门口的野蛮人》(Barbarians At The Gate)(1993)

1988 年,KKR公司收购雷诺-纳贝斯克公司是华尔街震惊全球的重大金融事件。专业人士事后分析,这桩交易是在合法基础上的骗局。因为KKR公司用的杠杆收购手 法不仅不需要现金,也不需要看见现金,甚至也没有人知道钱从哪里来,整个过程根本就是个圈套。而KKR那些高层,以及交易过程中的那些华尔街人士,由于表 现出了前所未有的贪婪和狡猾的技巧,也被冠以“野蛮人”的称号



















quasi-Newton method 拟牛顿法

http://www.materialssimulation.com/node/625

拟牛顿法及相关讨论

使用导数的最优化算法中,拟牛顿法是目前为止最为行之有效的一种算法,具有收敛速度快、算法稳定性强、编写程序容易等优点。在现今的大型计算程序中有着广泛的应用。本文试图介绍拟牛顿法的基础理论和若干进展。

牛顿法 (Newton Method)

牛顿法的基本思想是在极小点附近通过对目标函数$ f(x) $做二阶Taylor展开,进而找到$ f(x) $的极小点的估计值[1]。一维情况下,也即令函数$ \varphi(x) $
$ \varphi(x) = f(x_k)+f^{'}(x_k)(x-x_k)+\frac{1}{2}f^{''}(x_k)(x-x_k)^2 $
则其导数$ \varphi^{'}(x) $满足
$ \varphi^{'}(x) =f^{'}(x_k)+f^{''}(x_k)(x-x_k)=0 $
因此
$ x_{k+1}=x_k-\frac{f^{'}(x_k)}{f^{''}(x_k)} $       (1)
$ x_{k+1} $作为$ f(x) $极小点的一个进一步的估计值。重复上述过程,可以产生一系列的极小点估值集合$ \{x_k\} $。一定条件下,这个极小点序列$ \{x_k\} $收敛于$ f(x) $的极值点。
将上述讨论扩展到$ N $维空间,类似的,对于$ N $维函数$ f(\mathbf{x}) $
$ f(\mathbf{x})\approx \varphi(\mathbf{x})=f(\mathbf{x}_k)+\nabla f(\mathbf{x}_k)(\mathbf{x}-\mathbf{x}_k)+\frac{1}{2}(\mathbf{x}-\mathbf{x}_k)^{\rm T}\nabla^2 f(\mathbf{x}-\mathbf{x}_k) $
其中$ \nabla f(\mathbf{x}) $$ \nabla^2f(\mathbf{x}) $分别是目标函数的的一阶和二阶导数,表现为$ N $维向量和$ N $ $ \times $ $ N $矩阵,而后者又称为目标函数$ f(\mathbf{x}) $$ \mathbf{x}_k $处的Hesse矩阵。 设$ \nabla^2f(\mathbf{x}) $可逆,则可得与方程(1)类似的迭代公式:
$ \mathbf{x}_{k+1}=\mathbf{x}_k-[\nabla^2f(\mathbf{x}_k]^{-1}\nabla f(\mathbf{x}_k) $     (2)
这就是原始牛顿法的迭代公式。
原始牛顿法虽然具有二次终止性(即用于二次凸函数时,经有限次迭代必达极小点),但是要求初始点需要尽量靠近极小点,否则有可能不收敛。因此人们又提出了阻尼牛顿法[1]。这种方法在算法形式上等同于所有流行的优化方法,即确定搜索方向,再沿此方向进行一维搜索,找出该方向上的极小点,然后在该点处重新确定搜索方向,重复上述过程,直至函数梯度小于预设判据$ \epsilon $。具体步骤列为算法1

算法1:
(1)  给定初始点$ \mathbf{x}_0 $,设定收敛判据$ \epsilon $$ k=0 $.
(2)  计算$ \nabla f(\mathbf{x}_k) $$ \nabla^2f(\textbf{x}_k) $.
(3)  若$ ||\nabla f(\mathbf{x}_k)|| $ < $ \epsilon $,则停止迭代,否则确定搜索方向$ \mathbf{d}_k=-[\nabla^2f(\mathbf{x}_k)]^{-1} \nabla f(\mathbf{x}_k) $.
(4)  从$ \mathbf{x}_k $出发,沿$ \mathbf{d}_k $做一维搜索,
$ \underset{\lambda}{\min}f(\mathbf{x}_k+\lambda\mathbf{d}_k)=f(\mathbf{x}_k+\lambda_k\mathbf{d}_k) $
$ \mathbf{x}_{k+1}=\mathbf{x}_k+\lambda_k\mathbf{d}_k $.
(5)  设$ k=k+1 $,转步骤(2).

在一定程度上,阻尼牛顿法具有更强的稳定性。

拟牛顿法 (Quasi-Newton Method)
 

如同上一节指出,牛顿法虽然收敛速度快,但是计算过程中需要计算目标函数的二阶偏导数,难度较大。更为复杂的是目标函数的Hesse矩阵无法保持正定,从而令牛顿法失效。为了解决这两个问题,人们提出了拟牛顿法。这个方法的基本思想是不用二阶偏导数而构造出可以近似Hesse矩阵的逆的正定对称阵, 从而在"拟牛顿"的条件下优化目标函数。构造方法的不同决定了不同的拟牛顿法。
首先分析如何构造矩阵可以近似Hesse矩阵的逆:
设第k次迭代之后得到点$ \mathbf{x}_{k+1} $,将目标函数$ f(\mathbf{x}) $$ \mathbf{x}_{k+1} $处展成Taylor级数,取二阶近似,得到
$ f(\mathbf{x})\approx f(\mathbf{x}_{k+1})+\nabla f(\mathbf{x}_{k+1})(\mathbf{x}-\mathbf{x}_{k+1})+\frac{1}{2}(\mathbf{x}-\mathbf{x}_{k+1})^{\rm T}\nabla^2f(\mathbf{x}_{k+1})(\mathbf{x}-\mathbf{x}_{k+1}) $
因此
$ \nabla f(\mathbf{x}) \approx \nabla f(\mathbf{x}_{k+1})+\nabla^2f(\mathbf{x}_{k+1})(\mathbf{x}-\mathbf{x}_{k+1}) $
$ \mathbf{x}=\mathbf{x}_k $,则
$ \nabla f(\mathbf{x}_{k+1})-\nabla f(\mathbf{x}_k) \approx\nabla^2f(\mathbf{x}_{k+1})(\mathbf{x}_k-\mathbf{x}_{k+1}) $      (3)

$ \mathbf{s}_k=\mathbf{x}_{k+1}-\mathbf{x}_k,\quad \mathbf{y}_k=\nabla f(\mathbf{x}_{k+1})-\nabla f(\mathbf{x}_k) $
同时设Hesse矩阵$ \nabla^2f(\mathbf{x}_{k+1}) $可逆,则方程(3)可以表示为
$ \mathbf{s}_k \approx [\nabla^2f(\mathbf{x}_{k+1})]^{-1}\mathbf{y}_k $      (4)
因此,只需计算目标函数的一阶导数,就可以依据方程(4)估计该处的Hesse矩阵的逆。也即,为了用不包含二阶导数的矩阵$ \mathbf{H}_{k+1} $近似牛顿法中的Hesse矩阵$ \nabla^2f(\mathbf{x}_{k+1}) $的逆矩 阵,$ \mathbf{H}_{k+1} $必须满足
$ \mathbf{s}_k \approx \mathbf{H}_{k+1}\mathbf{y}_k $      (5)
方程(5)也称为拟牛顿条件。不加证明的,下面给出两个最常用的$ \mathbf{H}_{k+1} $构造公式
DFP公式
设初始的矩阵$ \mathbf{H}_0 $为单位矩阵$ \textbf{I} $,然后通过修正$ \mathbf{H}_k $给出$ \mathbf{H}_{k+1} $,即
$ \mathbf{H}_{k+1}=\mathbf{H}_k+\Delta \mathbf{H}_k $
DFP算法中定义校正矩阵为
$ \Delta \mathbf{H}_k=\frac{\mathbf{s}_k\mathbf{s}_k^{\rm T}}{\mathbf{s}_k^{\rm T}\mathbf{y}_k}-\frac{\mathbf{H}_k\mathbf{y}_k\mathbf{y}_k^{\rm T}\mathbf{H}_k}{\mathbf{y}_k^{\rm T}\mathbf{H}_k\mathbf{y}_k} $
因此
$ \mathbf{H}_{k+1}=\mathbf{H}_k+\frac{\mathbf{s}_k\mathbf{s}_k^{\rm T}}{\mathbf{s}_k^{\rm T}\mathbf{y}_k}-\frac{\mathbf{H}_k\mathbf{y}_k\mathbf{y}_k^{\rm T}\mathbf{H}_k}{\mathbf{y}_k^{\rm T}\mathbf{H}_k\mathbf{y}_k} $      (6)
可以验证,这样产生的$ \mathbf{H}_{k+1} $对于二次凸函数而言可以保证正定,且满足拟牛顿条件。
BFGS公式
BFGS公式有时也称为DFP公式的对偶公式。这是因为其推导过程与方程(6)完全一样,只需要用矩阵$ \mathbf{B}_{k+1} $取 代$ \mathbf{H}_{k+1}^{-1} $,同时将$ \mathbf{s}_k $$ \mathbf{y}_k $互换,最后可以得到
$  \mathbf{H}_{k+1}=\mathbf{H}_k+[1+\frac{\mathbf{y}_k^{\rm T}\mathbf{H}_k\mathbf{y}_k}{\mathbf{s}_k^{\rm T}\mathbf{y}_k}]\cdot\frac{\mathbf{s}_k\mathbf{s}_k^{\rm T}}{\mathbf{s}_k^{\rm T}\mathbf{y}_k}-\frac{\mathbf{s}_k\mathbf{y}_k^{\rm T}\mathbf{H}_k}{\mathbf{s}_k^{\rm T}\mathbf{y}_k} $       (7)
这个公式要优于DFP公式,因此目前得到了最为广泛的应用。
利用方程(6)或(7)的拟牛顿法计算步骤列为算法2
算法2:
(1)  给定初始点$ \mathbf{x}_0 $,设定收敛判据$ \epsilon $$ k=0 $.
(2)  设$ \mathbf{H}_0 = \mathbf{I} $,计算出目标函数$ f(\mathbf{x}) $$ \mathbf{x}_k $处的梯度$ g_k = \nabla f(\mathbf{x}_k) $.
(3)  确定搜索方向$ \mathbf{d}_k $
$ \quad \mathbf{d}_k = \mathbf{H}_k\mathbf{g}_k $.
(4)  从$ \mathbf{x}_k $出发,沿$ \mathbf{d}_k $做一维搜索,满足
$ f(\mathbf{x}_k+\lambda_k\mathbf{d}_k) = \underset{\lambda\geq 0}{\min}f(\mathbf{x}_k+\lambda\mathbf{d}_k) $
$ \mathbf{x}_{k+1}=\mathbf{x}_k+\lambda_k\mathbf{d}_k $.
(5)  若$ ||f(\mathbf{x}_{k+1})|| \leq \epsilon $,则停止迭代,得到最优解$ \mathbf{x}=\mathbf{x}_{k+1} $,否则进行步骤(6).
(6)  若$ k=N-1 $,则令$ \mathbf{x}_0 = \mathbf{x}_{k+1} $,回到步骤(2),否则进行步骤(7).
(7)  令$ \mathbf{g}_{k+1}=f^{'}(\mathbf{x}_{k+1}) $$ \mathbf{s}_k= \mathbf{x}_{k+1}-\mathbf{x}_k $$ \mathbf{y}_k=\mathbf{g}_{k+1}- \mathbf{g}_k $,利用方程(6)或(7)计算$ \mathbf{H}_{k+1} $,设$ k = k+1 $,回到步骤(3)。

限域拟牛顿法(Limited Storage Quasi-Newton Method)
 

算法2的步骤(3)中,为了确定第$ k $次搜索方向,需要知道对称正定矩阵$ \mathbf{H}_k $,因此 对于$ N $维的问题,存储空间至少是$ N(N+1)/2 $,对于大型计算而言,这显然是一个极大的缺点。作为比较,共轭梯度法只需要存储3个$ N $维向量。为了解决这个问题,Nocedal首次提出了基于BFGS公式的限域拟牛顿法(L-BFGS)[2]。
L-BFGS的基本思想是存储有限次数(如$ m $次)的更新矩阵$ \Delta\mathbf{H}_k $,如果$ k $ > $ m $的话就舍弃$ m $次以前的$ \Delta\mathbf{H}_{k-m+1} $,也即L-BFGS的记忆只有$ m $次。如果$ m=N $,则L- BFGS等价于标准的BFGS公式。
首先将方程(7)写为乘法形式:
$ \mathbf{H}_{k+1}=(\mathbf{I}-\rho_k\mathbf{s}_k\mathbf{y}^{\rm T}_k)\mathbf{H}_k(\mathbf{I}-\rho_k\mathbf{y}_k\mathbf{s}^{\rm T}_k)+\rho_k\mathbf{s}_k\mathbf{s}^{\rm T}_k=\mathbf{v}^{\rm T}_k\mathbf{H}_k\mathbf{v}_k+\rho_k\mathbf{s}_k\mathbf{s}^{\rm T}_k $      (8)
其中$ \rho_k=\frac{1}{\mathbf{y}^{\rm T}_k\mathbf{s}_k} $$ \mathbf{v}_k $$ N $ $ \times $ $ N $的矩阵。乘法形式下"舍弃"等价于置$ \mathbf{v}_k=\mathbf{I} $$ \rho_k=0 $。容易得出,给 定$ m $后,BFGS的矩阵更新可以写为
$ k+1\leq m $,则
$ \mathbf{H}_{k+1}=\mathbf{v}^{\rm T}_k\mathbf{v}^{\rm T}_{k-1}\cdots \mathbf{H}_0\mathbf{v}_0\cdots \mathbf{v}_{k-1}\mathbf{v}_k+\mathbf{v}^{\rm T}_k\cdots\mathbf{v}^{\rm T}_1\rho_0\mathbf{s}_0\mathbf{s}^{\rm T}_0\mathbf{v}_1\cdots\mathbf{v}_k $
         $ +\mathbf{v}^{\rm T}_k\mathbf{v}^{\rm T}_{k-1}\cdots\mathbf{v}^{\rm T}_2\rho_1\mathbf{s}_1\mathbf{s}^{\rm T}_1\mathbf{v}_2\cdots\mathbf{v}_k $
         $ \cdots $
         $ +\mathbf{v}^{\rm T}_k\mathbf{v}^{\rm T}_{k-1}\rho_{k-2}\mathbf{s}_{k-2}\mathbf{s}^{\rm T}_{k-2}\mathbf{v}_{k-1}\mathbf{v}_k $
         $ +\mathbf{v}^{\rm T}_k\rho_{k-1}\mathbf{s}_{k-1}\mathbf{s}^{\rm T}_{k-1}\mathbf{v}_k $
         $ +\rho_k\mathbf{s}_k\mathbf{s}^{\rm T}_k $          (9)

$ k+1 $ > $ m $,则
$ \mathbf{H}_{k+1}=\mathbf{v}^{\rm T}_k\mathbf{v}^{\rm T}_{k-1}\cdots\mathbf{v}^{\rm T}_{k-m+1}\mathbf{H}_0\mathbf{v}_{k-m+1}\cdots\mathbf{v}_{k-1}\mathbf{v}_k $
         $ +\mathbf{v}^{\rm T}_k\cdots\mathbf{v}^{\rm T}_{k-m+2}\rho_{k-m+1}\mathbf{s}_{k-m+1}\mathbf{s}^{\rm T}_{k-m+1}\mathbf{v}_{k-m+2}\cdots\mathbf{v}_k $
         $ \cdots $
         $ +\mathbf{v}^{\rm T}_k\rho_{k-1}\mathbf{s}_{k-1}\mathbf{s}^{\rm T}_{k-1}\mathbf{v}_k $
         $ +\rho_k\mathbf{s}_k\mathbf{s}^{\rm T}_k $         (10)
方程(9)和(10)称为狭义BFGS矩阵(special BFGS matrices)。仔细分析这两个方程以及$ \rho_k $$ \mathbf{v}_k $的定义,可以发现L-BFGS方法中构造$ \mathbf{H}_{k+1} $只需要保留$ 2m+1 $$ N $维向量:$ m $$ \mathbf{s}_k $$ m $$ \mathbf{y}_k $以及$ \mathbf{H}_0 $(对角阵)。
快速计算$ \mathbf{H}\cdot\mathbf{g} $
L-BFGS算法中确定搜索方向$ \mathbf{d}_k $需要计算$ \mathbf{H}\cdot\mathbf{g} $,下列算法可以高效地完成计算任务:
算法3:
IF $ k \leq m $ Then
   $ {\rm incr} $ = 0; $ {\rm BOUND} $ = $ k $
ELSE
   $ {\rm incr} $ = $ k-m $; $ {\rm BOUND} $ = $ m $
ENDIF
$ \mathbf{q}_{\rm BOUND} = \mathbf{g}_k $;
DO $ i $ = ($ {\rm BOUND} $-1),0,-1
   $ \quad j = i+{\rm incr} $;
   $ \quad \alpha_i = \rho_j\mathbf{s}^{\rm T}_j\mathbf{q}_{i+1} $;
   $ \quad $储存$ \alpha_i $;
   $ \mathbf{q}_i = \mathbf{q}_{i+1}-\alpha_i\mathbf{y}_j $;
ENDDO
$ \mathbf{r}_0 = \mathbf{H}_0\cdot\mathbf{g}_0 $;
DO $ i $ = 0, ($ {\rm BOUND} $-1)
   $ \quad j = i+{\rm incr} $;
   $ \quad \beta_j = \rho_j\mathbf{y}^{\rm T}_j\mathbf{r}_i $;
   $ \quad \mathbf{r}_{i+1} = \mathbf{r}_i+\mathbf{s}_j(\alpha_i-\beta_i) $;
ENDDO
完整的程序包可从下列网址下载:
http://www.ece.northwestern.edu/~nocedal/software.html

针对二次非凸函数的若干变形

对于二次凸函数,BFGS算法具有良好的全局收敛性。但是对于二次非凸函数,也即目标函数Hesse矩阵非正定的情况,无法保证按照BFGS算法构造的拟牛顿方向必为下降方向。为了推广BFGS公式的应用范围,很多工作提出了对BFGS公式稍作修改或变形的办法。下面举两个例子。
Li-Fukushima方法[3]
Li和Fukushima提出新的构造矩阵$ \mathbf{H}_k $的方法:
$  \mathbf{H}^{-1}_{k+1}=\mathbf{H}^{-1}_k-\frac{\mathbf{H}^{-1}_k\mathbf{s}_k\mathbf{s}^{\rm T}_k\mathbf{H}^{-1}_k}{\mathbf{s}^{\rm T}_k\mathbf{H}^{-1}_k\mathbf{s}_k}+\frac{\mathbf{y}^{\ast}_k\mathbf{y}^{\ast\rm T}_k}{\mathbf{y}^{\ast\rm T}_k\mathbf{s}_k} $
$ \mathbf{H}_{k+1}=(\mathbf{I}-\rho^{\ast}_k\mathbf{s}_k\mathbf{y}^{\ast\rm T}_k)\mathbf{H}_k(\mathbf{I}-\rho^{\ast}_k\mathbf{y}^{\ast\rm T}_k\mathbf{s}^{\rm T}_k)+\rho^{\ast}_k\mathbf{s}_k\mathbf{s}^{\rm T}_k $          (11)
其中
$ \mathbf{y}^{\ast}_k=\mathbf{g}_{k+1}-\mathbf{g}_k+t_k||\mathbf{g}_k||\mathbf{s}_k $
$  t_k=1+\max\{0, \frac{-\mathbf{y}^{\rm T}_k\mathbf{s}_k}{||\mathbf{s}_k||^2}\} $

$ \mathbf{y}_k $的定义见算法2中步骤(7),而
$ \rho^{\ast}_k=\frac{1}{\mathbf{y}^{\ast\rm T}_k\mathbf{s}_k} $
除此之外,算法2中步骤(3)的一维搜索采用如下方式:
给定两个参数$ \sigma \in (0,1) $$ \epsilon \in (0,1) $,找出最小的非负整数j,满足
$ f(\mathbf{x}_k+\epsilon_j\mathbf{d}_k)\leq f(\mathbf{x}_k)+\sigma\epsilon_j\mathbf{g}^{\rm T}_k\mathbf{d}_k $
$ j_k=j $,步长$ \lambda_k=\epsilon_{j_k} $
Xiao-Wei-Wang方法[4]
Xiao、Wei和Wang提出了计入目标函数值$ f(\mathbf{x}) $的另一种$ \mathbf{H}_k $的构造方法:
$ \mathbf{y}^{\dagger}_k = \mathbf{y}_k+\alpha_k\mathbf{s}_k $,其中
$ \alpha_k = \frac{1}{||\mathbf{s}_k||^2}[2(f(\mathbf{x}_k)-f(\mathbf{x}_{k+1})+(\mathbf{g}_{k+1}+\mathbf{g}_k)^{\rm T}\mathbf{s}_k] $
$ \mathbf{H}_k $的构造方法与方程(7)和(11)形式相同:
$ \mathbf{H}_{k+1}=(\mathbf{I}-\rho^{\dagger}_k\mathbf{s}_k\mathbf{y}^{\dagger\rm T}_k)\mathbf{H}_k(\mathbf{I}-\rho^{\dagger}_k\mathbf{y}^{\dagger}_k)\mathbf{s}^{\rm T}_k+\rho^{\dagger}_k\mathbf{s}_k\mathbf{s}^{\rm T}_k $        (12)
相应的$ \rho^{\dagger}_k=\frac{1}{\mathbf{y}^{\dagger\rm T}_k\mathbf{s}_k} $
而一维搜索则采用弱Wolfe-Powell准则:
给定两个参数$ \delta\in (0,1/2) $$ \sigma\in (\delta,1) $,找出步长$ \lambda_k $,满足
$ f(\mathbf{x}_k+\lambda_k\mathbf{d}_k) \leq f(\mathbf{x}_k)+\delta\lambda_k\mathbf{g}^{\rm T}_k\mathbf{d}_k $          (13)
$ \mathbf{g}^{\rm T}_{k+1}\mathbf{d}_k \geq \sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k $       (14)
如果$ \lambda_k $ = $ 1 $满足方程(13)、(14),则取$ \lambda_k $ = $ 1 $
可以看出,这两种方法只是改变了$ \mathbf{y}_k $的定义方式,其他则与标准的BFGS方法完全一样。因此将二者推广到限域形式是非常直接的,这里不再给出算法。对于二次非凸函数的拟牛顿方法还在进一步发展当中,上述的两个例子并不一定是最佳算法。

一维搜索

使用导数的优化算法都涉及到沿优化方向$ \mathbf{d}_k $的一维搜索。事实上一维搜索算法本身就一个非常重要的课题,分为精确一维搜索以及非精确一维搜索。标准的拟牛顿法或L-BFGS均采用精确一维搜索。与前者相比,非精确一维搜索虽然牺牲了部分精度,但是效率更高,调用函数的次数更少。因此 Li-Fukushima方法和Xiao-Wei-Wang方法中均采用了这类算法。不加证明的,本节分别给出两类范畴中各自的一个应用最为广泛的例子, 分别是二点三次插值方法Wolfe-Powell准则
二点三次插值方法
在精确一维搜索各种算法中,这种方法得到的评价最高。其基本思想是选取两个初始点$ x_1 $$ x_2 $,满足$ x_1 $ < $ x_2 $; $ f^{'}(x_1) $ < $ 0 $; $ f^{'}(x_2) $ > $ 0 $。这样的初始条件保证了在区间$ (x_1, x_2) $中存在极小点。利用这两点处的函数值$ f(x_1) $$ f(x_2) $(记为$ f_1 $$ f_2 $)和导数值$ f^{'} (x_1) $$ f^{'}(x_2) $(记为$ f^{'}_1 $$ f^{'}_2 $)构造一个三次多项式$ \varphi(x) $,使 得$ \varphi(x) $$ x_1 $$ x_2 $处与目标函数$ f(x) $有相同的函数值和导数值,则设$ \varphi(x)=a(x- x_1)^3+b(x-x_1)^2+c(x-x_1)+d $,那么通过4个边界条件可以完全确定$ a $$ b $$ c $$ d $4个参数。之后找 出$ \varphi^{'}(x) $的零点$ x^{'} $,作为极小点的一个进一步的估计。可以证明,由$ x_1 $出发,最佳估计值的计算公式为
$  x^{'}=x_1+\frac{-c}{b+\sqrt{b^2-3ac}} $          (15)
为了避免每次都要求解4维线性方程组的麻烦,整个搜索过程可以采用算法4
算法4:
(1)  给定初始点$ x_1 $$ x_2 $,满足$ x_1 $ < $ x_2 $,计算函数值$ f_1 $$ f_2 $和导数值$ f^{'}_1 $$ f^{'}_2 $,并且$ f^{'}_1 $ < $ 0 $$ f^{'}_2 $ > $ 0 $,给定允许误差$ \delta $
(2)  计算如下方程,得到最佳估计值$ x^{'} $
$  s=\frac{3(f_2-f_1)}{x_2-x_1},\quad z = s-f^{'}_1-f^{'}_2\quad w^2 = z^2-f^{'}_1f^{'}_2 $        (16)
$  x^{'} = x_1+(x_2-x_1)\frac{1-f^{'}_2+w+z}{f^{'}_2-f^{'}_1+2w} $        (17)
(3)  若$ |x_2-x_1|\leq \delta $,则停止计算,得到点$ x^{'} $;否则进行步骤(4)。
(4)  计算$ f(x^{'}) $$ f^{'}(x^{'}) $。若$ f^{'}(x^{'}) = 0 $,则停止计算,得到点$ x^{'} $,
$ f^{'}(x^{'}) $ < $ 0 $,则令$ x_1 = x^{'}; f_1 = f(x^{'}); f^{'}_1 = f^{'}(x^{'}) $,转步骤(2);
$ f^{'}(x^{'}) $ > $ 0 $,则令$ x_2 = x^{'}; f_2 = f(x^{'}); f^{'}_2 = f^{'}(x^{'}) $,转步骤(2)。

利用三次函数插值,方程(16)、(17)并不是唯一的方法,也可以利用下式计算$ a $$ b $$ c $三个参数:
$ a = \frac{f^{'}_1+f^{'}_2}{(x_2-x_1)^2}-\frac{2(f_2-f_1)}{(x_2-x_1)^3}; $
$ b = \frac{2f^{'}_1-f^{'}_2}{x_2-x_1}+\frac{3}{2}\frac{f_2-f_1}{(x_2-x_1)^2}; $         (18)
$ c = f^{'}_1. $
然后利用(15)式寻找最佳点$ x^{'} $[5]。此外,即使$ f^{'}(x_2) $ < $ 0 $,一般而言也可以用(15)式外推寻找$ x^{'} $(参见[5])。
Wolfe-Powell准则
不等式(13)、(14)给出了这种非精确一维搜索算法。如果我们将不等式(14)用下式替换:
$ |\mathbf{g}^{\rm T}_{k+1}\mathbf{d}_k|\leq -\sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k $     (19)
也即

$ \sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k \leq \mathbf{g}^{\rm T}_{k+1}\mathbf{d}_k \leq -\sigma\mathbf{g}^{\rm T}_k\mathbf{d}_k $
则不等式(13)、(19)称为强Wolfe-Powell准则。其重要性在于当$ \sigma\rightarrow 0 $时,该方法过渡为精确一维搜索算法[6]。算法如下[5]
算法5:
(1)  给定两个参数$ \delta\in (0,1/2) $$ \sigma\in (\delta,1) $$ x_1 $为初始点(相应于$ \lambda_k = 0 $),$ x_2 $为猜想点(可设为1)。计算两点处的函数值$ f_1 $$ f_2 $和导数值$ f^{'}_1 $$ f^{'}_2 $。给定最大循环次 数$ N_{\rm max} $,设$ k = 0; i = 0 $
(2) 若$ f_2 $$ f^{'}_2 $违反不等式(13)或者不等式(19)的右半段,则缩小搜索范围的上限$ x_{\rm upper} = x_2 $,否则转步骤(5);
(3)  若$ f_2 $ > $ f_1 $,利用二次插值方法寻找最佳点$ x_{\rm min} $
$ x_{\rm min} = x_1-\frac{1}{2}\frac{f^{'}_1(x_2-x_1)^2}{f_2-f_1-f^{'}_1(x_2-x_1)} $
$ x_2 = x_{\rm min} $,计算$ f_2 $$ f^{'}_2 $;设$ k = k+1 $,若$ k \leq N_{\rm max} $转步骤(2),否则转步骤(5);
$ f_2\leq f_1 $,转步骤(4);
(4)  利用式(16)、(17)(或者式(15)、(18))寻找最佳点$ x_{\rm min} $。令$ x_2 = x_{\rm min} $,计算$ f_2 $$ f^{'}_2 $;设$ k $ = $ k+1 $,若$ k\leq N_{\rm max} $,转步骤(2),否则转步骤(5);
(5)  若$ f^{'}_2 $满足不等式(19)的左半段,则停止计算,得到最佳点$ x_2 $;否则转步骤(6);
(6)  利用式(16)、(17)(或者式(15)、(18))寻找最佳点$ x_{\rm min} $,并计算$ f_2 $以及$ f^{'}_2 $;设$ i = i+1 $,若$ i \leq N_{\rm max} $转步骤(2),否则转步骤(7);
(7)  停止计算得到目前最佳估计值$ x_2 $

需要补充说明的是步骤(4)可以有不同的估算方法,例如
$ x_{\rm min} = x_2-\frac{f^{'}_2(x_2-x_1)}{f^{'}_2-f^{'}_1} $      (20)

此外,点$ x $处的导数值$ f^{'}(x) = \mathbf{g}^{\rm T}\mathbf{d} $,因为在一维搜索中,$ x $相当于待求步长$ \lambda $。在大多数情况下,$ \sigma $ = $ 0.4 $以及$ \rho $ = $ 0.1 $可以取得很好的效果。Wolfe-Powell准则的几何意义可以参考文献[5][6]。

参考文献

【1】  陈宝林  《最优化理论与算法(第二版)》 (清华大学出版社 2005) 第9-10章.
【2】  J. Nocedal, Math. Comput. 35, 773 (1980).
【3】  D.H. Li and M. Fukushima, J. Comput. Appl. Math. 129, 15 (2001).
【4】  Y. Xiao, Z. Wei and Z. Wang, Comput. Math. Appl. 56, 1001 (2008).
【5】  www.cs.toronto.edu/~delve/methods/mlp-ese-1/minimize.ps.gz
【6】  W. Sun and Y.X. Yuan, Optimization theory and methods (Springer 2006), p. 104.