比較:Tensorflow中實現稀疏編碼的不同方法

點擊上方關注,All in AI中國

比較:Tensorflow中實現稀疏編碼的不同方法

我一直在研究稀疏編碼和實現它的不同方法,在這篇文章中,我會比較它們,以下是詳細的情況。

  • 案例a:純自動編碼
  • 案例b:具有L2正則化的自動編碼器
  • 案例c:吳恩達課程中的稀疏自動編碼器
  • 案例d:用於稀疏編碼的簡單、高效和神經算法
  • 案例e:k-Sparse 自編碼器
比較:Tensorflow中實現稀疏編碼的不同方法

論文地址:https://arxiv.org/pdf/1503.00778.pdf

比較:Tensorflow中實現稀疏編碼的不同方法

論文地址:https://arxiv.org/pdf/1312.5663.pdf

簡介、數據集和一般理念

本文已經假設讀者對神經網絡和自編碼器有一定的瞭解,所以我不會詳細介紹。 另外,我將僅介紹使用自動編碼器進行稀疏編碼的方法。 請記住,超參數設置相同,但並不能保證它在每種情況下都是最佳的!最後,我使用的所有數據都來自MNIST數據集。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

橙色框→矢量形式的原始數據

紅盒→壓縮數據

藍盒→重建數據

自編碼器的一般思想非常簡單,即在壓縮後重建原始數據。 我們在今天的帖子中要看到的是學習權重(橙色框和紅框之間的權重),因為這些權重代表我們捕獲的數據(或特徵)。

案例a:純自編碼器的結果

比較:Tensorflow中實現稀疏編碼的不同方法

500 epoch學習權重的進展

從上面的進展中,我們可以注意到一些事情,學到的權重(或特徵)並不特定於某些數字。這是因為由於網絡可以使用學習字典中的所有原子來重建原始數據,因此不需要為給定數據學習專門的過濾器。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→原始數據

下圖→重構數據

重構數據有點模糊,但通常它包含數字的正確形狀。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→具有對比度歸一化的學習權重

中間圖像→沒有對比度的學習權重歸一化

正確的圖像→訓練期間的成本

當我們再次查看學習的權重時,我們可以再次觀察到過濾器不是特定於某些數字。

案例b的結果:具有L2正則化的自編碼器

比較:Tensorflow中實現稀疏編碼的不同方法

當我們將L2正則化添加到原始自動編碼器時,我們看不到學習權重之間的極端差異。這很自然,因為在重建原始數據時,網絡仍然可以完全訪問字典中的所有原子。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→原始數據

下圖→重構數據

同樣,與純自編碼器類似,重構數據模糊但仍保留一般的形狀。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→具有對比度歸一化的學習權重

中間圖像→沒有對比度的學習權重歸一化

正確的圖像→訓練期間的成本

我們仍然看不到特定於某些數字的過濾器。

案例c的結果:來自吳恩達課程的稀疏自動編碼器

比較:Tensorflow中實現稀疏編碼的不同方法

當我們在隱藏層中引入稀疏性概念時,並非字典中的所有原子都可以使用。我們可以清楚地觀察到,所學習的濾波器對某些數字變得更加具體,並且在最後epoch之後,濾波器代表了一個數字的筆劃。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→原始數據

下圖→重構數據

我個人認為,重構的數據比其他兩個(上圖)更模糊,但它們清晰可辨。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→具有對比度歸一化的學習權重

中間圖像→沒有對比度的學習權重歸一化

正確的圖像→訓練期間的成本

當我們可視化學習的權重時,我們可以看到網絡正在嘗試從給定數據中提取不同的筆畫。

案例d的結果:用於稀疏編碼的簡單、高效和神經算法

比較:Tensorflow中實現稀疏編碼的不同方法

如果沒有重構損失函數進行優化,我們可以觀察到收斂需要更長的時間。然而,我們可以觀察到,如果要使用字典中的某個原子,它會產生類似於我們有稀疏概念時的過濾。 (案例c)

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→原始數據

下圖→重建數據

這種方法的一個缺點是沒有重建損失,雖然它產生了更清潔的濾波器,但它不能重構原始數據以及其他方法。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→具有對比度歸一化的學習權重

中間圖像→沒有對比度的學習權重歸一化

正確的圖像→訓練期間的成本

當我們可視化學習的權重時,我們可以看到這種方法的優點,即它可以生成更清晰的過濾器。

案例e的結果:k-Sparse 自編碼

比較:Tensorflow中實現稀疏編碼的不同方法

對於給定的數據,頂級K稀疏自編碼器在匯聚到最優點時要快得多。我們可以觀察到,學習的權重是乾淨的,同時捕捉到筆劃的特徵。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→原始數據

下圖→重構數據

由於存在重建誤差,與情況d相比,重構數據更清晰,但是,我們可以清楚地觀察到它在這裡和那裡缺乏對比度的事實。

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

比較:Tensorflow中實現稀疏編碼的不同方法

上圖→具有對比度歸一化的學習權重

中間圖像→沒有對比度的學習權重歸一化

正確的圖像→訓練期間的成本

同樣,學習過濾器在捕獲筆畫類型功能時更加清晰。

互動代碼

比較:Tensorflow中實現稀疏編碼的不同方法

(https://colab.research.google.com/drive/15vST8Gma0uyQa1DOwO5weUWQ-I55FQoG)

請按此進入案例b的代碼。

(https://colab.research.google.com/drive/1m2IfnKFdXN5KMOvDMfFSj4vc94kcch73)

請按此進入案例c的代碼。

(https://colab.research.google.com/drive/1-OHYBSYxsQ0dYRvq5wzzBhzlQRs2p169)

請按此進入案例d的代碼。

(https://colab.research.google.com/drive/1HtXdq6hcX2rbywjl8I1BnLmelXy7P2sZ)

如欲取得個案e的代碼,請按此。

(https://colab.research.google.com/drive/1J6cTgJnUXi64ndOx7X_1eoiStGzpt4fU)

比較:Tensorflow中實現稀疏編碼的不同方法


分享到:


相關文章: