在每一个环境状态中,agent可以采取的动作即为行动。反馈(reward)
每到一个环境状态,agent就有可能会收到一个reward
本章介绍了三种常用的机器学习框架,其中TensorFlow和PyTorch是目前最流行的两种开源框架。在以往版本的实现中,TensorFlow主要提供静态图构建的功能,因此具有较高的运算性能,但是模型的调试分析成本较高。PyTorch主要提供动态图计算的功能,API涉及接近Python原生语法,因此易用性较好,但是在图优化方面不如TensorFlow。这样的特点导致TensorFlow大量用于AI企业的模型部署,而学术界大量使用PyTorch进行研究。不过目前我们也看到两种框架正在吸收对方的优势,例如TensorFlow的eager模式就是对动态图的一种尝试。TheEnd谢谢!机器学习基础知识(一)导入
深度学习是作为机器学习的一个分支发展而来的,因此有必要介绍机器学习的基础知识。本章首先介绍模型评估与模型参数选择,这些知识在深度学习中具有相当重要的地位。而后,本章简要介绍了监督学习与非监督学习。大多数基础的深度学习模型都是基于监督学习的,但是随着模型复杂度的提高,模型对数据的需求量也日益增加。因此,许多研究者都在尝试将非监督学习应用到深度学习中,以获得更佳廉价的训练数据。本章要点模型评估与模型参数选择验证正则化监督学习非监督学习模型评估与模型参数选择
模型评估与模型参数选择训练集可能存在以下问题:1.训练集样本太少,缺乏代表性;2.训练集中本身存在错误的样本,即噪声。如果片面地追求训练误差的最小化,就会导致模型参数复杂度增加,使得模型过拟合。为了选择效果最佳的模型,防止过拟合的问题,通常可以采取的方法有:使用验证集调参对损失函数进行正则化验证模型不能过拟合于训练集,否则将不能在测试集上得到最优结果;但是否能直接以测试集上的表现来选择模型参数呢?答案是否定的。因为这样的模型参数将会是针对某个特定测试集的,得出来的评价标准将会失去其公平性,失去了与其他同类或不同类模型相比较的意义。因此参数的选择(即调参)必须在一个独立于训练集和测试集的数据集上进行,这样的用于模型调参的数据集被称为开发集或验证集。然而很多时候我们能得到的数据量非常有限。这个时候我们可以不显式地使用验证集,而是重复使用训练集和测试集,这种方法称为交叉验证。常用的交叉验证方法有:简单交叉验证。K-重交叉验证。正则化
监督学习与非监督学习
监督学习
监督学习分类通常在不平衡类问题中,我们使用F-度量来作为评价模型的指标。以二元不平衡分类问题为例,这种分类问题往往是异常检测,模型的好坏往往取决于能否很好地检出异常,同时尽可能不误报异常。定义占样本少数的类为正类(Positiveclass),占样本多数的为负类(Negativeclass),那么预测只可能出现4种状况:将正类样本预测为正类(TruePositive,TP)将负类样本预测为正类(FalsePositive,FP)将正类样本预测为负类(FalseNegative,FN)将负类样本预测为负类(TrueNegative,TN)监督学习
非监督学习
小结
本章对机器学习基础知识进行了介绍,这部分是理解后续高级操作的基础,需要读者认真消化。监督学习与非监督学习主要针对数据集定义。有监督数据集需要人工标注,成本较为昂贵,但是在训练模型时往往能够保障效果。无监督数据集一般不需要过多人工操作,可以通过爬虫等方式自动大量获得。由于没有监督信息的约束,需要设计巧妙的学习算法才能有效利用无监督数据集训练模型,不过大量廉价数据可以从另一个方面提高模型性能。模型评估需要根据模型的训练历史判断模型是否处于欠拟合或过拟合状态。尽管有一定的规律作为指导,而且有一些工具可以辅助分析,但是模型的评估过程一般需要较为丰富的经验。读者可以在深度学习实验中有意识地训练自己的模型评估能力。TheEnd谢谢!PyTorch深度学习基础(一)导入
PyTorch深度学习基础
本章要点线性回归Logistic回归用PyTorch实现logisticregressionlogisticregression的算法优化logisticregression的模型可视化线性回归
线性回归
线性回归线性回归
Logistic回归
Logistic回归Logistic函数图像Logistic回归
用PyTorch实现logisticregression用PyTorch实现logisticregression的代码主要依赖于三个模块用PyTorch实现logisticregression
用PyTorch实现logisticregression
用PyTorch实现logisticregression数据准备用PyTorch实现logisticregression数据准备17-18行设置样本对应的标签y,分别用0和1表示不同高斯分布的数据,也就是正样本和负样本。第21行使用cat函数将x1和x2组合在一起,第22-24行打乱样本和标签的顺序,将数据重新随机排列是十分重要的步骤,否则算法的每次迭代只会学习到同一个类别的信息,容易造成模型过拟合。用PyTorch实现logisticregression数据准备用PyTorch实现logisticregression
用PyTorch实现logisticregression模型可视化用PyTorch实现logisticregression模型可视化结果图小结Logistic回归是深度学习中最基础的非线性模型之一。作为铺垫,在介绍Logistic回归以前,本章首先介绍了线性回归。线性回归的预测目标是连续变量,而Logistic回归的预测目标是二元变量。为了应对这一差异,Logistic回归在线性回归的基础上加入了Sigmoid激活函数。本章最后使用PyTorch实现了Logistic回归模型,读者可以通过这个例子进一步体会深度学习模型构建的整体流程以及框架编程的简便性。TheEnd谢谢!多层感知器(一)导入
人工智能的研究者为了模拟人类的认知,提出了不同的模型。人工神经网络是人工智能中非常重要的一个学派——连接主义最为广泛使用的模型。
在传统上,基于规则的符号主义学派认为,人类的认知是基于信息中的模式;而这些模式可以被表示成为符号,并可以通过操作这些符号,显式地使用逻辑规则进行计算与推理。多层感知器(一)导入
而基于统计的连接主义的模型将认知所需的功能属性结合到模型中来,通过模拟生物神经网络的信息处理方式来构建具有认知功能的模型。类似于生物神经元与神经网络,这类模型具有三个特点:
拥有处理信号的基础单元
处理单元之间以并行方式连接
处理单元之间的连接是有权重的
基础概念
基础概念神经网络神经网络是一个有向图,以神经元为顶点,神经元的输入为顶点的入边,神经元的输出为顶点的出边。因此神经网络实际上是一个计算图,直观地展示了一系列对数据进行计算操作的过程。神经网络是一个端到端的系统,这个系统接受一定形式的数据作为输入,经过系统内的一系列计算操作后,给出一定形式的数据作为输出;系统内的运算可以被视为一个黑箱子,这与人类的认知在一定程度上具有相似性。通常地,为了直观起见,人们对神经网络中的各顶点进行了层次划分。基础概念输入层接受来自网络外部的数据的顶点,组成输入层。输出层向网络外部输出数据的顶点,组成输出层。隐藏层除了输入层和输出层以外的其他层,均为隐藏层。基础概念
感知器感知器的概念由RosenblattFrank在1957提出,是一种监督训练的二元分类器。单层感知器
单层感知器
多层感知器
BP神经网络在多层感知器被引入的同时,也引入了一个新的问题:由于隐藏层的预期输出并没有在训练样例中给出,隐藏层结点的误差无法像单层感知器那样直接计算得到。为了解决这个问题,后向传播算法被引入,其核心思想是将误差由输出层向前层后向传播,利用后一层的误差来估计前一层的误差。后向传播算法由HenryJ.Kelley在1960和ArthurE.Bryson在1961分别提出。使用后向传播算法训练的网络称为BP神经网络。梯度下降
梯度下降梯度下降
后向传播
Dropout正则化Dropout会在训练和测试时做出不同的行为,PyTorch的torch.nn.Module提供了train方法和eval方法,通过调用这两个方法就可以将网络设置为训练模式或测试模式,这两个方法只对Dropout这种训练和测试不一致的网络层起作用,而不影响其他的网络层,后面介绍的BatchNormalization也是训练和测试步骤不同的网络层。批标准化在训练神经网络时,往往需要标准化输入数据,使得网络的训练更加快速和有效,然而SGD等学习算法会在训练中不断改变网络的参数,隐含层的激活值的分布会因此发生变化,而这一种变化就称为内协变量偏移。为了减轻ICS问题,批标准化固定激活函数的输入变量的均值和方差,使得网络的训练更快。除了加速训练这一优势,批标准化还具备其他功能:首先,应用了批标准化的神经网络在反向传播中有着非常好的梯度流。不仅如此,批标准化还具有正则化的作用。最后,批标准化让深度神经网络使用饱和非线性函数成为可能。批标准化的实现方式
批标准化的实现方式
批标准化的使用方法在PyTorch中,torch.nn.BatchNorm1d提供了批标准化的实现,同样地,它也被当作神经网络中的层使用。它有两个十分关键的参数,num_features确定特征的数量,affine决定批标准化是否使用仿射映射。下面的代码第4行实例化了一个BatchNorm1d对象,将模型的两个中间变量running_mean和running_var初始化为5维的向量。第5-6行打印了这两个变量的数据。第9-11行从标准高斯分布采样了一些数据然后提供给批标准化层。第14-15行打印了变化后的running_mean和running_var。第17-24行验证了如果我们将模型设置为eval模式,这两个变量不会发生任何变化。批标准化的使用方法批标准化的使用方法批标准化的使用方法批标准化的使用方法
批标准化的使用方法批标准化的使用方法小结感知器模型可以算得上是深度学习的基石。最初的单层感知器模型就是为了模拟人脑神经元提出的,但是就连异或运算都无法模拟。经过多年的研究,人们终于提出了多层感知器模型,用于拟合任意函数。结合高效的BP算法,神经网络终于诞生。尽管目前看来,BP神经网络已经无法胜任许多工作,但是从发展的角度来看,BP神经网络仍是学习深度学习不可不知的重要部分。本章的最后两节介绍了常用的训练技巧,这些技巧可以有效地提升模型表现,避免过拟合。TheEnd谢谢!卷积神经网络CNN与计算机视觉(一)导入
计算机视觉是一门研究如何使计算机识别图片的科学,也是深度学习的主要应用领域之一。在众多深度模型中,卷积神经网络独领风骚,已经称为计算机视觉的主要研究工具之一。本章首先介绍卷积神经网络的基本知识,而后给出一些常见的卷积神经网络模型。本章要点卷积神经网络的基本思想卷积操作池化层卷积神经网络VGG网络InceptionNetResNet用PyTorch进行手写数字识别卷积神经网络的基本思想卷积神经网络最初由YannLeCun等人在1989年提出,是最初取得成功的深度神经网络之一。它的基本思想是:局部连接。参数共享。卷积神经网络的基本思想
卷积神经网络的基本思想
卷积操作
卷积操作卷积操作
卷积神经网络一般来说,卷积神经网络(ConvolutionalNeuralNetwork,CNN)由一个卷积层、一个池化层、一个非线性激活函数层组成。卷积神经网络在图像分类中表现良好的深度神经网络往往由许多“卷积层+池化层”的组合堆叠而成,通常多达数十乃至上百层。经典网络结构VGG,InceptionNet,ResNet等CNN网络从大规模图像数据集训练的用于图像分类的网络,ImageNet从2010年起每年都举办图像分类的竞赛,为了公平起见,它为每位参赛者提供来自于1000个类别的120万张图像。在如此巨大的数据集中训练出的深度学习模型特征具有非常良好的泛化能力,在迁移学习后,可以被用于除图像分类之外的其他任务,比如目标检测,图像分割。PyTorch的torchvision.models为我们提供了大量的模型实现,以及模型的预训练权重文件,其中就包括本节介绍的VGG,ResNet,InceptionNet。经典网络结构
经典网络结构VGG网络结构经典网络结构
经典网络结构InceptionNet网络结构经典网络结构
经典网络结构ResNet神经网络越深,对复杂特征的表示能力就越强。但是单纯的提升网络的深度会导致在反向传播算法在传递梯度时,发生梯度消失现象,导致网络的训练无效。通过一些权重初始化方法和BatchNormalization可以解决这一问题,但是,即便使用了这些方法,网络在达到一定深度之后,模型训练的准确率不会再提升,甚至会开始下降,这种现象称为训练准确率的退化(degradation)问题。退化问题表明,深层模型的训练是非常困难的。ResNet提出了残差学习的方法,用于解决深度学习模型的退化问题。经典网络结构
经典网络结构
用PyTorch进行手写数字识别torch.utils.data.Datasets是PyTorch用来表示数据集的类,在本节我们使用torchvision.datasets.MNIST构建手写数字数据集。用PyTorch进行手写数字识别下面代码第5行实例化了Datasets对象。第7行,使用了len(mnist),这里调用了_len_方法,第8行使用了mnist[j],调用的是_getitem_,在我们自己建立数据集时,需要继承Dataset,并且覆写_item_和_len_两个方法。第9-10行绘制了MNIST手写数字数据集。用PyTorch进行手写数字识别代码段用PyTorch进行手写数字识别
用PyTorch进行手写数字识别准备好处理好数据的流程后,就可以读取用于训练的数据了,torch.utils.data.DataLoader提供了迭代数据,随机抽取数据,批量化数据,使用multiprocessing并行化读取数据的功能。下面定义了函数imshow,第2行将数据从标准化的数据中恢复出来,第3行将Tensor类型转换为ndarray,这样才可以用matplotlib绘制出来,绘制的结果如图所示,第4行将矩阵的维度从(C,W,H)转换为(W,H,C)。用PyTorch进行手写数字识别代码段用PyTorch进行手写数字识别在准备好数据和模型后,我们就可以训练模型了。下面我们分别定义了数据处理和加载流程,模型,优化器,损失函数,以及用准确率评估模型能力。模型训练迭代过程的损失图像如图所示。用PyTorch进行手写数字识别模型训练迭代过程的准确率图像如图所示。小结
随着梯度反向传播算法的提出,神经网络在计算机视觉领域取得了巨大的成功,神经网络第一次真正地超越传统方法,成为在学术界乃至工业界实用的模型。
这时在自然语言处理领域,统计方法仍然是主流的方法。由于自然语言处理中所要处理的对象都是离散的符号,自然语言处理与连续