【深度学习技术】python 反向传播求梯度

本文通过一个具体的数学示例,详细解析了反向传播算法的工作原理,包括复合表达式的求解、链式法则的应用以及梯度的计算过程。此外还提到了门单元的含义、学习率的选择及梯度更新的方法。

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

反向传播

这里写图片描述

当有激活函数的时候传播的方式如下:

这里写图片描述

复合表达式、链式法则、反向传播

链式法则:将偏导数相乘。

对于一个符合表达式:

这里写图片描述

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 23 17:24:24 2016

@author: CrazyVertigo
"""

import math

x = 3 # 例子数值
y = -4 # 前向传播 
sigy = 1.0 / (1 + math.exp(-y)) # 分子中的sigmoi          #(1) 
num = x + sigy # 分子                                    #(2)
sigx = 1.0 / (1 + math.exp(-x)) # 分母中的sigmoid         #(3) 
xpy = x + y #(4) 
xpysqr = xpy**2 #(5) 
den = sigx + xpysqr # 分母                                #(6) 
invden = 1.0 / den #(7) f = num * invden # 搞定!  #(8)


# 回传 f = num * invden 
dnum = invden # 分子的梯度                                     #(8) 
dinvden = num #(8) # 回传 
invden = 1.0 / den 
dden = (-1.0 / (den**2)) * dinvden #(7) 
# 回传 den = sigx + xpysqr 
dsigx = (1) * dden #(6) 
dxpysqr = (1) * dden #(6) 
# 回传 xpysqr = xpy**2 
dxpy = (2 * xpy) * dxpysqr #(5) 
# 回传 xpy = x + y 
dx = (1) * dxpy #(4) 
dy = (1) * dxpy #(4) # 回传 sigx = 1.0 / (1 + math.exp(-x)) 
dx += ((1 - sigx) * sigx) * dsigx # Notice += !! See notes below  #(3) 
# 回传 num = x + sigy 
dx += (1) * dnum #(2) 
dsigy = (1) * dnum #(2) 
# 回传 sigy = 1.0 / (1 + math.exp(-y)) 
dy += ((1 - sigy) * sigy) * dsigy #(1)

回传流中的模式:

这里写图片描述

门单元的含义

这里写图片描述

学习率的选择

这里写图片描述

梯度的更新 w -= a*^w

参考CS231n 笔记 https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值