100天搞定機(jī)器學(xué)習(xí)|Day1數(shù)據(jù)預(yù)處理
100天搞定機(jī)器學(xué)習(xí)|Day2簡(jiǎn)單線性回歸分析
100天搞定機(jī)器學(xué)習(xí)|Day3多元線性回歸
100天搞定機(jī)器學(xué)習(xí)|Day4-6 邏輯回歸
100天搞定機(jī)器學(xué)習(xí)|Day7 K-NN
100天搞定機(jī)器學(xué)習(xí)|Day8 邏輯回歸的數(shù)學(xué)原理
100天搞定機(jī)器學(xué)習(xí)|Day9-12 支持向量機(jī)
100天搞定機(jī)器學(xué)習(xí)|Day11 實(shí)現(xiàn)KNN
100天搞定機(jī)器學(xué)習(xí)|Day13-14 SVM的實(shí)現(xiàn)
100天搞定機(jī)器學(xué)習(xí)|Day15 樸素貝葉斯
100天搞定機(jī)器學(xué)習(xí)|Day16 通過內(nèi)核技巧實(shí)現(xiàn)SVM
100天搞定機(jī)器學(xué)習(xí)|Day17-18 神奇的邏輯回歸
100天搞定機(jī)器學(xué)習(xí)|Day19-20 加州理工學(xué)院公開課:機(jī)器學(xué)習(xí)與數(shù)據(jù)挖掘
100天搞定機(jī)器學(xué)習(xí)|Day21 Beautiful Soup
100天搞定機(jī)器學(xué)習(xí)|Day22 機(jī)器為什么能學(xué)習(xí)歌逢?
100天搞定機(jī)器學(xué)習(xí)|Day23-25 決策樹及Python實(shí)現(xiàn)
100天搞定機(jī)器學(xué)習(xí)|Day26-29 線性代數(shù)的本質(zhì)
100天搞定機(jī)器學(xué)習(xí)|Day 30-32 微積分的本質(zhì)
100天搞定機(jī)器學(xué)習(xí)|Day33-34 隨機(jī)森林
本文為3Blue1Brown之《What is a Neural Network?》學(xué)習(xí)筆記
觀看地址:bilibili.com/video/av15532370
這集Grant大佬假設(shè)大家都沒有神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)贩疙,為新手講解神經(jīng)網(wǎng)絡(luò)基本概念,讓大家再聽說神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的時(shí)候橙凳,可以明白究竟是什么意思罪针。大佬選擇經(jīng)典的多層感知器(MLP)結(jié)構(gòu)解決手寫數(shù)字識(shí)別問題彭羹,理由是理解了經(jīng)典原版,才能更好地理解功能強(qiáng)大的變種泪酱,比如CNN和LSTM派殷。
首先看看神經(jīng)元和他們是怎么連接的
神經(jīng)元可以理解為一個(gè)裝著0到1之間數(shù)字的容器。以28*28輸入圖像每一個(gè)像素為例墓阀,每一個(gè)原點(diǎn)都是一個(gè)神經(jīng)元毡惜,其中數(shù)字代表對(duì)于像素的灰度值,0表示純黑斯撮,1表示純白经伙,這個(gè)數(shù)字在神經(jīng)網(wǎng)絡(luò)里稱作“激活值”。
這784個(gè)神經(jīng)元就組成了網(wǎng)絡(luò)的第一層勿锅,最后一層的十個(gè)神經(jīng)元代表0-9這十個(gè)數(shù)帕膜,同樣的,他們的激活值也在0-1之間粱甫,代表了輸入圖像對(duì)應(yīng)哪個(gè)數(shù)字的可能性泳叠。網(wǎng)絡(luò)中間層被稱為隱含層,可以看做黑箱茶宵,數(shù)字識(shí)別的具體工作就在這里完成危纫,這里加了兩層隱含層,每層有16個(gè)神經(jīng)元——隨便設(shè)置的乌庶,只是為了顯得好看种蝶,后期還可以再調(diào)整。
神經(jīng)網(wǎng)絡(luò)處理信息的核心機(jī)制正是如此瞒大,一層的激活值通過一定的運(yùn)算螃征,得出下一層的激活值。上面也提到784個(gè)神經(jīng)元代表的是數(shù)字圖案透敌,那么下一層激活值也會(huì)產(chǎn)生某些特殊的圖案盯滚,最終在輸出層最亮的神經(jīng)元表示神經(jīng)網(wǎng)絡(luò)的選擇踢械。
我們?cè)倏纯慈绾斡?xùn)練,為什么這種層狀結(jié)構(gòu)就能識(shí)別數(shù)字呢魄藕?
我們可以把數(shù)字進(jìn)行拆解内列,理想狀況下希望倒數(shù)第二層的各個(gè)神經(jīng)元可以分別對(duì)應(yīng)上一個(gè)筆畫。
再來看隱含層第一層背率,當(dāng)輸入為9或8的上面帶圈的數(shù)字時(shí)话瞧,某個(gè)神經(jīng)元的激活值就會(huì)接近1,希望所有這種位于圖像頂部的圓圈圖案都能點(diǎn)亮這個(gè)神經(jīng)元寝姿,這樣交排,從第三次到輸出層,我們只需要學(xué)習(xí)哪些部件能組合出哪個(gè)數(shù)字即可饵筑。
但是如何識(shí)別圓圈呢埃篓?同理可以把它拆分成更細(xì)微的問題。
于是我們希望網(wǎng)絡(luò)第二層的各個(gè)神經(jīng)元對(duì)應(yīng)這些短邊翻翩,第二層就能把所有關(guān)聯(lián)短邊的八到十個(gè)神經(jīng)元都點(diǎn)亮都许,接著就能點(diǎn)亮對(duì)于頂部圓圈和長豎條的神經(jīng)元稻薇。
然后我們看看連線的作用
如何讓第二層(隱含層的第一層)中的這一個(gè)神經(jīng)元能夠能夠識(shí)別出圖像的這一塊區(qū)域是否存在一條邊嫂冻?
我們?cè)O(shè)計(jì)讓第二層的某一個(gè)神經(jīng)元能正確識(shí)別圖像中的這塊區(qū)域里是否存在一條邊。
我們拿出第一層(輸入層/第0層)的激活值塞椎,并賦上權(quán)重(要關(guān)注區(qū)域的權(quán)重為正值桨仿,否則為0),這樣對(duì)所有像素值求加權(quán)和案狠,就只會(huì)累加關(guān)注區(qū)域的像素值了服傍。
綠色為正值,紅色為負(fù)值骂铁,顏色越暗表示權(quán)重越接近0
所以想要識(shí)別是否存在一條邊吹零,只需要給周圍一圈的像素都賦予負(fù)權(quán)重
計(jì)算的加權(quán)值可以使任意大小的
但是我們需要的是將其壓縮到0-1之間
這里就需要Sigmoid函數(shù)了,這就是激活函數(shù)拉庵。
激活值實(shí)際上就是一個(gè)對(duì)加權(quán)之和到底有多正的打分灿椅,但是有時(shí)加權(quán)之和大于0時(shí),也不想點(diǎn)亮神經(jīng)元钞支,比如想要加權(quán)和大于10時(shí)才讓他激發(fā)茫蛹,這里就還需要加上一個(gè)偏置值,保證不隨便激發(fā)烁挟。
權(quán)重告訴我們第二個(gè)神經(jīng)元關(guān)注什么樣的像素圖案
bias告訴我們加權(quán)和要多大才能讓神經(jīng)元的激發(fā)有意義
這里有13000多個(gè)參數(shù)需要調(diào)整婴洼,所以這里所謂的學(xué)習(xí)就是找到正確的權(quán)重和偏置。剛開始講到我們把神經(jīng)元看作是數(shù)字容器撼嗓,但是這些數(shù)字取決于輸入的圖像柬采,所以把神經(jīng)元看過一個(gè)函數(shù)才更準(zhǔn)確欢唾,它的輸入是上一層所有神經(jīng)元的輸出,它的輸出是一個(gè)0-1之間的值粉捻。其實(shí)整個(gè)神經(jīng)網(wǎng)絡(luò)也是一個(gè)函數(shù)匈辱,輸入784個(gè)值,輸出10個(gè)值杀迹。不過它是一個(gè)包含了13000個(gè)權(quán)重亡脸、偏置參數(shù)的極其復(fù)雜的函數(shù)。
需要注意的是树酪,機(jī)器學(xué)習(xí)尤其是神經(jīng)網(wǎng)絡(luò)運(yùn)算與線性代數(shù)是密不可分的浅碾,之前有過介紹,請(qǐng)移步:
100天搞定機(jī)器學(xué)習(xí)|Day26-29 線性代數(shù)的本質(zhì)
神經(jīng)網(wǎng)絡(luò)中需要大量的矩陣乘法和sigmoid映射運(yùn)算
這種運(yùn)算方式续语,非常適合編程垂谢,比如可以用Python的numpy很簡(jiǎn)單的實(shí)現(xiàn)。
最后需要一提的是疮茄,現(xiàn)在神經(jīng)網(wǎng)絡(luò)基本不再使用sigmoid了滥朱,比較流行的是ReLU(線性整流函數(shù))。