【第一周筆記】神經(jīng)網(wǎng)絡和深度學習

第一節(jié) 概論

一、什么是神經(jīng)網(wǎng)絡

由人腦的工作模式啟發(fā)衍生的強力學習算法

例 1 – 單神經(jīng)網(wǎng)絡

給出有關(guān)房地產(chǎn)市場房屋大小的數(shù)據(jù),擬合一個函數(shù)來預測其他房地產(chǎn)數(shù)據(jù)的價格。這是一個線性回歸問題,因為作為大小函數(shù)的價格是連續(xù)輸出。由于價格不可以為負數(shù),因此我們建立了一個修正線性單元(ReLU),該函數(shù)從零開始。

基于單變量的房價預測

輸入是房子面積x,輸出是房價y

“神經(jīng)”構(gòu)造了該ReLU函數(shù)。

The input is the size of the house (x) The output is the price (y) The “neuron” implements the function ReLU (blue line)

例 2 – 多神經(jīng)網(wǎng)絡

房價由多種情況影響,如大小、臥室數(shù)量、郵編、街區(qū)富裕情況......神經(jīng)網(wǎng)絡在預測的時候會產(chǎn)生隱藏單元,我們并不會指定每個隱藏單元代表什么意思,只需要給出相應的輸入x和輸出y就好了。

基于多變量的房價預測

二、監(jiān)督學習

1.監(jiān)督學習基本分為兩大問題:
輸入和輸出都是有參照的,根據(jù)參照,給定一個新的輸入,預測新的輸出。如房價:給定某地房子大小和房價的數(shù)據(jù),根據(jù)這些數(shù)據(jù),給定一個房子尺寸大小,預測該尺寸對應的房價。

分類:

  • 線性回歸類:預測連續(xù)輸出值
  • 分類問題:預測離散輸出值

2.常用的神經(jīng)網(wǎng)絡

image : CNN

sequence data (audio,language...) RNN or complex RNNS

Structured data : 每個特征有清晰的定義

Unstructured data : Audio Image text

第二節(jié) 神經(jīng)網(wǎng)絡基礎(chǔ)

一、logistic 回歸

1.二分分類問題

二分分類問題的目標是訓練出一個分類器以圖片的特征向量x作為輸入,預測輸出的結(jié)果標簽y是1還是0。

其中X 是每個特征向量集合成的大矩陣,X\in \mathbb{R}^{n_{x\times m}}

Y = [ y^{(1)},y^{(2)},\dots,y^{(m)} ] 因此 Y\in \mathbb{R}^{1\times (m)}

2.Logistic Regression

給出 X ,想要預估的 \hat y = P(y=1|x)

參數(shù) : w\in \mathbb{R}^{n_{x}},\ b\in \mathbb{R}

輸出 : \hat y = \sigma(w^{\top}x+b)

其中sigmoid函數(shù)表示為:\sigma(z)=\frac{1}{1+e^{-z}}

sigmoid函數(shù)

在實際編程中會把w和b分開,b對應一個攔截器。

3.logistic regression cost function

所以在給定數(shù)據(jù)集\{ (x^{(1)},y^{(1)}),\dots,(x^{(m)},y^{(m)}) \},我們想要讓對每個x^{(i)}的預測值{\hat y}^{(i)} \approx {y}^{(i)}

\mathcal{L}(\hat y,y)= - (y \log {\hat y} + (1-y) \log (1-\hat y))

if y=1: \mathcal{L}(\hat y,y) = - \log \hat y 想要損失函數(shù)小,我們需要\hat y

if y=0: \mathcal{L}(\hat y,y) = - \log (1- \hat y) 想要損失函數(shù)小,我們需要\hat y

loss function :基于單個訓練樣本

cost function:基于參數(shù)的總樣本

cost function:

J(w,b) = \frac{1}{m}\sum_{i=1}^m \mathcal L(\hat y^{(i)},y^{(i)}) = - \frac{1}{m} \sum_{i=1}^{m} y^{(i)} \log {\hat y^{(i)}} + (1-y^{(i)}) \log (1-\hat y^{(i)})

最終目的是使代價函數(shù)J(w,b)盡可能小
4.梯度下降

J(w,b) = \frac{1}{m}\sum_{i=1}^m \mathcal L(\hat y^{(i)},y^{(i)}) = - \frac{1}{m} \sum_{i=1}^{m} y^{(i)} \log {\hat y^{(i)}} + (1-y^{(i)}) \log (1-\hat y^{(i)})

為了將J減小,我們必須找到合適的w和b。

梯度下降算法中,重復{

w := w - \alpha \frac{\partial J(w,b)}{\partial w}

b := b - \alpha \frac{\partial J(w,b)}{\partial b}

}

α被稱作 學習率,決定了迭代步長

對m個樣本梯度下降

算法:

J=0;\mathbfu0z1t8osw1=0;\mathbfu0z1t8osw2=0;\mathbfu0z1t8osb=0;

For i = 1 to m

? z^{(i)} = w^{\top}x^{(i)}+b

? a^{(i)} = \sigma(z^{(i)})

? J+= -y^{(i)} \log {\hat y^{(i)}} + (1-y^{(i)}) \log (1-\hat y^{(i)})

? \mathbfu0z1t8os z^{(i)} = a^{(i)}-y^{(i)}

? \mathbfu0z1t8osw_{1} += x_{1}^{(i)}\mathbfu0z1t8osz^{(i)}

? \mathbfu0z1t8osw_{2} += x_{2}^{(i)}\mathbfu0z1t8osz^{(i)}

? \mathbfu0z1t8osb+=\mathbfu0z1t8os z^{(i)}

J /=m

\mathbfu0z1t8osw_{1}/=m

\mathbfu0z1t8osw_{2}/=m //如果多余2個特征值 w值延續(xù)到nx

\mathbfu0z1t8osb/=m

//在這時 \mathbfu0z1t8osw_{1} = \frac{\partial J}{w_{1}} 以此類推 其他的d值也都成為了J對該值的偏導數(shù)

w_{1} = w_{1} - \alpha \mathbfu0z1t8osw_{1}

w_{2} = w_{2} - \alpha \mathbfu0z1t8osw_{2}

b = b - \alpha \mathbfu0z1t8osb

該算法中會出現(xiàn)兩次顯性的for循環(huán),這是非常低效的,為了解決這樣的問題,使用向量化的方法。

二、向量化

GPU和CPU都有SIMD指令,即允許單指令多數(shù)據(jù)流,能夠復制多個操作數(shù),并把它們打包在大型寄存器的一組指令集。GPU更擅長SIMD指令操作。

在實際編程中盡可能地避免顯性for循環(huán)。

在python編程中善用np.dot()函數(shù)

e.g.將v= \begin{bmatrix} v_{1} \\ \vdots\\ v_{n} \end{bmatrix}轉(zhuǎn)變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=u%3D%20%5Cbegin%7Bbmatrix%7D%20e%5E%7Bv_%7B1%7D%7D%20%5C%5C%20%5Cvdots%5C%5C%20e%5E%7Bv_%7Bn%7D%7D%20%5Cend%7Bbmatrix%7D" alt="u= \begin{bmatrix} e^{v_{1}} \\ \vdots\\ e^{v_{n}} \end{bmatrix}" mathimg="1">

u = np.zeros((n,1))
for i in range(n):
    u[i] = math.exp(v[i])
import numpy as np
u = np.exp(v)
np.log(v)
np.abs(v)
np.maximum(v,0)
v**2
1/v

對logistic regression算法進行向量化
?定義一個大矩陣X = [x^{(1)},x^{(2)},\dots,x^{(m)}]

算法:

J=0;\mathbfu0z1t8osw1=0;\mathbfu0z1t8osw2=0;\mathbfu0z1t8osb=0;
Z=w^{\top}X+b
? = np.dot(w.T,X)+b
A = \sigma(Z)
\mathbfu0z1t8os z = A-Y
\mathbfu0z1t8osw = \frac {1}{m}X\mathbfu0z1t8osz^{\top}
\mathbfu0z1t8osb = \frac {1}{m} np.sum(\mathbfu0z1t8osz)
w = w- \alpha \mathbfu0z1t8osw //反向更新w
b = b - \alpha \mathbfu0z1t8osb //反向更新b

關(guān)于正向傳播和反向傳播的理解,參考https://www.cnblogs.com/charlotte77/p/5629865.html,該作者用數(shù)字化的演示詳細地闡述了back propagation的重要意義。直觀地將,逐步更新權(quán)值項w和截距項b的過程就是BP的主要過程。

第三節(jié) 淺層神經(jīng)網(wǎng)絡

一、神經(jīng)網(wǎng)絡

神經(jīng)網(wǎng)絡表示

雙層神經(jīng)網(wǎng)絡,一般不把輸入層算入標準層,輸入層也被稱作第零層。隱藏層和最后的輸出層是帶有參數(shù)的,隱藏層帶有兩個相關(guān)的參數(shù)W和b。在本圖中,?是一個4×3的矩陣。4來源于四個隱藏層,3來自于三個輸入層。?是一個4×1的矩陣。?是一個1×4的矩陣,因為隱藏層有四個隱藏單元,只有1個對應的輸出,?是一個1×1的矩陣。

二、激活函數(shù)

tanh(z) = \frac{e^z-e^{-z}}{e^z+e^{-z}}
tanh函數(shù)的平均值接近0,因此有數(shù)據(jù)中心化的效果。在效果上比sigmoid函數(shù)要好。
另外,tanh(z)求導的結(jié)果是tanh'(z) = 1 - (tanh(z))^2

在做二元分類的時候可以使用sigmoid函數(shù),因為需要輸出結(jié)果在0到1之間。
ReLU函數(shù)

a=\max(0,z)

帶泄露的ReLU:

a = \max(0.01z,z)

如果所有隱藏單元都使用線性激活函數(shù)的話,那么在邏輯上是沒有意義的。

三、梯度下降

對于神經(jīng)網(wǎng)絡的梯度下降


神經(jīng)網(wǎng)絡的梯度下降

權(quán)重的隨機初始化也非常重要,如果在一開始的時候全都賦值為0的話,很有可能會造成所有隱藏神經(jīng)元都在進行同一個函數(shù)的計算,這樣的話該神經(jīng)網(wǎng)絡會發(fā)生“對稱”。

第四節(jié) 深層神經(jīng)網(wǎng)絡

一、前向傳播

A^{[0]}=X

z^{[l]}=w^{[l]}A^{[l-1]}+b^{[l]}

A^{[l]}=g^{[l]}(Z^{[l]})

深層神經(jīng)前向傳播的過程大致如此,l從1一直迭代到最深層。在這一步可能需要一個顯性的for循環(huán)。

總結(jié)起來w^{[l]}的維度必須是(n^{[l]},n^{[l-1]}),b^{[l]}的維度是(n^{[l]},1)

二、參數(shù)和超參數(shù)

參數(shù):w^{[1]},b^{[1]}\dots

超參數(shù):某種程度上決定了最終的W和b

  • 學習率 α
  • 梯度下降法的循環(huán)數(shù)量
  • 隱藏層數(shù)L
  • 隱藏單元數(shù):n^{[1]}。
  • 激活函數(shù)

······

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容