1. 程式人生 > >神經網路與深度學習課程筆記(第一、二週)

神經網路與深度學習課程筆記(第一、二週)

   之前結束了吳恩達老師的機器學習的15節課,雖然看得很艱辛,但是也算是對於機器學習的理論有了一個入門,很多的東西需要不斷的思考以及總結。現在開始深度學習的學習,仍然做課程筆記,記錄自己的一些收穫以及思考。

 

第一週

1. ReLU (Rectified Linear Unit) 修正線性單元 ,顧名思義,作用為修正(線性迴歸會包含負值的情況),可以理解為 max(0,x),即 取不小於0的值。常用作sigmoid函式的一個替代。在具體的神經網路中,使用ReLU替代sigmoid,利用梯度下降法時,使演算法收斂的速度更快。

2. 機智的選取x,y,會使問題的解決輕鬆不少。

3. 神經網路的一種分類

                                                                       影象                                序列資料(音訊,語言)

4. 結構化資料:每一個特徵都有清晰的定義 ,如資料庫中的資料

    非結構化資料:音訊 、影象、 文字

 

第二週

主要利用邏輯迴歸的知識,對於深度學習的一些基礎及python的使用做一些介紹。

1. 在二分類問題中,我們常常希望得到的是,測試樣本屬於哪一類的概率有多大,邏輯迴歸可用來解決這個問題。在邏輯迴歸中,使用的損失函式為:(這是因為採用平方和構造的函式是非凸的)。利用梯度下降法進行引數 wb的求解。

這裡注意兩個概念,損失函式(loss function)針對一個樣本而言,成本函式(cost function)針對所有樣本而言。優化的目標是使成本函式最小,在這裡,成本函式即為損失函式求和然後取均值。

2. 計算圖(computation graph)

可以說,一個神經網路的計算都是按照前向傳播和後向傳播來組織的。前向計算,後向反饋(鏈式法則)。因此利用計算圖,方便我們清晰得到引數與最終的複合函式的關係。我的理解是,計算圖的主要目的是為了得到,對於單個樣本而言,損失函式和待求引數的求導關係,其實簡單點說就是鏈式法則。假設迴歸 y = w1x1 + w2x2 + b,待求引數即為w1,w2,b; 損失函式 L。其目的是為了得到 L分別對於w1、w2、 b的偏導,便於進行梯度下降。

3. 向量化(vectorization)與廣播(broadcasting)

向量化應該作為編寫程式時所採用的一種思想或者說是指導方式,從實數與實數的運算,上升為矩陣與矩陣的運算(多虧了強大的python包)。不僅僅是大幅提高程式的速度,更是一種良好的計算思維。

廣播是python裡面一個很方便的計算技巧。在使用二維矩陣(對應於向量),向量(實數),之間的四則運算時,可以非常方便的進行擴充套件。例如  a = [1,2,3,4]  --  b = a + 100  --  b =[101,102,103,104]

4. Andrew Ng 對於python的程式設計給了一個建議:

消除程式碼中秩為1的陣列:a為一個秩為1的陣列,這種陣列的表現和向量與矩陣不太一樣,我們應該儘量避免對於這樣陣列的操作。如果非要操作,可嘗試利用reshape操作將其轉為向量(注意 reshape函式不改變原有的a陣列),在進行操作。下圖的a便是秩為1的陣列: