在看完UFLDL自编码器autoencoder的代码后,发现其中的训练过程并不是使用训练的手段找到最优的参数theta,而是使用了minFunc寻找代价函数的最小值,并返回优化后的参数theta。其中的minFunc函数的说明里头提到了这个函数提供的各种选项和matlab提供的fminunc函数非常像,所以就去看了下matlab的help。
这里贴出fminunc函数help中最基本的翻译:
fminunc试图找到一个多变量函数的最小值,从一个估计的初试值开始,这通常被认为是无约束非线性优化问题。
x =fminunc(fun,x0) 试图从x0附近开始找到函数的局部最小值,x0可以是标量,向量或矩阵
x =fminunc(fun,x0,options) 根据结构体options中的设置来找到最小值,可用optimset来设置options
x =fminunc(problem) 为problem找到最小值,而problem是在Input Arguments中定义的结构体
Create thestructure problem by exporting a problem from Optimization Tool, as describedin Exporting Your Work.
[x,fval]= fminunc(...) 返回目标函数fun在解x处的函数值
[x,fval,exitflag]= fminunc(...) 返回一个描述退出条件的值exitflag
[x,fval,exitflag,output]= fminunc(...) 返回一个叫output的结构体,它包含着优化的信息
[x,fval,exitflag,output,grad]= fminunc(...) 返回函数在解x处的梯度的值,存储在grad中
[x,fval,exitflag,output,grad,hessian]= fminunc(...) 返回函数在解x处的Hessian矩阵的值,存储在hessian中
对这些说明理解的不是很透彻,然后做了几个简单的实验,如下:
定义函数fun1
function y = fun1(x)
y = (x - 2)^2;
end
显然fun1在x=2处取得最小值0
clear