神經網絡的靈感來自於人體大腦結構,人在思考問題的時候,神經沖動就會在神經突觸所連接的無數神經元中傳遞.據說成人大腦中有1000億個神經元,比宇宙中星球的數量還多.我們的神經網絡就是模擬用很多的節點來處理信息,不過神經網絡和大腦還是有區別的,因為大腦的神經沖動傳導的過程中不僅僅只有”是”和”非”,還有強弱,緩急之分.
神經網絡的結構
我們來分析一下神經網絡中的一個最簡單例子.識別0~9這幾個數字.
對於人類來說可以很輕易的認出下面的這些數字都是9,但是對於計算機來說,這確實很難
那么我們如何通過神經網絡識別出來呢?下面是一個神經網絡示意圖
最左邊的一列節點是輸入,右邊的一列節點是輸出,把圖像的每一個像素點對應到輸入層的輸入點,輸入值為像素點的顏色,假設用0~1之間的數字表示這些顏色,越接近白色數值越接近0,越接近黑色越接近1.最右邊代表輸出值,每個節點代表一個結果值,輸出點的結果越接近1說明這個點所代表的值概率越大.反之越接近0,概率越小.中間的兩層叫做隱藏層,輸入層,隱藏層和輸出層連接組成神經網絡.
我們現在要識別某張圖片上的數字9,我們來做一個大膽的假設,如果第一個隱藏層可以識別出上半部分是個圓形,如果第二個隱藏層可以識別出下半部分是豎線,輸出層將這個圓和豎線組合起來,就可以識別出這張圖片是9.
如果這個假設可行的話,那么問題就從如何識別9變成了如何識別圓和豎線,那么你會想,識別圓也很難啊,同樣的道理,圓可以切分成很多圓弧,這個問題最終可以演化到如何識別在某個指定區域是否有線段.
觀察方框內的點,如果這個方框里面有直線的話,將這些點的輸入值加起來一定是個大於0的數,如果沒有線段的話,相加一定是等於或者接近0.
這些累積和構成了第二層也就是第一個隱藏層的值.
我們現在只關系方框內是否有線段,不關心方框外的點,這時候只需要將關心的點乘以1,不關心的點乘以1以下的數甚至乘以0
我們把這個要乘的數值叫做權重weight,代表我們對這個輸入值得關注程度.
現在我們能做到如何判斷一張圖片的某個區域是否有線段了,如果第二層的神經節點足夠多的話,也就是說可以做無數次這種某個區域是否有線段的假設.這樣我們就可以判斷出圖片上哪些地方有線段了.第一個隱藏層的任務完成.
但是有的時候圖片會有噪點,也就是干擾,所以我們需要界定一個標准,只有高於一定的標准才允許激活,所以我們還需要一個偏置值
下面來解決另一個問題,輸入層的值是0~1的數,但是第二層是前一層的累加,有可能超過1,甚至可能是很大的數,這樣不好,因為1可以代表概率的100%,0可以代表概率的0%,這是很方便的,如果數值的區間不可控,就很難代表概率了,所以我們用一個函數處理一下,可以將y處理成0~1之間的,y越大越接近1,y越小越接近0,所以就有了如下公式
如果你熟悉線性代數的話,也許你會覺着用矩陣來表示看起來一目了然
簡寫為
在接下來的網絡層里上一層的輸出就是下一層的輸入,整個神經網絡可以理解成一個方程,像素值是輸入,圖片的結果是的概率是輸出.只不過這個函數非常的復雜,有非常多個輸入,10個輸出,還有無數個權重和無數個偏置值.
神經網絡的訓練
在訓練的最初,會給所有的權重和偏置值賦予隨機值,然后將計算值與真實值偏差loss,計算機會盡可能的減少這個誤差.
減小誤差的算法叫做梯度下降算法,這里我們不做介紹,我們只要知道,計算機能夠通過調整那些海量的權重和偏置值能夠不斷的減小誤差.最終達到計算出來的值與真實值得偏差無限小.這時候一個識別數字的人工智能就誕生了.
那么對於我們這個2個隱藏層,每層16個神經元的神經網絡,它識別模式圖片的精確度可以達到多少呢?可以很輕松的達到96%的正確率,最優秀的算法可以達到99%以上,而且增加神經元的個數繼續提升.
現在我們回過來看之前的那個假設,如果第一個隱藏層可以識別出上半部分是個圓形,如果第二個隱藏層可以識別出下半部分是豎線,輸出層將這個圓和豎線組合起來,就可以識別出這張圖片是9.事實是這樣么?完全不是.
我們將每個神經元所記錄到的圖像打印出來.得到的像素點非常混亂
實際上神經網絡並沒有如我們想像的那樣先識別線,再識別圓,最后組成數字9,而是用海量的權重和偏置值生生的將0~9這10個數字”記住”了.
如果神經網絡的節點數真如人類大腦的神經元一樣多,如果在算法或者其他技術上有些突破,未來說不定真的會有有情感的人工智能也說不定呢.
參考:
https://www.kupposhadow.com/post/5a224780e717c543d753e7db
https://www.kupposhadow.com/post/5a22463ce717c51ff6741cf2