《deep learning》前兩周課程總結(jié)

AI發(fā)展迅速,特別是NLP,一會是Bert,一會是GPT-2,熱火朝天。禁不住,我?guī)讉€(gè)月前也想重新好好學(xué)習(xí)一下深度學(xué)習(xí),并且用它做點(diǎn)東西。前幾天,看《哈佛幸福課》的時(shí)候就說了,想做什么事情,不要拖著說等個(gè)什么契機(jī)再做,要立刻行動,行為改變態(tài)度。

于是,上個(gè)周末,我終于計(jì)劃好學(xué)習(xí)計(jì)劃,重新開始學(xué)習(xí)。學(xué)習(xí)深度學(xué)習(xí),當(dāng)然從吳恩達(dá)的《deep learning》開始,原理講得很透徹也很易懂,適合我這種沒什么基礎(chǔ)的。下面,是我這個(gè)周末學(xué)習(xí)筆記。

一、神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)(第一周)

1、Relu全稱是修正性單元,它的函數(shù)示例大概如下圖:

image.png

2、一個(gè)簡單的神經(jīng)網(wǎng)絡(luò)

image.png

例如:由房子大小、房間數(shù)量、郵政編碼、富裕程度這個(gè)四個(gè)輸入x,來決定最終的價(jià)格,也就是y。

注意:上面的圓圈,在神經(jīng)網(wǎng)絡(luò)中叫做隱藏單元。其中上面的x1,x2,x3,x4代表輸入層,也就是4個(gè)特征。

最終,可以參考下圖:

image.png

3、神經(jīng)網(wǎng)絡(luò)可以處理結(jié)構(gòu)化數(shù)據(jù),也可以處理非結(jié)構(gòu)化數(shù)據(jù)

結(jié)構(gòu)化數(shù)據(jù):一般是我們數(shù)據(jù)庫中的數(shù)據(jù),例如Mysql中表的數(shù)據(jù)

非結(jié)構(gòu)化數(shù)據(jù):音頻數(shù)據(jù)、圖片數(shù)據(jù)、文本數(shù)據(jù)等等

4、神經(jīng)網(wǎng)絡(luò)分類

(1)基本的神經(jīng)網(wǎng)絡(luò)

(2)CNN也就是卷積神經(jīng)網(wǎng)絡(luò),專門用來做圖像識別等

(3)RNN循環(huán)神經(jīng)網(wǎng)絡(luò),它主要用來處理一維的時(shí)間序列數(shù)據(jù),例如音頻數(shù)據(jù)、文本數(shù)據(jù)。

5、神經(jīng)網(wǎng)絡(luò)為什么突然這么厲害了?

image.png

參考上圖:

1、當(dāng)在數(shù)據(jù)量小的時(shí)候,也許一些機(jī)器學(xué)習(xí)算法,因?yàn)樵O(shè)計(jì)的更好,可能會被深度學(xué)習(xí)表現(xiàn)更好,所以小數(shù)據(jù)集時(shí),并不能確定算法優(yōu)劣。

2、而只有當(dāng)數(shù)據(jù)量變得很大時(shí),大型的神經(jīng)網(wǎng)絡(luò)才表現(xiàn)出更優(yōu)異的結(jié)果。

3、也就是說,推動神經(jīng)網(wǎng)絡(luò)發(fā)展,不僅僅是技術(shù)的發(fā)展,網(wǎng)絡(luò)規(guī)模的發(fā)展,更是因?yàn)橛辛撕A康臄?shù)據(jù),注意了,這個(gè)數(shù)據(jù)還需要是標(biāo)簽化的數(shù)據(jù)。

6、神經(jīng)網(wǎng)絡(luò)發(fā)展的三要素

  • 數(shù)據(jù)

  • 計(jì)算力

  • 算法

其中,算法的發(fā)展,有一個(gè)例子,就是sigmoid到relu,就會使梯度下降運(yùn)行得更快,因?yàn)閟igmoid到后面梯度越來越接近0了,如下:

image.png

二、神經(jīng)網(wǎng)絡(luò)基礎(chǔ)(第二周)

1、神經(jīng)網(wǎng)絡(luò)擁有一個(gè)前向傳播,然后又會有一個(gè)后向傳播

2、二分分類符號

將m張圖片,也就是使用 nx * m 代表(nx, m)矩陣,用python表達(dá)就是X.shape = (nx, m),nx代表行,m代表列。最終,變成Y矩陣,Y.shape = (1, m),代表1行m列,邏輯符號看下面:

image.png

原來,矩陣的符號是下面?zhèn)€:

image.png

代表 x 是 nx元素個(gè)矩陣,它是一維矩陣。

image.png

X代表是(nx, m)矩陣,它是二維矩陣。

3、怎么使用矩陣代表一張圖片

一張64x64像素的RGB圖片,因?yàn)樗?個(gè)通道,所以可以表示成 64x64x3,最終將其壓縮到一列中,如下:

image.png

4、一個(gè)logistic回歸

image.png

(1)使用w和b參數(shù)學(xué)習(xí)

(2)最終使用sigmoid函數(shù)轉(zhuǎn)換為0和1

image.png

5、損失函數(shù)、成本函數(shù)

損失函數(shù):預(yù)測的值與真實(shí)的值誤差

成本函數(shù):則是求所有的預(yù)測值和真實(shí)值誤差的平均值

image.png

6、梯度下降

image.png
image.png

在梯度下降的時(shí)候,我們其實(shí)就是在找凸函數(shù)的最優(yōu)解。

例如,上面的圖形中底部那一點(diǎn)。剛開始,我們不管初始化多少,我們都會使用梯度下降,不停逼近那個(gè)最優(yōu)解。

其中,在求最優(yōu)解的時(shí)候,我們會使用導(dǎo)數(shù)更新w和b值,還有一個(gè)參數(shù)就是α,它代表學(xué)習(xí)率,它越大,學(xué)習(xí)的越快,但是最后精度可能不好。而求導(dǎo)的過程,其實(shí)就是求曲線的斜率。

7、直線求導(dǎo)

對于直線,斜率就是導(dǎo)數(shù),一般導(dǎo)數(shù)這兩種寫法:

image.png

為啥說直線斜率就是導(dǎo)數(shù),參考下面:

image.png

8、更多復(fù)雜的導(dǎo)數(shù)例子

注意:導(dǎo)數(shù)都是求函數(shù)的斜率,直線的斜率是一樣的,但是其它函數(shù),例如loga等,在不同的地方,曲線斜率是不一樣的。

image.png

9、計(jì)算圖流程

image.png

需要知道的是:

(1) 前向傳播是計(jì)算圖從左向右計(jì)算

(2)后向傳播是計(jì)算圖從右向左計(jì)算導(dǎo)數(shù)的計(jì)算

(3)python編程中,da代表損失函數(shù)對a求導(dǎo),dv代表損失函數(shù)都v求導(dǎo)

10、logistic的梯度下降(在1個(gè)樣本中的推導(dǎo))

image.png

最主要,先求出dw1、dw2、db這些導(dǎo)數(shù),然使用它們更新w1、w2、b,這就是梯度下降,更新公式如下:

image.png

其中α是學(xué)習(xí)率。

11、多個(gè)樣本的logistic回歸

其中sigmoid的函數(shù)為:

image.png

這一波推導(dǎo)比較復(fù)雜點(diǎn),可以自己試著推導(dǎo)一遍。

12、將代碼實(shí)現(xiàn)為向量化,可以在python中極大的提升速度,使用Numpy實(shí)現(xiàn)

image.png

numpy中有很多內(nèi)置函數(shù),當(dāng)要計(jì)算時(shí),盡量尋找numpy中內(nèi)置函數(shù),不要顯示使用for循環(huán)

13、python中numpy向量編程廣播(Broadcasting)基本原則:

image.png

還有更多的只是,可以查閱numpy的文檔,輸入broadcasting查閱。

14、python使用numpy時(shí),需要注意的地方

image.png

不要使用 a = np.random.randn(5)這樣方法,使用 a = np.random.randn((5, 1))創(chuàng)建列向量,或者使用

a = np.random.randn((1, 5))創(chuàng)建橫向量。

如果不確定shape時(shí),使用assert(a.shape = (5, 1))來確認(rèn)。

15、sigmoid函數(shù)實(shí)現(xiàn)

sigmoid方程如下:

image.png

代碼實(shí)現(xiàn)如下:

def sigmoid(z):
    """
    Compute the sigmoid of z
    Arguments:
    z -- A scalar or numpy array of any size.
    Return:
    s -- sigmoid(z)
    """

    s = 1 / (1 + np.exp(-z))

    return s

需要注意,np.exp()是返回e的冪次方

三、作業(yè)實(shí)現(xiàn)

1、通過完成作業(yè),我知道了整個(gè)神經(jīng)網(wǎng)絡(luò)的構(gòu)建流程。

那是如何構(gòu)建這個(gè)神經(jīng)網(wǎng)絡(luò)的呢?

(1)預(yù)處理數(shù)據(jù)。

讀取圖片,并將圖片處理成向量化;讀取文本。并且,將訓(xùn)練的數(shù)據(jù)和測試的數(shù)據(jù)放在不同的變量中。

(2)初始化數(shù)據(jù)。

這一步,主要初始化w(權(quán)重)和b的值,其中w的維度是與圖片相關(guān)的,等于寬度x高度x3

(3)構(gòu)建模型

構(gòu)建模型中,首先是計(jì)算出前向傳播,然后計(jì)算后向傳播,計(jì)算出梯度,然后進(jìn)行梯度下降,更新w和b的值。經(jīng)過多個(gè)循環(huán)之后,它就會越加接近那個(gè)最優(yōu)解。

(4)預(yù)測方法

預(yù)測方法其實(shí)就是拿我們訓(xùn)練好的w和b的值,然后進(jìn)行前向傳播計(jì)算出對應(yīng)的y值,也就是我們的預(yù)測值。

2、在完成作業(yè)的時(shí)候,我也碰到了問題

(1)不知道什么時(shí)候使用np.dot還是直接A*B

例如下面公式:

image.png

我在計(jì)算成本函數(shù)的時(shí)候,報(bào)錯(cuò)了。這個(gè)問題,我的解決方法是通過打印這些變量觀察得到。

但是,其實(shí)可以看公式就知道,例如A的計(jì)算,沒有標(biāo)注是第幾個(gè)只是大寫X和wT相乘,這個(gè)明顯是矩陣的點(diǎn)積。而J的成本函數(shù)計(jì)算時(shí),是它們內(nèi)部每一個(gè)y(i)和log(a(i))相乘,其中y(i)代表第i個(gè)y值,所以是矩陣的乘法,也就是每個(gè)元素相乘。

總結(jié)

整個(gè)知識梳理了一遍,比我以前只知道實(shí)現(xiàn)卻不知其所以然好多了。所以,我更憧憬后面的課程,爭取一個(gè)月把它學(xué)完。

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

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

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