由sigmod权重曲线存在锯齿的探索

article/2025/8/4 2:13:52

深度学习的知识点,一般按照执行流程,有 网络层类型,归一化,激活函数,学习率,损失函数,优化器。如果是研究生上课学的应该系统一点,自学的话知识点一开始有点乱。

一、激活函数Sigmod下的权重曲线

先开始第一个知识点激活函数的探索,说到激活函数,它是干嘛的, y=f(w*x+b)。这y就是激活函数。那本文研究的是sigmod这个激活函数权重曲线为何出现锯齿?

首先大家熟悉下,sigmod函数,见下图,特点是什么? y值范围(0,1),x在(-5,5)之间呈现线性特征。

然后不废话,上代码,先看看锯齿的效果。

import torch
import matplotlib.pyplot as pltmodel = torch.nn.Sequential(torch.nn.Linear(1,1,bias=False),# torch.nn.BatchNorm1d(1),torch.nn.Sigmoid()
)# torch.nn.init.xavier_normal_(model[0].weight)X=torch.tensor([[10.0],[2.0],[11.0],[21.0]])
Y=torch.tensor([[0.9],[0.2],[0.92],[0.987]])optimizer = torch.optim.SGD(model.paramters(),lr=1)# 使用动量的SGD
optimizer = torch.optim.SGD(model.paramters(),lr=1,momentum=0.9)weight_history=[]
for step in range(100):optimizer.zero_grad()y_pred=model(X)loss = (y_pred-Y).pow(2).mean()loss.backward()optimizer.step()weight_history.append(model[0].weight.item())plt.plot(weight_history,'-',label='Sigmoid',color='orange')
plt.xlabel('Training Step')
plt.ylabel('Weight Value')
plt.title('Sigmoid Activation:Weight Oscillation')
plt.legend()
plt.savefig('juchi.jpg')

二、代码解析-kaiming均匀分布

我们先来看 torch.nn.Linear(1,1,bias=False)这句,这是一个线性函数,y=wx+b;

那么w和b为多少呢? bias为空,w呢,随机取值,但是默认符合kaiming均匀分布。

这个分布的范围呢?[-根号(1/特征数),根号(1/特征数)]。为何要这样搞,之前大伙确实随机权重,但是发展到一定阶段,发现规律了,如果这些权重符合某种分布,就能更好稳定训练。(对了,什么叫稳定训练,就是各层数据差异别太大,每一层的方差差不多的时候最好)

Kaiming初始化如何维持输入分布稳定​?大家想想,对于y=f(wx+b);x是输入不能变的,激活函数也不能变。但是w可变的,通过改w可以使下一层稳定。

他让var(就是方差), var(x)=var(y)。然后var(y)=n_feautures*var(w)*var(x)。从而算出var(w)。然后均匀分布方差是 (b-a)平方/12。最终算出均匀分布的边界值(a,b)。说那么多就是为了算出均匀分布的边界值,然后才能随机嘛

三、产生锯齿的原因

产生锯齿的原因有很多种,例如学习率,数据值分布。今天我们探究的是非零中心性​​这个原因

Sigmoid的输出恒为正,可能导致后续层的权重梯度同号(如全正或全负),迫使优化路径呈“Z”字形调整,产生锯齿。

具体说明如下:

假设某全连接层的权重为 W,输入为 a(来自Sigmoid激活),输出为 z=W⋅a+b,损失函数为 L。根据链式法则,权重的梯度为:∂W/∂L​=∂z/∂L​⋅∂W/∂z​=δ⋅a

其中:

  • δ=∂z/∂L​ 是反向传播的误差项,
  • a 是Sigmoid的输出,恒为正(a>0)。

​​关键点​​:梯度的符号由 δ 决定,而 δ 在反向传播中可能保持同号(全正或全负)。啥意思呢,就是这次梯度大了,然后反向时变小一点,然后下一次又小了,需要变大一点。

四、怎么解决呢?

1、入参归一化

torch.nn.BatchNorm1d(1),把数据搞成 ​​均值为0,方差为1。这中学就学过吧。归一化的作用一句话讲,在下一层改变sigmoid输出的恒大于0的值,就是把x都变了,变成有负数了

2、使用动量的SGD
optimizer = torch.optim.SGD(model.paramters(),lr=1,momentum=0.9)

动量,白话讲,就是记住历史的变化,并非只依靠当前的,所以震荡小。好理解吧,就是船大不好掉头,船小好掉头。老外尽整一些新名词唬人。

3、换个方法,Tanh(),不用sigmod

但是这个具体看业务,并一定就能换


http://www.hkcw.cn/article/THIaKwUfSS.shtml

相关文章

仿腾讯会议——优化:多条tcp连接

1、添加用户信息结构 2、添加注册视频音频结构体 3、 完成函数注册视频音频

File—IO流

因为变量,数组,对象,集合这些数据容器都在内存中,一旦程序结束,或者断电,数据就丢失了。想要长久保存,就要存在文件中(File) 文件可以长久保存数据。 文件在电脑磁盘中…

【Zephyr 系列 2】用 Zephyr 玩转 Arduino UNO / MEGA,实现串口通信与 CLI 命令交互

🎯 本篇目标 在 Ubuntu 下将 Zephyr 运行在 Arduino UNO / MEGA 上 打通串口通信,实现通过串口发送命令与反馈 使用 Zephyr Shell 模块,实现 CLI 命令处理 🪧 为什么 Arduino + Zephyr? 虽然 Arduino 开发板通常用于简单的 C/C++ 开发,但 Zephyr 的支持范围远超 STM32…

最悉心的指导教程——阿里云创建ECS实例教程+Vue+Django前后端的服务器部署(通过宝塔面板)

各位看官老爷们,点击关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 阿里云创建ECS实例教程 注意: 阿里云有300元额度的免费适用期哟 白嫖~~~~ 注册了阿里云账户后&#x…

【Android】如何抓取 Android 设备的 UDP/TCP 数据包?

目录 前言理解抓包tcpdump 实时抓包Wireshark 解包抓包后的一些思考 前言 在真正接触 UDP/TCP 抓包之前,我一直以为这是一项高深莫测的技术。可当我们真正了解之后才发现,其实并没有那么复杂——不过如此。 所谓的大佬,往往只是掌握了你尚未…

VR看房系统,新生代看房新体验

VR看房系统的概念 虚拟现实(VirtualReality,VR)看房系统,是近年来随着科技进步在房地产行业中兴起的一种创新看房方式。看房系统利用先进的计算机技术模拟出一个三维环境,使用户能够身临其境地浏览和体验房源,无需亲自…

机器学习Day5-模型诊断

实现机器学习算法的技巧。当我们训练模型或使用模型时,发现预测误差很 大,可以考虑进行以下优化: (1)获取更多的训练样本 (2)使用更少的特征 (3)获取其他特征 &#xff…

STM32F103_Bootloader程序开发06 - IAP升级用的App.bin增加CRC32校验码,确保固件完整性,防止“变砖”

导言 《STM32F103_Bootloader程序开发05 - Keil修改生成文件的路径与文件名,自动生成bin格式文件》上一章节成功让Keil生成App.bin二进制文件,用于IAP升级。 为了保障IAP升级过程中的固件完整性,避免因损坏文件导致设备“变砖”,…

语言使用的国家概况统计

语言是文化的载体,也是沟通和协作的桥梁。随着全球化进程加快,了解主要语言的分布及其使用国家,对于数据分析师、产品经理、市场人员乃至技术开发者,都极为重要。本文将梳理全球几种主要语言(英语、法语、阿拉伯语、俄…

DeepSeek-R1-0528

深度思考能力强化​ DeepSeek-R1-0528 仍然使用 2024 年 12 月所发布的 DeepSeek V3 Base 模型作为基座,但在后训练过程中投入了更多算力,显著提升了模型的思维深度与推理能力。 更新后的 R1 模型在数学、编程与通用逻辑等多个基准测评中取得了当前国内…

MCU STM32搭配存储SD NAND(贴片式T卡)于智能皮电手环(Galvanic Skin Response, GSR 手环)的全方位评测

文章目录 卓越性能强化安全高效能效图形处理优势丰富集成特性模拟模块实时监控保障数据完整性提升安全性与可靠性测量原理采样率相关 在智能皮电手环及数据存储技术不断迭代的当下,主控 MCU STM32H750 与存储 SD NAND MKDV4GIL-AST 的强强联合,正引领行业…

处理知识库文件_编写powershell脚本文件_批量转换其他格式文件到pdf文件---人工智能工作笔记0249

最近在做部门知识库,选用的dify,作为rag的工具,但是经过多个对比,最后发现, 比较好用的是,纳米搜索,但是可惜纳米搜索无法在内网使用,无法把知识库放到本地,导致 有信息…

Java 基础 常见知识

基本数据类型 Java 中基本数据类型?对应的包装类?占多少字节? Java 中有 8 种基本数据类型: 6 种数字类型: 4 种整数类型:byte、short、int、long2 种浮点类型:float、double 1 种字符类型&a…

直播预告 | 聚焦芯必达|打造可靠高效的国产 MCU 与智能 SBC 汽车解决方案

随着汽车电子国产化快速推进,车规级 MCU 与 CAN/LIN SBC 作为车身控制的核心组件,正面临更高的安全与可靠性挑战。品佳集团将携手芯必达微电子,深入剖析国产 MCU/SBC/智能 SBC 的最新技术与应用,助力企业打造高性能、可量产的国产…

TF 卡 U1 与 U3 的核心差异解析:从速度标准到应用场景

在选购 TF 卡时,常常会看到 U1、U3 等标识,这些标识代表着不同的性能等级。最近不少客户询问 TF 卡 U1 和 U3 的区别,接下来将从多个维度为您详细解读,并通过对比图表直观呈现差异。 对比项目U1U3速度标准最低写入速度 10MB/s最低…

【Linux】vim编辑器

前言: 上文我们讲到了Linux中权限相关的指令【Linux】权限相关指令-CSDN博客 本文来讲解以下能让我们在Linux下编写代码的工具:vim 1.vim简单介绍 vim是Linux中一个较为常用的编辑器,也是Linux中上手难度最大的编辑器之一。有的同学可能知道v…

PKC6100A电流探头:攻克800V高压测试新利器

在新能源汽车行业快速发展的今天,电机控制器作为电动车辆的"大脑",其性能测试至关重要。然而,传统测试设备往往难以满足高压平台下的严苛测试需求。本文将为您揭秘普科科技PKC6100A电流探头如何帮助行业领先企业攻克测试难关。 一、…

【C++】STL详解(四)---Stack和Queue

文章目录 Stack定义方式使用方式 Queue定义方式使用方式 Stack Stack是一种容器&#xff0c;是基本的数据结构之一&#xff0c;特点是先进后出。 定义方式 方式一&#xff1a;普通定义方式 stack<int> st1;方式二&#xff1a; stack<int,vector<int>> …

换宽带ip地址会变吗?同一个宽带如何切换ip地址

在当今互联网时代&#xff0c;IP地址作为网络设备的"身份证"&#xff0c;其重要性不言而喻。许多用户在使用宽带时都会遇到这样的疑问&#xff1a;换宽带IP地址会变吗&#xff1f;同一个宽带如何切换IP地址&#xff1f;本文将深入探讨这一问题&#xff0c;帮助读者全…