2

自己組織化マップ コスト関数

このコスト関数が凹型か凸型かを確認するにはどうすればよいですか? また、これに単一または複数の最小値があるかどうかも調べたいと思います。

努力した;

   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

上記のコードで試したのは、上記のコスト関数の入力としてランダムな重み値を取得し、複数の最小コストが見つかった場合、変化しないサンプルを使用してそれらのランダムな入力のコスト値を計算することです。私のコスト関数が凸でないことを確認します。

追加の入力があるため、私のコードは質問に投稿したコスト関数とは少し異なります。私の実装からの出力として、サンプルに対するさまざまな重みのコスト値がありますが、これを視覚化するのに問題があります。

4

2 に答える 2

2

これはシミュレーションでは確認できません。

凸性は、コスト関数の微分を調べることによって、紙の上で確認する必要があるプロパティです。これは、matlab のサンプル シミュレーションではなく、厳密に数学的に解決する必要があります。

于 2015-11-21T08:55:49.900 に答える
2

凸性とは何かを学ぶ必要があります。短いバージョンについては、ウィキペディアを確認してください。

より詳細なバージョンについては、凸最適化に関するボイドのコースのこの講義 2とこの講義 3をお勧めします。そのコースの最初の部分では、凸性の識別/チェックに役立つ一連の数学を紹介します。

関数が凸でない場合、反例を見つけることで凸性を反証できます。

  • 2 次元または 3 次元の関数をグラフ化します。
  • 2 つのランダムな点の凸結合に適用される関数の値をプロットし、非凸領域を探します。

2 つの点が存在し、その中xyスカラーaが存在する場合(基本的には下向きの曲線のある場所)、凸性に違反しています。[0,1]a * f(x) + (1-a) * f(y) < f(a*x +(1-a) * y)

凸性の反証に失敗することは、凸性の証明と同じではありません! 凸性を証明するいくつかのアプローチは次のとおりです。

  • Show Hessian は半正定値です。
  • 凸性の定義を直接適用する (すべての可能性に対して定義が満たされていることを示す)
  • 関数が構築規則によって凸であることを示します...例。凸関数の集合の点ごとの最大値は凸です。など...そのような定理を適用します。

投稿された画像をちらりと見ると、ノルムは常に凸です(定義の結果)。凸関数の和は凸ですが、その K が何なのかわかりません...

于 2015-11-21T09:39:24.080 に答える