PKUWWT

函数的临界点上的海森(Hessian)矩阵的含义[译]

原题:Meaning of the Hessian of a function in a critical point, copy

作者:Mircea Petrache

时间: 2012年1月1日

考察一个函数$f: R^n \to R$,假定它是可微并至少具有2阶连续性(即所有偏微分形式$f_{ij}=f_{x_ix_j}=\partial_{ij}^2f = \partial_{x_ix_j}^2\cdot f :=\frac{\partial^2f}{\partial x_i\partial x_j} : R^n \to R$都是连续的,其中$i,j\in\{1,\cdots,n\}$)。

回忆$f$上的临界点(critical point)$P$的定义:点$P\in R^n$,且满足$f$在$P$处的梯度为0。即

或更具体的形式是

然后,我们将给出一个方式(实际上也是最标准的方式)来判断一个点临界点$P$是否是局部最大,局部最小或鞍点。我们会用到函数$f$的二次微分矩阵,也称为$f$在$P$处的海森矩阵(Hessian Matrix)。此矩阵记为$Hf(P)$,并等价于(还需要给出”最佳近似”的正确含义)

梯度与海森的几何含义

一个变量的函数的梯度表示什么意思

回忆一下,单变量函数$f: R\to R$在某个点处的微分$f’(P)$具有如下的几何含义。考虑$f$的图,记为点集$G(f) := \{(x,y) \in R^2 : y = f(x) \}$。 通常我们在2维空间上将这个$R^2$的子集绘制出来,并将其直接视为”函数$f$”,隐含将其等价于函数本身。

$f’(P)$表示为图$G(f)$在点$(P,F(P))$处的切线的倾角。

特别是,在临界点$x=P$(即$f’(P)=0$)下的切线必须是水平的。即,在$P$附近的函数$f$的最好近似是常量函数。

一阶泰勒多项式

另一种寻找$f$在$P$附近的最好近似的方式是考虑所谓的一阶泰勒多项式。这种多项式记为$j^1_Pf(x)$,定义为

另一种理解$j^1_Pf(x)$的方式是,视”最容易”满足$g(P)=f(P)$且$g’(P)=f’(P)$的函数$g$。

单变量函数的海森表示什么意思

现在,假定我们想要知道$f$与”$j^1_Pf$在$P$附近的最佳近似”偏离多少,那该怎样测量呢?

首先考虑差分函数

现在的目标变成了用最好的方式来近似$d$。我们观察到”一阶$d(x)$的最佳近似”目前仍然只是0,而关于”最佳近似”的思想变成了:如果$d$有一个比0好的近似$D$,那么$j^1_Pf+D$是一个比$j^1_Pf$更好的$f$的近似。

如果我们按照上述的思想深入探讨,那么一个合理的想法应该是寻找一个$f$的”二阶最佳近似”。这就是所谓的二阶泰勒多项式,它是”$f(x)$的最佳近似二阶多项式”(虽然在一定程度上并不准确),定义为:

现在,让我们集中考察表达式中由一阶最佳近似$j^1_Pf$到二阶最佳近似$j^2_Pf$所增加的新项

它基本上依赖于$f$在$P$处的二阶微分,也就是$f$的海森。

理解$f’{}’(P)$的意义的最好方式是考察当$P$是$f$的临界点时的几种情况。

$P$是临界点表明$f$的图在点$(P,f(P)$处切线水平(即$f’(P)=0)$。我们说$f$在$P$附近的最佳近似多项式是

此多项是在顶点$P$处形成一个抛物线的图,当$f’{}’(P)>0$时两翼向上,$f’{}’(P)<0$时两翼向下。如果$f$接近于抛物线,保持两翼向上,则$P$是$f$的一个局部最小点,如果$f$接近于抛物线保持两翼向下,则$P$是$f$的一个局部最大点。如果$f’{}’(P)=0$,那么二阶最佳近似仍然不足以说明$f$在$P$附近的行为,因为和一阶近似一样,残差仍然是一个常值函数。我们可以总结为

现在,我们可以开始进行针对梯度向量和海森矩阵的类似的解读,这时的$f$有多个变量,比如$f:R^n\to R$,其中$n>1$。

多变量情况下的梯度和海森矩阵

如前所述,理解一阶和二阶微分含义的关键是$f$的泰勒多项式(至少在讨论临界点时如此)。所以,我需要将函数$f:R^n\to R$的一阶和二阶泰勒多项式公式写下来。其形式类似于单变量情况。我们将点$P\in R^n$的坐标记为$(\bar x_1,\cdots, \bar x_n) = P$。然后$j^1_Pf$的表达式是(观察一下,与前面章节具有相似性):

在最后一行中,运算符”$\cdot$”表示$R^n$上的向量的标量积。如果有两个向量$v=(v_1,\cdots,v_n)$和$w=(w_1,\cdots,w_n)$,标量积”$\cdot$”的定义为$v\cdot w=v_1w_1+\cdots+v_nw_n=\sum_{i=1}^nv_iw_i$。这是上面$j^1_Pf$最后一个等式的来由。

同样,$j^1_Pf(x)$是$f$在$P$附近的1阶最佳近似(这次是针对变量$x_1,\cdots,x_n$)。

我们也可以给出$\nabla f(P)$的更”几何”的含义(需要更多想象力)。考虑函数$f$的图,即所有点$(x,f(x)), x\in R^n$构成的$f$的图,也是$R^{n+1}$的子集。如果$\nabla f(P)=0$,则$f$的图的”切超平面”将与水平超平面$\{x_1,\cdots, x_n,0\in R^{n+1}\}$平行。因为这种情况下$j^1_Pf(x)=f(P)$,所以当$f$在$P$附近进行一阶多项式近似时,我们无法将残差与常函数区分。

再考虑二阶多项式,我们获得二阶泰勒多项式

在上面最后两行中,我们使用了线性代数中的记号。如果$v,w$是$R^n$上的向量,而$A$是一个$n\times n$矩阵,则

注意$Hf(P)$是$f$在点$P$上的二阶微分,其$(i,j)$项是$\partial_i\partial_jf(P)$,这是上述$j^2_Pf(x)$最后一个等式的来由。

关于临界点$P$处的海森矩阵,

我们将尽力模仿1.2节关于$f$在临界点$P$附近的二阶微分的讨论,只不过现在变量不仅仅只有一个。对于一个临界点而言,函数可以很好地近似于泰勒多项式

为了避免多余的记号,我们假定$P$是原点(向量$x-P$表示$x$的偏移量为$P$,现在不考虑偏移了)。因此,现在我们的临界点是原点:$\nabla f(0)=0$,上述公式变成

为了继续讨论,我们注意到一个$C^2$-正规函数(即具有二阶微分且连续的函数)的二阶微分矩阵具有如下属性

定理1 如果$f: R^n\to R$是一个连续二阶可微函数,那么其两次微分可交换,即,对于所有的$i,j\in\{1,\cdots,n\}$,且所有的点$x\in R^n$,满足

对于海森矩阵而言,上述定理意味着$Hf(x)$对于所有的$x\in R^n$来说是一个对称矩阵(即$Hf(x)$的$(i,j)$项等于$(j,i)$项,换句话说此矩阵对于对角线来说是对称的)。让我们先回忆一下此类矩阵的性质。

对称矩阵(回忆一下线性代数课)

回忆一下,对于一个$R$上的有限维向量空间$V$,其标量积为$<\cdot,\cdot>:V\times V\to R$(比如,$R^n$上欧氏标量积$<v,w>=v\cdot w=\sum_{i=1}^nv_iw_i$),其线性对称算子是$L: V\to V$对于所有的$v,w\in V$满足$<v,L(w)>=<L(v),w>$。下面的命题很容易证明:

命题2 假设$A$是一个$n\times n$的对称矩阵,则函数$L_A:R^n\to R^n$

为$R^n$上的欧氏标量积($v\cdot w = \sum_{i=1}^nv_iw_i$)定义了一个线性对称算子。

我们知道如果$A\cdot V=\lambda v, \lambda\in R$,则向量$v$是$L_A$的特征向量。换句话说,$L_A$将$v$变换成其自身。如果$v$是其中一个特征向量,则数值$\lambda$称为$A$的特征值。(也许你知道正则矩阵$A$的特征值也可能是复数,但是如果$A$是对称阵时,它们事实上都是实数。)

你应该也还记得$R^n$的标准正交基:所有长度为1且互相垂直的向量构成的基底。典型的例子是常用基底,由$(1,0,\cdots,0)$, $(0,1,0,\cdots,0)$,…,等构成,这些向量只有一个分量为1其余为0。事实上,所有的标准正交基都可以通过对此常用基底进行旋转变换(同时旋转所有基底向量)和镜像变换(将一些基底向量变成反方向)得到。

在下面的定理中,我们可以看到通过旋转的方式,可以将一个对称矩阵表示的线性函数$L_A$变换为对角形式。下面是严格的表述:

定理3(光谱定理的等价形式) 给定一个对称$n\times n$实系数矩阵$A$,则可为其线性算子$L_A:R^n\to R^n$找到一个标准正交基。

特别是,$L_A$在新的基底下的形式为

其中$\lambda_1, \cdots, \lambda_n$是$L_A$的特征值,并按照其重数重复出现。

如果你练习过线性代数,你还可以证明以下推论(可尝试$2\times2$矩阵,然后推广)。这对于你使用矩阵$A$的特征值会有用。

推论4 $A$是一个对称$n\times n$矩阵,其行列式等于其线性算子$L_A:R^n\to R^n$的特征值的积。(特殊情况,如果$A$是对角形式,则行列式$det(A)$是对角线元素的积)

推论5 $A$是一个对称$n\times n$矩阵,$A$的迹(定义为对角元素的和)等于$A$的特征值的和。

如何将对称矩阵的知识应用到泰勒多项式中

我们以前见过一个函数$f$如果有”好”(足够连续)的二阶微分,则临界点(假定是原点附近)附近的最好近似是二阶泰勒多项式

现在,为了理解$f$在0附近的行为,我们可能还需要像定理3中那样”旋转坐标基底”,使得$Hf(0)$变成对角形式,即让特征值位于对角线上。为什么这种形式更方便呢?因为这使得上面的表达式更简单了:记$x$在”旋转”前在新的基底下的坐标为$y=(y_1,\cdots,y_n)$,(注意这里0仍然在0的位置上,而一般情况下需要在$P$附近旋转),然后得到

现在,我们开始解读最后的表达式,考察$j^2_0f(y)$在0附近相对于$y$的行为。当只变化一个坐标时此多项式会如何变换?然后,因为我们只允许一个坐标变化,我们再次获得一个只有一个变量$y_1$的函数

此函数的图又可以画在平面上了(水平坐标是$y_1$坐标,纵坐标是$j^2_0f$的值),因此可以像1.2节那样进行讨论

  • 如果$\lambda_1>0$,则是一个两翼向上的抛物线
  • 如果$\lambda_1=0$,则是一个水平线
  • 如果$\lambda_1<0$,则是一个两翼向下的抛物线

类似的,我们可以变化任意变量$y_i$,然后延那个方向看$j^2_0f(y)$随$\lambda_i$的变化情况。

如果我们让$y$延某些不与坐标轴平等的方向变化呢?比如,我们可能让$y$延方向$(a_1,\cdots, a_n)$变化。这意味着,我们使用某个接近0的数$t$,考虑其乘积$y=t\cdot(a_1,\cdots,a_n)=(ta_1,\cdots,ta_n)$。然后得到

所以,我们再次获得一个抛物线状的图,其形状为”两翼向上”,”两翼向下”,或一条水平线,取决于$t^2$的系数是否为正/负/0。这三种情况下会发生什么呢?并没有清楚的答案,我们清楚的只有如下几条

  • 如果所有的$\lambda_i>0$,则对所有的$(a_1,\cdots,a_n)$有$\sum_{i=1}^na_i^2\lambda_i>0$
  • 如果所有的$\lambda_i<0$,则对所有的$(a_1,\cdots,a_n)$有$\sum_{i=1}^na_i^2\lambda_i<0$

在第一种情况中,我们可以推断0是$f$的局部最小点,因为$f$在0附近接近泰勒多项式,而该多项式具有此性质。类似的,第二种情况表示0是$f$的局部最大点。

如果上述情况都没有发生呢? 是否就可以和单变量一样说不足以说明是最大还是最小呢?

再一次,答案不是那么简单,因为对于一些多变量函数而言,可能一些方向是局部最小,而另外一些方向是局部最大,这种情况是不会发生在单变量函数上的,因为最坏的情形也只不过是缩点(flex),如$f(x)=x^3$在0处。$Hf(0)$可能在某个方向上$\lambda_i>0$,而在另外一个方向上$\lambda_j<0$,因此,我们只改变$y_i$时,$f$在0处延此方向最小,而只改变$y_j$时,$f$在0处延此方向最大。这样的临界点称为鞍点。

当某个$\lambda_i=0$时,说明二阶泰勒多项式不中心预测$f$延这个方向的行为,需要考虑更好的近似(与1维情形类似)。

其它相关资源

Back

python programming visualization GPU scholarship algorithm data linux pdf foxit geometry math OpenGL zip D3 java vim makefile C++ gdb >>>> <<<<


pkg
node.js
bundle
Bunlde node.js app to standalone executable with pkg
2020-04-17 00:00:00 +0000
/programming/2020-04-17-bundle-node-js-app-to-standalone-executable-with-pkg/

	
	
tighervnc
ubuntu
Install tigervnc on Ubuntu18.04
2020-04-06 00:00:00 +0000
/techniques/2020-04-06-install-tigervnc-on-ubuntu-18.04/

	
	
go
qt
Usage of Go binding for Qt
2020-04-05 00:00:00 +0000
/programming/2020-04-05-usage-of-go-binding-for-qt/

	
	
docker
registry
web-UI
Setup a private docker registry v2 with web-ui
2020-04-04 00:00:00 +0000
/techniques/2020-04-04-setup-a-private-docker-registry/

	
	
jenkins
flask
continuous integration testing
docker
python
Continuous Integration Testing For Flask with Jenkins
2020-03-16 00:00:00 +0000
/programming/2020-03-16-jenkins-continuous-integration-testing-for-flask/

	
	
android
python
functional testing
uiautomator
Python-based ui-automator for Android
2020-03-15 00:00:00 +0000
/programming/2020-03-15-android-ui-automator-python/

	
	
sqlite3
linux
How to show Sqlite3 output as Man page table
2020-03-14 00:00:00 +0000
/techniques/2020-03-14-how-to-show-sqlite3-output-as-man-page-table/

	
	
gis
algorithm
Encoded Polyline Algorithm
2020-03-11 00:00:00 +0000
/programming/2020-03-11-encoded-polyline-algorithm/

	
	
你应该了解的所有wget命令
2015-09-26 00:00:00 +0000
/techniques/2015-09-26-all-the-wget-commands-you-should-know/

	
	
linux
gnome
GNOME 3 Usage
2015-02-17 00:00:00 +0000
/techniques/2015-02-17-gnome3-usage/

	
	
visualization
CFD
Usage of OpenFoam
2015-02-10 00:00:00 +0000
/scholarship/2015-02-10-openfoam-usage/

	
	
Script of converting tikz script to pdf file
2014-11-19 00:00:00 +0000
/techniques/2014-11-19-tikz-to-pdf-script/

	
	
linux
gimp
gimp使用笔记
2014-11-16 00:00:00 +0000
/techniques/2014-11-16-gimp-notes/

	
	
visualization
scholarship
draw critical points classification of planar system using tikz
2014-10-31 00:00:00 +0000
/scholarship/2014-10-31-planar-system-critical-points-with-tikz/

	
	
LaTeX
scholarship
Latex中bibtex的命名
2014-10-29 00:00:00 +0000
/scholarship/2014-10-29-latex-bibtex-author-name/

	
	
python
PyQt
programming
PyQt4 signal and slot Example
2014-10-19 00:00:00 +0000
/programming/2014-10-19-pyqt4-signal-slot-example/

	
	
programming
C++
Null Ostream Class in C++
2014-10-18 00:00:00 +0000
/programming/2014-10-18-cpp-null-ostream/

	
	
第一个GeoGebra应用
2014-10-09 00:00:00 +0000
/math/2014-10-09-first-geogebra-program/

	
	
linux
shell
shell用法集锦
2014-10-07 00:00:00 +0000
/techniques/2014-10-07-bash-notes/

	
	
swim
blog
游泳技术动画
2014-09-30 00:00:00 +0000
/blog/2014-09-30-swimming-animation/

	
	
scholarship
zotero
文献管理工具Zotero
2014-09-27 00:00:00 +0000
/scholarship/2014-09-27-Literature-Management-Software-Zotero/

	
	
programming
lisp
clojure
第一个clojure程序
2014-09-18 00:00:00 +0000
/programming/2014-09-18-the-first-clojure-program/

	
	
visualization
OpenGL
OpenGL使用技巧
2014-08-27 00:00:00 +0000
/scholarship/2014-08-27-opengl-utility/

	
	
python
crawler
用python来扒网页
2014-08-23 00:00:00 +0000
/programming/2014-08-23-web-scrap-with-python/

	
	
programming
Unicode
中文转码工具
2014-08-23 00:00:00 +0000
/programming/2014-08-23-unicode-conversion/

	
	
vim使用笔记
2014-08-22 00:00:00 +0000
/techniques/2014-08-22-vim-notes/

	
	
ImageMagick使用笔记
2014-08-21 00:00:00 +0000
/techniques/2014-08-21-ImageMagick-notes/

	
	
programming
C++
C++中打印指针
2014-08-17 00:00:00 +0000
/programming/2014-08-17-std-ostream-output-pointer-in-cplusplus/

	
	
programming
gdb
gdb笔记
2014-08-16 00:00:00 +0000
/programming/2014-08-16-gdb-notes/

	
	
programming
bit操作
2014-08-16 00:00:00 +0000
/programming/2014-08-16-bit-operation/

	
	
programming
C++
C++使用笔记
2014-08-12 00:00:00 +0000
/programming/2014-08-12-cpp-usage/

	
	
geometry
programming
python
平面三角形求交测试(Planar Triangles Intersection)
2014-08-07 00:00:00 +0000
/programming/2014-08-07-triangle-intersect/

	
	
vim
makefile
Makefile模板
2014-08-06 00:00:00 +0000
/techniques/2014-08-06-makefile-template/

	
	
programming
java
Java Usage
2014-08-03 00:00:00 +0000
/programming/2014-08-03-java-usage/

	
	
wxMaxima连不上maxima
2014-08-01 00:00:00 +0000
/techniques/2014-08-01-wxmaxima-not-connected-to-maxima/

	
	
用djvulibre将png图片转化为pdf
2014-07-27 00:00:00 +0000
/techniques/2014-07-27-convert-png-images-to-pdf-with-djvulibre/

	
	
用djvulibre来设置djvu文件的索引
2014-07-26 00:00:00 +0000
/techniques/2014-07-26-djvulibre-reset-outline/

	
	
python
programming
python的profile工具
2014-07-24 00:00:00 +0000
/programming/2014-07-24-python-profile/

	
	
隐函数定理
2014-07-22 00:00:00 +0000
/math/2014-07-22-Implicit-Function-Theorem/

	
	
google-chrome浏览器的标题栏字体渲染问题
2014-07-17 00:00:00 +0000
/techniques/2014-07-17-google-chrome-title-bar-font-rendering/

	
	
linux
备份文件Shell脚本
2014-07-14 00:00:00 +0000
/techniques/2014-07-14-linux-backup-shell-script/

	
	
Linux下将多个图像转换为pdf
2014-06-18 00:00:00 +0000
/techniques/2014-06-18-convert-multi-images-to-pdf/

	
	
D3
visualization
D3.js入门资料集锦
2014-05-24 00:00:00 +0000
/scholarship/2014-05-24-d3-js-tutorials/

	
	
linux
zip
python
Linux下zip文件解压乱码问题
2014-05-21 00:00:00 +0000
/techniques/2014-05-21-unzip-gbk-zip-file-in-linux/

	
	
关于Linux下有线网卡不能连接的问题
2014-05-14 00:00:00 +0000
/techniques/2014-05-14-about-r8169-ethernet-driver/

	
	
Linux下用wvdial为3G上网卡拨号
2014-05-04 00:00:00 +0000
/techniques/2014-05-04-3g-connection-with-wvdial/

	
	
algorithm
geometry
两个平面三角形的相交测试
2014-04-29 00:00:00 +0000
/scholarship/2014-04-29-intersections-between-two-2d-triangles/

	
	
使用另一个版本的glibc
2014-04-25 00:00:00 +0000
/techniques/2014-04-25-use-another-glibc-installation/

	
	
LaTeX使用方法集锦
2014-04-19 00:00:00 +0000
/techniques/2014-04-19-latex-usage/

	
	
scholarship
资源网站集锦
2014-04-16 00:00:00 +0000
/scholarship/2014-04-16-good-resource-website/

	
	
python
programming
Python使用问题集锦
2014-04-15 00:00:00 +0000
/programming/2014-04-15-python-usage/

	
	
修复pdf没有嵌入字体的问题
2014-04-07 00:00:00 +0000
/techniques/2014-04-07-repair-pdf-font-embedding-problem/

	
	
visualization
用VTK生成非结构化网格上的矢量场
2014-04-03 00:00:00 +0000
/scholarship/2014-04-03-use-vtk-create-vector-field-on-unstructured-grid/

	
	
algorithm
visualization
geometry
光线-三角形求交测试算法[译]
2014-04-03 00:00:00 +0000
/scholarship/2014-04-03-ray-triangle-intersection-tests-for-dummies/

	
	
OpenGL
python
programming
Python下写OpenGL代码示例
2014-04-03 00:00:00 +0000
/programming/2014-04-03-python-opengl-sample/

	
	
使用tikz绘制函数
2014-03-30 00:00:00 +0000
/techniques/2014-03-30-use-tikz-to-plot-function/

	
	
使用maxima求解非线性方程组
2014-03-21 00:00:00 +0000
/techniques/2014-03-21-use-maxima-to-solve-non-linear-system/

	
	
linux
在Linux下为笔记本添加两指左右滚动功能
2014-03-11 00:00:00 +0000
/techniques/2014-03-11-add-horizontal-two-finger-scroll/

	
	
Linux下常用工具
2014-03-08 00:00:00 +0000
/techniques/2014-03-08-usual-life-linux-tools/

	
	
Linux下使用github
2014-03-08 00:00:00 +0000
/techniques/2014-03-08-how-to-use-github/

	
	
git使用笔记
2014-03-08 00:00:00 +0000
/techniques/2014-03-08-git-usage/

	
	
LaTeX笔记(texlive)
2014-03-06 00:00:00 +0000
/techniques/2014-03-06-latex-notes/

	
	
geometry
visualization
几种基本几何预测
2014-03-01 00:00:00 +0000
/scholarship/2014-03-01-geometric-predicates/

	
	
math
visualization
geometry
单纯复形(Simplicial Complexes)[译]
2014-02-27 00:00:00 +0000
/scholarship/2014-02-27-simplicial-complexes/

	
	
linux
一个用于寻找文件,并便于打开文件的脚本
2014-02-22 00:00:00 +0000
/techniques/2014-02-22-a-script-for-find-and-open-file/

	
	
linux
清理Linux中的不用内存或缓存
2014-02-21 00:00:00 +0000
/techniques/2014-02-21-free-linux-memory/

	
	
visualization
geometry
形状指数(shape index)
2014-02-20 00:00:00 +0000
/scholarship/2014-02-20-shape-index/

	
	
用wget下载C++的手册
2014-02-10 00:00:00 +0000
/techniques/2014-02-10-download-cplusplus-reference/

	
	
linux
pdf
foxit
在Linux下使用wine+foxit
2014-02-08 00:00:00 +0000
/techniques/2014-02-08-using-foxit-in-linux/

	
	
在Bash的输入循环中使用readline和历史记录
2014-02-06 00:00:00 +0000
/techniques/2014-02-06-completion-and-history-in-bash-read-loop/

	
	
visualization
data
可视化数据集
2014-01-07 00:00:00 +0000
/scholarship/2014-01-07-visualization-dataset-collection/

	
	
关于几种窗口系统的透明效果
2014-01-06 00:00:00 +0000
/techniques/2014-01-06-transparent-window/

	
	
使用淘宝提供的Ruby源
2014-01-06 00:00:00 +0000
/techniques/2014-01-06-taobao-gems/

	
	
函数的临界点上的海森(Hessian)矩阵的含义[译]
2013-12-29 00:00:00 +0000
/math/2013-12-29-Meaning-of-the-Hessian-of-a-function-in-a-critical-point/

	
	
algorithm
visualization
层次集方法讲稿[译]
2013-12-25 00:00:00 +0000
/scholarship/2013-12-25-the-level-set-method-lecture-notes/

	
	
visualization
algorithm
层次集方法(Level Set Method) -- 解释[译]
2013-12-24 00:00:00 +0000
/scholarship/2013-12-24-level-set-method-explanation/

	
	
scholarship
微软的学术搜索引擎还是很好用的
2013-12-17 00:00:00 +0000
/scholarship/2013-12-17-academical-search-with-microsoft-search-engine/

	
	
GNU screen 保存会话
2013-12-12 00:00:00 +0000
/techniques/2013-12-12-gnu-screen-save-session/

	
	
GNU Screen--介绍和初学者指南[译]
2013-12-04 00:00:00 +0000
/techniques/2013-12-04-gnu-screen-an-introduction-and-beginners-tutorial/

	
	
visualization
GPU
GPU Gems - 第39章 基于纹理的体绘制技术[译]
2013-12-04 00:00:00 +0000
/scholarship/2013-12-04-gpugems-ch39-texture-based-volume-rendering/

	
	
MathJax使用示例
2013-12-03 00:00:00 +0000
/techniques/2013-12-03-mathjax-example/

	
	
Jekyll中使用MathJax
2013-12-03 00:00:00 +0000
/techniques/2013-12-03-jekyll-using-mathjax/

	
	
visualization
GPU
GPU Gems - 第17章 环境光遮蔽[译]
2013-12-01 00:00:00 +0000
/scholarship/2013-12-01-gpugems-ch17-ambient-occlusion/

	
	
python
programming
python解释器中的自动补全
2013-11-30 00:00:00 +0000
/programming/2013-11-30-python-interpreter-autocomplete/

	
	
Github建站过程
2013-11-29 00:00:00 +0000
/techniques/2013-11-29-build-a-github-website/

	
	
python
programming
最简单的python服务器
2013-11-29 00:00:00 +0000
/programming/2013-11-29-python-simple-server/