複製鏈接
請複製以下鏈接發送給好友

Sigmoid函數

鎖定
Sigmoid函數是一個在生物學中常見的S型函數,也稱為S型生長曲線 [1]  在信息科學中,由於其單增以及反函數單增等性質,Sigmoid函數常被用作神經網絡的激活函數,將變量映射到0,1之間。
中文名
Sigmoid函數
外文名
Sigmoid function
別    名
S型生長曲線
用    途
用作神經網絡的激活函數、邏輯迴歸
值    域
(0,1)

Sigmoid函數簡介

sigmoid函數也叫Logistic函數,用於隱層神經元輸出,取值範圍為(0,1),它可以將一個實數映射到(0,1)的區間,可以用來做二分類。在特徵相差比較複雜或是相差不是特別大時效果比較好。Sigmoid函數為神經網絡中的激勵函數,是一種光滑且嚴格單調的飽和函數,其表達式為: [3] 
該飽和函數的上、下界為(0,1)。 [3] 
具有以下優缺點:
優點:平滑、易於求導。
缺點:激活函數計算量大,反向傳播求誤差梯度時,求導涉及除法;反向傳播時,很容易就會出現梯度消失的情況,從而無法完成深層網絡的訓練。
Sigmoid函數由下列公式定義
其對x的導數可以用自身表示:
Sigmoid函數的圖形如S曲線
Sigmoid 曲線 Sigmoid 曲線
Sigmoid函數的級數表示:

Sigmoid函數激活函數

在計算機網絡中,一個節點的激活函數定義了該節點在給定的輸入或輸入的集合下的輸出。標準的計算機芯片電路可以看作是根據輸入得到開(1)或關(0)輸出的數字電路激活函數。這與神經網絡中的線性感知機的行為類似。然而,只有非線性激活函數才允許這種網絡僅使用少量節點來計算非平凡問題。 在人工神經網絡中,這個功能也被稱為傳遞函數。
sigmoid函數和tanh函數是研究早期被廣泛使用的2種激活函數。兩者都為S 型飽和函數。 當sigmoid 函數輸入的值趨於正無窮或負無窮時,梯度會趨近零,從而發生梯度彌散現象。sigmoid函數的輸出恆為正值,不是以零為中心的,這會導致權值更新時只能朝一個方向更新,從而影響收斂速度。tanh 激活函數是sigmoid 函數的改進版,是以零為中心的對稱函數,收斂速度快,不容易出現 loss 值晃動,但是無法解決梯度彌散的問題。2個函數的計算量都是指數級的,計算相對複雜。softsign 函數是 tanh 函數的改進版,為 S 型飽和函數,以零為中心,值域為(−1,1)。

Sigmoid函數邏輯迴歸

logistic迴歸是一種廣義線性迴歸(generalized linear model),因此與多重線性迴歸分析有很多相同之處 [2]  。它們的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求參數,其區別在於他們的因變量不同,多重線性迴歸直接將w‘x+b作為因變量,即y =w‘x+b,而logistic迴歸則通過函數L將w‘x+b對應一個隱狀態p,p =L(w‘x+b),然後根據p 與1-p的大小決定因變量的值。如果L是logistic函數,就是logistic迴歸,如果L是多項式函數就是多項式迴歸。 logistic迴歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋,多類可以使用softmax方法進行處理。實際中最為常用的就是二分類的logistic迴歸。Logistic迴歸模型的適用條件:
1 因變量為二分類的分類變量或某事件的發生率,並且是數值型變量。但是需要注意,重複計數現象指標不適用於Logistic迴歸。
2 殘差和因變量都要服從二項分佈。二項分佈對應的是分類變量,所以不是正態分佈,進而不是用最小二乘法,而是最大似然法來解決方程估計和檢驗問題。
3 自變量和Logistic概率是線性關係
4 各觀測對象間相互獨立。
原理:如果直接將線性迴歸的模型扣到Logistic迴歸中,會造成方程二邊取值區間不同和普遍的非直線關係。因為Logistic中因變量為二分類變量,某個概率作為方程的因變量估計值取值範圍為0-1,但是,方程右邊取值範圍是無窮大或者無窮小。所以,才引入Logistic迴歸。
Logistic迴歸實質:發生概率除以沒有發生概率再取對數。就是這個不太繁瑣的變換改變了取值區間的矛盾和因變量自變量間的曲線關係。究其原因,是發生和未發生的概率成為了比值 ,這個比值就是一個緩衝,將取值範圍擴大,再進行對數變換,整個因變量改變。不僅如此,這種變換往往使得因變量和自變量之間呈線性關係,這是根據大量實踐而總結。所以,Logistic迴歸從根本上解決因變量要不是連續變量怎麼辦的問題。還有,Logistic應用廣泛的原因是許多現實問題跟它的模型吻合。例如一件事情是否發生跟其他數值型自變量的關係。
注意:如果自變量為字符型,就需要進行重新編碼。一般如果自變量有三個水平就非常難對付,所以,如果自變量有更多水平就太複雜。這裏只討論自變量只有三個水平。非常麻煩,需要再設二個新變量。共有三個變量,第一個變量編碼1為高水平,其他水平為0。第二個變量編碼1為中間水平,0為其他水平。第三個變量,所有水平都為0。實在是麻煩,而且不容易理解。最好不要這樣做,也就是,最好自變量都為連續變量。

Sigmoid函數實現

import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
    return 1.0/(1+np.exp(-x))

sigmoid_inputs = np.arange(-10,10,0.1)
sigmoid_outputs = sigmoid(sigmoid_inputs)
print("Sigmoid Function Input :: {}".format(sigmoid_inputs))
print("Sigmoid Function Output :: {}".format(sigmoid_outputs))

plt.plot(sigmoid_inputs,sigmoid_outputs)
plt.xlabel("Sigmoid Inputs")
plt.ylabel("Sigmoid Outputs")
plt.show()

參考資料
  • 1.    Han, Jun; Morag, Claudio .The influence of the sigmoid function parameters on the speed of backpropagation learning:From Natural to Artificial Neural Computation.,1995: 195–201
  • 2.    於立勇,詹捷輝. 基於Logistic迴歸分析的違約概率預測研究. 《 財經研究 》 , 2004
  • 3.    李白雅,封志鵬,王錦濤,楊城健,張宇祥.基於改進Sigmoid函數的PMSM調速系統自抗擾控制[J].傳感器與微系統,2023,42(6):90-93