【DeepLeaning】基于梯度的推导和反向传播实现 文章目录基于梯度的推导和反向传播实现一、Sigmoid 公式二、完整代码类三、backward 代码逐行详解1. 函数定义2. 核心梯度计算3. 返回梯度四、核心知识点其他交叉熵误差基于梯度的推导和反向传播实现一、Sigmoid 公式原函数前向σ ( x ) y 1 1 e − x \sigma(x) y \frac{1}{1e^{-x}}σ(x)y1e−x1​导数公式反向σ ′ ( x ) y ( 1 − y ) \sigma(x) y(1-y)σ′(x)y(1−y)特点无需重新计算指数直接复用前向输出结果计算高效。二、完整代码类importnumpyasnpclassSigmoid:# 前向传播计算输出保存结果用于反向传播defforward(self,x):self.out1.0/(1.0np.exp(-x))returnself.out# 反向传播计算梯度defbackward(self,dout):dxdout*(1.0-self.out)*self.outreturndx三、backward 代码逐行详解1. 函数定义def backward(self, dout):dout上游梯度神经网络后一层传递回来的梯度链式法则输入作用接收后续层的误差向前传递2. 核心梯度计算dx dout * (1.0 - self.out) * self.out对应数学链式法则d x d o u t ⋅ σ ′ ( x ) dx dout \cdot \sigma(x)dxdout⋅σ′(x)self.out前向传播保存的 Sigmoid 输出y yy(1.0 - self.out) * self.outSigmoid 自带导数y ( 1 − y ) y(1-y)y(1−y)dx当前层输入x xx的梯度传递给前一层3. 返回梯度return dx将计算完成的梯度传回上一层网络完成反向传播、用于参数更新。四、核心知识点为什么保存 self.out反向传播不重复计算指数函数节省算力是神经网络的标准优化方式。梯度范围Sigmoid 导数最大值为0.25数值极小深层网络极易出现梯度消失。万能公式所有神经网络层反向传播通用逻辑当前梯度 上游梯度 × 当前层导数其他交叉熵误差多分类中的交叉熵误差在多分类问题中如果每个类别之间的定义是互斥的那么任何样本都只能被标记为一种类别。E − 1 N ∑ i 1 N log ⁡ ( y i , t ϵ ) E -\frac{1}{N}\sum_{i1}^{N} \log(y_{i,t} \epsilon)E−N1​i1∑N​log(yi,t​ϵ)Nbatch 样本数量y第i个样本正确类别的模型预测概率由Softmax输出取值0~1ϵ 10 − 7 \epsilon10^{-7}ϵ10−7极小偏移值防止log(0)出现负无穷保证数值稳定https://zhuanlan.zhihu.com/p/658116845defcross_entropy_error(y,t):# 1. 维度兼容单样本一维数据统一转为 [1, 类别数] 二维格式批量 / 单样本通用ify.ndim1:tt.reshape(1,t.size)yy.reshape(1,y.size)# 在监督标签为one-hot-vector的情况下转换为正确解标签的索引ift.sizey.size:tt.argmax(axis1)batch_sizey.shape[0]# 1e-7是为了防止计算崩溃因为log(0)是无穷return-np.sum(np.log(y[np.arange(batch_size),t]1e-7))/batch_size