神經網絡常見激活函數 1-sigmoid函數

sigmoid

1 函數+求導
  • sigmoid函數
    σ ( x ) = 1 1 + e ( ? x ) \sigma(x) = \frac{1}{1+e^{(-x)}} σ(x)=1+e(?x)1?

  • sigmoid函數求導
    d d x σ ( x ) = d d x ( 1 1 + e ? x ) = e ? x ( 1 + e ? x ) 2 = ( 1 + e ? x ) ? 1 ( 1 + e ? x ) 2 = 1 1 + e ? x ? 1 ( 1 + e ? x ) 2 = σ ( x ) ? σ ( x ) 2 = σ ( x ) ( 1 ? σ ( x ) ) \begin{aligned} \frac{d}{dx}\sigma(x) & = \frac{d}{dx}\left( \frac{1}{1+e^{-x}} \right) \\ & = \frac{e^{-x}}{(1+e^{-x})^2} \\ & = \frac{(1+e^{-x})-1}{(1+e^{-x})^2} \\ & = \frac{1}{1+e^{-x}} - \frac{1}{(1+e^{-x})^2} \\ & = \sigma(x)-\sigma(x)^2 \\ & = \sigma(x)(1-\sigma(x)) \end{aligned} dxd?σ(x)?=dxd?(1+e?x1?)=(1+e?x)2e?x?=(1+e?x)2(1+e?x)?1?=1+e?x1??(1+e?x)21?=σ(x)?σ(x)2=σ(x)(1?σ(x))?
    在神經網絡的梯度計算中,通過緩存每層的 Sigmoid 函數輸出值,即可在需 要的時候計算出其導數.

2 函數和導函數圖像
  • 畫圖

    import pandas as pd
    import numpy as np
    from matplotlib import pyplot as pltdef sigmoid(x):return 1/(1+np.exp(-x))x = np.linspace(-4,4,1000)
    y = [sigmoid(i) for i in x]
    y1 = [sigmoid(i)*(1-sigmoid(i)) for i in x]
    y2  = [1 for i in x]ax = plt.gca()
    plt.plot(x,y,label='Sigmoid')
    plt.plot(x,y1,label='Derivative')
    plt.plot(x,y2,color='black',linestyle='--')#設置上邊和右邊無邊框
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    #設置x坐標刻度數字或名稱的位置
    ax.xaxis.set_ticks_position('bottom')
    #設置邊框位置
    ax.spines['bottom'].set_position(('data', 0))
    ax.yaxis.set_ticks_position('left')
    ax.spines['left'].set_position(('data',0))plt.legend(loc = 6)

    image-20220119000123191

3 優缺點
  • sigmoid 函數優點:

    1. 值域為 [ 0 , 1 ] [0,1] [0,1],適合輸出概率值sigmoid 函數的值域為 ( 0 , 1 ) (0,1) (0,1),非常適合作為模型的輸出函數,用于輸出 ( 0 , 1 ) (0,1) (0,1) 范圍內的概率值。它可以用于將預測概率作為輸出的模型(如風控中的評分卡、邏輯回歸等),例如表示二分類的類別概率或置信度。

    2. 輸出值限定在 0 到 1,對神經元輸出進行歸一化

      由于 sigmoid 函數的輸出范圍是 ( 0 , 1 ) (0,1) (0,1),它對每個神經元的輸出進行了“軟”歸一化,將任意實數輸入壓縮到 ( 0 , 1 ) (0,1) (0,1) 之間。(這里注意sigmoid和softmax的區別,經過sigmoid的所有輸出加起來不等于1)

    3. 連續可導,提供平滑的梯度值sigmoid 函數是連續可導的(即可微),能夠提供非常平滑的梯度值,防止模型訓練過程中出現突變的梯度(即避免“跳躍”的輸出值)。

  • sigmoid 函數缺點:

    1. 梯度消失問題:從 sigmoid 函數的導數圖像可以看出,其導數的最大值只有 0.25。當輸入 x x x [ ? 5 , 5 ] [-5,5] [?5,5] 的范圍之外時,導數值幾乎接近于 0。這種情況會導致訓練過程中神經元處于飽和狀態(即導數趨于 0),反向傳播時權重幾乎得不到更新,從而使得模型難以訓練,這種現象被稱為梯度消失問題。
    2. 輸出不以 0 為中心sigmoid 函數的輸出總是大于 0(即不以 0 為中心),這會降低權重更新的效率。下一層神經元會接收到上一層輸出的全正信號作為輸入,導致權重更新時出現“zig-zag”現象。因此,sigmoid 激活函數通常不適合放在神經網絡的隱藏層,而一般用于最后的輸出層。
    3. 計算量大及計算復雜度高sigmoid 函數需要進行指數運算,計算量較大且計算復雜度高,訓練耗時。此外,隨著輸入值的增大,sigmoid 函數的導數會迅速減小,容易產生梯度消失問題。
  • 補充說明:

    1. 梯度消失問題sigmoid 函數在深層神經網絡中容易導致梯度消失問題,但在淺層網絡或輸出層中使用時,這個問題的影響相對較小。因此,sigmoid 函數通常用于輸出層,而不是隱藏層。**
    2. 替代方案:在現代深度學習中,ReLU(Rectified Linear Unit)及其變體(如 Leaky ReLUELU 等)通常被用作隱藏層的激活函數,因為它們能夠有效緩解梯度消失問題,并且計算速度更快。
    3. zig-zag 現象:具體來說,當激活函數的輸出不以 0 為中心(如 sigmoid 函數的輸出總是大于 0),會導致反向傳播時梯度的更新方向不一致,從而使得權重在優化過程中沿著“鋸齒形”路徑緩慢收斂。
4 pytorch 中的sigmoid函數
  • 代碼

    import torchf = torch.nn.Sigmoid()
    x = torch.randn(2)sigmoid_x = f(x)
    print(f"x: \n{x}")
    print(f"sigmoid_x:\n{sigmoid_x}")"""輸出"""
    x: 
    tensor([ 0.0259, -2.4006])
    sigmoid_x:
    tensor([0.5065, 0.0831])
    

5 tensorflow中的sigmoid函數
  • 代碼

    python: 3.10.9

    tensorflow: 2.18.0

    import tensorflow as tff = tf.nn.sigmoid
    x = tf.random.normal([2])sigmoid_x = f(x)
    print(f"x: \n{x}")
    print(f"sigmoid_x:\n{sigmoid_x}")"""輸出"""
    x:
    [-1.2805938 -1.4400458]
    sigmoid_x:
    [0.21744916 0.19153824]
    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/68144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/68144.shtml
英文地址,請注明出處:http://en.pswp.cn/web/68144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

窮舉vs暴搜vs深搜vs回溯vs剪枝系列一>黃金礦工

目錄 決策樹&#xff1a;代碼設計代碼&#xff1a; 決策樹&#xff1a; 代碼設計 代碼&#xff1a; class Solution {boolean[][] vis;int ret,m,n;public int getMaximumGold(int[][] grid) {m grid.length;n grid[0].length;vis new boolean[m][n]; for(int i 0; i <…

rabbitMQ消息轉換器

消息轉換器 Spring的消息發送代碼接收的消息體是一個Object&#xff1a; 而在數據傳輸時&#xff0c;它會把你發送的消息序列化為字節發送給MQ&#xff0c;接收消息的時候&#xff0c;還會把字節反序列化為Java對象。 只不過&#xff0c;默認情況下Spring采用的序列化方式是J…

Java 如何覆蓋第三方 jar 包中的類

目錄 一、需求描述二、示例描述三、操作步驟四、驗證結果五、實現原理 背景&#xff1a; 在我們日常的開發中&#xff0c;經常需要使用第三方的 jar 包&#xff0c;有時候我們會發現第三方的 jar 包中的某一個類有問題&#xff0c;或者我們需要定制化修改其中的邏輯&#xff0c…

CS 與 BS 架構的差異

在數字化的今天&#xff0c;選擇軟件架構模式對系統的性能、維護、安全和成本都有很大影響。BS架構和CS架構是最常見的兩種模式&#xff0c;了解它們的區別和特點對開發人員和企業決策者都很重要。 CS架構最早出現&#xff0c;當時用戶直接從主機獲取數據。隨著客戶端和服務端…

HTML之table表格學習

HTML table使用 thead、tbody、tfoot均可省略&#xff1b; 瀏覽器解析的時候會自動套上tbody tr 行 td 列 th 標題列屬性 colspan 列占用數 rowspan 行占用數 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8">…

常用抓包工具tcpdump、Fiddler、Charles、Wireshark 和 Sniffmaster 下載地址

抓包大師官網下載地址 Sniff Master Download - Free TCP and HTTPS Proxy Sniffing Tool, Supports IOS Sniffing Fiddler classic官網下載地址 Download Fiddler Web Debugging Tool for Free by Telerik Fiddler Everywhere官網下載地址 The Ultimate Web Debugging Tool …

【PostgreSQL內核學習 —— (WindowAgg(二))】

WindowAgg WindowAggState 結構體窗口聚合行為ExecInitWindowAgg 函數ExecWindowAgg 函數代碼邏輯解釋&#xff1a;計算窗口偏移量代碼邏輯詳細解釋&#xff1a; 代碼邏輯解釋&#xff1a;窗口聚合分區初始化與行推進邏輯代碼邏輯詳細解釋&#xff1a; 代碼邏輯解釋&#xff1a…

區塊鏈項目孵化與包裝設計:從概念到市場的全流程指南

區塊鏈技術的快速發展催生了大量創新項目&#xff0c;但如何將一個區塊鏈項目從概念孵化成市場認可的產品&#xff0c;是許多團隊面臨的挑戰。本文將從孵化策略、包裝設計和市場落地三個維度&#xff0c;為你解析區塊鏈項目成功的關鍵步驟。 一、區塊鏈項目孵化的核心要素 明確…

【React】受控組件和非受控組件

目錄 受控組件非受控組件基于ref獲取DOM元素1、在標簽中使用2、在組件中使用 受控組件 表單元素的狀態&#xff08;值&#xff09;由 React 組件的 state 完全控制。組件的 state 保存了表單元素的值&#xff0c;并且每次用戶輸入時&#xff0c;React 通過事件處理程序來更新 …

C#開發的進銷存管理系統軟件

#### 介紹 進銷存管理系統實現的功能及用途 含模塊銷售管理、采購管理、存貨管理、庫存管理、賬款管理、用戶管理、職員管理七個部分 進銷存管理系統實現以下功能&#xff1a; 1. 庫存管理 2. 應付賬款和應收賬款的統計 3. 對訂單未結數量和采購單未結數量的統計 4. 權限的管理…

高性能 AI 處理器親和性調度算法實現

目錄 題目描述解題思路分析C 語言實現 生成組合的函數主程序實現C 語言代碼使用示例Python 實現 生成組合的函數主程序實現Python 代碼使用示例總結與展望題目描述 某公司研發的高性能 AI 處理器,每臺物理設備 a 包含 8 顆 AI 處理器,編號為 0 - 7。其中,編號 0 - 3 的處理…

快手ip屬地是定位嗎?怎么改

在當今數字化時代&#xff0c;隨著網絡平臺的不斷發展&#xff0c;用戶隱私和數據安全成為了公眾關注的焦點。各大社交媒體平臺紛紛推出的“IP屬地”功能&#xff0c;無疑為網絡環境增添了一抹新的色彩。其中&#xff0c;快手的IP屬地顯示功能尤為引人注目。那么&#xff0c;快…

Git 常用基礎命令詳解:init、add、commit

一、引言 在軟件開發的世界里&#xff0c;版本控制是一項至關重要的技術&#xff0c;它就像是一個時光機器&#xff0c;讓開發者能夠追蹤代碼的每一次變化&#xff0c;輕松回溯到任意歷史版本&#xff0c;同時也為多人協作開發提供了強大的支持。而 Git&#xff0c;作為目前最…

1-kafka服務端之延時操作前傳--時間輪

文章目錄 背景時間輪層級時間輪時間輪降級kafka中的時間輪kafka如何進行時間輪運行 背景 Kafka中存在大量的延時操作&#xff0c;比如延時生產、延時拉取和延時刪除等。Kafka并沒有使用JDK自帶的Timer或DelayQueue來實現延時的功能&#xff0c;而是基于時間輪的概念自定義實現…

從零開始:OpenCV 圖像處理快速入門教程

文章大綱 第1章 OpenCV 概述 1.1 OpenCV的模塊與功能  1.2 OpenCV的發展 1.3 OpenCV的應用 第2章 基本數據類型 2.1 cv::Vec類 2.2 cv&#xff1a;&#xff1a;Point類 2.3 cv&#xff1a;&#xff1a;Rng類 2.4 cv&#xff1a;&#xff1a;Size類 2.5 cv&#xff1a;&…

網絡工程師 (22)網絡協議

前言 網絡協議是計算機網絡中進行數據交換而建立的規則、標準或約定的集合&#xff0c;它規定了通信時信息必須采用的格式和這些格式的意義。 一、基本要素 語法&#xff1a;規定信息格式&#xff0c;包括數據及控制信息的格式、編碼及信號電平等。這是協議的基礎&#xff0c;確…

vue如何解決跨域

文章目錄 vue如何解決跨域1. 什么是跨域2. 如何解決2.1 CROS&#xff08;Cross-Origin Resource Sharing&#xff0c;跨域資源共享&#xff09;2.2 Proxy2.2.1 使用webpack proxy2.2.2 服務端代理轉發2.2.3 通過nginx實現代理 vue如何解決跨域 1. 什么是跨域 跨域本質是瀏覽器…

算法與數據結構(括號匹配問題)

思路 從題干可以看出&#xff0c;只要給出的括號對應關系正確&#xff0c;那么就可以返回true,否則返回false。這個題可以使用棧來解決 解題過程 首先從第一個字符開始遍歷&#xff0c;如果是括號的左邊&#xff08;‘&#xff08;‘&#xff0c;’[‘&#xff0c;’}‘&…

在linux 中搭建deepseek 做微調,硬件配置要求說明

搭建 可參考 使用deepseek-CSDN博客 官方網站&#xff1a;DeepSeek DeepSeek 是一個基于深度學習的開源項目&#xff0c;旨在通過深度學習技術來提升搜索引擎的準確性和效率。如果你想在 Linux 系統上搭建 DeepSeek&#xff0c;你可以遵循以下步驟。這里我將提供一個基本的指…

mounted鉤子函數里如何操作子組件的DOM?

在 Vue 的 mounted 鉤子函數中,操作子組件的 DOM 可以通過幾種方式實現,具體取決于對子組件的訪問方式。以下是一些常用的方法: 一、使用 ref 引用 定義 ref在父組件中,給子組件添加一個 ref 屬性,這樣就可以在父組件中通過 this.$refs 訪問到子組件的實例。 父組件示例…