Как проверить, является ли функция стоимости вогнутой или выпуклой?

Самоорганизующаяся функция стоимости карты

Как проверить, является ли эта функция стоимости вогнутой или выпуклой? Я также хочу выяснить, имеет ли это один или несколько минимумов.

Усилие сделано;

   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

В приведенном выше коде я попытался получить случайные значения веса в качестве входных данных для указанной выше функции стоимости, а затем вычислить значение стоимости для этих случайных входных данных с выборкой, которая не меняется, если я найду несколько минимальных затрат, то подтверждает, что моя функция стоимости не выпуклая.

Мой код немного отличается от функции стоимости, которую я разместил в своем вопросе, так как у меня есть дополнительный вход. Как результат моей реализации, у меня есть значения стоимости для различных весов по сравнению с моей выборкой, теперь у меня возникают проблемы с визуализацией этого.

2 ответа

Решение

Вам нужно узнать, что такое выпуклость. Для короткой версии, проверьте Википедию.

Для более подробной версии я рекомендую эту лекцию 2 и эту лекцию 3 из курса Бойда по выпуклой оптимизации. Начальная часть этого курса знакомит вас с полезной математикой для определения / проверки выпуклости.

Если функция не выпуклая, вы можете опровергнуть выпуклость, найдя контрпример:

  • График функции, если 2d или 3d.
  • Изобразите значение функции, примененной к выпуклым комбинациям двух случайных точек, и найдите невыпуклые области.

Выпуклость нарушается, если существуют две точки x а также y вместе со скаляром a в [0,1] такой, что a * f(x) + (1-a) * f(y) < f(a*x +(1-a) * y) (в основном где-то с нисходящей кривой).

Неспособность опровергнуть выпуклость - это не то же самое, что доказательство выпуклости! Некоторые подходы для доказательства выпуклости:

  • Шоу Гессиана положительно полуопределено.
  • Примените определение выпуклости напрямую (покажите определение, удовлетворенное для всех возможностей)
  • Показать функцию выпуклой по правилам построения... например. поточечный максимум множества выпуклых функций является выпуклым. и т. д.... применять теоремы, как это

Взглянув на размещенное изображение, норма всегда выпуклая (следствие определения). Сумма выпуклых функций является выпуклой, но я не знаю, что это за штука К...

Вы не можете проверить это с помощью симуляции.

Выпуклость - это свойство, которое вы должны проверить на бумаге, посмотрев производные вашей функции стоимости. Это должно решаться математически, а не с помощью имитационного примера с Matlab.

Другие вопросы по тегам