如下有部分公式,若是沒法顯示,請訪問原文連接算法
過年期間,我抽時間把深度學習的神經網絡的數學基礎學習了一下,簡單的看了看神經網絡的基礎,在這裏我經過寫這個系列的博文來沉澱我所學到的知識。網絡
神經網絡的這個想法,是受到生物學上的神經元的啓發所建立出來的。在生物學上,神經元是如下方的流程來做出反應的。app
點火
),向另外的神經元傳遞固定強度的信號 權重
是不一樣的。 閾值:神經元固有的邊界敏感值值函數
點火:神經元參數的和超過閾值,神經元對此做出反應post
對於生命來講,神經元會忽略微笑的輸入信號,這是十分重要的。學習
反之,若是神經元對於任何微小的信號都變得興奮,那麼這個神經系統將「情緒不穩定」3d
(想一想網絡上說的玻璃心是否是就是這個意思呢)code
上面咱們說到神經元是經過將輸入的信號的和是否超過閾值來判斷是否點火,那麼若是點火以後呢,點火的輸出又是什麼呢?cdn
其實,神經元的點火輸出也是信號,有意思的是,不管神經元接受到多大的刺激或不少不少神經元傳來的信號,這個神經元也只輸出固定大小的信號,好比點火後的輸出是0或1。簡單整理以下:blog
下面讓咱們用數學來簡單的表示1-1
中的流程吧:
咱們這裏將神經元的閾值設置爲0,大於閾值則點火,輸入則分爲$le 0$和$>0$,也能夠成爲」有「、「無」兩種輸入信號。
咱們這裏將神經元的點火設置爲0
和1
兩種信號。
則
從上面咱們知道。神經元點火與否是根據輸入信號的和來判斷的,可是這個求和的方式不是簡單的求和,而是不一樣的輸入的重要性不一樣,這個重要性係數就是咱們的權重
,好比打網球的時候,咱們的視覺神經信號的是比聽覺神經信號更重要的,那麼視覺神經元和聽覺神經元的權重就不一樣。
假設咱們有三個神經元${x}_{1}$、${x}_{2}$、${x}_{3}$,則神經元的輸入信號的和爲:$${w}_{1}{x}_{1}+{w}_{2}{x}_{2}+{w}_{3}{x}_{3}$$
其中${w}_{1}$、${w}_{2}$、${w}_{3}$分別是輸入信號${x}_{1}$、${x}_{2}$、${x}_{3}$對應的權重。
根據上述,神經元在信號之和超過閾值時,點火,那麼咱們根據${w}_{1}{x}_{1}+{w}_{2}{x}_{2}+{w}_{3}{x}_{3}$推出,點火條件以下:
這裏的 $theta$ 表明
閾值
$$無輸出信號(y=0):{w}_{1}{x}_{1}+{w}_{2}{x}_{2}+{w}_{3}{x}_{3}
例 1 來自兩個神經元 一、2 的輸入信號分別爲變量$x_1$ 、$x_2$ ,權重爲$w_1$ 、$w_2$,神經元的閾值爲$theta$ 。當$w_1=5$ ,$w_2=3$ ,$theta=4$ 時,考察信號之和${w}_{1}{x}_{1}+{w}_{2}{x}_{2}$的值與表示點火與否的輸出信號$y$的值。
下面咱們將上方的點火條件函數進行圖形化,以神經元的輸入信號的和爲橫軸,神經元的輸出信號y爲縱軸,以下圖所示:當信號之和小於$theta$時,y取0,反之取1
若是用函數來表示這個圖像,那麼就須要用到下方的單位階躍函數
$$u(z)=left\{ begin{matrix} 0quad (z<0) \\="" 1quad="" (zge="" 0)="" end{matrix}="" right\}="" $$<="" p="">
階躍函數圖形以下:
利用階躍函數,咱們將咱們的神經元輸入
和閾值
帶入,能夠推出咱們的點火函數
:$$y=u(w1x1+w2x2+w3x3-theta )$$
那麼階躍函數中的自變量z,咱們就能夠求出來了。這個z,咱們又稱做加權輸入
$$z=w1x1+w2x2+w3x3-theta $$
下面的圖是神經元的簡化圖
由於在上面說道在生物界,y的值爲1或0,那麼除去生物這個限制,咱們就須要對咱們的點火函數進行修改,這裏咱們把u變成a,這裏的a一般是建模者定義的函數,成爲激活函數
。$$y=a(w1x1+w2x2+w3x3-theta )$$
在上面這個函數中,y能夠取到任何值。若是通俗一點的話,能夠理解爲這個y值是神經元的興奮度、反應度、活性度
下面對比下兩種神經元的差別:
激活函數的表明性例子就是Sigmoid函數$sigma (z)$,下面是它的定義:
$$sigma (z)=frac { 1 }{ 1+{ e }^{ -z }} (zapprox2.718281... )$$
這個函數的做用是將輸入值轉換到(0,1)區間,也就是說sigmoid函數的輸出值是大於0且小於1的任意值。該函數最重要的特性是連續
、光滑
,也就表明着可導
。有了這種性質就使得sigmoid函數會很容易處理
階躍函數的輸出值爲0和1可表明點火與否,而sigmoid函數的輸出值卻在(0,1)區間,那麼咱們就要換個思路了,不能用其輸出值表明點火與否,可是可用它的輸出值表明神經元的興奮度,越接近1越興奮。
咱們將主要使用sigmoid來做爲標準的激活函數使用,若是使用數學上單調遞增
的可導
函數來代替sigmoid做爲激活函數,那麼也是能夠的.
咱們再來看下咱們的激活函數:$$y=a(w1x1+w2x2+w3x3-theta )$$
這裏的$theta$咱們稱爲閾值,在生物學上是神經元特性的值,通俗的講$theta$表示爲神經元的感覺能力,若是$theta$較大,咱們的神經元會不容易興奮(就是遲鈍),若是$theta$較小,則神經元會很容易興奮(特別敏感)
上面的式子中$theta$有負號,這幫搞數學的覺着負號很差看,認爲減法容易算錯,非要把負號幹掉,因此就把$-theta$替換爲了$b$,因而就有了下面這兩個式子:
下面這兩個式子是神經網絡的出發點,很是重要
$$z=w1x1+w2x2+w3x3+b $$$$y=a(z)=a(w1x1+w2x2+w3x3+b )$$
變成了這個樣子,式子好看了,也不容易錯了,因而這個$b$就叫作偏置
生物學上的$w1$、$w2$、$w_3$和閾值$theta$($-b$)都不是負數,由於負數不會在天然現象中出現,可是咱們將神經元通常化後,是容許出現負數的。
上面咱們用一個例子來驗證咱們所學到的知識。相信不少人的算法就像上方表格中的加權輸入z同樣,其實對於計算機來講有一種更加容易的計算方式,那就是線性代數
中的內積
。
咱們將變量$x1$、$x2$、$x3$做爲變量向量
,將權重$w1$、$w2$、$w3$和偏執$b$做爲一個參數向量
,經過計算兩個向量的內積來計算z,這時咱們發現變量向量的長度是3,而權重和偏執的向量是4,因此咱們須要使用1做爲b的係數加入到變量向量中。$$left[ x_1 ,x_2,x_3,1right]\\*\\left[ w_1 ,w_2,w_3,bright]\\=w_1*x_1+w_2*x_2+w_3*x_3+1*b$$
這不就是咱們上方使用的算法嗎,這種向量的內積的計算方式雖然對人不太友好,可是計算機卻更加擅長這種計算,在咱們真正擼代碼的時候會用到這種方法。
評論請轉至原文連接
本文來自納蘭小築,本文不予回覆,評論請追溯原文