100天搞定机器学习|Day35 深度学习之神经网络的结构
100天搞定機器學習|Day1數(shù)據(jù)預處理
100天搞定機器學習|Day2簡單線性回歸分析
100天搞定機器學習|Day3多元線性回歸
100天搞定機器學習|Day4-6 邏輯回歸
100天搞定機器學習|Day7 K-NN
100天搞定機器學習|Day8 邏輯回歸的數(shù)學原理
100天搞定機器學習|Day9-12 支持向量機
100天搞定機器學習|Day11 實現(xiàn)KNN
100天搞定機器學習|Day13-14 SVM的實現(xiàn)
100天搞定機器學習|Day15 樸素貝葉斯
100天搞定機器學習|Day16 通過內(nèi)核技巧實現(xiàn)SVM
100天搞定機器學習|Day17-18 ?神奇的邏輯回歸
100天搞定機器學習|Day19-20 加州理工學院公開課:機器學習與數(shù)據(jù)挖掘
100天搞定機器學習|Day21 Beautiful Soup
100天搞定機器學習|Day22 機器為什么能學習?
100天搞定機器學習|Day23-25 決策樹及Python實現(xiàn)
100天搞定機器學習|Day26-29 線性代數(shù)的本質(zhì)
100天搞定機器學習|Day 30-32 微積分的本質(zhì)
100天搞定機器學習|Day33-34 隨機森林
本文為3Blue1Brown之《What is a Neural Network?》學習筆記
觀看地址:bilibili.com/video/av15532370
這集Grant大佬假設大家都沒有神經(jīng)網(wǎng)絡的基礎,為新手講解神經(jīng)網(wǎng)絡基本概念,讓大家再聽說神經(jīng)網(wǎng)絡學習的時候,可以明白究竟是什么意思。大佬選擇經(jīng)典的多層感知器(MLP)結(jié)構(gòu)解決手寫數(shù)字識別問題,理由是理解了經(jīng)典原版,才能更好地理解功能強大的變種,比如CNN和LSTM。
首先看看神經(jīng)元和他們是怎么連接的
神經(jīng)元可以理解為一個裝著0到1之間數(shù)字的容器。以28*28輸入圖像每一個像素為例,每一個原點都是一個神經(jīng)元,其中數(shù)字代表對于像素的灰度值,0表示純黑,1表示純白,這個數(shù)字在神經(jīng)網(wǎng)絡里稱作“激活值”。
這784個神經(jīng)元就組成了網(wǎng)絡的第一層,最后一層的十個神經(jīng)元代表0-9這十個數(shù),同樣的,他們的激活值也在0-1之間,代表了輸入圖像對應哪個數(shù)字的可能性。網(wǎng)絡中間層被稱為隱含層,可以看做黑箱,數(shù)字識別的具體工作就在這里完成,這里加了兩層隱含層,每層有16個神經(jīng)元——隨便設置的,只是為了顯得好看,后期還可以再調(diào)整。
神經(jīng)網(wǎng)絡處理信息的核心機制正是如此,一層的激活值通過一定的運算,得出下一層的激活值。上面也提到784個神經(jīng)元代表的是數(shù)字圖案,那么下一層激活值也會產(chǎn)生某些特殊的圖案,最終在輸出層最亮的神經(jīng)元表示神經(jīng)網(wǎng)絡的選擇。
我們再看看如何訓練,為什么這種層狀結(jié)構(gòu)就能識別數(shù)字呢?
我們可以把數(shù)字進行拆解,理想狀況下希望倒數(shù)第二層的各個神經(jīng)元可以分別對應上一個筆畫。
再來看隱含層第一層,當輸入為9或8的上面帶圈的數(shù)字時,某個神經(jīng)元的激活值就會接近1,希望所有這種位于圖像頂部的圓圈圖案都能點亮這個神經(jīng)元,這樣,從第三次到輸出層,我們只需要學習哪些部件能組合出哪個數(shù)字即可。
但是如何識別圓圈呢?同理可以把它拆分成更細微的問題。
于是我們希望網(wǎng)絡第二層的各個神經(jīng)元對應這些短邊,第二層就能把所有關(guān)聯(lián)短邊的八到十個神經(jīng)元都點亮,接著就能點亮對于頂部圓圈和長豎條的神經(jīng)元。
然后我們看看連線的作用
如何讓第二層(隱含層的第一層)中的這一個神經(jīng)元能夠能夠識別出圖像的這一塊區(qū)域是否存在一條邊?
我們設計讓第二層的某一個神經(jīng)元能正確識別圖像中的這塊區(qū)域里是否存在一條邊。
我們拿出第一層(輸入層/第0層)的激活值,并賦上權(quán)重(要關(guān)注區(qū)域的權(quán)重為正值,否則為0),這樣對所有像素值求加權(quán)和,就只會累加關(guān)注區(qū)域的像素值了。
綠色為正值,紅色為負值,顏色越暗表示權(quán)重越接近0
所以想要識別是否存在一條邊,只需要給周圍一圈的像素都賦予負權(quán)重
計算的加權(quán)值可以使任意大小的
但是我們需要的是將其壓縮到0-1之間
這里就需要Sigmoid函數(shù)了,這就是激活函數(shù)。
激活值實際上就是一個對加權(quán)之和到底有多正的打分,但是有時加權(quán)之和大于0時,也不想點亮神經(jīng)元,比如想要加權(quán)和大于10時才讓他激發(fā),這里就還需要加上一個偏置值,保證不隨便激發(fā)。
權(quán)重告訴我們第二個神經(jīng)元關(guān)注什么樣的像素圖案
bias告訴我們加權(quán)和要多大才能讓神經(jīng)元的激發(fā)有意義
這里有13000多個參數(shù)需要調(diào)整,所以這里所謂的學習就是找到正確的權(quán)重和偏置。剛開始講到我們把神經(jīng)元看作是數(shù)字容器,但是這些數(shù)字取決于輸入的圖像,所以把神經(jīng)元看過一個函數(shù)才更準確,它的輸入是上一層所有神經(jīng)元的輸出,它的輸出是一個0-1之間的值。其實整個神經(jīng)網(wǎng)絡也是一個函數(shù),輸入784個值,輸出10個值。不過它是一個包含了13000個權(quán)重、偏置參數(shù)的極其復雜的函數(shù)。
需要注意的是,機器學習尤其是神經(jīng)網(wǎng)絡運算與線性代數(shù)是密不可分的,之前有過介紹,請移步:
100天搞定機器學習|Day26-29 線性代數(shù)的本質(zhì)
神經(jīng)網(wǎng)絡中需要大量的矩陣乘法和sigmoid映射運算
這種運算方式,非常適合編程,比如可以用Python的numpy很簡單的實現(xiàn)。
最后需要一提的是,現(xiàn)在神經(jīng)網(wǎng)絡基本不再使用sigmoid了,比較流行的是ReLU(線性整流函數(shù))。
總結(jié)
以上是生活随笔為你收集整理的100天搞定机器学习|Day35 深度学习之神经网络的结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32的同步规则模式使用
- 下一篇: 深度学习中的一些概率函数分布