常见函数的导数

本文详细解析了Softmax函数及其交叉熵损失函数的导数推导过程,同时介绍了Sigmoid函数及其导数的计算方法,适用于深度学习和神经网络的理解与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Softmax函数及Softmax交叉熵损失函数的导数

对于一组输入[1, 2, …,i ,…] 使用softmax公式可将其转化为概率分布的形式。Softmax公式:
yi=ei∑jejy_i=\frac{e^i}{\sum_j{e^j}}yi=jejei
其中i为一组输入中的第i个输入。则对应的softmax输出是yiy_iyi

对于分类问题来说,经常使用softmax交叉熵损失函数,形式如下:
Loss=−∑itiln⁡yiLoss=-\sum_i{t_i\ln{y_i}}Loss=itilnyi
其中,tit_iti为真实值,yiy_iyi为预测值。当预测第i个时,ti=1t_i=1ti=1,其他为0,则损失为:
Lossi=−ln⁡yiLoss_i=-\ln{y_i}Lossi=lnyi
其中
yi=ei∑jej=1−∑j̸=iej∑jej(分子中是j不等于i)y_i = \frac{e^i}{\sum_j{e^j}}=1-\frac{\sum_{j\not=i}{e^j}}{\sum_j{e^j}} (分子中是j不等于i)yi=jejei=1jejj̸=iejji)
LossiLoss_iLossi求偏导则有:
∂Lossi∂i=−∂ln⁡yi∂i=∂(−ln⁡ei∑jej)∂i=−1ei∑jej⋅∂(ei∑jej)∂i=−∑jejei⋅∂(1−∑j̸=iej∑jej)∂i=−∑jejei⋅(−∑j̸=iej)⋅∂(1∑jej)∂i=∑jej⋅∑j̸=iejei⋅−ei(∑jej)2=−∑j̸=iej∑jej=−(1−ei∑jej)=−(1−yi)=yi−1 \begin{aligned} \frac{\partial{Loss_i}}{\partial{i}}&=-\frac{\partial{\ln{y_i}}}{\partial{i}} \\ &=\frac{\partial{(-\ln{\frac{e^i}{\sum_j{e^j}}})}}{\partial{i}} \\ &=-\frac{1}{\frac{e^i}{\sum_j{e^j}}}\cdot\frac{\partial{(\frac{e^i}{\sum_j{e^j}})}}{\partial{i}} \\ &=-\frac{\sum_j{e^j}}{e^i}\cdot\frac{\partial{(1-\frac{\sum_{j\not=i}{e^j}}{\sum_j{e^j}})}}{\partial{i}} \\ &=-\frac{\sum_j{e^j}}{e^i}\cdot(-\sum_{j\not=i}{e^j})\cdot\frac{\partial{(\frac{1}{\sum_j{e^j}})}}{\partial{i}} \\ &=\frac{\sum_j{e^j}\cdot\sum_{j\not=i}{e^j}}{e^i}\cdot\frac{-e^i}{(\sum_j{e^j})^2} \\ &=-\frac{\sum_{j\not=i}{e^j}}{\sum_j{e^j}} \\ &=-(1-\frac{e^i}{\sum_j{e^j}}) \\ &=-(1-y_i) \\ &=y_i-1 \end{aligned} iLossi=ilnyi=i(lnjejei)=jejei1i(jejei)=eijeji(1jejj̸=iej)=eijej(j̸=iej)i(jej1)=eijejj̸=iej(jej)2ei=jejj̸=iej=(1jejei)=(1yi)=yi1
即,∂Lossi∂i=yi−1\frac{\partial{Loss_i}}{\partial{i}}=y_i - 1iLossi=yi1

也可以直接对softmax求导得:
∂ej∑kek∂i=DjSi={Si(1−Sj)i=j−SjSii̸=j \frac{\partial{\frac{e^j}{\sum_k{e^k}}}}{\partial{i}}= D_jS_i=\left\{\begin{matrix} S_i(1-S_j) & i=j\\ -S_jS_i & i \not=j \end{matrix}\right. ikekej=DjSi={Si(1Sj)SjSii=ji̸=j
其中,DjD_jDj对应∂ej∑kek\partial{\frac{e^j}{\sum_k{e^k}}}kekejSi对应iS_i对应iSii。i是上述的出入


2.sigmoid函数及其导数

sigmoid函数形式:
f(z)=11+e−zf(z) = \frac{1}{1+e^{-z}}f(z)=1+ez1
则有:1−f(z)=f(−z)1-f(z) = f(-z)1f(z)=f(z)
对f(z)求导有:
f′(z)=(11+e−z)′=e−z(1+e−z)2=1+e−z−1(1+e−z)2=1(1+e−z)(1−1(1+e−z))=f(z)(1−f(z)) \begin{aligned} f'(z) &= (\frac{1}{1+e^{-z}})' \\ &= \frac{e^{-z}}{(1+e^{-z})^{2}} \\ &= \frac{1+e^{-z}-1}{(1+e^{-z})^{2}} \\ &= \frac{1}{(1+e^{-z})}(1-\frac{1}{(1+e^{-z})}) \\ &= f(z)(1-f(z)) \\ \end{aligned} f(z)=(1+ez1)=(1+ez)2ez=(1+ez)21+ez1=(1+ez)1(1(1+ez)1)=f(z)(1f(z))


3.

在神经网络中,**激活函数导数是反向传播过程中计算梯度的关键组成部分**。下面是**几种常见激活函数及其导数的公式化表达和Python实现**。 --- ## 🧠 一、Sigmoid 激活函数 ### 📌 公式: $$ \sigma(x) = \frac{1}{1 + e^{-x}} $$ ### 📌 导数: $$ \sigma'(x) = \sigma(x)(1 - \sigma(x)) $$ ### ✅ Python 实现: ```python import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def sigmoid_derivative(x): s = sigmoid(x) return s * (1 - s) ``` --- ## 🧠 二、ReLU(Rectified Linear Unit) ### 📌 公式: $$ \text{ReLU}(x) = \max(0, x) $$ ### 📌 导数: $$ \text{ReLU}'(x) = \begin{cases} 1 & \text{if } x > 0 \\ 0 & \text{if } x < 0 \\ \text{undefined or 0/1} & \text{if } x = 0 \end{cases} $$ ### ✅ Python 实现: ```python def relu(x): return np.maximum(0, x) def relu_derivative(x): return (x > 0).astype(float) ``` --- ## 🧠 三、Tanh(双曲正切函数) ### 📌 公式: $$ \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} $$ ### 📌 导数: $$ \tanh'(x) = 1 - \tanh^2(x) $$ ### ✅ Python 实现: ```python def tanh(x): return np.tanh(x) def tanh_derivative(x): return 1 - np.tanh(x)**2 ``` --- ## 🧠 四、Softmax Softmax 通常用于输出层,其导数比较复杂,因为它是**向量函数**。 ### 📌 公式: 对于输入向量 $ z $,Softmax 输出为: $$ \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}} $$ ### 📌 导数(Jacobian矩阵): 对 Softmax 的导数是一个矩阵,其中: - 当 $ i = j $ 时: $$ \frac{\partial \text{Softmax}(z_i)}{\partial z_j} = \text{Softmax}(z_i)(1 - \text{Softmax}(z_j)) $$ - 当 $ i \ne j $ 时: $$ \frac{\partial \text{Softmax}(z_i)}{\partial z_j} = -\text{Softmax}(z_i)\text{Softmax}(z_j) $$ ### ✅ Python 实现(Jacobian): ```python def softmax(z): exps = np.exp(z - np.max(z)) # 数值稳定性优化 return exps / np.sum(exps) def softmax_derivative(z): s = softmax(z).reshape(-1, 1) return np.diagflat(s) - np.dot(s, s.T) ``` --- ## 🧠 五、Leaky ReLU ### 📌 公式: $$ \text{LeakyReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \le 0 \end{cases} \quad (\alpha \text{ 通常取 } 0.01) $$ ### 📌 导数: $$ \text{LeakyReLU}'(x) = \begin{cases} 1 & \text{if } x > 0 \\ \alpha & \text{if } x < 0 \\ \text{undefined or 0/1/α} & \text{if } x = 0 \end{cases} $$ ### ✅ Python 实现: ```python def leaky_relu(x, alpha=0.01): return np.where(x > 0, x, alpha * x) def leaky_relu_derivative(x, alpha=0.01): return np.where(x > 0, 1, alpha) ``` --- ## 🧠 六、Swish(Google 提出的新型激活函数) ### 📌 公式: $$ \text{Swish}(x) = x \cdot \sigma(x) $$ ### 📌 导数: $$ \text{Swish}'(x) = \sigma(x) + x \cdot \sigma(x)(1 - \sigma(x)) $$ ### ✅ Python 实现: ```python def swish(x): return x * sigmoid(x) def swish_derivative(x): s = sigmoid(x) return s + x * s * (1 - s) ``` --- ## 📌 七、总结表格 | 激活函数 | 函数表达式 | 导数表达式 | |----------|------------|-------------| | Sigmoid | $ \sigma(x) = \frac{1}{1+e^{-x}} $ | $ \sigma(x)(1 - \sigma(x)) $ | | ReLU | $ \max(0, x) $ | $ \begin{cases} 1 & x > 0 \\ 0 & x < 0 \end{cases} $ | | Tanh | $ \tanh(x) $ | $ 1 - \tanh^2(x) $ | | Softmax | $ \frac{e^{z_i}}{\sum_j e^{z_j}} $ | $ \text{Softmax}(z_i)(1 - \text{Softmax}(z_j)) $ | | LeakyReLU | $ x > 0 ? x : \alpha x $ | $ x > 0 ? 1 : \alpha $ | | Swish | $ x \cdot \sigma(x) $ | $ \sigma(x) + x \cdot \sigma(x)(1 - \sigma(x)) $ | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值