我如何检查成本函数是凹函数还是凸函数?
How do i check if a cost function is Concave or Convex?
如何检查这个成本函数是凹的还是凸的?我还想知道这是否有一个或多个最小值。
努力了;
function [w,pi,costvalue] = main_cost(inputdata, tmax, alpha_ini,somrow,somcol)
%main cost function; To get cost value for all possible random weights
%Input:
%inputdata : Data sample
%tmax : Maximum Iteraitions - This determines the number of generated
%random w and pi with cost function computation for each set.
%alpha_ini : The learning rate
%Somrow,somcol : map size
%Output
%w: Som weights
%pi: Global weights
%costvalue: cost for a set of w,pi and input data
%Example
%load expdata_normalized;
%[w,pi,costvalue]=main_cost(expdata_normalized,500,0.1,5,5);
N = somrow * somcol; %all neurons
Dimension = size(inputdata,2);%input data dimension
% Get the corresponding 2D locations of the N neurons on the map
[u(:,1) u(:,2)] = ind2sub([somrow somcol], 1:N);
alpha = alpha_ini; %set initial learning rate
%set map effective width
sigma_ini = 2;
sigma = sigma_ini;
%initialise costvalues
costval=zeros(1,tmax);
%for 1 to max iterations
for t = 1:tmax
tic
%generate random SOM weights
w{t} = round(rand(N,Dimension),1);
%generate random Global weights
pi{t} = round (rand(1,Dimension),1);
% For 1 to all samples in the data
for j = 1:size(inputdata,1)
% Pick a single sample
samplei = inputdata(j,:);
% make global weight same dimension with SOM weights
pirepmat = repmat(pi{t},N,1);
% determine the winning node, from weights at iter(t) to picked
% sample
bmu = part1_closestNeuron(samplei, w{t},1,pirepmat);
% calculate neighbourhood for SOM at iter (t)
for k = 1:size(w{t},1)
neighbourhoodF = exp(-eucdist(u(bmu,:),u(k,:), somrow, somcol, 1)^2 / (2*sigma^2));
allneighbourhoodF(k)= neighbourhoodF;
end
% now get cost value with; inputdata(all-static), Somweights at
% iter(t), and Global weights at iter(t)
costval(t) = costval(t)+CostFunction_iter(inputdata, w{t},pi{t},allneighbourhoodF);
end
toc
end
costvalue = costval;
end
我在上面的代码中尝试做的是获取随机权重值作为上述成本函数的输入,然后如果我找到多个样本,则使用不变的样本计算这些随机输入的成本值最小成本,然后确认我的成本函数不是凸的。
我的代码与我在问题中发布的成本函数略有不同,因为我有一个额外的输入。作为我实施的输出,我有针对我的样本的不同权重的成本值,现在我无法将其可视化。
你无法通过模拟检查这个。
凸性是 属性 您需要通过查看成本函数的导数在纸上进行检查。这严格需要数学解决,而不是用matlab示例模拟
你需要了解什么是凸性。对于简短版本,check Wikipedia.
要获得更详细的版本,我推荐 this lecture 2 and this lecture 3 Boyd 的凸优化课程。该课程的开头部分介绍了一些关于 identifying/checking 凸性的有用数学。
如果一个函数不是凸函数,你可以通过找到一个反例来反证凸函数:
- 画出 2d 或 3d 的函数。
- 绘制应用于两个随机点的凸组合的函数值并寻找非凸区域。
如果在 [0,1]
中存在两个点 x
和 y
以及一个标量 a
使得 a * f(x) + (1-a) * f(y) < f(a*x +(1-a) * y)
(基本上在某处有向下的曲线)。
未能反证凸性不等同于证明凸性!一些证明凸性的方法是:
- 显示Hessian是正半定的。
- 直接应用凸性的定义(显示 def. 满足所有可能性)
- 根据构造规则显示函数是凸的...例如。一组凸函数的逐点最大值是凸的。等等...应用这样的定理。
看了一下贴图,范数总是凸的(定义的结果)。凸函数的和是凸的,但我不知道那K个东西是什么...
如何检查这个成本函数是凹的还是凸的?我还想知道这是否有一个或多个最小值。
努力了;
function [w,pi,costvalue] = main_cost(inputdata, tmax, alpha_ini,somrow,somcol)
%main cost function; To get cost value for all possible random weights
%Input:
%inputdata : Data sample
%tmax : Maximum Iteraitions - This determines the number of generated
%random w and pi with cost function computation for each set.
%alpha_ini : The learning rate
%Somrow,somcol : map size
%Output
%w: Som weights
%pi: Global weights
%costvalue: cost for a set of w,pi and input data
%Example
%load expdata_normalized;
%[w,pi,costvalue]=main_cost(expdata_normalized,500,0.1,5,5);
N = somrow * somcol; %all neurons
Dimension = size(inputdata,2);%input data dimension
% Get the corresponding 2D locations of the N neurons on the map
[u(:,1) u(:,2)] = ind2sub([somrow somcol], 1:N);
alpha = alpha_ini; %set initial learning rate
%set map effective width
sigma_ini = 2;
sigma = sigma_ini;
%initialise costvalues
costval=zeros(1,tmax);
%for 1 to max iterations
for t = 1:tmax
tic
%generate random SOM weights
w{t} = round(rand(N,Dimension),1);
%generate random Global weights
pi{t} = round (rand(1,Dimension),1);
% For 1 to all samples in the data
for j = 1:size(inputdata,1)
% Pick a single sample
samplei = inputdata(j,:);
% make global weight same dimension with SOM weights
pirepmat = repmat(pi{t},N,1);
% determine the winning node, from weights at iter(t) to picked
% sample
bmu = part1_closestNeuron(samplei, w{t},1,pirepmat);
% calculate neighbourhood for SOM at iter (t)
for k = 1:size(w{t},1)
neighbourhoodF = exp(-eucdist(u(bmu,:),u(k,:), somrow, somcol, 1)^2 / (2*sigma^2));
allneighbourhoodF(k)= neighbourhoodF;
end
% now get cost value with; inputdata(all-static), Somweights at
% iter(t), and Global weights at iter(t)
costval(t) = costval(t)+CostFunction_iter(inputdata, w{t},pi{t},allneighbourhoodF);
end
toc
end
costvalue = costval;
end
我在上面的代码中尝试做的是获取随机权重值作为上述成本函数的输入,然后如果我找到多个样本,则使用不变的样本计算这些随机输入的成本值最小成本,然后确认我的成本函数不是凸的。
我的代码与我在问题中发布的成本函数略有不同,因为我有一个额外的输入。作为我实施的输出,我有针对我的样本的不同权重的成本值,现在我无法将其可视化。
你无法通过模拟检查这个。
凸性是 属性 您需要通过查看成本函数的导数在纸上进行检查。这严格需要数学解决,而不是用matlab示例模拟
你需要了解什么是凸性。对于简短版本,check Wikipedia.
要获得更详细的版本,我推荐 this lecture 2 and this lecture 3 Boyd 的凸优化课程。该课程的开头部分介绍了一些关于 identifying/checking 凸性的有用数学。
如果一个函数不是凸函数,你可以通过找到一个反例来反证凸函数:
- 画出 2d 或 3d 的函数。
- 绘制应用于两个随机点的凸组合的函数值并寻找非凸区域。
如果在 [0,1]
中存在两个点 x
和 y
以及一个标量 a
使得 a * f(x) + (1-a) * f(y) < f(a*x +(1-a) * y)
(基本上在某处有向下的曲线)。
未能反证凸性不等同于证明凸性!一些证明凸性的方法是:
- 显示Hessian是正半定的。
- 直接应用凸性的定义(显示 def. 满足所有可能性)
- 根据构造规则显示函数是凸的...例如。一组凸函数的逐点最大值是凸的。等等...应用这样的定理。
看了一下贴图,范数总是凸的(定义的结果)。凸函数的和是凸的,但我不知道那K个东西是什么...