鴿了許久,下面**一下神經網路的啟用函式。
眾所周知,啟用函式可以使得神經網路從線性進化為到非線性,意思就是說。原本只能線性可分,現在可以分類非線性分布的資料了。為什麼?
首先看一下沒有啟用函式的神經網路模型:
那這能說明什麼呢?
我們來看,假設有n個點呈非線性分布,將n個(x1, x2)輸入到這個神經網路中,得到算出來的y1和y2,其結果可見下圖:
可以看見沒有啟用函式的神經網路模型 b+w1*x1+w2 *x2
算出的**值形成了一條直線,而這條直線不能把非線性分布的資料進行分類。
那怎麼辦呢?
考慮一下,之所以不能分類,是因為根據模型算出來的**值形成的是直線,那我們不讓它形成直線不就好了,問題又來了,不讓它形成直線,那分類豈不是亂了套?
答案是我們有損失函式,根據損失函式,我們可以讓**值形成的曲線恰好能夠將資料進行分類!
如下圖:
這一步就是由啟用函式做到的,那常見的啟用函式我們都清楚,比如:sigmoid、relu、tanh等等。其實躍遷函式,也就是sign()也是非線性的啟用函式,只不過它只有0和1的取值。
好,到此為止,我們把啟用函式為什麼可以非線性分類講完了。但是,啟用函式一般是用在哪?是在深度學習領域中卷積層、池化層等等。我們上面講的都是一下簡單的二維資料點,看上去好像和深度學習隔了些什麼。
那我們以卷積為例,看一下。
如圖所示:
這個圖太熟悉不過了,我們把它展開。
是不是就回到了上上上面那個神經網路了呀。只不過那個是二維的,這裡是9維的。現在,我們得到9維空間上非線性分布的**值了。再往下疊加層數,最終會形成乙個超平面可以分類我們的資料點了。
想一下,二維資料點的**值形成的是曲直線,三維資料點的**值是不是就是曲直面了呀。更高維的呢?想不到,但是真實存在。
此外,卷積神經網路引入非線性啟用函式的目的,是使得深層網路有存在的意義,否則線性的深層網路使用一層網路就可以代替了,疊加層數毫無用處。
為什麼神經網路需要非線性啟用函式
生物神經網路啟發了人工神經網路的發展,在了解為什麼神經網路需要非線性啟用函式之前,理解生物神經網路的工作原理對我們是有幫助的。乙個典型的生物神經元的物理結構包括細胞體 樹突 軸突。樹突具有接受刺激並將衝動傳入細胞體的功能,細胞體具有聯絡和整合輸入資訊並傳出資訊的作用,軸突的主要功能是將神經衝動由細胞...
神經網路實現非線性回歸
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt 使用numpy生成200個隨機點 x data np.linspace 0.5,0.5,200 np.newaxis noise np.random....
為什麼人工神經網路需要非線性啟用函式?
我們用人工神經網路來表述輸入x與輸出y之間複雜的關係,用數學語言來說,就是用人工神經網路來實現複雜的函式 如果使用線性啟用函式,那麼無論神經網路中有多少層,都只是在做線性運算,最後一層得到的結果是輸入層的線性組合,而輸入層的線性組合,用一層隱藏層就可以表示,也就是說,多層的隱藏層運算後的結果等同於一...