《动手学深度学习 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不够大时反而会因为多卡之间的通信以及数据拆分与合并的额外开销导致效率反而更低。

相关推荐
知来者逆6 分钟前
视觉语言模型应用开发——Qwen 2.5 VL模型视频理解与定位能力深度解析及实践指南
人工智能·语言模型·自然语言处理·音视频·视觉语言模型·qwen 2.5 vl
IT_陈寒7 分钟前
Java性能优化:10个让你的Spring Boot应用提速300%的隐藏技巧
前端·人工智能·后端
Android出海10 分钟前
Android 15重磅升级:16KB内存页机制详解与适配指南
android·人工智能·新媒体运营·产品运营·内容运营
cyyt12 分钟前
深度学习周报(9.1~9.7)
人工智能·深度学习
聚客AI15 分钟前
🌸万字解析:大规模语言模型(LLM)推理中的Prefill与Decode分离方案
人工智能·llm·掘金·日新计划
max50060017 分钟前
图像处理:实现多图点重叠效果
开发语言·图像处理·人工智能·python·深度学习·音视频
麦麦麦造30 分钟前
国外网友的3个步骤,实现用Prompt来写Prompt!超简单!
人工智能
闲看云起44 分钟前
从BERT到T5:为什么说T5是NLP的“大一统者”?
人工智能·语言模型·transformer
小麦矩阵系统永久免费1 小时前
小麦矩阵系统:让短视频分发实现抖音快手小红书全覆盖
大数据·人工智能·矩阵
新加坡内哥谈技术1 小时前
Chrome的“无处不在”与推动Web平台演进的使命
人工智能