一、深度學(xué)習(xí)概論
1.1 什么是神經(jīng)網(wǎng)絡(luò)
神經(jīng)元代表了線性修正單元函數(shù)
1.2用神經(jīng)網(wǎng)絡(luò)進(jìn)行深度學(xué)習(xí)
監(jiān)督學(xué)習(xí):已經(jīng)有數(shù)據(jù)集,知道相應(yīng)的輸入產(chǎn)生怎樣的輸出,找出輸入輸出這種對(duì)應(yīng)的關(guān)系
監(jiān)督學(xué)習(xí)問(wèn)題被分成回歸和分類兩類
CNN通常被用來(lái)處理圖像;RNN通常被用來(lái)處理一維序列數(shù)據(jù)
結(jié)構(gòu)數(shù)據(jù):有確切的意義,而非結(jié)構(gòu)數(shù)據(jù)沒(méi)有,比如,音頻,文章等等
1.3 為什么深度學(xué)習(xí)會(huì)興起
數(shù)據(jù)集增多;計(jì)算能力增強(qiáng);算法優(yōu)化
analogy:比喻;smart grid:智能電網(wǎng);diagram:圖;iterate:重復(fù);demographic:人口統(tǒng)計(jì);
二、神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
2.1 二分分類
神經(jīng)網(wǎng)絡(luò)的計(jì)算過(guò)程通常有正向傳播過(guò)程和反向傳播過(guò)程(為什么)
計(jì)算機(jī)存儲(chǔ)一張圖片,以紅綠藍(lán)三種矩陣
2.2 邏輯回歸
用在監(jiān)督學(xué)習(xí)問(wèn)題;輸出y是0或1;
為什么要對(duì)wx+b進(jìn)行sigmoid函數(shù)化(因?yàn)閣x+b等價(jià)于線性函數(shù),你不能確保輸出是0-1的一個(gè)數(shù))
2.3 邏輯回歸損失函數(shù)
為了訓(xùn)練w和b,提出成本函數(shù);損失函數(shù)針對(duì)單個(gè)訓(xùn)練樣本,成本函數(shù)基于總體訓(xùn)練樣本
discrepancy:差異;
2.4 梯度下降法
為什么使用邏輯回歸的特定成本函數(shù)(因?yàn)槭峭购瘮?shù));梯度下降(從初始點(diǎn)開(kāi)始往最陡的方向走一步)
w = w - ?* (d J(w, b)/d w);b = b -?
?* (d J(w, b)/d b);(實(shí)際更新參數(shù)時(shí)進(jìn)行的操作)
2.5 導(dǎo)數(shù)
函數(shù)的導(dǎo)數(shù)就是函數(shù)的斜率,而函數(shù)的斜率在不同的點(diǎn)是不同的
derivatives:導(dǎo)數(shù);intuition:直觀;
2.6 計(jì)算圖
如何利用流程圖來(lái)計(jì)算導(dǎo)數(shù)?
2.7 邏輯回歸的梯度下降法
?如何使用導(dǎo)數(shù)流程圖來(lái)計(jì)算梯度?
運(yùn)用向量化技術(shù)來(lái)解決顯示使用循環(huán)帶來(lái)的低效
2.8 向量化
numpy.dot(w, x);經(jīng)驗(yàn)法則:只要有其他可能,就不要使用顯示for循環(huán);盡量使用內(nèi)置函數(shù)或者其他方法去計(jì)算循環(huán)
2.9 python中的廣播
對(duì)于兩個(gè)不匹配的矩陣,會(huì)拓展其中一個(gè)維數(shù)少的矩陣,從而實(shí)現(xiàn)兩個(gè)矩陣的運(yùn)算
2.10 關(guān)于python/numpy向量的說(shuō)明
在神經(jīng)網(wǎng)絡(luò)編程中,不要使用(n,)這樣秩為1的數(shù)組(和行向量、列向量不一樣);可以隨意使用assert語(yǔ)句;也可采用reshape()方法
第二周測(cè)驗(yàn):
神經(jīng)元的計(jì)算過(guò)程先計(jì)算z = w*x + b,再將z作為激活函數(shù)的輸入,然后產(chǎn)生輸出;
element-wise:按元素
區(qū)分矩陣乘法(np.dot(a, b))和矩陣的元素相乘(a * b)
ndarray的shape屬性可以獲取ndarray的形狀;ndarray.shape[0]輸出ndarray的行數(shù);ndarray.shape[1]輸出ndarray的列數(shù)(針對(duì)array是(m, n)這種類型而言)
plt.imshow()沒(méi)反應(yīng),不顯示圖像?
因?yàn)閜lt.imshow(image)只是對(duì)該圖片做了一些處理,如要展示需plt.show()
np.squeeze()函數(shù)用法:從數(shù)組的形狀中刪除單維條目,即把shape中為1的維度去掉
ndarray.reshape()的用法:
reshape(m,-1) #改變維度為m行、列數(shù)自動(dòng)計(jì)算
reshape(-1,m) #改變維度為行數(shù)自動(dòng)計(jì)算、m列
np.mean()函數(shù)的用法:
np.mean(array):對(duì)矩陣中的所有元素求均值;np.mean(array, 0)對(duì)各列求均值;np.mean(array, 1):對(duì)各行求均值
pycharm中注釋多行代碼的快捷鍵:ctrl + /(取消也是)
train_set_y[:,index](其中shape(1, 209))表示為index的數(shù)組,與train_set_y[0][index]數(shù)值不同
神經(jīng)網(wǎng)絡(luò)的搭建過(guò)程:
1.數(shù)據(jù)的加載:求得訓(xùn)練集和測(cè)試集中圖片數(shù)量,圖片的高度和寬度,而后進(jìn)行數(shù)據(jù)的標(biāo)準(zhǔn)化
2.構(gòu)建sigmoid函數(shù)
3.初始化參數(shù)w, b為0
4.計(jì)算正向傳播過(guò)程(成本函數(shù))和反向傳播過(guò)程(dw和db)
5.通過(guò)優(yōu)化成本函數(shù)來(lái)更新w和b
6.預(yù)測(cè)數(shù)據(jù)集的標(biāo)簽,通過(guò)計(jì)算的值,并進(jìn)行比較來(lái)確實(shí)是否為1
三、淺層神經(jīng)網(wǎng)絡(luò)
3.1 神經(jīng)網(wǎng)絡(luò)概覽
(i)圓括號(hào)代表i樣本,[i]方括號(hào)代表i層
3.2 神經(jīng)網(wǎng)絡(luò)表示
“隱藏層”:在訓(xùn)練集中,這些中間節(jié)點(diǎn)的真正數(shù)值我們是不知道的
符號(hào)約定中,神經(jīng)網(wǎng)絡(luò)的層數(shù)是不計(jì)入輸入層的
3.3 多個(gè)例子的向量化
如何將不同訓(xùn)練樣本向量化?(如何將訓(xùn)練樣本橫向堆疊起來(lái)構(gòu)成矩陣X)
3.4 激活函數(shù)
a = tanh(z) :有類是數(shù)據(jù)中心化的效果;tanh函數(shù)在大部分情況下都比sigmoid函數(shù)優(yōu)越,一個(gè)例外是輸出層,當(dāng)我們希望輸出在0,1之間,如二元分類時(shí),sigmoid函數(shù)所表現(xiàn)的效果會(huì)更好
不同層的激活函數(shù)可以不一樣;
sigmoid函數(shù)和tanh函數(shù)共有的缺點(diǎn)如果輸入的z非常大或者非常小時(shí),導(dǎo)數(shù)的梯度可能就很?。ń咏?),而這會(huì)拖慢梯度下降算法
Relu函數(shù):盡管不可微,但因?yàn)榇蟛糠智闆r下z != 0,且你可以在z = 0 時(shí)對(duì)導(dǎo)數(shù)進(jìn)行賦值0或1來(lái)處理這種特殊情況
選擇激活函數(shù)的經(jīng)驗(yàn)法則:
如果你的輸出值是0和1,如果你在做二元分類,那么sigmoid函數(shù)非常適合輸出層的激活函數(shù),然后其他單元的激活函數(shù)采用Relu函數(shù)
Relu函數(shù)比tanh和sigmoid好的一個(gè)主要原因:它沒(méi)有斜率接近于0 的點(diǎn),從而不會(huì)產(chǎn)生減慢學(xué)習(xí)速度的效應(yīng)
3.5 為什么神經(jīng)網(wǎng)絡(luò)需要非線性激活函數(shù)
如果不用激活函數(shù),g[z] = z,有時(shí)稱為線性激活函數(shù),此時(shí)的輸出不過(guò)是輸入特征x的線性組合,此時(shí)無(wú)論你的神經(jīng)網(wǎng)絡(luò)有多少層,一直做的就是計(jì)算線性激活函數(shù),而這和去掉所有隱藏層的效果是差不多的
大部分情況下隱藏層不能使用線性激活函數(shù),除了與壓縮有關(guān)的特殊情況;在回歸問(wèn)題上,如預(yù)測(cè)房?jī)r(jià),可以在輸出層嘗試線性激活函數(shù)
3.6 神經(jīng)網(wǎng)絡(luò)的梯度下降法
梯度下降算法的具體實(shí)現(xiàn)和如何處理單隱層的神經(jīng)網(wǎng)絡(luò)
在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí),隨機(jī)初始化參數(shù)很重要,而不是全部初始化0
3.7 隨機(jī)初始化
對(duì)于邏輯回歸,可以將權(quán)重參數(shù)初始化為0,在神經(jīng)網(wǎng)絡(luò)中如果將權(quán)重參數(shù)初始為0,則使用梯度下降算法將完全無(wú)效(因?yàn)闊o(wú)論輸入是怎樣的,隱藏層的a[1]1和a[1]2是一樣的;在計(jì)算反向傳播時(shí),出于對(duì)稱性,dz[1]1和dz[1]2也是一樣的)
對(duì)權(quán)重參數(shù)的隨機(jī)初始化盡量小而不是大,因?yàn)閷?duì)一些激活函數(shù)而言,會(huì)導(dǎo)致落入平緩區(qū)域,導(dǎo)致梯度下降算法的效果不太好
測(cè)驗(yàn):
denote:表示;symmetry:對(duì)稱;accomplish:完成;divergence:發(fā)散;padding:填充
np.meshgrid():https://blog.csdn.net/littlehaes/article/details/83543459
x[m, n]引用矩陣中某一段數(shù)據(jù)集,m代表第m維,n代表在第m維中取第n個(gè)數(shù)據(jù);
plt.cm.Spectral的作用在于在畫(huà)圖時(shí)為不同類別的樣本分別分配不同的顏色;
sklearn.linear_model.LogisticRegression參數(shù)說(shuō)明:https://www.cnblogs.com/wjq-Law/p/9779657.html
np.random.seed():設(shè)置的seed()值僅一次有效;如果使用相同的seed( )值,則每次生成的隨即數(shù)都相同
np.zeros():http://www.itdecent.cn/p/18ff98f7126b
np.arange():http://www.itdecent.cn/p/bf1ccfb8c518
np.sum():https://blog.csdn.net/leekingsen/article/details/76242244
np.round():四舍五入化數(shù)字
編程:
1.初始化神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(如要幾層,隱層單元要幾個(gè)等等)
2.初始化參數(shù)w, b
3.前向傳播的計(jì)算
4.計(jì)算成本函數(shù)
5.反向傳播的計(jì)算
6.更新參數(shù)
7.整合功能
8.預(yù)測(cè)的實(shí)現(xiàn),在主函數(shù)實(shí)現(xiàn)預(yù)測(cè)的準(zhǔn)確性
四、深層神經(jīng)網(wǎng)絡(luò)
4.1 深層神經(jīng)網(wǎng)絡(luò)
什么是深層神經(jīng)網(wǎng)絡(luò)和神經(jīng)網(wǎng)絡(luò)中的術(shù)語(yǔ)表示;
事實(shí)上,我們?cè)趯?shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的過(guò)程中,想增加程序無(wú)錯(cuò)的概率的其中一個(gè)方法是需要非常仔細(xì)和系統(tǒng)化的思考矩陣的維數(shù)
W[l] = (n[l], n[l-1]);b[l] = (n[l], 1),dW和W[l]、db和b[l]、z和a維度相同(向量化之前)向量化之后,b[l]不變但是因?yàn)閜ython中的廣播原則,會(huì)被復(fù)制成(n[l], m)
為什么深度神經(jīng)網(wǎng)絡(luò)效果良好?
因?yàn)閷?duì)于一些復(fù)雜任務(wù),可以通過(guò)層數(shù)逐漸提高難度(如人臉識(shí)別中,前面的層數(shù)可以用來(lái)處理邊緣探測(cè)器的任務(wù),而后逐漸擴(kuò)大區(qū)域,找到鼻子,而后合成臉單獨(dú))(從簡(jiǎn)單到復(fù)雜)(如語(yǔ)音識(shí)別中,前面的層數(shù)可以用來(lái)處理音位,而后逐漸處理單詞、短語(yǔ)、句子等等)
電路理論:如果要計(jì)算m個(gè)樣本的異或,采取深度神經(jīng)網(wǎng)絡(luò)的話,由于有不同的隱層,所有隱層單元數(shù)不會(huì)很多,采取淺層神經(jīng)網(wǎng)絡(luò)的話,單隱層下為了實(shí)現(xiàn)目標(biāo)會(huì)導(dǎo)致隱層單元數(shù)呈指數(shù)級(jí)增長(zhǎng)
circuit:電路;empirical:經(jīng)驗(yàn)的
邊緣探測(cè)器相對(duì)來(lái)說(shuō)都是針對(duì)照片中非常小塊的面積,面部探測(cè)器呢則會(huì)針對(duì)相對(duì)較大的區(qū)域
測(cè)驗(yàn):
intermediate:中間的;circuit:電路;
python中的/ //的區(qū)別:https://www.cnblogs.com/hezhiyao/p/8066619.html
numpy數(shù)組的屬性:https://www.cnblogs.com/gl1573/p/10531421.html
np.asarray():http://www.itdecent.cn/p/2303467ea896
plt.rcParams(rc配置文件來(lái)自定義圖形的各種默認(rèn)屬性):https://blog.csdn.net/weixin_39010770/article/details/88200298
np.linspace:https://blog.csdn.net/Asher117/article/details/87855493
ndimage.imread:https://blog.csdn.net/zhuzuwei/article/details/78018053
關(guān)于scipy1.3.0中被棄用的imread,imresize的替代方案:https://blog.csdn.net/weekdawn/article/details/97777747