神经网络——激活函数、反向传播

深度学习——激活函数sigmoid与relu的反向传播原理 深度学习——sigmoid函数与relu函数的反向传播原理一. sigmoid函数 一. sigmoid函数 sigmoid函数公式 σ(z)=11+e−z σ(z)=\frac{1}{1+e^{-z}} σ(z)=1+e−z1​ sigmoid函数Python实现 ... 阅读详情

sigmod(x)

公式

数学表示:f(x)=((1)/(1+ℯ^(-x)))

Latex表示:f(x) = \frac{1}{1+e^{-x}}

图片表示:

性质

  1. 连续光滑、严格单调
  2. 能将(-∞~+∞) 映射到(0,1),实现很大程度上地压缩
  3. 其导函数容易求得并计算,当x=0时,f’(x) =0.25达到最大值,但是两端趋近于0,会出现梯度弥散

应用场景

  1. 预测概率
  2. 单位归一
  3. 神经网络输出层

原函数图像

一阶导函数图像

推导过程:在这里插入图片描述

在这里插入图片描述

复合图像

在这里插入图片描述

tanh(x)

公式

数学表示:tanh(x) = (e^x -e^(-x)) / (e^x+e^(-x)) = 2*sigmod(2*x) -1
Latex表示: tanh(x) = (\frac{ex-e{-x} }{ex+e{-x}} )
图片表示:

性质

1.能将(-∞~+∞) 映射到(-1,1)
2.奇函数,关于原点对称,
3.其导函数易于计算,当x=0时,f’(x) = 1,在两端趋近于0,同样存在梯度弥散

应用场景

  1. RNN/LSTM
  2. 隐藏层中

原函数图像

在这里插入图片描述

一阶导数图像

推导过程:
在这里插入图片描述

在这里插入图片描述

混合图像

在这里插入图片描述

Relu(x)

公式

数学表示:f(x) =max(0,x)
Latex表示:

性质

  1. 当x<0时,f(x) =0;当x>0时,f(x) = x。
  2. 导函数非常简单,当x<0时,f’ =0,梯度为0,形成单侧抑制;当x≥0时,f’ =1。
  3. 不存在梯度弥散,因为梯度不存在饱和区,参数计算量小,梯度收敛速度较快。
  4. 缺点:不以0为中心,单侧抑制存在“死亡”神经元

应用场景

1.DNN:使得网络变得稀疏

原函数图像

在这里插入图片描述

一阶导函数图像

在这里插入图片描述

混合图像

在这里插入图片描述

softmax(x)

偏微分

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

单层感知机

定义

1957年 Frank Rosenblatt 提出了一种简单的人工神经网络,由一个输入层和一个输出层构成,因此也被称为“单层感知机”

偏微分

  • x、w、σ 的上标:当前所在层数
  • x、σ 、t 的下标:该层中节点的编号
  • w 的下标:j表示上一层的节点,k表示下一层的节点

在这里插入图片描述

多输出感知机

定义

MLP可以被看作是一个有向图,由多个的节点层所组成,每一层都全连接到下一层;是一种前向结构的人工神经网络,映射一组输入到一组输出。

偏微分

  • x、w、σ 的上标:当前所在层数
  • x、σ 、t 的下标:该层中节点的编号
  • w 的下标:j表示上一层的节点,k表示下一层的节点

在这里插入图片描述

多层感知机

反向传播中的偏微分

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

优化器优劣验证模型

Himmelblau函数

定义

在数学优化中,Himmelblau函数是一个多模态函数,用于测试优化算法的性能。该函数定义为:f(x,y)=(x^2+y-11)^2 +(x+y^2-7)^2

性质

  1. 具有4个局部最小值:f(3.0,2.0)=0.0;f(-2.805118,3.131312)=0.0;f(-3.779310,-3.283186)=0.0;f(3.584428,-1.848126)=0.0
  2. 具有1个局部最大值:f(-0.270845,-0.923039)=181.617

函数图像

在这里插入图片描述
Himmelblau’s Function:原站链接
在这里插入图片描述

测试代码(spyder)

# 测试优化器对于Himmelblau的优化效果


import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt
import torch


def Himmelblau(x):
    return (x[0] ** 2 + x[1]-11)**2 + (x[0]+x[1]**2-7)**2


# 绘制3D图像
x = np.arange(-6, 6, 0.1)
y = np.arange(-6, 6, 0.1)
print("x,y range:", x.shape, y.shape)
X, Y = np.meshgrid(x, y)
print("X,Y maps:", X.shape, Y.shape)

Z = Himmelblau([X, Y])


fig = plt.figure("Himmelblau")
ax = fig.add_subplot(projection="3d")
ax.plot_surface(X, Y, Z)
ax.view_init(60, -30)
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()


# 初始起点坐标,会影响结果
x = torch.tensor([0., 0.], requires_grad=True)
# 选定优化器
optimizer = torch.optim.Adam([x], lr=0.001)
for step in range(20000):
    pre = Himmelblau(x)

    optimizer.zero_grad()

    # 反向传播
    pre.backward()
    optimizer.step()

    if step % 2000 == 0:
        print("step{}: x={},f(x)={}".format(step, x.tolist(), pre.item()))

train、validation、test

训练集、测试集

  1. 定义:训练集指为了对搭建的模型进行参数的确定,对模型的健壮性进行增强,对特定应用场景进行适应的大量数据;测试集指为了对经过训练后的模型进行评价考核或者具体使用需要的测试数据,能一定程度上检验模型是否有效。
  2. 划分:一般为 80%:20%

训练集、验证集、测试集

  1. 定义:训练集、验证集都是属于模型搭建第一步需要的数据,其中训练集是进行模型参数的确定,验证集是验证在进行模型的反向传播过程中是否出现过拟合,使得始终保存着模型最优参数。测试集数据原则上属于开发人员拿不到的数据,防止开发人员直接在测试集上进行模型训练,这部分数据集由目标客户独立拥有。
  2. 划分:(开发人员应该将拿到的数据保留一部分绝对不能参与模型的训练过程)一般为 60%:20%:20%

交叉验证

  1. 定义:指将训练集和验证集整体划分为K份,每次训练过程中利用这个整体的(K-1)份数据进行训练,1份数据进行验证;重复K次;
  2. 意义:能在一定程度上使得这个整体的所有数据都能参与模型的训练过程,使得模型的健壮性提高一点点。但是数据集并未实质性地扩充,所以优化效果不是太好!

正则化

  1. 定义:对目标函数增加一个参数范数惩罚,限制模型的学习能力
  2. 用途:防止模型出现过拟合

L1正则化

  1. 定义:指权重矩阵中各个元素的绝对值之和,为L1范数
  2. 作用:主要用于挑选出重要的特征,并舍弃不重要的特征
  3. 公式:

L2正则化

  1. 定义:指权重矩阵中各个元素的平方和,为了优化正则项,会减少参数平方的总和,倾向于选择值很小的权重参数,为L2范数
  2. 作用:防止过拟合
  3. 公式:

动量

定义

基于一定的惯性向前寻找路径,即:综合考虑当前梯度方向又考虑上一层的梯度方向,根据两个方向向量的对角线方向进行梯度下降求解

作用

用于防止系统收敛于局部最小值而非全局最小值

学习率动态调整

# 设置优化器:使用动量、正则化
optimizer = torch.optim.SGD(model.parameters(),args.lr,momentum=args.momentum,weight_decay=args.weight_deacy)
# 设置优化器监听,当loss持续变化不大次数达到阈值时,触发动态降低学习率
scheduler = ReduceLROnPlateau(optimizer,"min")

for epoch in xrange(args.start_epoch,args.epochs):
		train(train_loader,model,criterion,optimizer,epoch)
		result_avg,loss_val =validate(val_loader,model,criterion,epoch)
		scheduler.step(loss_val)
		

梯度爆炸

# 解决梯度爆炸的算法
loss = criterion(output,y)
model.zero_grad()
loss.backward()
for p in model.parameters():
	print(p.grad.norm())
torch.nn.utils.clip_grad_norm_(p,10)
optimizer.step()

神经网络激活函数与反向传播原理详解 激活函数是神经网络实现非线性建模的核心组件,其作用是通过引入非线性变换增强模型的表达能力。从数学原理上看,没有激活函数的多层网络等价于单层线性模型。常见的激活函数如ReLU、Sigmoid和Tanh各有特点,其中ReLU因其计算高效和缓解梯度消失的特性成为隐藏层首选。反向传播算法通过链式法则计算梯度,是神经网络训练的基础。在工程实践中,合理的参数初始化、梯度检查等技巧对确保模型收敛至关重要。这些技术在图像识别、自然语言处理等深度学习应用场景中发挥着关键作用。 阅读详情

相关推荐

神经网络(深度学习,计算机视觉,得分函数,损失函数,前向传播,反向传播,激活函数)

神经网络,特别是深度学习,在计算机视觉等领域有着广泛的应用。这些函数在神经网络的构建、训练和推理过程中发挥着至关重要的作用,它们共同决定了神经网络的性能和行为。

IT深耕十余载,大道之简 1571

[深度学习]激活函数(Sigmoid等)、前向传播、反向传播和梯度优化;optimizer.zero_grad(), loss.backward(), optimizer.step()的作用及原理

用Matt Mazur的例子,来简单告诉读者推导过程吧(其实就是链式)! 先初始化权重和偏置量,得到如下效果: 前向传播 计算neth1=w*i+b 通过激活函数计算outh1 计算下一层的neth2、通过下一层的激活函数 计算误差Etotal ...

m0_46378271的博客 3894

7、激活函数与反向传播算法详解

本博客详细介绍了神经网络中的激活函数选择与反向传播算法原理。内容涵盖偏置输入与阈值调整、激活函数的作用与选择标准、函数复合与链式法则的数学基础,以及反向传播算法的梯度计算与权重更新过程。同时,还讨论了影响权重调整的关键因素和优化反向传播的方法,如应对梯度消失与梯度爆炸问题。通过理论分析和数值示例,帮助读者深入理解神经网络训练的核心机制。

7z8x2c4v6b9的博客 78

神经网络的基础知识:从激活函数到反向传播

1.背景介绍 神经网络是人工智能领域的一个重要研究方向,它试图模仿人类大脑中的神经元(neuron)和连接它们的神经网络,以解决复杂的问题。神经网络的核心组成部分是神经元(neuron)和它们之间的连接(weights)。神经元接收输入信号,对其进行处理,并输出结果。这些输入信号通过权重进行加权求和,然后通过激活函数进行非线性变换,从而实现模型的学习和预测。 在这篇文章中,我们将深入探讨神经网...

AI天才研究院 1165

44、表格数据神经网络:反向传播、训练与激活函数详解

本文详细探讨了表格数据神经网络中的反向传播算法、训练过程以及激活函数的选择。内容涵盖前向和反向模式微分、多层感知机的梯度计算、常见层的向量雅可比积、计算图结构、梯度消失与爆炸问题及其解决方案、非饱和激活函数及其变体,以及训练神经网络的整体流程。通过对这些关键技术的深入分析,旨在提升模型的训练效率和性能,为表格数据处理提供有效的深度学习方法。

metal的博客 63

4、神经网络基础:激活函数、多层网络架构与反向传播训练

本文深入探讨了神经网络的基础知识,涵盖激活函数及其导数在反向传播中的关键作用,详细分析了Sigmoid、Tanh、ReLU等常见激活函数的数学表达与导数形式。文章介绍了多层神经网络的前馈架构、隐藏层设计及自动编码器的应用,并强调通过剪枝、共享连接和预训练等方法避免过拟合。进一步地,将神经网络视为计算图,解释了反向传播算法如何利用链式法则和动态规划高效计算梯度,完成权重更新。最后总结了网络架构设计要点与优化策略,如学习率调整、批量归一化和正则化,为理解和实现深度神经网络提供了系统性指导。

u0v1w2x3的博客 42

反向传播算法推导、激活函数、梯度消失与爆炸

BP算法

kundezui的博客 2767

别让PEX和后仿真拖后腿:Calibre与Virtuoso ADE联调的那些‘坑’与最佳实践

本文深入探讨了Calibre与Virtuoso ADE在PEX寄生参数提取和后仿真联调中的常见问题与解决方案。针对DRC/LVS验证通过后出现的网表导入错误和仿真波形异常,提供了七大典型场景的实战经验,包括PEX提取模式选择、CalibreView生成细节、环境变量配置等关键环节的最佳实践,助力工程师高效完成芯片设计验证。

weixin_33695450的博客 393

神经网络基础02-激活函数+反向传播算法

。

Eve_Shieh的博客 3450

python blp模型 估计_随机系数Logit模型及Stata实现

欢迎投稿(荐稿)计量经济圈,计量相关都行邮箱:econometrics666@sina.cn作者:北京交通大学经济管理学院博士生,王琦珀。欢迎你加入计量经济圈社群,一起探讨前沿计量理论和实证方法。一、随机系数Logit模型1.背景实证产业组织(Empirical Industrial Organization,EIO)是目前产业组织理论的前沿,其中又以Ariel Pakes为带头人,其近期工作论文...

weixin_42298927的博客 2641

【计算机视觉】pyrealsense2:Intel RealSense 深度相机的 Python 接口实战指南

pyrealsense2:Intel RealSense 深度相机的 Python 接口实战

weixin_43988131的博客 4352

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解

这篇文章介绍了如何使用 Python 的 Numpy 库来实现神经网络的自动训练,重点展示了反向传播算法和激活函数的应用。反向传播是神经网络训练的核心,能够通过计算梯度来优化模型参数,使得预测更加精准。文中详细演示了如何使用 Numpy 进行神经网络的前向预测、反向传播更新、误差计算,并通过引入 ReLU 等激活函数提升模型的非线性拟合能力。最后,通过对比训练前后的结果,展示了加入激活函数后模型性能的显著提升,适合初学者和爱好者学习神经网络的基础原理与应用。

敲代码别忘了喝上一杯凉白开。 1531

论文阅读--射频电源在半导体领域的应用

射频电源(RF Power Supply)是能够输出300kHz~300GHz正弦波电压的高频交流电源,在半导体制造领域,射频电源的典型工作频率范围为400kHz∼60 MHz,主要由射频发生器(功率源)、匹配器及配套控制电路组件构成,其关键组件包括变压器与电抗器、晶闸管、绝缘栅双极型晶体管(IGBT)、钣金件、铜材及各种电子元器件。射频电源是刻蚀和薄膜沉积工艺的核心,主要用于产生等离子体,以增强气体反应活性,其性能直接影响反应腔体内等离子体的浓度、均匀性和稳定性。

伊丽莎白的学习之路 2340

PyTorch快速入门——神经网络简介(激活函数、前向传播、反向传播)

在生物神经网络中,每个神经元与其他神经元相连,当它兴奋时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个阈值,那么它就会激活,即兴奋起来并向其他神经元发送化学物质。在深度学习中也借鉴了这样的结构,每一个神经元(上面说到的简单单元)接受输入x,通过带权重w的连接进行传递,将总输入信号与神经元的阈值进行比较,最后通过激活函数处理确定是否激活,并将激活后的计算结果y输出,而我们所说的训练,所训练的就是这里面的权重w。

abackcab的博客 933

07 Zabbix 微信告警

Zabbix 微信告警 1.注册企业微信 企业微信注册地址:https://work.weixin.qq.com 2.进入企业微信后台管理 2.1 添加微信成员 2.2创建应用 2.3 获取四项数据 (1)AgentID (2) Secret (3) 企业ID (4)部门ID 3.Zabbix Server配置 3.1确认脚本目录 # grep alertscripts /etc/zabbix/zabbix_server....

Jian Sun_的博客 1298

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲到使用WidgetComponent和3DUI进行交互。然而,这种方法存在一个问题:为了让射线可视化,我们需要勾选“调试/显示调试”,这样才能在手柄上看到代表其指向的一条红色射线。但最关键的问题是,这个显示调试信息的功能只属于Debug调试模式,也就是说,一旦将项目正式打包发布,这条射线辅助线就没有了。如下图所示:我就觉得Unreal官方真的是有点过分了,这不应该是最基本的功能么?难道我们VR要在Debug模式下发布?

TxNet 1612

从激活函数到反向传播:ILearnDeepLearning.py带你深入神经网络内部

ILearnDeepLearning.py是一个专注于神经网络和深度学习的开源项目,包含了从基础概念到实际实现的丰富内容。通过该项目提供的交互式Jupyter笔记本和可视化资源,即使是深度学习新手也能直观理解神经网络的核心原理,从激活函数的作用到反向传播算法的工作机制。 ## 神经网络的基本架构:从神经元到层 神经网络由多个层次组成,包括输入层、隐藏层和输出层。每个神经元通过权重连接到下一层的

gitblog_00877的博客 1053

化工仿真软件:gPROMS二次开发_(1).gPROMS基础知识

在gPROMS中,模型是通过定义变量、参数和方程来创建的。模型可以是简单的单元操作,如换热器、反应器,也可以是复杂的系统,如整个化工流程。变量是模型中表示状态或输出的量。在gPROMS中,变量需要显式定义其类型和单位。# 定义变量VAR# 温度变量,单位为K# 压力变量,单位为Pa# 组分摩尔分数,数组变量参数是模型中表示常量或初始条件的量。参数同样需要定义其类型和单位。# 定义参数PAR# 理想气体常数,单位为J/(mol·K)# 反应器体积,单位为m^3# 初始摩尔数。

kkchenjj的博客 617

深度学习——day28 class1 week3 神经网络中的激活函数与反向传播推导

事实证明,如果你使用线性激活函数,或者没有激活函数,那么无论你的神经网络有多少层,一直在座的只是计算线性激活函数,所以不如直接去掉全部隐藏层——线性隐层一点用都没有(在NN中)。默认ReLU激活:z为负数=0,z为正=amax(0,z),z=0没有定义。共有的缺点,z很大或很小的时候,函数斜率接近0。在0本身无定义,但可以用代码去定义0点的值。解决办法:随机初始化,初始化参数一般都很小。首总结一下正向与反向传播的方程Z,A。神经网络梯度:要实现。

想太多的学习日志 305

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Pytorch学习笔记七】神经网络介绍(神经网络可视化、激活函数、前向传播与反向传播)

在生物神经网络中,每个神经元与其他神经元相连,当它兴奋时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个阈值,那么它就会激活,即兴奋起来并向其他神经元发送化学物质。在深度学习中也借鉴了这样的结构,每一个神经元(上面说到的简单单元)接受输入x,通过带权重w的连接进行传递,将总输入信号与神经元的阈值进行比较,最后通过激活函数处理确定是否激活,并将激活后的计算结果y输出,而我们所说的训练,所训练的就是这里面的权重w。......

QHCV的博客 855

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

浅层神经网络/深层神经网络的前向传播与反向传播计算过程、非线性的激活函数(Sigmoid、Tanh、Relu、Leaky ReLU)、参数与超参数

日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.5 浅层/深层神经网络 神经网络的表达能力 理解具有全连接层的神经网络的一个方式是:可以认为它们定义了一个由一系列函数组成的函数族,网络的权重就是每个函数的参数。如此产生的问题是:该函数族的表达能力如何?存在不能被神经网络表达的函数吗? ...

あずにゃん梓喵的博客 2291

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

神经网络模型底层原理与实现1—为什么要用激活函数,为什么要有反向传播

已知所有函数均可近似表达为上方的表达式,则从右往左看这个图,第一个+节点就是用来算b1+西格玛(wij+xj),之后再往左经过蓝色激活函数得以此计算,不断循环叠加计算得神经网络图。线性函数有很大的局限性,比如要拟合图中这根红线就无法只用线性函数做到,但可以用图中的几根蓝线+一个常量函数拟合, 但是图中的蓝线是无法用线性函数变换得到。而dc/dz=da/dz * dc/da,第一项是激活函数的导数,第二项需要根据后面的网络结构再算,由链式法则可得第二个式子,可见这个问题递归了。1.为什么要用激活函数。

m0_60792028的博客 683

从反向传播过程看激活函数与权重初始化的选择对深度神经网络稳定性的影响

从反向传播过程看激活函数与权重初始化的选择对深度神经网络稳定性的影响

Axlsss的博客 1243

1.3 浅层神经网络(前向/反向传播的计算、不同激活函数、随机初始化参数)

浅层神经网络

bijingrui的博客 1239

神经网络反向传播(2)--激活函数求导汇总

神经网络激活函数汇总

cymatt的博客 877
上一篇: C语言程序设计(8)
下一篇: 量化投资机器人与机器学习:开启金融领域的智能革命
Valois
博客等级 码龄8年 74粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值