---
# System prepended metadata

title: Untitled

---

<small>Exploiting Generative Models in Discriminative Classifiers</small>
---


### Abstract

這世界上有很多feature不是一個固定的大小，意即data.size()可能不是一致的(例如一張圖片的透過SIFT所抓出來的Keypoint，或是具有不同長度序列的資料，如語音)。這樣可能會造成模型無法正常實施。那究竟要如何解決這個問題呢? 
> 例如一般的Linear/Logistic Regression，乃至於Support Vector Machine，這些設定都是建立在資料的維度都是固定的，並將其中各個維度給予分數並轉換成需要預測的分數。

首先，我們可以先整理有甚麼技術是我們可以應用的。
1. 現今機器學習上(即便是paper當年的1998年)，有很多很強的"Discriminative Classifier"，意即可以辨別資料是否為某個類別，例如SVM。
2. 除了Discriminative Classifier，亦有一個很特別的模型 -- Generative Probability Model，例如GMM(Gaussian Mixture Model)，這類型的模型可以為每個資料的類別生出數個最具代表性的(假想)資料，並以這個代表性的資料來判斷其他資料是不是屬於同個類別。 舉例來說，GMM就是會生出數個Gaussian Distribution，以新進來的點判斷屬於這個Distribution的機率到底多高。

而我們是否可以結合上述兩個模型類別，做出一種可以解決維度不一的資料呢?
### Setting
##### Notation

* $X$: sample data.
    * $\sum$: covariance matrix. (Assuming $X$ is zero-mean)
* $S$: labels of $X$, where $S_{i} \in {[+1, -1]}$.
* $\theta$ : parameter vector.

##### Predict by Kernel Function
* predicted label, $\hat{S} = sign(\sum_i S_i \cdot \lambda_i \cdot K(X_i, X))$
    * $\lambda_i$: some coefficient representing for importance.
    * $K$: A measurement of calculating pairwise "similarity".

##### Kernel Logistic Regression
* Model Description: $P(S | X, \theta) = \sigma(S \theta^TX)$
* Target Function: $\min_{\theta}  \sum_{i} \log P(S_i| X_i, \theta) + \log P(\theta)$ = $\sum_{i} \log \sigma(S_i \theta^T X_i) - \frac12 \theta^T \sum^{-1} \theta + C$ 
* 上述式子可以經過繁瑣的證明變成以下。
    * $\hat{\theta} = \sum_{i} S_i \lambda_i \sum X_{i}$, where $\lambda_i = \frac{\partial}{\partial z} \log \sigma(z)$, and $z = S_i \theta^T X_i$
* 因此， $P(S | X, \hat{\theta}) = \sigma(S \sum_{i} S_{i} \lambda_{i}(X_{i}^T\sum X))$.
    * 透過定義 $K(X_i, X) = X^{T}_{i} \sum X$，我們就可以算出如何利用Kernel去預測label。

##### Valid General Kernel Function
是否還有其他的Kernel Function可以使用呢? 在此節我們直接引用[軒田老師的投影片](https://www.csie.ntu.edu.tw/~htlin/course/mltech18spring/doc/203_handout.pdf)。
![](https://i.imgur.com/RSe0stn.png)
* 基本上只要$K$是個Positive semi-definite就滿足kernel function的條件了。另外，基於Mercer's condition，kernel function較為簡單的表達方式就是需要可以將$K(X_i, X_j)$表達成$\phi^T_{X_i} \cdot \phi_{X_j}$。
    * 以上述Logistic Kernel Regression來說，$\phi_{X}$ 其實就等於$\sum^{\frac12} X.$
* 在這邊註記一點: 我們其實可以純粹的利用Kernel Function來描述兩個資料經過$\phi$轉換的L2距離。
    * $||\phi_{X_i} - \phi_{X_j}||^2 = \phi_{X_i}^2 - 2\phi_{X_i}\phi_{X_j} + \phi_{X_j}^2 = K(X_i, X_i) - 2K(X_i, X_j) + K(X_j, X_j)$
        * 如果我們將$K_{ij}$表示成$K(X_i, X_j)$，則可以得出下列公式。
    * $||\phi_{X_i} - \phi_{X_j}||^2 =K_{i,i} - 2K_{i,j} + K_{j,j}$

##### \[Proposed\] Fisher Vector: Kernels from generative probability models
總而言之，前面的部分是Kernel Function的介紹，以及如何使用Kernel Function去預測label。現在我們則著重如何利用Generative Model**生成**這個Kernel Function，以此達到製作出具有representative的$\phi$轉換的效果。


* 首先，假設我們已經有一個Generative Propability Model，計作$P(X|\theta)$，表示以$\theta$這個參數製作出$X$的機率到底多高。
* 其次，我們定義一個有趣的分數，**Fisher score**, 計作$U_X = \nabla_{\theta} P(X|\theta)$。這個指標的意涵為: 在原本的模型參數($\theta$)內，到底為了製作出這個特別的資料$X$花了多少心力。
* **Fisher Information Matrix** $I = \mathbb{E}_{P(X|\theta)} [U_X U_X^T]$
    * 關於Fisher Info Matrix，以及各式各樣的證明，可以參考[link](https://bluefisher.github.io/2020/02/16/Natural-Gradient-Descent/)
<!-- * 兩個相近的模型(假設$\delta$極小)的距離，可以透過KL-divergence估計成$D(\theta, \theta + \delta) = \frac 12 \delta^T I \delta$。 -->
* 總而言之，如果要利用有限的距離$\delta$，使得$\theta$偏離到可以生成X的Generative Function，我們會發現其方向最佳為$\nabla_{\theta} U_X$，經過證明後得$\nabla_{\theta} U_X = I^{-1}U_X$ (事實上這就是$P(X|\theta)$的**natural gradient descent的公式**)。而在這篇paper中，這就是我們想要的$\phi$轉換。意即$\phi_{X} = I^{-1} U_{X}$。

* 最後，我們將這個轉換還原回去Kernel，得到paper所提出的fisher kernel，$K_{fisher}(X_i, X_j)$。
    * 其正比於$\phi^T_{X_i}I\phi_{X_j} = (U^T_{X_i} (I^{-1})^T) I  (I^{-1} U_{X_j}) = U^T_{X_i} I^{-1} U_{X_j}$。
    * 利用這種方式，我們就可以用Generative Probability Model生成出Kernel Function，以此來作Discrimination，或當作更有意義的特徵來做各種事情。
* 需要特別注意的是，作者鼓勵使用更高維度的Kernel Function來操作。例如本文的主軸任務(DNA序列判別)，作者的$\hat{K}(X_i, X_j) = (1+K(X_i, X_j))^m$，$m$為超參數，論文實驗取2。
### Comment
1. 這種方法對於GMM等參數比較少的生成模型看起來是沒問題的。因為其$U_X$的維度是與$\theta$有關的。但在現今NN滿街跑的情況，貌似就不太適用。因為NN的參數實在是太多了，用Fisher score 或用 Fisher Information等方法來獲得一個資料的特徵可能不是很合適。
2. 我們看的出來這個方法大致上都會假定生成模型是Gaussian-like的方法，但不幸的是這個假設可能太模糊或強烈了，畢竟不是所有資料都是符合Gaussian Distribution (或很難找到一個轉換使其變成Gaussian Distribution)。 
3. 綜合前兩個Comment，我們不難發現其實現今有很多Unsupervised Learning的方法可以抽取一張圖片的特徵都可以解決掉上述兩個問題。 例如我們可以使用Auto-Encoder來壓縮資料，而且這個資料也沒有受到維度的限制。(例如Encoder和Decoder都是RNN-based的model，就可以接受sequence-level的資料。) 因此如果要將Fisher vector的模式帶進來，其實就會變得很俗。方法大概率就會變成如下所述:
    * 利用AE抽取資料的特徵，每個資料的特徵維度都會是固定的。
    * 抽取完資料的特徵，利用這些特徵去作Logistic Regression。
    * 看起來就十分的"不novel"，老實說。
4. 即使如此，我們還是有其他方向可以思考。如第一點所述，雖然我們做不到$\nabla_{\theta}U_X$當作特徵，因為NN的參數實在太多。但何必要所有參數都全下呢?事實上我們可以只拿某一層參數的微分當作是Fisher Score也說不定，其的意義相當於是將這層的上一層當作是這篇paper的原始$X$，也許這樣的方法也有不錯的效果。 (當然我想直接AE還是最快的啦。)

---

### About Natural Gradient Descent
* 某天有空再補，這是paper的第一個reference，與取得Fisher Vector有強烈的關係，以及詳細的證明。