L1算法分析和實現(xiàn)(2) 從優(yōu)化公式到迭代公式

說明

L1算法中的核心公式簡明易懂,但是從核心的優(yōu)化式向復(fù)雜的迭代式的推導(dǎo)卻不是那么簡單磕仅。本文將針對相關(guān)公式進(jìn)行一次推導(dǎo)荐吉,最后根據(jù)驗證的迭代式進(jìn)行代碼實現(xiàn)。

公式推導(dǎo)

L1核心公式如下:
\underset{X}{\operatorname{argmin}} \sum_{i \in I} \sum_{j \in J}\left\|x_{i}-q_{j}\right\| \theta\left(\left\|x_{i}-q_{j}\right\|\right)+R(X) \tag{1} \\ \theta(r)=e^{-r^{2} /(h / 2)^{2}} , R(X)=\sum_{i \in I} \gamma_{i} \sum_{i^{\prime} \in I \backslash\{i\}} \frac{\theta\left(\left\|x_{i}-x_{i^{\prime} }\right\|\right)}{\sigma_{i}\left\|x_{i} -x_{i^{\prime}}\right\|}

(1)中 X, x_i代表sample point集合和單個點炬藤,Q,q_j代表原本的點云點集和單個點御铃,\gamma_i代表x_i對應(yīng)的平衡常數(shù)(balancing constants),\sigma_i代表x_i的有向度(directionality degree)沈矿。
x_i看做函數(shù)中的變量上真,則有以下式子

\underset{X}{arg\,min}\:f(x_i)= \underset {j \in J}{\sum} f_1(||x_i-q_j||) + \gamma _i \underset {i^, \in I/ \{ i \}}{\sum} f_2(||x_i-x_{i^,}||) \tag {1.1}

f_1偏微分:
\begin{align} \frac {\partial f_1}{\partial x_i}&= \frac {\partial f_1}{\partial ||x_i-q_i||} \times \, \frac {\partial ||x_i-q_i||}{\partial x_i}\\ &= (1-\frac {2{(x_i-q_j)}^2}{{(h/2)}^2}) \theta (||x_i-q_j||) \times \frac {x_i-q_i}{||x_i-q_i||}\\ &=(1-\frac {2{(x_i-q_j)}^2}{{(h/2)}^2}) (x_i-q_j) \alpha _{ij} \tag{1.2} \end{align}

f_2偏微分:
\begin{align} \frac {\partial f_2}{\partial x_i}&= \frac {\partial f_2}{\partial ||x_i-x_{i^,}||} \times \, \frac {\partial ||x_i-x_{i^,}||}{\partial x_i}\\ &=-(1+\frac {2{(x_i-x_{i^,})}^2}{(h/2)^2})\frac {\theta (||x_i-x_{i^,}||)}{\sigma _i(x_i-x_{i^,})^2}\times \frac {x_i-x_{i^,}}{||x_i-x_{i^,}||}\\&= -(1+\frac {2{(x_i-x_{i^,})}^2}{(h/2)^2}) \frac {x_i-x_{i^,}}{\sigma _i} \beta _{ii^,} \tag {1.3} \end{align}

由于式(1.2)和(1.3)中的系數(shù)(1-\frac {2{(x_i-q_j)}^2}{{(h/2)}^2})-(1+\frac {2{(x_i-x_{i^,})}^2}{(h/2)^2})在實際運算中近似為1和-1,所以系數(shù)可以直接去掉细睡,直接保留符號即可谷羞。

最終去掉系數(shù)的化簡式如下:
\sum_{j \in J}\left(x_{i}-q_{j}\right) \alpha_{i j}-\gamma_{i} \sum_{i^{\prime} \in I \backslash\{i\}} \frac{x_{i}-x_{i^{\prime}}}{\sigma_{i}} \beta_{i i^{\prime}}=0, i \in I \tag{2} \\ \alpha_{i j}=\frac{\theta\left(\left\|x_{i}-q_{j}\right\|\right)} {\left\|x_{i}-q_{j}\right\|},\: \beta _{ii^,}=\frac {\theta (||x_i-x_{i^,}||)} {||x_i-x_{i^,}||^3}
P.S. 原論文\beta _{ii^,}=\frac {\theta (||x_i-x_{i^,}||)} {||x_i-x_{i^,}||^2},但是按照(1.3)計算\beta _{ii^,}=\frac {\theta (||x_i-x_{i^,}||)} {||x_i-x_{i^,}||^3}溜徙,此處采用的是3次方的這個定義。

化簡式又可以提取為:
(\underset {j \in J}{\sum} \alpha _{ij}-\frac {\gamma _i \sum _{i^, \in I/\{ i\}} \beta _{ii^,}} {\sigma _i})x_i=\underset {j \in J}{\sum} \alpha _{ij}q_{j}-\frac {\gamma _i \sum _{i^, \in I/\{ i\}} \beta _{ii^,}x_{i^,}} {\sigma _i} \: \tag {2.1}

根據(jù)新的斥力系數(shù)定義\mu=\frac{\gamma_{i} \sum_{i^{\prime} \in I \backslash\{i\}} \beta_{i i^{\prime}}}{\sigma_{i}^2 \sum_{j \in J} \alpha_{i j}}, \forall i \in I(刊誤:原論文里使用公式為\mu=\frac{\gamma_{i} \sum_{i^{\prime} \in I \backslash\{i\}} \beta_{i i^{\prime}}}{\sigma_{i} \sum_{j \in J} \alpha_{i j}}, \forall i \in I犀填,經(jīng)分析\sigma_i應(yīng)為筆誤)蠢壹,可將(2.2)化簡為:

\left(1-\mu \sigma_{i}\right) x_{i}=\frac{\sum_{j \in J} q_{j} \alpha_{i j}}{\sum_{j \in J} \alpha_{i j}} - \mu \sigma_{i} \frac{\sum_{i^{\prime} \in I \backslash\{i\}} x_{i^{\prime}} \beta_{i i^{\prime}}}{\sum_{i^{\prime} \in I \backslash\{i\} } \beta_{i i^{\prime}}} \tag {3}

簡單移項后可得:
x_{i} = \frac{\sum_{j \in J} q_{j} \alpha_{i j}}{\sum_{j \in J} \alpha_{i j}} + \mu \sigma_{i} \frac{\sum_{i^{\prime} \in I \backslash\{i\}} (x_i - x_{i^{\prime} }) \beta_{i i^{\prime}}}{\sum_{i^{\prime} \in I \backslash\{i\}} \beta_{i i^{\prime}}} \tag {3.1}

使用不動點迭代[1]推導(dǎo)出迭代公式:
x_{i}^{k+1}=\frac{\sum_{j \in J} q_{j} \alpha_{i j}^{k}}{\sum_{j \in J} \alpha_{i j}^{k}}+\mu \sigma_{i}^{k} \frac{\sum_{i^{\prime} \in I \backslash\{i\}}\left(x_{i}^{k}-x_{i^{\prime}}^{k}\right) \beta_{i i^{\prime}}^{k}} {\sum_{i^{\prime} \in I \backslash\{i\}} \beta_{i i^{\prime}}^{k}} \\ \alpha_{i j}=\frac{\theta\left(\left\|x_{i}-q_{j}\right\|\right)} {\left\|x_{i}-q_{j}\right\|},\: \beta _{ii^,}=\frac {\theta (||x_i-x_{i^,}||)} {||x_i-x_{i^,}||^3} \tag {4}
可以看到,(3.1)和迭代公式(4)已經(jīng)基本一毛一樣了九巡。

代碼實現(xiàn)

整個迭代的流程包括:

  1. 計算鄰居(self neighbor 和origin neighbor)
  2. 計算f_1項(computeAlphasTerms)和f_2項(computeBetasTerms)
  3. 根據(jù)f_1f_2計算新的迭代坐標(biāo)(公式4)
  4. 重復(fù)上述步驟直到滿足停止條件

迭代函數(shù)

double L1median::iterateReturnError()
{
    /*位置迭代更新*/
    paraPtr->add("neighborhood_size", h);
    for (int i = 0; i < sampleInfo.size(); ++i) {
        sampleInfo[i].kind = (sampleInfo[i].kind == pi::Candidate) ? pi::Sample : sampleInfo[i].kind;
    }

    computeAlphasTerms();
    computeBetasTerms();
    double error = updateSamplePos();
    emit infoSignal("RMS:" + QString::number(error, 'f', 6)+'\n');

    /*位置同步*/
    if (synSampleWithInfo()) {
        emit iterateSignal();
    } else {
        emit errorSignal(QString("fail to synchronize sample info"));
        return 0.0;
    }
    /*位置更新后的預(yù)備信息計算*/
    computeNeighbors();
    computeSigmas();
    return error;
}

其它具體實現(xiàn)部分過于復(fù)雜图贸,此處按下不表,有時間可能另開一章進(jìn)行說明冕广。


  1. https://blog.csdn.net/jbb0523/article/details/52459797 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疏日,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撒汉,更是在濱河造成了極大的恐慌沟优,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睬辐,死亡現(xiàn)場離奇詭異挠阁,居然都是意外死亡,警方通過查閱死者的電腦和手機溯饵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門侵俗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丰刊,你說我怎么就攤上這事隘谣。” “怎么了啄巧?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵寻歧,是天一觀的道長。 經(jīng)常有香客問我棵帽,道長熄求,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任逗概,我火速辦了婚禮弟晚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己卿城,他們只是感情好枚钓,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑟押,像睡著了一般搀捷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上多望,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天嫩舟,我揣著相機與錄音,去河邊找鬼怀偷。 笑死家厌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的椎工。 我是一名探鬼主播饭于,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼维蒙!你這毒婦竟也來了掰吕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤颅痊,失蹤者是張志新(化名)和其女友劉穎殖熟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體八千,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡吗讶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了恋捆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片照皆。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖沸停,靈堂內(nèi)的尸體忽然破棺而出膜毁,到底是詐尸還是另有隱情,我是刑警寧澤愤钾,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布瘟滨,位于F島的核電站,受9級特大地震影響能颁,放射性物質(zhì)發(fā)生泄漏杂瘸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一伙菊、第九天 我趴在偏房一處隱蔽的房頂上張望败玉。 院中可真熱鬧敌土,春花似錦、人聲如沸运翼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽血淌。三九已至矩欠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悠夯,已是汗流浹背癌淮。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沦补,地道東北人该默。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像策彤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匣摘,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355