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

相关推荐
IT_陈寒2 分钟前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·人工智能·后端
jndingxin3 分钟前
OpenCV CUDA模块图像处理------创建一个模板匹配(Template Matching)对象函数createTemplateMatching()
图像处理·人工智能·opencv
&永恒的星河&14 分钟前
基于TarNet、CFRNet与DragonNet的深度因果推断模型全解析
深度学习·因果推断·cfrnet·tarnet·dragonnet
盛寒28 分钟前
N元语言模型 —— 一文讲懂!!!
人工智能·语言模型·自然语言处理
weixin_1772972206935 分钟前
家政小程序开发——AI+IoT技术融合,打造“智慧家政”新物种
人工智能·物联网
Jay Kay1 小时前
ReLU 新生:从死亡困境到强势回归
人工智能·数据挖掘·回归
Blossom.1181 小时前
使用Python和Flask构建简单的机器学习API
人工智能·python·深度学习·目标检测·机器学习·数据挖掘·flask
无声旅者2 小时前
AI 模型分类全解:特性与选择指南
人工智能·ai·ai大模型
Grassto2 小时前
Cursor Rules 使用
人工智能
MYH5162 小时前
深度学习在非线性场景中的核心应用领域及向量/张量数据处理案例,结合工业、金融等领域的实际落地场景分析
人工智能·深度学习