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

相关推荐
AndrewHZ1 小时前
【图像处理基石】什么是油画感?
图像处理·人工智能·算法·图像压缩·视频处理·超分辨率·去噪算法
Robot2512 小时前
「华为」人形机器人赛道投资首秀!
大数据·人工智能·科技·microsoft·华为·机器人
J先生x2 小时前
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
图像处理·人工智能·学习·算法·计算机视觉
Narutolxy4 小时前
大模型数据分析破局之路20250512
人工智能·chatgpt·数据分析
浊酒南街4 小时前
TensorFlow中数据集的创建
人工智能·tensorflow
2301_787552876 小时前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
layneyao6 小时前
AI与自然语言处理(NLP):从BERT到GPT的演进
人工智能·自然语言处理·bert
jndingxin7 小时前
OpenCV 的 CUDA 模块中用于将多个单通道的 GpuMat 图像合并成一个多通道的图像 函数cv::cuda::merge
人工智能·opencv·计算机视觉
格林威7 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
灬0灬灬0灬8 小时前
深度学习---常用优化器
人工智能·深度学习