2 杨尚奇

学生身份

我要认证

ACM铜牌退役狗、机器学习炼丹师、懒癌晚期患者

等级
TA的排名 2k+

pytorch学习笔记(三十七):Adam

文章目录Adam算法1. 算法2. 从零开始实现3. 简洁实现小结Adam算法Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均 [1]。下面我们来介绍这个算法。所以Adam算法可以看做是RMSProp算法与动量法的结合。1. 算法Adam算法使用了动量变量vt\boldsymbol{v}_tvt​和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量st\boldsymbol{s}_tst​,并在时间步0将它们中每个元素初始化为0。给定超参数0≤β1&

2020-08-10 13:34:35

pytorch学习笔记(三十七):RMSProp

文章目录RMSProp算法1. 算法2. 从零开始实现3. 简洁实现小结RMSProp算法AdaGrad算法中因为调整学习率时分母上的变量st\boldsymbol{s}_tst​一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。因此,当学习率在迭代早期降得较快且当前解依然不佳时,AdaGrad算法在迭代后期由于学习率过小,可能较难找到一个有用的解。为了解决这一问题,RMSProp算法对AdaGrad算法做了一点小小的修改。1. 算法不同于Ad

2020-08-10 13:06:45

pytorch学习笔记(三十六):AdaGrad

文章目录AdaGrad算法1. 算法2. 特点3. 从零开始实现4. 简洁实现小结AdaGrad算法在之前介绍过的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。举个例子,假设目标函数为fff,自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1​,x2​]⊤,该向量中每一个元素在迭代时都使用相同的学习率。例如,在学习率为η\etaη的梯度下降中,元素x1x_1x1​和x2x_2x2​都使用相同的学习率η\etaη来自我迭代:x1←x1−η∂f∂x1

2020-08-10 12:38:59

pytorch学习笔记(三十五):Momentum

文章目录动量法1. 梯度下降的问题2. 动量法2.1 指数加权移动平均2.2 由指数加权移动平均理解动量法3. 从零开始实现4. 简洁实现小结动量法目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向。因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变量。然而,如果自变量的迭代方向仅仅取决于自变量当前位置,这可能会带来一些问题。1. 梯度下降的问题让我们考虑一个输入和输出分别为二维向量x=[x1,x2

2020-08-10 12:16:25

pytorch学习笔记(三十四):MiniBatch-SGD

文章目录小批量随机梯度下降1. 读取数据2. 从零开始实现3. 简洁实现小结小批量随机梯度下降在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降(batch gradient descent)。而随机梯度下降在每次迭代中只随机采样一个样本来计算梯度。正如我们在前几章中所看到的,我们还可以在每轮迭代中随机均匀采样多个样本来组成一个小批量,然后使用这个小批量来计算梯度。下面就来描述小批量随机梯度下降。设目标函数f(x):Rd→Rf(\boldsymbol{x}): \ma

2020-08-09 13:48:40

pytorch学习笔记(三十三):梯度下降和随机梯度下降

文章目录前言1. 一维梯度下降2. 学习率3. 多维梯度下降4. 随机梯度下降小结前言在本节中,我们将介绍梯度下降(gradient descent)的工作原理。虽然梯度下降在深度学习中很少被直接使用,但理解梯度的意义以及沿着梯度反方向更新自变量可能降低目标函数值的原因是学习后续优化算法的基础。随后,我们将引出随机梯度下降(stochastic gradient descent)。1. 一维梯度下降我们先以简单的一维梯度下降为例,解释梯度下降算法可能降低目标函数值的原因。假设连续可导的函数f:R→R

2020-08-09 13:13:05

pytorch学习笔记(三十二):长短期记忆(LSTM)

文章目录1. 长短期记忆1.1 输入门、遗忘门和输出门1.2 候选记忆细胞1.3 记忆细胞1.4 隐藏状态2. 读取数据集3. 从零开始实现3.1 初始化模型参数4. 定义模型4.1 训练模型并创作歌词5 简洁实现小结本节将介绍另一种常用的门控循环神经网络:长短期记忆(long short-term memory,LSTM)。它比门控循环单元的结构稍微复杂一点。1. 长短期记忆LSTM 中引入了3个门,即输入门(input gate)、遗忘门(forget gate)和输出门(output gate)

2020-08-08 23:31:21

pytorch学习笔记(三十一):门控循环单元(GRU)

文章目录前言1. 门控循环单元1.1 重置门和更新门1.2 候选隐藏状态1.3 隐藏状态2. 读取数据集3. 从零开始实现3.1 初始化模型参数3.2 定义模型3.3 训练模型并创作歌词4. 简洁实现小结前言当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。通常由于这个原因,循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。门控循环神经网络(gated recurrent neural network) 的提出

2020-08-08 12:24:17

pytorch学习笔记(三十):RNN反向传播计算图公式推导

前言本节将介绍循环神经网络中梯度的计算和存储方法,即 通过时间反向传播(back-propagation through time)。正向传播在循环神经网络中比较直观,而通过时间反向传播其实是反向传播在循环神经网络中的具体应用。我们需要将循环神经网络按时间步展开,从而得到模型变量和参数之间的依赖关系,并依据链式法则应用反向传播计算并存储梯度。1. 定义模型简单起见,我们考虑一个无偏差项的循环神经网络,且激活函数为恒等映射(ϕ(x)=x\phi(x)=xϕ(x)=x)。设时间步 ttt 的输入为单样本

2020-08-08 11:10:27

pytorch学习笔记(二十九):简洁实现循环神经网络

本节将使用PyTorch来更简洁地实现基于循环神经网络的语言模型。首先,我们读取周杰伦专辑歌词数据集。import timeimport mathimport numpy as npimport torchfrom torch import nn, optimimport torch.nn.functional as Fimport syssys.path.append("..") import d2lzh_pytorch as d2ldevice = torch.device('cu

2020-08-07 13:19:28

pytorch学习笔记(二十八):循环神经网络的从零开始实现

文章目录1. one-hot向量2. 初始化模型参数3. 定义模型4. 定义预测函数5. 裁剪梯度6. 困惑度7. 定义模型训练函数8. 训练模型并创作歌词小结在本节中,我们将从零开始实现一个基于字符级循环神经网络的语言模型,并在周杰伦专辑歌词数据集上训练一个模型来进行歌词创作。首先,我们读取周杰伦专辑歌词数据集:import timeimport mathimport numpy as npimport torchfrom torch import nn, optimimport torch

2020-08-07 12:37:34

pytorch学习笔记(二十七):Batch-Norm

文章目录前言1. 批量归一化层1.1 对全连接层做批量归一化1.2 对卷积层做批量归一化1.3 预测时的批量归一化2. 从零开始实现2.1 使用批量归一化层的LeNet3. 简洁实现小结前言本节我们介绍 批量归一化(batch normalization)层,它能让较深的神经网络的训练变得更加容易 。通常来说,数据标准化预处理对于浅层模型就足够有效了。随着模型训练的进行,当每层中参数更新时,靠近输出层的输出较难出现剧烈变化。但对深层神经网络来说,即使输入数据已做标准化,训练中模型参数的更新依然很容易造

2020-08-06 11:00:53

pytorch学习笔记(二十六):NIN

LeNet、AlexNet和VGG在设计上的共同之处是:先以由卷积层构成的模块充分抽取空间特征,再以由全连接层构成的模块来输出分类结果。其中,AlexNet和VGG对LeNet的改进主要在于如何对这两个模块加宽(增加通道数)和加深。本节我们介绍网络中的网络(NiN)。它提出了另外一个思路,即串联多个由卷积层和“全连接”层构成的小网络来构建一个深层网络。1. NiN块我们知道,卷积层的输入和输出通常是四维数组(样本,通道,高,宽),而全连接层的输入和输出则通常是二维数组(样本,特征)。如果想在全连接层后再

2020-08-05 20:47:19

pytorch学习笔记(二十五):VGG

1. VGG块VGG块的组成规律是:连续使用数个相同的填充为1、窗口形状为3×33\times 33×3的卷积层后接上一个步幅为2、窗口形状为2×22\times 22×2的最大池化层。卷积层保持输入的高和宽不变,而池化层则对其减半。我们使用vgg_block函数来实现这个基础的VGG块,它可以指定卷积层的数量和输入输出通道数。import timeimport torchfrom torch import nn, optimimport syssys.path.append("..")

2020-08-05 13:04:25

pytorch学习笔记(二十四):深度卷积神经网络(AlexNet)

1. AlexNetAlexNet与LeNet的设计理念非常相似,但也有显著的区别。第一,与相对较小的LeNet相比,AlexNet包含8层变换,其中有5层卷积和2层全连接隐藏层,以及1个全连接输出层。下面我们来详细描述这些层的设计。AlexNet第一层中的卷积窗口形状是11×1111\times1111×11。因为ImageNet中绝大多数图像的高和宽均比MNIST图像的高和宽大10倍以上,ImageNet图像的物体占用更多的像素,所以需要更大的卷积窗口来捕获物体。第二层中的卷积窗口形状减小到5×5

2020-08-05 11:32:20

pytorch学习笔记(二十三):卷积神经网络(LeNet)

LeNet使用多层感知机构造一个含单隐藏层的多层感知机模型来对Fashion-MNIST数据集中的图像进行分类。每张图像高和宽均是28像素。我们将图像中的像素逐行展开,得到长度为784的向量,并输入进全连接层中。然而,这种分类方法有一定的局限性。图像在同一列邻近的像素在这个向量中可能相距较远。它们构成的模式可能难以被模型识别。对于大尺寸的输入图像,使用全连接层容易造成模型过大。假设输入是高和宽均为1000像素的彩色照片(含3个通道)。即使全连接层输出个数仍是256,该层权重参数的形状是3,000,0

2020-08-05 10:44:44

pytorch学习笔记(二十二):Pooling

文章目录1. 二维最大池化层和平均池化层2. 填充和步幅3. 多通道小结实际图像里,我们感兴趣的物体不会总出现在固定位置:即使我们连续拍摄同一个物体也极有可能出现像素位置上的偏移。这会导致同一个边缘对应的输出可能出现在卷积输出Y中的不同位置,进而对后面的模式识别造成不便。在本节中我们介绍池化(pooling)层,它的提出是为了缓解卷积层对位置的过度敏感性。1. 二维最大池化层和平均池化层同卷积层一样,池化层每次对输入数据的一个固定形状窗口(又称池化窗口)中的元素计算输出。不同于卷积层里计算输入和核的

2020-08-04 12:24:07

pytorch学习笔记(二十一):Channels

很多真实数据的维度经常更高。例如,彩色图像在高和宽2个维度外还有RGB(红、绿、蓝)3个颜色通道。假设彩色图像的高和宽分别是hhh和www(像素),那么它可以表示为一个3×h×w3\times h\times w3×h×w的多维数组。我们将大小为3的这一维称为通道(channel)维。本节我们将介绍含多个输入通道或多个输出通道的卷积核。1. 多输入通道当输入数据含多个通道时,我们需要构造一个输入通道数与输入数据的通道数相同的卷积核,从而能够与含多通道的输入数据做互相关运算。假设输入数据的通道数为cic_

2020-08-04 11:52:21

pytorch学习笔记(二十):Padding-And-Strides

假设输入形状是nh×nwn_h\times n_wnh​×nw​,卷积核窗口形状是kh×kwk_h\times k_wkh​×kw​,那么输出形状将会是(nh−kh+1)×(nw−kw+1).(n_h-k_h+1) \times (n_w-k_w+1).(nh​−kh​+1)×(nw​−kw​+1).所以卷积层的输出形状由输入形状和卷积核窗口形状决定。本节我们将介绍卷积层的两个超参数,即填充和步幅。它们可以对给定形状的输入和卷积核改变输出形状。1. 填充填充(padding)是指在输入高和宽的两侧填

2020-08-04 11:29:22

pytorch学习笔记(十九):二维卷积层

文章目录1. 二维互相关运算2. 二维卷积层3. 图像中物体边缘检测4. 通过数据学习核数组卷积神经网络(convolutional neural network)是含有卷积层(convolutional layer)的神经网络。本章中介绍的卷积神经网络均使用最常见的二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。本节中,我们将介绍简单形式的二维卷积层的工作原理。1. 二维互相关运算虽然卷积层得名于卷积(convolution)运算,但我们通常在卷积层中使用更加直观的互相关(cross-cor

2020-08-04 10:29:27

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。