深度学习:Sigmoid函数与损失函数求导

目录(?)[+]

1、sigmoid函数

​ sigmoid函数,也就是s型曲线函数,如下:

f(z)=11+ez

f(z)=f(z)(1f(z))

​ 上面是我们常见的形式,虽然知道这样的形式,也知道计算流程,不够感觉并不太直观,下面来分析一下。

1.1 从指数函数到sigmoid

​ 首先我们来画出指数函数的基本图形:

这里写图片描述

​ 从上图,我们得到了这样的几个信息,指数函数过(0,1)点,单调递增/递减,定义域为(,+)

,值域为 (0,+)

,再来我们看一下sigmoid函数的图像:

这里写图片描述

​ 如果直接把ex

放到分母上,就与 ex图像一样了,所以分母加上1,就得到了上面的图像,定义域是 (,+),值域是 (0,1),那么就有一个很好地特性了,就是不管 x是什么,都可以得到 (0,1)

之间的值;

1.2 对数函数与sigmoid

​ 首先来看一下对数函数的图像:

这里写图片描述

​ 对数函数的图像如上,单调递减,有一个比较好的特性就是在(0,1)

之间,在接近0的时候,就近无穷大,接近1的时候为0,如果我们把前面的sigmoid函数放到自变量的位置上,就得到了 (0,1)

的图像;

​ 我们如何来衡量一个结果与实际计算值得差距呢?一种思路就是,如果结果越接近,差值就越小,反之越大,这个函数就提供了这样一种思路,如果计算得到的值越接近1,那么那么表示与世界结果越接近,反之越远,所以利用这个函数,可以作为逻辑回归分类器的损失函数,如果所有的结果都能接近结果值,那么就越接近于0,如果所有的样本计算完成以后,结果接近于0,就表示计算结果与实际结果非常相近。

2、sigmoid函数求导

​ sigmoid导数具体的推导过程如下:

f(z)=(11+ez)=ez(1+ez)2=1+ez1(1+ez)2=1(1+ez)(11(1+ez))=f(z)(1f(z))

3、神经网络损失函数求导

​ 神经网络的损失函数可以理解为是一个多级的复合函数,求导使用链式法则。

J(Θ)=1mi=1mk=1K[y(i)klog((hΘ(x(i)))k)+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(Θ(l)j,i)2

​ 先来说一下常规求导的过程:

e=(a+b)(b+1)

这里写图片描述

​ 这是一个简单的复合函数,如上图所示,c是a的函数,e是c的函数,如果我们用链式求导法则,分别对a和b求导,那么就是求出e对c的导数,c对a的导数,乘起来,对b求导则是求出e分别对c和d的导数,分别求c和d对b的导数,然后加起来,这种方法使我们常规的做法,有一个问题就是,我们在求到的过程中,e对c求导计算了2次,如果方程特别复杂,那么这个计算量就变得很大,怎样能够让每次求导只计算一次呢?

这里写图片描述

​ 如上图所示,我们从上往下开始计算,将每个单元的值计算出来,然后计算每个单元的偏导数,保存下来;

​ 接下来继续计算子单元的值,子单元的偏导数,保存下来;将最后的子单元到根节点所在的路径的所有偏导乘起来,就是该函数对这个变量的偏导,计算的本质就是从上往下,计算的时候将值存起来,乘到后面的单元上去,这样每个路径的偏导计算只需要一次,从上到下计算一遍就得到了所有的偏导数。

​ 实际上BP(Backpropagation,反向传播算法),就是如此计算的,如果现在有一个三层的神经网络,有输入、一个隐藏层,输出层,我们对损失函数求权重的偏导数,它是一个复杂的复合函数,如果先对第一层的权重求偏导,然后在对第二层的权重求偏导,会发现,其中有很多重复计算的步骤,就像上面的简单函数的示例,所以,为了避免这种消耗,我们采用的就是从后往前求偏导,求出每个单元的函数值,求出对应单元的偏导数,保存下来,一直乘下去,输入层。

​ 下面用一个简单的示例来演示一下反向传播求偏导的过程:

这里写图片描述

​ 那么我们会有两个初始的权重矩阵:

θ1=[θ110θ120θ111θ121θ112θ122]θ2=[θ210θ211θ212]

​ 我们得到了上面的矩阵,现在我们以 sigmoid函数作为激活函数,分别来计算每一层网络的激励(假设我们只有一个样本,输入是 x1,x2,输出是 y);

​ 第一层是输入,激励就是样本的特征值;记为:

a1=x0x1x2

x0是偏置项,为1.

​ 第二层是隐藏层,激励通过特征值与区中相乘得到,然后取sigmoid函数变换,得到a2

,未变换之前的记为 z2

z21z22z2a2a2=θ110x0+θ111x1+θ112x2=θ120x0+θ121x1+θ122x2=[z21z22]=sigmoid(z2)=1a21a22

​ 在上面,我们最后加上了偏置项;

​ 接下来第三层是输出层:

z31z3a3a3=θ210a20+θ211a21+θ212a22=[z31]=sigmoid(z3)=[a31]

​ 因为是输出层了,所以不需要再往下计算,所以不加偏置项;

​ 上面的计算流程,从输入到输出,我们也称为前向传播(Forward propagation)。

​ 然后,我们根据损失函数,写出损失函数的公式,在这里,只有一个输入,一个输出,所以损失函数写出来较为简单:

​ 在这里,m=1;

J(Θ)=1m[y(i)klog((hΘ(x(i)))k)+(1y(i)k)log(1(hΘ(x(i)))k)]+λ2ml=1L1i=1slj=1sl+1(Θ(l)j,i)2=1m[ylog(a3)+(1y)log(1a3)]+λ2ml=1L1i=1slj=1sl+1(Θ(l)j,i)2

​ 说明: λ2mL1l=1sli=1sl+1j=1(Θ(l)j,i)2实际上就是所有的权重的平方和,一般不会将和偏置项相乘的那个放进来;这个项很简单,暂时先不管它,后面不暂时不写这一项(这个是正则化)。

J(Θ)=1m[ylog(a3)+(1y)log(1a3)]

​ 然后我们得到了上面的式子,这里我们知道,如果我们想要求θ212

的偏导数的话,会发现,这个式子其实是一个复合函数, y是常数, a3z3sigmoid函数变换,而 z3则是 a2与权重相乘得来的,现在我们找到了权重在哪里,就可以开始求偏导了,在这里, a3写成 s(z3)

,然后,我们就得到了下面的推导:

J(Θ)θ212=1m[y1s(z3)(1y)11s(z3)]s(z3)(1s(z3))a212=1m[y(1s(z3)(1y)s(z3)]a212=1m[ys(z3)]a212=1m[s(z3)y]a212=1m[a3y]a212

​ 根据上面的推导,可以得到下面的式子:

J(Θ)θ210J(Θ)θ211=1m[a3y]a210=1m[a3y]a211

​ 所以,还记得前面所说的,我盟从上往下求导,保存当前对多个子单元的偏导数,根据上面的式子,我们知道,对于第二个权重矩阵的偏导,可以由[a3y]

乘以前一层网络的激励,然后除以样本个数来得到,因此有时候我们会将这个差值称为 δ3

,保存下来,使用矩阵的形式相乘,得到第二个权重矩阵的偏导数;

​ 现在我们已经得到了第二个权重矩阵的偏导数,如何求第一个权重矩阵中的偏导数呢?

​ 比如说,我们现在要对θ112

求偏导:

J(Θ)θ112=1m[y1s(z3)(1y)11s(z3)]s(z3)(1s(z3))θ211s(z2)(1s(z2))x2=1m[a3y]θ211s(z2)(1s(z2))x2=1mδ3θ211s(z2)(1s(z2))x2

​ 从上线的式子,我们就可以看出来,我们保存的导数可以直接乘,如果而不用再次计算一遍,如果有多层网络,实际上后面的过程与这个是一样的,所以就得到了这样的式子:

δ3δ2=a3y=δ3(θ2)Ts(z2)

​ 因为这个网络就是3层,所以这样就可以得出全部的偏导数,如果是多层,原理是一样的,不断地乘下去,从第二个式子开始,后面的形式都是一样的。
<think>好的,我现在需要帮助用户理解Sigmoid函数的导数及其推导过程。首先,用户已经提到他们之前的问题和回答,其中涉及液压控制中使用Sigmoid函数生成S曲线。现在他们想深入了解Sigmoid函数求导方法,包括公式和推导步骤。 首先,我要确认用户的需求。他们可能需要详细的数学推导,同时可能希望了解导数在机器学习中的应用,比如梯度消失的问题。用户之前的问题中提到了液压系统的参数调整,但这次的问题更偏向数学基础,所以需要将重点放在求导过程上,同时可以简要联系到实际应用中的影响,比如梯度消失对神经网络训练的影响。 接下来,我需要回忆Sigmoid函数的标准形式及其导数。Sigmoid函数的公式是σ(x) = 1 / (1 + e^{-x}),其导数通常表示为σ'(x) = σ(x)(1 - σ(x))。用户引用的资料中提到了导数推导的步骤,可能需要一步一步展示这个过程,确保清晰易懂。 然后,检查用户提供的引用内容。引用[1]提到导数可以用σ(x)(1 - σ(x))表示,并指出当σ(x)接近0或1时导数趋近于0,导致梯度消失。引用[2]和[3]提供了Sigmoid函数的公式和求导步骤。需要确保推导过程正确,并正确引用这些资料。 用户可能存在的深层需求是理解为什么导数有这样的形式,以及这对他们之前提到的液压控制或机器学习中的应用有何影响。比如,在液压控制中,导数可能代表压力变化的速率,而在机器学习中,梯度消失会影响模型训练效果。需要将数学推导实际应用联系起来,帮助用户全面理解。 接下来,组织推导步骤。首先写出Sigmoid函数,然后应用商数法则或链式法则求导。需要详细展示每一步的数学变换,可能包括化简指数函数的部分,以证明导数确实等于σ(x)(1 - σ(x))。同时,解释导数的取值范围,当x趋近于正负无穷时,导数的极限情况,以及这对梯度的影响。 最后,可能需要补充导数在应用中的意义,比如在神经网络的反向传播中,梯度消失的问题如何影响训练,以及为什么有时候会选择其他激活函数如ReLU来避免这个问题。但用户的问题主要集中在求导过程,所以这部分可以作为扩展,但不宜过多展开,保持回答的针对性。 需要确保使用正确的中文表达,数学公式用$...$格式,独立公式用$$...$$。检查是否有遗漏的引用,用户提供的引用[1]、[2]、[3]需要适当标注,但根据用户指示,这些引用仅供参考,实际回答应更多基于用户当前的问题和之前的回答。不过用户明确提到了这些引用,所以在适当的地方添加引用标识,比如在提到梯度消失时引用[1],在推导过程中引用[3]。 总结回答结构:先给出Sigmoid函数公式,详细推导导数,讨论导数特性及其应用中的影响,最后可能生成相关问题。确保步骤清晰,语言准确,符合用户要求的格式和引用规范。</think>#### Sigmoid函数及其导数详解 --- ##### 一、Sigmoid函数定义 Sigmoid函数是机器学习和控制系统中常用的非线性激活函数,其公式为: $$ \sigma(x) = \frac{1}{1 + e^{-x}} $$ 该函数将输入映射到$(0,1)$区间,曲线呈S形(如下图所示)[^2]。 --- ##### 二、导数推导过程(链式法则) **Step 1:写出原始函数** $$ \sigma(x) = (1 + e^{-x})^{-1} $$ **Step 2:应用链式法则求导** $$ \frac{d}{dx}\sigma(x) = -1 \cdot (1 + e^{-x})^{-2} \cdot (-e^{-x}) $$ **Step 3:化简表达式** $$ \sigma'(x) = \frac{e^{-x}}{(1 + e^{-x})^2} $$ **Step 4:用原函数表达导数** 将分子分母同时乘以$e^{x}$: $$ \sigma'(x) = \frac{1}{1 + e^{-x}} \cdot \frac{e^{-x}}{1 + e^{-x}} = \sigma(x) \cdot (1 - \sigma(x)) $$ **最终导数公式**: $$ \sigma'(x) = \sigma(x)(1 - \sigma(x)) $$ --- ##### 三、导数特性分析 | 输入范围 | 导数行为 | 实际意义 | |------------------|------------------------------------------------------------------------|-------------------------------------------------------------------------| | $x \to +\infty$ | $\sigma(x)\approx1$,$\sigma'(x)\approx0$ | 输出饱和区,梯度消失(影响神经网络反向传播)[^1] | | $x=0$ | $\sigma(0)=0.5$,$\sigma'(0)=0.25$(最大导数值) | 中心点变化率最大(对应液压S曲线快速上升段) | | $x \to -\infty$ | $\sigma(x)\approx0$,$\sigma'(x)\approx0$ | 输入抑制区,梯度消失 | --- ##### 四、梯度消失问题验证 当$\sigma(x)$接近边界值(0或1)时,导数$\sigma'(x)$趋近于0: $$ \lim_{x \to +\infty} \sigma'(x) = \lim_{\sigma \to 1} \sigma(1-\sigma) = 0 \\ \lim_{x \to -\infty} \sigma'(x) = \lim_{\sigma \to 0} \sigma(1-\sigma) = 0 $$ **影响**:在深度神经网络中,多层Sigmoid叠加会导致梯度逐层衰减,最终无法更新参数[^1]。 --- ##### 五、液压控制中的特殊处理 在您提供的液压S曲线代码中,导数对应**压力变化率**: ```c // 代码中的导数隐含在时间步长计算中 double pressure = hydraulic_sigmoid(t, k, x0, max_p, min_p); ``` 实际工程中可通过限制参数$k$的范围(如$0.5 \leq k \leq 2.0$)控制最大变化率,避免机械冲击。 --- #### 相关问题 1. 如何通过Sigmoid导数设计液压系统的安全加速度曲线? 2. 在神经网络中,哪些激活函数可以替代Sigmoid以缓解梯度消失? 3. 如何用实验方法测量液压S曲线的实际变化率? 4. Sigmoid函数的二阶导数在运动控制中有何意义?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值