@[TOC](【譯】基於學習的稀疏編碼快速逼近)
# 摘要
在稀疏編碼中,輸入向量被重建為基向量的稀疏的線性組合。稀疏編碼已經成為一個流行的提取資料特徵的方法。對於一個給定輸入,通過最小化一個二次重建錯誤和L1懲罰項來進行編碼。這個過程對於實時的模式識別來說的太慢了。因此我們提出兩個快速演算法,這兩個演算法可以提取非常好的視覺特徵,或者用來初始化經學的迭代演算法。主要思想是訓練一個有特定結構的非線性、有反饋機制的預測器來進行稀疏編碼,這個預測其有經過調節的深度,因此可以做非常好的近似。這種方法的一個版本——可以肯做是 Li, Osher等提出的coordinate descent method的一個可訓練的版本——被證明可以在相同精度下比他們的方法計算量少10倍左右。不同於之前所提出的稀疏編碼預測器,本系統允許一種在推斷中“explaining away”的方法。結果預測器是可微分的,因此可以推廣到大範圍的可訓練的識別系統中。
# 介紹
稀疏編碼是一個重建問題:給定一個輸入向量,使用一個過完備的基向量族(over-complete family basis vectors)的稀疏的係數來表示。這篇文章介紹了一個非常有效的方法來對最優係數編碼進行逼近。
稀疏編碼已經稱為一種從資料中提取特徵的非常流行的方法,特別是對於字典中的基向量是從無標籤資料中學到的更是如此。已經提出一些無監督學習方法來學這種字典。稀疏編碼在神經科學、影象重建等方面有很多的應用。最近,這些方法被用於提取視覺特徵來做為物體識別。應用稀疏編碼一個主要的問題是——例如被用於物體識別中——計算量龐大,無法應用於實時場景。給定一個輸入圖片,演算法必須對於每一個圖片塊計算其對應的稀疏表示。這麼做的結果是,非常大量的研究在尋找對於稀疏編碼的合適的優化演算法上下功夫。
本文的主要貢獻是:提出一個有效的基於學習策略的演算法,該演算法可以在給定時間內給出一個對於最優稀疏編碼非常好的逼近。我們假定用於稀疏編碼的基向量已經被訓練過並且調至最優,這個方法的主要思想是:通過提供輸入向量和相應的最優稀疏編碼來訓練一個“非線性的引數化的編碼器”,其中用於訓練的最優稀疏編碼來自於傳統的優化方法。訓練之後,編碼器有了一個提前決定了的複雜度(pre-determined complexity),這個時候他就可以在給定計算損失和錯誤的情況下用於稀疏編碼的預測任務了。
將編碼器用於稀疏編碼預測這個想法是之前由其他學者提出的。和我們所提出的這個方法最相關的是**預測的稀疏分解**(predictive sparse decomposition),但是他們的方法過於簡單化,並且只能給出非常粗糙的對於稀疏編碼的近似。我們的貢獻是提出一個特別的形式以及一個特別的引數化的形式。不同於之前的工作,在編碼成分中進行近似"explaning away",因而兩個基向量的集可以對於輸入進行很好的重建,其中一個集合可以從演算法中獲得,另一個將被壓縮(suppressed)。我們的第一個編碼器結構是ISTA(Iterative Shrinkage and Thresholding Algorithm)演算法的截斷形式。當ISTA使用兩個通過基向量計算得到的矩陣的時候,我們的方法,LLSTA(Learned LSTA)學習這兩個矩陣,使得可以在給定的迭代次數下提供最低可能的錯誤。我們的第二個編碼器結構是基於CoD(Coordinate Descent algorithm)方式的截斷形式,同樣的,通過學習一個矩陣而不是進行前訓練。
## 稀疏編碼 稀疏編碼解決這樣一個問題:給定一個向量 $X \in R^n$, 尋找可以最優稀疏編碼向量$Z^* \in R^m$,這個向量可以最小化平方重建村務和$L_1$稀疏懲罰: $$E _{W_d}(X,Z) = \frac{1}{2} \lVert X-W_dZ \rVert_2^2 + \alpha \lVert Z \rVert _1$$ ![圖1 ](https://img-blog.csdnimg.cn/20181031134029498.JPG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01hcmtmaWVyYWxvaGE=,size_16,color_FFFFFF,t_70) 圖1. **top:** 框圖:用於稀疏編碼的ISTA演算法。最優稀疏編碼即$Z(k+1) = h_{\alpha}(W_eX - SZ(k))$。其中$X$是輸入,$h_{\alpha}是$ coordinate-wise shrinking function,$W_e$是字典矩陣$W_d$的轉置,$S = W_d^TW_d$。 **buttom:**本文所提出的Learned ISTA,一個基於時間展開的ISTA,矩陣$S,W_e$可以通過學習獲得,以便在給定的資料集上進行最優稀疏編碼的最小誤差的逼近。LISTA允許我們提供關於S的約束,以便減少運算量。另一個類似的可被訓練的基於CoD的編碼器結構也同時被提出。
1. **全新的介面設計** ,將會帶來全新的寫作體驗; 2. 在創作中心設定你喜愛的程式碼高亮樣式,Markdown **將程式碼片顯示選擇的高亮樣式** 進行展示; 3. 增加了 **圖片拖拽** 功能,你可以將本地的圖片直接拖拽到編輯區域直接展示; 4. 全新的 **KaTeX數學公式** 語法; 5. 增加了支援**甘特圖的mermaid語法[^1]** 功能; 6. 增加了 **多螢幕編輯** Markdown文章功能; 7. 增加了 **焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設定** 等功能o按鈕位於編輯區域與預覽區域中間; 8. 增加了 **檢查列表** 功能。 [^1]: [mermaid語法說明](https://mermaidjs.github.io/)
## 功能快捷鍵
撤銷:<kbd>Ctrl/Command</kbd> + <kbd>Z</kbd> 重做:<kbd>Ctrl/Command</kbd> + <kbd>Y</kbd> 加粗:<kbd>Ctrl/Command</kbd> + <kbd>B</kbd> 斜體:<kbd>Ctrl/Command</kbd> + <kbd>I</kbd> 標題:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>H</kbd> 無序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>U</kbd> 有序列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>O</kbd> 檢查列表:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>C</kbd> 插入程式碼:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>K</kbd> 插入連結:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>L</kbd> 插入圖片:<kbd>Ctrl/Command</kbd> + <kbd>Shift</kbd> + <kbd>G</kbd>
## 合理的建立標題,有助於目錄的生成
直接輸入1次<kbd>#</kbd>,並按下<kbd>space</kbd>後,將生成1級標題。 輸入2次<kbd>#</kbd>,並按下<kbd>space</kbd>後,將生成2級標題。 以此類推,我們支援6級標題。有助於使用`TOC`語法後生成一個完美的目錄。
## 如何改變文字的樣式
*強調文字* _強調文字_
**加粗文字** __加粗文字__
==標記文字==
~~刪除文字~~
> 引用文字
H~2~O is是液體。
2^10^ 運算結果是 1024.
## 插入連結與圖片
連結: [link](https://mp.csdn.net).
圖片: ![Alt](https://avatar.csdn.net/7/7/B/1_ralf_hx163com.jpg)
帶尺寸的圖片: ![Alt](https://avatar.csdn.net/7/7/B/1_ralf_hx163com.jpg =30x30)
當然,我們為了讓使用者更加便捷,我們增加了圖片拖拽功能。
## 如何插入一段漂亮的程式碼片
去[部落格設定](https://mp.csdn.net/configure)頁面,選擇一款你喜歡的程式碼片高亮樣式,下面展示同樣高亮的 `程式碼片`. ```javascript // An highlighted block var foo = 'bar'; ```
## 生成一個適合你的列表
- 專案 - 專案 - 專案
1. 專案1 2. 專案2 3. 專案3
- [ ] 計劃任務 - [x] 完成任務
## 建立一個表格 一個簡單的表格是這麼建立的: 專案 | Value -------- | ----- 電腦 | $1600 手機 | $12 導管 | $1
### 設定內容居中、居左、居右 使用`:---------:`居中 使用`:----------`居左 使用`----------:`居右 | 第一列 | 第二列 | 第三列 | |:-----------:| -------------:|:-------------| | 第一列文字居中 | 第二列文字居右 | 第三列文字居左 |
### SmartyPants SmartyPants將ASCII標點字元轉換為“智慧”印刷標點HTML實體。例如: | TYPE |ASCII |HTML |----------------|-------------------------------|-----------------------------| |Single backticks|`'Isn't this fun?'` |'Isn't this fun?' | |Quotes |`"Isn't this fun?"` |"Isn't this fun?" | |Dashes |`-- is en-dash, --- is em-dash`|-- is en-dash, --- is em-dash|
## 建立一個自定義列表 Markdown : Text-to-HTML conversion tool
Authors : John : Luke
## 如何建立一個註腳
一個具有註腳的文字。[^2]
[^2]: 註腳的解釋
## 註釋也是必不可少的
Markdown將文字轉換為 HTML。
*[HTML]: 超文字標記語言
## KaTeX數學公式
您可以使用渲染LaTeX數學表示式 [KaTeX](https://khan.github.io/KaTeX/):
Gamma公式展示 $\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N$ 是通過尤拉積分
$$ \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. $$
> 你可以找到更多關於的資訊 **LaTeX** 數學表示式[here][1].
## 新的甘特圖功能,豐富你的文章
```mermaid gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid section 現有任務 已完成 :done, des1, 2014-01-06,2014-01-08 進行中 :active, des2, 2014-01-09, 3d 計劃一 : des3, after des2, 5d 計劃二 : des4, after des3, 5d ``` - 關於 **甘特圖** 語法,參考 [這兒][2],
## UML 圖表
可以使用UML圖表進行渲染。 [Mermaid](https://mermaidjs.github.io/). 例如下面產生的一個序列圖::
```mermaid sequenceDiagram 張三 ->> 李四: 你好!李四, 最近怎麼樣? 李四-->>王五: 你最近怎麼樣,王五? 李四--x 張三: 我很好,謝謝! 李四-x 王五: 我很好,謝謝! Note right of 王五: 李四想了很長時間, 文字太長了<br/>不適合放在一行.
李四-->>張三: 打量著王五... 張三->>王五: 很好... 王五, 你怎麼樣? ```
這將產生一個流程圖。:
```mermaid graph LR A[長方形] -- 連結 --> B((圓)) A --> C(圓角長方形) B --> D{菱形} C --> D ```
- 關於 **Mermaid** 語法,參考 [這兒][3],
## FLowchart流程圖
我們依舊會支援flowchart的流程圖: ```mermaid flowchat st=>start: 開始 e=>end: 結束 op=>operation: 我的操作 cond=>condition: 確認?
st->op->cond cond(yes)->e cond(no)->op ```
- 關於 **Flowchart流程圖** 語法,參考 [這兒][4].
## 匯出與匯入
### 匯出 如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 **文章匯出** ,生成一個.md檔案或者.html檔案進行本地儲存。
### 匯入 如果你想載入一篇你寫過的.md檔案或者.html檔案,在上方工具欄可以選擇匯入功能進行對應副檔名的檔案匯入, 繼續你的創作。
[1]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference [2]: https://mermaidjs.github.io/ [3]: https://mermaidjs.github.io/ [4]: http://adrai.github.io/flowchart.js/