Deep Neural Decision Forests

Deep Neural Decision Forests

當小w還是一名研一的小學生時,就對所謂的數據挖掘十分感興趣,當時就想,通過這個玩意就能讓機器知道連我都不瞭解我的東西,確實十分神奇。奈何研二導師離職(是不是很悲劇。。。),就到隔壁組去做深度學習了,哎~,發現深度學習竟然比數據挖掘更吊。。。(因爲以前認知的數據挖掘都要自己去提取特徵然後扔給RF,SVM等等,但是CNN完全End2End連提特徵的任務都省了)

當做了一段時間就發現,其實他們還是有很多相關性的,或者說其實CNN到最後還是用到了數據挖掘的那些模型。舉個簡單的例子,一般CNN最後跟的就是若干個(一般2個)全連接,這就是普通的DNN啊,當用使用別的分類器替換時 eg. SVM,這樣就變成了一個線性分類器,好像效果比FC有提升。

所以就在想一個問題,就是能不能把這個CNN與其他的通用模型結合起來搞事情,而這篇論文就提供了一個很好的思路。 CNN+DT, 卷積神經網絡提供特徵,決策樹(森林)提供分類。

一、Background

既然是Decision Forest,那麼就要先知道什麼是決策樹迴歸樹隨機森林

A. 決策樹:大多是用來分類的。選擇分類屬性的標準是信息增益最大(Information gain),涉及到熵這個概念(The Shannon entropy)。公式如下,h(s)表示node s的熵,信息增益則是node s的熵減去它的左右子節點的熵。如果信息增益爲正,則說明這是一個好的分裂split。

The Shannon entropy:

h(s)=-\sum p_y*log(p_y) where y\in \{1,2...k\}

h(s)=pylog(py)wherey{1,2...k}

Information gain:

I_j=H(s_j)-\frac{s_j^R}{s_j}H(s_j^R)-\frac{s_j^L}{s_j}H(s_j^L)

Ij=H(sj)sRjsjH(sRj)sLjsjH(sLj)

決策樹的構造方法: 從根節點開始,

a.N個M維的樣本,那麼共有(N-1)*M種splitting options可以將其分裂

b.根據information gain的原則選擇最大增益的splitting option進行分裂

c.分裂到子節點後,重複1-3直至停止條件(停止條件一般包括Max depth, min info-gain, pure(節點已經分類純淨), max count of node)

B. 迴歸樹:顧名思義就是來做迴歸的,選擇變量的標準用殘差平方和。熟悉通常意義的迴歸分析的人,一定知道迴歸分析的最小二乘解就是最小化殘差平方和的。在迴歸樹的根部,所有的樣本都在這裏,此時樹還沒有生長,這棵樹的殘差平方和就是迴歸的殘差平方和。然後選擇一個變量也就是一個屬性,通過它進行分類後的兩部分的分別的殘差平方和的和最小。然後在分叉的兩個節點處,再利用這樣的準則,選擇之後的分類屬性。一直這樣下去,直到生成一顆完整的樹。

C. 隨機森林:是用隨機的方式建立一個森林,森林裏面有很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯的。在得到森林之後,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬於哪一類(對於分類算法),然後看看哪一類被選擇最多,就預測這個樣本爲那一類。

二、Introduction

先傳達一個重要的思想:翻譯成中文也很簡單,就是你深度學習這麼牛逼就是因爲你把提特徵和具體問題揉到了一起,搞e2e(end to end)。

One of the consolidated findings of modern, (very) deep learning approaches is that their joint and unified way of learning feature representations together with their classifiers greatly outperforms conventional feature descriptor & classifier pipelines, whenever enough training data and computation capabilities are available.

因爲作者在做的將數據挖掘方法與CNN端到端結合的方法比較有原創性,所以相關工作介紹不多,最主要是與

Globally Optimal Fuzzy Decision Trees for Classification and Regression

主要的區別有三個方面

a. We provide a globally optimal strategy to estimate predictions taken in the leaves (whereas former simply uses histograms for probability mass estimation).

b. The aspect of representation learning is absent in former

c. We do not need to specify additional hyper-parameters which they used for their routing functions (which would potentially account for millions of additional hyper-parameters needed in the ImageNet experiments).

三、Global Architecture

FC之前輸入的是CNN的特徵,接下來的dn爲Decision Nodes,πn爲Prediction Nodes。

其實這個結構可以換個角度理解,我們最常見的就是2層的全連接層,只不是現在換成了決策森林;各位大俠再仔細觀察這個決策樹,其實可以看成是若干層全連接層dropout了一些指定的連接,也就是極稀疏的全連接層(因爲雖然是決策樹,但是同樣每一個節點在輸出之後都會有一個激活函數,文中採用的是sigmoid函數)

當給定x時,對樣本的預測爲

\mathbb{P}_T[y|x,\Theta ,\pi ]=\sum _{\mathit{l}\in \boldsymbol{L}}\pi_{\mathit{l}_y}\mu _\mathit{l}(x|\Theta)

PT[y|x,Θ,π]=lLπlyμl(x|Θ)

ok,下面說一下符號的意義:

Decision nodes indexed by N are internal nodes of the tree, while prediction nodes indexed by L are the terminal nodes of the tree. Each prediction node l∈L holds a probability distribution πl over Y.

l↙n, n↘l分別表示當前決策節點向左路由和向右路由


三、Decision Tree with Stochastic Routing

本文的這個決策樹並不是向傳統意義上的決策樹,傳統的決策時是二值的,也就是在每個節點劃分數據之後(根據特徵的最大熵增益),對後面的劃分就不會有任何影響,但是本文的決策樹使用的是概率決策樹,當然這也是它與 Globally Optimal Fuzzy Decision Trees for Classification and Regression最大的區別。

A. Decision nodes && Forest

d_n(x;\Theta)=\sigma (f_n(x;\Theta))

dn(x;Θ)=σ(fn(x;Θ))

σsigmoid函數,每一個決策節點之後都要經過這個激活函數,f爲一個輸入維度到一維實數空間的一個映射即X→R.

\mathbb{P}_{\boldsymbol{F}}[y|x]=\frac{1}{k}\sum_{h=1}^k\mathbb{P}_{T_h}[y|x]

PF[y|x]=1kh=1kPTh[y|x]

B. Learning Trees by Back-Propagation
論文中的loss還是使用的是-log損失,對於整個batch的損失函數爲

R(Θ,π;T)=1T(x,y)TL(Θ,π;x,y)

L(Θ,π;x,y)=log(PT[y|x,Θ,π])

loss函數的梯度爲:

LΘ(Θ,π;x,y)=nNL(Θ,π;x,y)fn(x;Θ)fn(x;Θ)Θ

L(Θ,π;x,y)fn(x;Θ)=dn(x;Θ)Anrdn¯(x;Θ)Anl

f爲任意定義的關於Θ的函數,好比說f = Θx+b
C.Learning Prediction Nodes
預測節點時線下更新的(非bp進行參數更新),並且預測節點時按照每一個batch進行數據更新的。

πt+1ly=1Z(t)l(x,y)T1y=yπ(t)lyμl(x|Θ)PT[y|x,Θ,π(t)]

D.Algorithm

  Require: T : training set, nEpochs
  random initialization of Θ
  for all i∈{1....,nEpochs} do
      Compute π by iterating (11)
      break T into a set of random mini-batches
      for all B: mini-batch from T do
          Update Θ by SGD step in (7)
      end for
  end for
  

四、Experiments

結果不用多說,肯定很牛逼(但是現在的ResNet,GoogLeNet(V幾忘了)什麼的已經超過他了),但是有一個點想要跟各位大俠分享一下的就是:

因爲小w項目組需要對數據進行劃分,然後進行分佈式檢索,由於現在所有的庫數據時加載到每一個節點的,但是這很明顯是有冗餘的,所以最好是能把數據很好的劃分開,舉個例子,如果一個檢索任務能夠以很高的概率出現在一個節點,我就不用把這個檢索任務發送到其他的節點了,這樣就可以極大的提高吞吐效率。

論文中提供了一個思路就是,我可以控制路由到每個葉子節點的數據,也就是隨着訓練epoch的增加,數據會以很高的概率路由到指定的節點,當然這也是本文作者希望去做的一件事情。

五、Conclusions

其實這篇論文之所以能夠成爲Best Paper很大程度上是開創了將傳統數據挖掘的模型,放到深度網絡裏面去進行端到端的學習,因爲傳統模型的擬合能力非常強,但是需要人工提取一些非常強力的特徵,而CNN又以其超強的圖片特徵提取能力而著稱,所以這兩個方向的結合就會擦出不一樣的煙火。

其實這種傳統方法與深度學習結合是一個很值得做的方向,但是最主要是怎麼將傳統的模型或者方法放到端到端的模型中去,這是很值得研究的。而這篇論文就提供了一個方向。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章