《动手学深度学习 Pytorch版》 4.7 前向传播、反向传播和计算图

4.7.1 前向传播

整节理论,详见书本。

4.7.2 前向传播计算图

整节理论,详见书本。

4.7.3 反向传播

整节理论,详见书本。

4.7.4 训练神经网络

整节理论,详见书本。

练习

(1)假设一些标量函数 X X X 的输入 X X X 是 n × m n\times m n×m 矩阵。 f f f 相对于 X X X 的梯度的维数是多少?

还是 n × m n\times m n×m,多少个变量就是多少个导数嘛。


(2)向本节中描述的模型的隐藏层添加偏置项(不需要再正则化项中包含偏置项)。

复制代码
    a.绘制出相应的计算图。

    b.推导前向传播和反向传播方程。

b. 仍假设输入样本是 x ∈ R d \boldsymbol{x}\in\mathbb{R}^d x∈Rd,则前向传播为:

z = W ( 1 ) x + b h = ϕ ( z ) o = W ( 2 ) h + b L = l ( o , y ) s = λ 2 ( ∣ ∣ W ( 1 ) ∣ ∣ F 2 + ∣ ∣ W ( 2 ) ∣ ∣ F 2 ) J = L + s \begin{align} \boldsymbol{z}&=\boldsymbol{W}^{(1)}\boldsymbol{x}+b\\ \boldsymbol{h}&=\phi(\boldsymbol{z})\\ \boldsymbol{o}&=\boldsymbol{W}^{(2)}\boldsymbol{h}+b\\ L&=l(\boldsymbol{o},y)\\ s&=\frac{\lambda}{2}(||\boldsymbol{W}^{(1)}||^2_F+||\boldsymbol{W}^{(2)}||^2_F)\\ J&=L+s \end{align} zhoLsJ=W(1)x+b=ϕ(z)=W(2)h+b=l(o,y)=2λ(∣∣W(1)∣∣F2+∣∣W(2)∣∣F2)=L+s

反向传播为:

∂ J ∂ L = 1 , ∂ J ∂ s = 1 ∂ J ∂ o = ∂ J ∂ L ∂ L ∂ o = ∂ L ∂ o ∈ R q ∂ s ∂ W ( 1 ) = λ W ( 1 ) , ∂ s ∂ W ( 2 ) = λ W ( 2 ) ∂ J ∂ W ( 2 ) = ∂ J ∂ o ∂ o ∂ W ( 2 ) + ∂ J ∂ s ∂ s ∂ W ( 2 ) = ∂ J ∂ o h T + λ W ( 2 ) ∂ J ∂ h = ∂ J ∂ o ∂ o ∂ h = W ( 2 ) T ∂ J ∂ o ∂ J ∂ z = ∂ J ∂ h ∂ h ∂ z = ∂ J ∂ h ⊙ ϕ ′ ( z ) ∂ J ∂ W ( 1 ) = ∂ J ∂ z ∂ z ∂ W ( 1 ) + ∂ J ∂ s ∂ s ∂ W ( 1 ) = ∂ J ∂ z x T + λ W ( 1 ) \begin{align} \frac{\partial J}{\partial L}&=1,\frac{\partial J}{\partial s}=1\\ \frac{\partial J}{\partial\boldsymbol{o}}&=\frac{\partial J}{\partial L}\frac{\partial L}{\partial\boldsymbol{o}}=\frac{\partial L}{\partial\boldsymbol{o}}\in\mathbb{R}^q\\ \frac{\partial s}{\partial\boldsymbol{W}^{(1)}}&=\lambda\boldsymbol{W}^{(1)},\frac{\partial s}{\partial\boldsymbol{W}^{(2)}}=\lambda\boldsymbol{W}^{(2)}\\ \frac{\partial J}{\partial\boldsymbol{W}^{(2)}}&=\frac{\partial J}{\partial\boldsymbol{o}}\frac{\partial\boldsymbol{o}}{\partial\boldsymbol{W}^{(2)}}+\frac{\partial J}{\partial s}\frac{\partial s}{\partial\boldsymbol{W}^{(2)}}=\frac{\partial J}{\partial\boldsymbol{o}}\boldsymbol{h}^T+\lambda\boldsymbol{W}^{(2)}\\ \frac{\partial J}{\partial\boldsymbol{h}}&=\frac{\partial J}{\partial\boldsymbol{o}}\frac{\partial\boldsymbol{o}}{\partial\boldsymbol{h}}=\boldsymbol{W}^{(2)T}\frac{\partial J}{\partial\boldsymbol{o}}\\ \frac{\partial J}{\partial\boldsymbol{z}}&=\frac{\partial J}{\partial\boldsymbol{h}}\frac{\partial\boldsymbol{h}}{\partial\boldsymbol{z}}=\frac{\partial J}{\partial\boldsymbol{h}}\odot\phi'(\boldsymbol{z})\\ \frac{\partial J}{\partial\boldsymbol{W}^{(1)}}&=\frac{\partial J}{\partial\boldsymbol{z}}\frac{\partial\boldsymbol{z}}{\partial\boldsymbol{W}^{(1)}}+\frac{\partial J}{\partial s}\frac{\partial s}{\partial\boldsymbol{W}^{(1)}}=\frac{\partial J}{\partial\boldsymbol{z}}\boldsymbol{x}^T+\lambda\boldsymbol{W}^{(1)} \end{align} ∂L∂J∂o∂J∂W(1)∂s∂W(2)∂J∂h∂J∂z∂J∂W(1)∂J=1,∂s∂J=1=∂L∂J∂o∂L=∂o∂L∈Rq=λW(1),∂W(2)∂s=λW(2)=∂o∂J∂W(2)∂o+∂s∂J∂W(2)∂s=∂o∂JhT+λW(2)=∂o∂J∂h∂o=W(2)T∂o∂J=∂h∂J∂z∂h=∂h∂J⊙ϕ′(z)=∂z∂J∂W(1)∂z+∂s∂J∂W(1)∂s=∂z∂JxT+λW(1)

a. 计算图为:


(3)计算本节所描述的模型用于训练和预测的内存空间。

不会,略。


(4)假设想计算二阶导数。计算图会发生什么变化?预计计算需要多长时间?

二阶计算图应该是在保留一阶计算图的基础上继续拓展出来的,需要的时间大抵是二倍吧。


(5)假设计算图对于当前的GPU来说太大了。

复制代码
    a. 请尝试把它划分到多个GPU上。
    b. 这与小批量训练相比,有哪些优点和缺点。

a. 应使用 torch.nn.DataParallel 进行并行运算。

b.

batch_size够大则会由于并行计算而加快速度

batch_size不够大时反而会因为多卡之间的通信以及数据拆分与合并的额外开销导致效率反而更低。

相关推荐
happyness44几秒前
2026 主流 AI 编码全景对比表
人工智能·ai编程
智慧医养结合软件开源1 分钟前
数智协同,赋能康养服务高效升级
大数据·人工智能·云计算·生活
SEO_juper2 分钟前
行业白皮书 GEO 化转 HTML + 结构化,AI 引用率提升 50%
人工智能·chatgpt·seo·白皮书·独立站·外贸电商·谷歌geo
萤萤七悬6 分钟前
【AI精彩BUG汇总】一、yolo图像训练截图蓝色变橙色
人工智能·yolo·bug
思维新观察7 分钟前
从 AI 工具到音乐生态:可酷加速布局,构建数字音乐全新基础设施
人工智能
Miss roro8 分钟前
法律文书信息自动提取:OCR识别与AI技术在案件管理中的应用
人工智能·ocr·法律科技·律所管理系统·案件管理系统
乐迪信息12 分钟前
乐迪信息:港口夜间船舶巡查难,AI摄像机法全天候监测
人工智能·物联网·算法·计算机视觉·目标跟踪
sali-tec13 分钟前
C# 基于OpenCv的视觉工作流-章74-线-线距离
图像处理·人工智能·opencv·算法·计算机视觉
byte轻骑兵15 分钟前
【HID】规范精讲[17]: 蓝牙HID设备功耗优化秘籍——从Sniff模式到断连重连的省电之道
人工智能·人机交互·蓝牙键盘·蓝牙鼠标·蓝牙hid
network_tester15 分钟前
自动驾驶系统TSN时延测试:从理论到实践的关键解析
网络·人工智能·网络协议·tcp/ip·自动驾驶·信息与通信·p2p