首页 > 其他分享 >《动手学深度学习 Pytorch版》 4.7 前向传播、反向传播和计算图

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

时间:2023-09-06 09:47:09浏览次数:54  
标签:4.7 frac boldsymbol 传播 Pytorch 计算 partial

4.7.1 前向传播

整节理论,详见书本。

4.7.2 前向传播计算图

整节理论,详见书本。

4.7.3 反向传播

整节理论,详见书本。

4.7.4 训练神经网络

整节理论,详见书本。

练习

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

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


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

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

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

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

\[\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} \]

反向传播为:

\[\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} \]

a. 计算图为:

image


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

不会,略。


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

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


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

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

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

b.

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

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

标签:4.7,frac,boldsymbol,传播,Pytorch,计算,partial
From: https://www.cnblogs.com/AncilunKiang/p/17681453.html

相关文章

  • 《动手学深度学习 Pytorch版》 4.8 数值稳定性和模型初始化
    4.8.1梯度消失和梯度爆炸整节理论,详见书本。梯度消失%matplotlibinlineimporttorchfromd2limporttorchasd2lx=torch.arange(-8.0,8.0,0.1,requires_grad=True)y=torch.sigmoid(x)y.backward(torch.ones_like(x))d2l.plot(x.detach().numpy(),[y.deta......
  • 《动手学深度学习 Pytorch版》 4.9 环境和分布偏移
    4.9.1分布偏移的类型整节理论,详见书本。4.9.2分布偏移示例整节理论,详见书本。4.9.3分布偏移纠正整节理论,详见书本。4.9.4学习问题的分类法整节理论,详见书本。4.9.5机器学习中的公平、责任和透明度整节理论,详见书本。练习(1)当我们改变搜索引擎的行为时会发生什么?用......
  • 《动手学深度学习 Pytorch版》 4.5 权重衰减
    4.5.1范数与权重衰减整节理论,详见书本。4.5.2高维线性回归%matplotlibinlineimporttorchfromtorchimportnnfromd2limporttorchasd2l#生成一些数据,为了使过拟合效果更明显,将维数增加到200并使用一个只包含20个样本的小训练集。n_train,n_test,num_inpu......
  • 《动手学深度学习 Pytorch版》 4.6 暂退法
    importtorchfromtorchimportnnfromd2limporttorchasd2l4.6.1重新审视过拟合整节理论,详见书本。4.6.2扰动的稳健性整节理论,详见书本。4.6.3实践中的暂退法整节理论,详见书本。4.6.4从零开始实现defdropout_layer(X,dropout):assert0<=dropout<=......
  • 循环神经网络--基于pytorch框架
    importmatplotlib.pyplotaspltimportmathimporttorchfromtorchimportnnfromtorch.nnimportfunctionalasffromd2limporttorchasd2lbatch_size,num_steps=32,35train_iter,vocab=d2l.load_data_time_machine(batch_size,num_steps)print(f.......
  • Lnton羚通算法算力云平台【PyTorch】教程:torch.nn.Hardtanh
    torch.nn.Hardtanh原型CLASStorch.nn.Hardtanh(min_val=-1.0,max_val=1.0,inplace=False,min_value=None,max_value=None)参数min_val ([float])–线性区域的最小值,默认为-1max_val ([float])–线性区域的最大值,默认为1inplace ([bool])–默认为Falsetorch.nn.Ha......
  • 自定义CUDA实现PyTorch算子的四种简单方法
    背景在探索新的深度学习算法的时候,我们可能会遇到PyTorch提供的算子不能满足需求的情况,这时候就需要自定义PyTorch算子,将我们的算法集成到PyTorch的工作流中。同时,为了提高运算效率,算子往往都需要使用CUDA实现。所幸,PyTorch及很多其他Python库都提供了简化这一过程的方法,完全不需......
  • Proj CDeepFuzz Paper Reading: Automatic differentiation in PyTorch
    Abstract本文:描述automaticdifferentiationmoduleofPyTorch包括:LuaTorch,Chainer,HIPSAutogradTask:Providesahigh-performanceenvironmentondifferentdevices(bothCPUsandGPUs)方法:不用symbolicdifferentiation,而是使用differentiationonpurelyimper......
  • 《动手学深度学习 Pytorch版》 4.3 多层感知机的简洁实现
    importtorchfromtorchimportnnfromd2limporttorchasd2l模型net=nn.Sequential(nn.Flatten(),nn.Linear(784,256),nn.ReLU(),#与3.7节相比多了一层nn.Linear(256,10))definit_weights(m......
  • Lnton羚通算法算力云平台【PyTorch】教程:torch.nn.Mish
    torch.nn.Mish是PyTorch中的一个激活函数类,它实现了Mish激活函数。Mish是一种近年来提出的激活函数,它在激活函数的设计中引入了自适应斜率。Mish函数的定义如下:Mish(x)=x*tanh(softplus(x))其中softplus(x)是软正值函数,定义为softplus(x)=log(1+exp(x))。Mish函......