---
# System prepended metadata

title: ML學習進度
tags: [deep learning, 誠實面對自己]

---

###### tags: `誠實面對自己`
# ML學習進度
###### tags: `deep learning`

## [CNN, RNN, DNN的差別](https://bit.ly/3i7UM2c)
[Deep learning](https://zhuanlan.zhihu.com/p/25794795)

- ＭＬ的主要分成
    - supervised
     semi-supervised、
     transfer、
     unsupervised、
     reinforcement learning 

    - 步驟分為：
        - Training
            - 訂 function set (Model)
            - 將Data丟入Model裡，評估是否為好的function
            - 選一個好的去自動挑選function

        - Testing
            - 將training的結果拿其他的Data做測試，看成效如何



- 名詞
    - Lose function
    - underfitting
    - overfitting
    - 方法：gradient descent
    - learning rate



* 分類問題的解法，使用**Genreative Model**的方法，利用機率高or低做分類，並假設sample出來的Data是Gaussian Distribution，對這些Data試圖去找最接近的Gaussian Distribution的 mean和 variance(使用Likelihood)。
* 若低維度的分類不夠準，可以**考慮更多的feature**，提高維度，再對每個類別做Likelihood，可能可以得到更準的結果。

### **更簡易求得機率（只需知道w和b）做分類->logistic regression**



- logistic regression+square err無法對learning rate做有效更新。
    ![](https://i.imgur.com/XwdBQ2E.png)



    ![](https://i.imgur.com/Rxnc7Ob.jpg)

- **語音辨識**，是神經網路，disciminative方法，但整個語音辨識系統是**generative**方法，DNN只是其中一塊而已。
    - generative方法的優點是可以把prior和class dependent拆開考慮，prior只需要文字的Data再去爬網路上出現某段文字的機率，class才需要語音和文字配合，會把prior計算的更精確。

- 多類別的分類
    - ![](https://i.imgur.com/fpc2Brf.jpg)

    - 由於用 logistic regression 不能總是有效的做好分類，可使用**feature transformation**，但也很難簡單的找到好的轉換，所以用**cascade logistic regression models** 的方式:
        - 先將input做feature trans.用一條直線把兩個類別分開
        - 再將其output使用另一個logistic regression model做分類。如此稱為一個Neuron，由多個 Neuron串起來稱為 Neuron Netwok（Deep learning）。
        ![](https://i.imgur.com/CPm10dv.jpg)




        - 核心概念 : gradient descent
            - 決定sturcture的意義就是決定了function set
            - 用於影像辨識的loss function是用NN的output去和target做cross entropy的總和，再挑一個最小的network 參數


- **[softmax]()** 為一種loss function，特點為其向量裡面每個dimension數值介於0~1之間，且所有dimension加起來的值為1.





- **[keras]()**：為Tensorflow or theano的API，優點是彈性、方便上手
    - [Data來源](http://yann.lecun.com/exdb/mnist/)
    - 訓練步驟：
        - 1.建network
     ![](https://i.imgur.com/gkKhLmh.jpg =300x200) 
        - 2.選定loss function and optimizer （決定learning rate.的方法） 
     ![](https://i.imgur.com/NPspTvA.jpg =300x200)
        - 3.設定epoch and batch size後開始訓練
     ![](https://i.imgur.com/xiGEAsn.jpg =300x200)
     ![](https://i.imgur.com/0MZp1Kj.jpg =300x200)

### **min-batch**

- 一個epoch有數個batch，每看一次batch就更新一次參數，有別於stochastic gradient desccent的地方為，雖然batch size大，更新次數較少，但將不同的向量放在同個矩陣，可以讓GPU對其運算加速，使得速度更快。
   - ![](https://i.imgur.com/Dd2BpV1.jpg =300x200)
ps:要隨機分batch



>8/18
>進度到:https://youtu.be/xki61j7z-30?t=3461




# [CNN的演化史](https://bit.ly/32alstD)
- [CNN的精神與運作](https://bit.ly/35e7HMa) 
## VGG 
- i.e 很多層(about16-19)的convolution layer
 這篇論文在探討網路深度與正確率之間的關係，論文採固定參數的方法去增加網路深度，使用一個3X3 convolution filter的架構來對整個網路做評估.
 - 為提升ConvNet效能:
    - smaller recptive window size 
    - smaller stride of first convolutional layer. 


## [**ResNet**](https://bit.ly/3iUEBWc)
- ![](https://i.imgur.com/KVzpgP7.jpg =350x500)

- 有152層，為VGG的八倍. 但還是擁有比較低的複雜度
- ResNet的精神為:參考input層，reformulate the layers 為 learning residual functions

    根據作者經驗，residual netwrk容易優化，可避免**vanishing gradient desecent**，且可以由增加深度來得到良好的準確度。





## [R-CNN](https://bit.ly/2GC4OdQ) (for obj detection & semantic segmentation)
![](https://i.imgur.com/VXdWfgk.png =500x200)

- 論文的摘要:
    - 用high-capacity的CNN去建構 [region proposal](https://bit.ly/3hl5wco) 以達成區域化及切割物件
    - 當labeled trainging data稀疏時，對一個輔助的task做pre-train(圖像分類)，再對稀疏資料的目標task微調網路(偵測)

- 流程
    - **Selective Search**產生2000(Region proposal)
    - 將每個region proposal經過Crop後丟入訓練完成的CNN得到固定維度的輸出(CNN feature)
    - 用SVM分類器區分類別
    - 經由線性回歸模型校正bounding box position

![](https://i.imgur.com/9lYg1j3.png =300x200)

### [selective search](https://bit.ly/3bz9YCY)
- segmentation -->執行[**Hierarchical grouping algorithm**](https://i.imgur.com/I3iv9gT.png)
 -->產生object proposal -->SVM辨識物體
    - 衍生出multi-scale的區分


- 作者推測
    - 監督式pre-train微調paradigm，對不同的資料稀疏視覺問題非常有效。

- [R-CNN問題](https://i.imgur.com/vD2lxHd.png)

## Fast R-CNN


- train 比R-CNN快九倍的 deep VGG16，且在PASCAL VOC2012有很高的mAP

    - 再使用 **RoIpooling** 將取出的region對應到feature map輸出後，各自接上FC去做softmax分類及bbox regressor。
        - **[RoIpooling](https://bit.ly/3iqIUZn)** : 是一個使用CNN且廣泛應用在物件偵測的operation。目的是對不均勻size的輸入執行max-pooling以獲得固定 size 的feature map。
            - 後來演進成 **[RoIAlign](https://bit.ly/2R9E06S)**
![](https://i.imgur.com/0w6zzpk.png =500x400)
- sparse object proposal可以改是detector的質量，但這問題花太多時間
- 尚有未發現的方法允許 dense boxes 表現的和 sparse proposal 一樣好，可以加快object detection的速度。



## faster R-CNN: Toward real-time obj detection with regional proposal networks 
- [好文推薦](https://zhuanlan.zhihu.com/p/31426458)
![](https://i.imgur.com/DqKDIW8.jpg )
- 通过multi-task loss解决Classification（分类）和Localization（定位）的问题的

- 依靠 **regional proposal alogrithm.** 的算法，做物件偵測，去假設物件位置。
    - 像**SPPNet、fast R-CNN**的進步減少了detection network的執行時間，顯示了regional proposal計算的瓶頸。
     
- 引入**RPN**(fully convolutional network)
![](https://i.imgur.com/7Jjg2CC.jpg =400x400)

    - 它和detection network共享full-image捲積特徵，實現近乎零成本的regional proposal。
        - 被fast R-CNN用來做偵測
        - 可以在每個位置同時1.預測object bound 2.物件分數。 
        - 以end-to-end的方式訓練，以產生好的regional proposal
    
- merge RPN and fast R-CNN
    - 使用machanism技術，共享捲積特徵。
    - RPN component 會告訴合併網路在哪看
    - 對於很深的VGG-16 model，此論文的偵測系統採frame rate **5fps**
    - 使得在PASCAL, MS COCO的每張圖片只用了300 proposal



