從線性到非線性 神經網路的啟用函式

2021-10-12 08:41:32 字數 1258 閱讀 5820

鴿了許久,下面**一下神經網路的啟用函式。

眾所周知,啟用函式可以使得神經網路從線性進化為到非線性,意思就是說。原本只能線性可分,現在可以分類非線性分布的資料了。為什麼?

首先看一下沒有啟用函式的神經網路模型:

那這能說明什麼呢?

我們來看,假設有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之間複雜的關係,用數學語言來說,就是用人工神經網路來實現複雜的函式 如果使用線性啟用函式,那麼無論神經網路中有多少層,都只是在做線性運算,最後一層得到的結果是輸入層的線性組合,而輸入層的線性組合,用一層隱藏層就可以表示,也就是說,多層的隱藏層運算後的結果等同於一...