【问题标题】:How do i check if a cost function is Concave or Convex?如何检查成本函数是凹函数还是凸函数?
【发布时间】:2015-11-19 08:10:59
【问题描述】:

我如何检查这个成本函数是凹的还是凸的?我还想知道这是否有一个或多个最小值。

努力;

   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

我在上面的代码中尝试做的是获取一个随机权重值作为上述成本函数的输入,然后使用不变的样本计算这些随机输入的成本值,如果我找到多个最小成本,那么这证实了我的成本函数不是凸的。

我的代码与我在问题中发布的成本函数略有不同,因为我有一个额外的输入。作为我的实现的输出,我有针对我的样本的不同权重的成本值,现在我无法将其可视化。

【问题讨论】:

  • 请阅读SE policy on homework questions。要点是:如果你没有表现出任何努力,那么它就是题外话,可能会在一个小时内关闭。
  • 你好阿德里安,谢谢。首先,这不是家庭作业。我需要建议,因为我相信有不同的方法可以解决这个问题。关于我所做的努力;请看下面的代码;
  • 感谢 Adriaan,现在我已经上传了代码。对我尝试做的事情的长篇解释是我一开始没有上传代码的原因。但我希望这会有所帮助!
  • 感谢您上传代码。这是一个很好的问题!
  • 它对于数学来说可能仍然更可行。SE

标签: matlab cluster-analysis som convex-optimization concave


【解决方案1】:

您需要了解什么是凸性。对于简短版本,check Wikipedia

要更详细的版本,我推荐 this lecture 2this lecture 3 Boyd 的凸优化课程。该课程的开始部分介绍了一系列用于识别/检查凸性的有用数学。

如果一个函数不是凸的,你可以通过找到一个反例来反驳凸性:

  • 绘制函数是 2d 还是 3d。
  • 绘制应用于两个随机点的凸组合的函数值,并寻找非凸区域。

如果存在两个点 xy 以及 [0,1] 中的一个标量 a 使得 a * f(x) + (1-a) * f(y) < f(a*x +(1-a) * y) (基本上是向下曲线的某处),则违反凸性。

未能证明凸性与证明凸性相同!证明凸性的一些方法是:

  • 显示 Hessian 是半正定的。
  • 直接应用凸性定义(显示满足所有可能性的定义)
  • 通过构造规则显示函数是凸函数...例如。一组凸函数的逐点最大值是凸的。等等...应用这样的定理。

看看张贴的图片,一个规范总是凸的(定义的结果)。凸函数之和是凸的,但是我不知道那个K的东西是什么……

【讨论】:

  • 非常感谢 Mathew,“绘制应用于两个随机点的凸组合的函数值并查找非凸区域”这正是我在上面的代码中所做的,我随机输入值并获得每个组合的成本值。现在我遇到的麻烦是在 3​​D 空间中绘图,对此有什么建议吗?我试过这样的情节; '分散(成本值,randomvalX,randomvalW)'。这看起来很随意。
  • 如果您选择两个点 xy 并绘制 xy 之间所有点的函数值,这是 2d 图,而不是 3d 图。在 y 轴上有 f(a*x + (1-a) *y),在 x 轴上有 a,它将从 0 运行到 1。这并不能证明凸性,但如果该图向下弯曲,它可以让您反驳凸性。
  • 好吧,我明白这一点,虽然我上面的成本函数略有不同并且更复杂,但我有多个初始 x 和 y 点的值,我正在处理具有的神经元权重 (y)与我的数据样本 (x) 相同的维度,并且您要询问的“K”是我使用 X 和 Y 的每个组合计算的邻域值,您能否就初始随机值提供进一步的建议?我想我做错了。
  • @Young_DataAnalyst 这不是编程问题。这是一道数学题。
【解决方案2】:

你不能通过模拟来检查这个。

凸性是您需要通过查看成本函数的导数在纸上检查的属性。这严格需要数学解决,而不是 matlab 示例模拟。

【讨论】:

  • 我在某种程度上不同意。您可以通过模拟 DISPROVE 凸性。在 Mac 上将一个函数快速放入 /Applications/Grapher.app 可以给你直觉。对于更高维度的问题,您可以在 MATLAB 中生成随机点,然后在图形上绘制两个点的每个凸组合。如果图形在任何地方向下弯曲,则它不是凸的。
  • 当然可以反驳;但如果你没有找到反例,你就什么都不知道。
猜你喜欢
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多