《神经网络与深度学习》nndl读书笔记

在这里插入图片描述

本书的知识体系

在这里插入图片描述

深度学习与神经网络概要

从根源上讲,深度学习机器学习的一个分支,是指一类问题以及解决这类问题的方法。

深度学习采用的模型一般比较复杂,指样本的原始输入到输出目标之间的数据流经过多个线性或非线性的组件.因为每个组件都会对信息进行加工,并进而影响后续的组件,所以当我们最后得到输出结果时,我们并不清楚其中每个组件的贡献是多少.这个问题叫作贡献度分配问题
在深度学习中,贡献度分配问题是一个很关键的问题,这关系到如何学习每个组件中的参数。

目前,一种可以比较好解决贡献度分配问题的模型是人工神经网络( Artifi-Neural Network , ANN ).简称神经网络

神经网络和深度学习并不等价。深度学习可以采用神经网络模型,也可以采用其他模型(比如深度信念网络是一种概率图模型)。但是,由于神经网络模型可以比较容易地解决贡献度分配问题,因此神经网络模型成为深度学习中主要采用的模型

人工智能

图灵测试: “一个人在不接触对方的情况下,通过一种特殊的方式和对方进行一系列的问答.如果在相当长时间内,他无法根据这些问题判断对方是人还是计算机,那么就可以认为这个计算
机是智能的”。

目前,人工智能的主要领域大体上可以分为以下几个方面:

  1. 感知:模拟人的感知能力,对外部刺激信息(视觉和语音等)进行感知和加工。主要研究领域包括语音信息处理和计算机视觉等.
  2. 学习:模拟人的学习能力,主要研究如何从样例或从与环境的交互中进行学习主要研究领域包括监督学习、无监督学习和强化学习等
  3. 认知:模拟人的认知能力,主要研究领域包括知识表示、自然语言理理解、推理、规划、决策等.

机器学习

机器学习( Machine Learning , ML )是指从有限的观测数据中学习(或“猜测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法。
机器学习是人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素。

机器学习模型步骤

  1. 数据预处理:对数据的原始形式进行初步的数据清理(比如去掉一些有缺失特征火冗余的样本)和加工(对数值特征进行缩放和归一化等),并构建成可用于训练机器学习模型的数据集.
  2. 特征提取:从数据的原始特征中提取一些对特定机器学习任务有用的高质量特征.比如在图像分类中提取边缘、尺度不变特征变换(Scale Invariant Feature Transform , SIFT )特征,在文本分类中去除停用词等.
  3. 特征转换:对特征进行进一步的加工,比如降维和升维。很多特征转换方法也 都是机器学习方法.降维包括特征抽取( Feature Extraction )和特征选择( Feature Selection )两种途径.常用的特征转换方法有主成分分析( Principal Components Analysis , PCA )、线性判别分析( Linear Discriminant Analysis , LDA )等.
  4. 预测:机器学习的核心部分,学习一个函数并进行预测。

在这里插入图片描述
开发一个机器学习系统的主要工作量都消耗在了预处理、特征提取以及特征转换上。

表示学习

为了提高机器学习系统的准确率,我们就需要将输入信息转换为有效的特征,或者更一般性地称为表示( Representation ).如果有一种算法可以自动地学习出有效的特征,并提高最终机器学习模型的性能,那么这种学习就可以叫作表示学习( Representation Learning ).
在表示学习中,有两个核心问题:一是“什么是一个好的表示”;二是“如何学习到好的表示”.

局部表示与分布式表示

  • 一种表示颜色的方法是以不同名字来命名不同的颜色,这种表示方式叫作局部表示,也称为离散表示或符号表示;例如“中国红”。通常可以表示为
    one-hot 向量的形式。
  • 另一种表示颜色的方法是用 RGB 值来表示颜色,不同颜色对应到 R 、 G 、B
    三维空间中一个点,这种表示方式叫作分布式表示.分布式表示通常可以表示为低维的稠密向量。

表示学习的关键是构建具有一定深度的多层次特征表示。

深度学习

在这里插入图片描述
目前,深度学习采用的模型主要是神经网络模型,其主要原因是神经网络模型可以使用误差反向传播算法,从而可以比较好地解决贡献度分配问题.只要是超过一层的神经网络都会存在贡献度分配问题,因此可以将超过一层的神经网络都看作深度学习模型。

常用的深度学习框架

比较有代表性的框架包括: Theano 、 Caffe 、 TensorFlow 、Pytorch 、飞桨( PaddlePaddle )、 Chainer 和 MXNet 等。

  1. Theano:由蒙特利尔大学的 Python 工具包,Theano 项目目前已停止维护
  2. Caffe:由加州大学伯克利分校开发的针对卷积神经网络的计算框架,主要用于计算机视觉. Caffe 用 C++ 和 Python 实现,但可以通过配置文件来实现所要的网络结构,不需要编码.
  3. TensorFlow :由 Google 公司开发的深度学习框架, TensorFlow 的计算过程使用数据流图来表示.TensorFlow 的名字来源于其计算过程中的操作对象为多维数组,即张量(Tensor ).TensorFlow 1.0 版本采用静态计算图, 2.0 版本之后也支持动态计算图.
  4. PyTorch :由 Facebook 、 NVIDIA 、 Twitter 等公司开发维护的深度学习框架,其前身为 Lua 语言的 Torch . PyTorch 也是基于动态计算图的框架,在需要动态改变神经网络结构的任务中有着明显的优势.
  5. 飞桨( PaddlePaddle ):由百度开发的一个高效和可扩展的深度学习框架,同时支持动态图和静态图.飞桨提供强大的深度学习并行技术,可以同时支持稠密参数和稀疏参数场景的超大规模深度学习并行训练,支持千亿规模参数和数百个节点的高效并行训练.
  6. MindSpore :由华为开发的一种适用于端边云场景的新型深度学习训练 / 推理框架. MindSpore 为 Ascend AI 处理器提供原生支持,以及软硬件协同优化.
  7. Chainer :一个最早采用动态计算图的深度学习框架,其核心开发团队为来自日本的一家机器学习创业公司 Preferred Networks .和 Tensorflow 、Theano 、 Caffe 等框架使用的静态计算图相比,动态计算图可以在运行时动态地构建计算图,因此非常适合进行一些复杂的决策或推理任务.
  8. MXNet 7 :由亚马逊、华盛顿大学和卡内基·梅隆大学等开发维护的深度学习框架.MXNet 支持混合使用符号和命令式编程来最大化效率和生产率,并可以有效地扩展到多个 GPU 和多台机器.在这些基础框架之上,还有一些建立在这些框架之上的高度模块化的神经网络库,使得构建一个神经网络模型就像搭积木一样容易.其中比较有名的模块化神经网络框架有:1 )基于TensorFlow和Theano的 Keras ;2 )基于 Theano的Lasagne ;目前,Keras已经被集成到TensorFlow 2.0 版本中.3 )面向图结构数据的DGL

端到端学习

端到端学习( End-to-End Learning ),也称端到端训练,是指在学习过程中不进行分模块或分阶段训练,直接优化任务的总体目标.在端到端学习中,一般不需要明确地给出不同模块或阶段的功能,中间过程不需要人为干预.端到端学习的训练数据为“输入 - 输出”对的形式,无须提供其他额外信息.因此,端到端学习和深度学习一样,都是要解决贡献度分配问题.目前,大部分采用神经网络模型的深度学习也可以看作一种端到端的学习.

神经网络

人工神经网络

人工神经网络是为模拟人脑神经网络而设计的一种计算模型。

神经网络的发展历史

  • 第一阶段:模型提出 1943 年,心理学家 Warren McCulloch 和数学家 Walter Pitts 最早提出了一种基于简单逻辑运算的人工神经网络,这种神经网络模型称为 MP 模型[Rosenblatt,1958] 提出了一种可以模拟人类感知能力的神经网络模型,称为感知器( Percep-tron )。
  • 第二阶段:冰河期 1974 年,哈佛大学的 Paul Werbos 发明反向传播算法。
  • 第三阶段:反向传播算法引起的复兴 反向传播算法是迄今最为成功的神经网络学习算法.目前在深度学习中主要使用的自动微分可以看作反向传播算法的一种扩展。梯度消失问题( Vanishing Gradient Problem )阻碍神经网络的进一步发展,特别是循环神经网络.
  • 第四阶段:流行度降低 1995-2006
  • 第五阶段:深度学习的崛起 2006年开始至今

机器学习概述

通俗地讲,机器学习( Machine Learning , ML )就是让计算机从数据中进行自动学习,得到某种知识(或规律).

基本概念

在这里插入图片描述
一组样本构成的集合称为数据集( Data Set ).在很多领域,数据集也经常称为语料库( Corpus ).一般将数据集分为两部分:训练集测试集.训练集( Training Set )中的样本是用来训练模型的,也叫训练样本( Training Sample ),而测试集( Test Set )中的样本是用来检验模型好坏的,也叫测试样本( Test Sample )。

机器学习的三个基本要素

机器学习方法可以粗略地分为三个基本要素:模型学习准则优化算法

模型

机器学习的目标是找到一个模型来近似真实映射函数或真实条件概率分布。
由于我们不知道真实的映射函数或条件概率分布的具体形式,因而根据经验来假设一个函数集合,称为假设空间,然后通过观测其在训练集上的特性,从中选择一个理想的假设。常见的假设空间可以分为线性和非线性两种,对应的模型也分别称为线性模型和非线性模型

学习准则

经验风险最小化、结构风险最小化、最大似然估计、最大后验估计等。

损失函数

损失函数是一个非负实数函数,用来量化模型预测和真实标签之间的差异.下面介绍几种常用的损失函数:

  • 0-1损失函数:最直观的损失函数,是模型在训练集上的错误率,能够客观地评价模型的好坏,但其缺点是数学性质不是很好:不连续且导数为 0 ,难以优化.因此经常用连续可微的损失函数替代。
  • 平方损失函数:经常用在预测标签为实数值的任务中。一般不适用于分类问题。
  • 交叉熵损失函数:一般用于分类问题。也就是负对数似然函数
  • Hinge损失函数
风险最小化准则
  • 过拟合:经验风险最小化原则很容易导致模型在训练集上错误率很低,但是在未知数据上错误率很高.这就是所谓的过拟合。过拟合问题往往是由于训练数据少和噪声以及模型能力强等原因造成的.
    为了解决过拟合问题,一般在经验风险最小化的基础上再引入参数的正则化来限制模型能力,使其不要过度地最小化经验风险。
  • 欠拟合:即模型不能很好地拟合训练数据,在训练集上的错误率比较高.欠拟合一般是由于模型能力不足造成的。
    在这里插入图片描述

优化算法

在确定了训练集、假设空间以及学习准则后,如何找到最优的模型就成了一个最优化问题。机器学习的训练过程其实就是最优化问题的求解过程。
参数与超参数:在机器学习中,优化又可以分为参数优化和超参数优化。
模型𝑔(𝒚;𝜃) 中的 𝜃 称为模型的参数,可以通过优化算法进行学习.除了可学习的参数𝜃 之外,还有一类参数是用来定义模型结构或优化策略的,这类参数叫作超参数。
常见的超参数包括:聚类算法中的类别个数、梯度下降法中的步长、正则化项的系数、神经网络的层数、支持向量机中的核函数等。

  • 梯度下降法:机器学习中,最简单、常用的优化算法。
    针对梯度下降的优化算法,除了加正则化项之外,还可以通过提前停止来防止过拟合。
    除了训练集和测试集之外,有时也会使用一个验证集来进行模型选择,测试模型在验证集上是否最优.在每次迭代时,把新得到的模型 𝑔(𝒚;𝜃) 在验证集上进行测试,并计算错误率。如果在验证集上的错误率不再下降,就停止迭代.这种策略叫提前停止。如果没有验证集,可以在训练集上划分出一个小比例的子集作为验证集。
  • 随机梯度下降法:为了减少每次迭代的计算复杂度,我们也可以在每次迭代时只采集一个样本,计算这个样本损失函数的梯度并更新参数,即随机梯度下降法。
  • 批量梯度下降法:目标函数是整个训练集上的风险函数,这种方式称为批量梯度下降法。批量梯度下降法在每次迭代时需要计算每个样本上损失函数的梯度并求和。

批量梯度下降和随机梯度下降之间的区别在于,每次迭代的优化目标是对所有样本的平均损失函数还是对单个样本的损失函数.由于随机梯度下降实现简单,收敛速度也非常快,因此使用非常广泛.随机梯度下降相当于在批量梯度下降的梯度上引入了随机噪声.在非凸优化问题中,随机梯度下降更容易逃离局部最优点。

  • 小批量梯度下降法:我们随机选取一小部分训练样本来计算梯度并更新参数,这样既可以兼顾随机梯度下降法的优点,也可以提高训练效率。
    实际应用中,小批量随机梯度下降法有收敛快、计算开销小的优点,因此逐渐成为大规模的机器学习中的主要优化算法

线性回归——机器学习的简单示例

线性回归(Linear Regression )是机器学习和统计学中最基础和最广泛应用的模型,是一种对自变量和因变量之间关系进行建模的回归分析.自变量数量为 1 时称为简单回归,自变量数量大于1时称为多元回归
参数学习
四种不同的参数估计方法:经验风险最小化、结构风险最小化、最大似然估计、最大后验估计。

偏差-方差分解

在这里插入图片描述
一般来说,当一个模型在训练集上的错误率比较高时,说明模型的拟合能力不够,偏差比较高.这种情况可以通过增加数据特征、提高模型复杂度、减小正则化系数等操作来改进.当模型在训练集上的错误率比较低,但验证集上的错误率比较高时,说明模型过拟合,方差比较高.这种情况可以通过降低模型复杂度、加大正则化系数、引入先验等方法来缓解.此外,还有一种有效降低方差的方法为集成模型,即通过多个高方差模型的平均来降低方差.

机器学习算法的类型

监督学习

如果机器学习的目标是建模样本的特征 𝒚 和标签 𝑧 之间的关系:𝑧 =𝑔(𝒚;𝜃) 或 𝑞(𝑧|𝒚;𝜃),并且训练集中每个样本都有标签,那么这类机器学习称为监督学习.根据标签类型的不同,监督学习又可以分为回归问题、分类问题和结构化学习问题。

  • 回归问题中的标签 𝑧 是连续值(实数或连续整数),𝑔(𝒚;𝜃) 的输出也是连续值.
  • 分类问题中的标签 𝑧 是离散的类别(符号).在分类问题中,学习到的模型也称为分类器.分类问题根据其类别数量又可分为二分类和多分类问题.
  • 结构化学习问题是一种特殊的分类问题.在结构化学习中,标签 𝒛 通常是结构化的对象,比如序列、树或图等.

无监督学习

指从不包含目标标签的训练样本中自动学习到一些有价值的信息.典型的无监督学习问题有聚类、密度估计、特征学习、降维等.

强化学习

是一类通过交互来学习的机器学习算法.在强化学习中,智能体根据环境的状态做出一个动作,并得到即时或延时的奖励.智能体在和环境的交互中不断学习并调整策略,以取得最大化的期望总回报.

数据集一般都需要由人工进行标注,成本很高.因此,也出现了很多弱监督学习和半监督学习的方法,希望从大规模的无标注数据中充分挖掘有用的信息,降低对标注样本数量的要求.强化学习和监督学习的不同在于,强化学习不需要显式地以“输入/输出对”的方式给出训练样本,是一种在线的学习机制.
在这里插入图片描述

数据的特征表示

图像特征、文本特征
表示学习 : 一个成功的机器学习系统通常需要尝试大量的特征,称为特征工程。如何让机器自动地学习出有效的特征称为特征学习,也叫表示学习。特征学习在一定程度上也可以减少模型复杂性、缩短训练时间、提高模型泛化能力、避免过拟合等。
表示学习可以看作一个特殊的机器学习任务,即有自己的模型、学习准则和优化方法.

传统的特征学习

特征选择

简单地说,特征选择就是保留有用特征,移除冗余或无关的特征.
特征选择的方法

  • 子集搜索:特征选择的目标是选择一个最优的候选子集.最暴力的做法是测试每个特征子集,看机器学习模型哪个子集上的准确率最高.但是这种方式效率太低.常用的方法是采用贪心的策略:由空集合开始,每一轮添加该轮最优的特征,称为前向搜索;或者从原始特征集合开始,每次删除最无用的特征,称为反向搜索
    子集搜索方法可以分为过滤式方法包裹式方法

    • 过滤式方法是不依赖具体机器学习模型的特征选择方法.每次增加最有信息量的特征,或删除最没有信息量的特征.特征的信息量可以通过信息增益来衡量。
    • 包裹式方法是使用后续机器学习模型的准确率作为评价来选择一个特征子集的方法.每次增加对后续机器学习模型最有用的特征,或删除对后续机器学习任务最无用的特征.这种方法是将机器学习模型包裹到特征选择过程的内部.
  • ℓ1 正则化 :此外,我们还可以通过 ℓ1 正则化来实现特征选择.由于 ℓ1 正则化会导致稀疏特征,因此间接实现了特征选择。

特征抽取

构造一个新的特征空间,并将原始特征投影在新的空间中得到新的表示.
在这里插入图片描述
特征选择和特征抽取的优点是可以用较少的特征来表示原始特征中的大部分相关信息,去掉噪声信息,并进而提高计算效率和减小维度灾难.对于很多没有正则化的模型,特征选择和特征抽取非常必要.经过特征选择或特征抽取后,特征的数量一般会减少,因此特征选择和特征抽取 也经常称为维数约减或降维

评价指标

对于分类问题,常见的评价标准有准确率、精确率、召回率和F值等。
模型在测试集上的结果可以分为以下四种情况:
(1) 真正例(True Positive,TP):一个样本的真实类别为𝑐并且模型正确地预测为类别𝑐.
(2) 假负例(False Negative,FN):一个样本的真实类别为𝑐,模型错误地预测为其他类.
(3) 假正例(False Positive,FP):一个样本的真实类别为其他类,模型错误地预测为类别𝑐.
(4) 真负例(True Negative,TN):一个样本的真实类别为其他类,模型也预测为其他类.对于类别𝑐来说,这种情况一般不需要关注.
这四种情况的关系可以用混淆矩阵(Confusion Matrix)来表示:
在这里插入图片描述
精确率(Precision),也叫精度或查准率,类别 𝑐 的查准率是所有预测为类别𝑐的样本中预测正确的比例:
在这里插入图片描述
召回率(Recall),也叫查全率,类别𝑐的查全率是所有真实标签为类别𝑐的
样本中预测正确的比例:
在这里插入图片描述
F值(F Measure)是一个综合指标,为精确率和召回率的调和平均:
在这里插入图片描述
其中𝛽 用于平衡精确率和召回率的重要性,一般取值为1.𝛽 = 1时的F值称为F1值,是精确率和召回率的调和平均.
宏平均和微平均:为了计算分类算法在所有类别上的总体精确率、召回率和 F1值。在这里插入图片描述微平均每一个样本的性能指标的算术平均值.对于单个样本而言,它的精确率和召回率是相同的(要么都是1,要么都是0).因此精确率的微平均和召回率的微平均是相同的.同理,F1值的微平均指标是相同的.当不同类别的样本数量不均衡时,使用宏平均会比微平均更合理些.宏平均会更关注小类别上的评价指标.在实际应用中,我们也可以通过调整分类模型的阈值来进行更全面的评价, 比如AUC(Area Under Curve)、ROC(Receiver Operating Characteristic)曲 线、PR(Precision-Recall)曲线等.此外,很多任务还有自己专门的评价方式,比 如TopN准确率。
交叉验证 是一种比较好的衡量机器学习模型的统计分析方法,可以有效避免划分训练集和测试集时的随机性对评价结果造成的影响.我们可以把原始数据集平均分为𝐾 (𝐾 一般大于3)组不重复的子集,每次选 𝐾 − 1 组子集作为训练集,剩下的一组子集作为验证集.这样可以进行𝐾 次试验并得到𝐾 个模型,将这𝐾 个模型在各自验证集上的错误率的平均作为分类器的评价.

理论和定理

PAC学习理论

此希望有一套理论能够分析问题难度、计算模型能力,为学习算法提供理论保证,并指导机器学习模型和学习算法的设计.这就是计算学习理论
需要降低对学习算法能力的期望,只要求学习算法可以以一定的概率学习到一个近似正确的假设,即PAC 学习(PAC Learning).一个PAC 可学习的算法是指该学习算法能够在多项式时间内从合理数量的训练数据中学习到一个近似正确的𝑓(𝒙).
PAC学习可以分为两部分:

  • 近似正确(Approximately Correct)
  • 可能(Probably)

PAC学习理论也可以帮助分析一个机器学习方法在什么条件下可以学习到一个近似正确的分类器.如果希望模型的假设空间越大,泛化错误越小,其需要的样本数量越多。

没有免费的午餐定理

没有免费午餐定理证明:对于基于迭代的最优化算法,不存在某种算法对所有问题(有限的搜索空间内)都有效.如果一个算法对某些问题有效,那么它一定在另外一些问题上比纯随机搜索算法更差.任何算法都有局限性.必须要“具体问题具体分析”.
没有免费午餐定理对于机器学习算法也同样适用.不存在一种机器学习算法适合于任何领域或任务.

奥卡姆剃刀原理

奥卡姆剃刀的思想和机器学习中的正则化思想十分类似:简单的模型泛化能力更好.如果有两个性能相近
的模型,我们应该选择更简单的模型.因此,在机器学习的学习准则上,我们经常会引入参数正则化来限制模型能力,避免过拟合。

丑小鸭定理

丑小鸭与白天鹅之间的区别和两只白天鹅之间的区别一样大。世界上不存在分类的客观标准,一切分类的标准都是主观的

归纳偏置

在机器学习中,很多学习算法经常会对学习的问题做一些假设,这些假设就称为归纳偏置。归纳偏置在贝叶斯学习中也经常称为先验。

线性模型

线性模型(Linear Model)是机器学习中应用最广泛的模型,指通过样本特征的线性组合来进行预测的模型。在本章,我们主要介绍四种不同线性分类模型:Logistic回归、Softmax回归、感知器和支持向量机,这些模型的区别主要在于使用了不同的损失函数.

线性判别函数和决策边界

一个线性分类模型或线性分类器,是由一个(或多个)线性的判别函数 和非线性的决策函数组成。

二分类

类别标签 𝑦 只有两种取值,通常可以设为 {+1, −1} 或 {0, 1}。

多分类

指分类的类别数 𝐶 大于 2.多分类一般需要多个线性判别函数,但设计这些判别函数有很多种方式

  • “一对其余”方式:把多分类问题转换为 𝐶 个“一对其余”的二分类问题.这种方式共需要 𝐶 个判别函数,
  • “一对一”方式:把多分类问题转换为 𝐶(𝐶 − 1)/2 个“一对一”的二分类问题.这种方式共需要𝐶(𝐶 − 1)/2个判别函数。
  • “argmax”方式:这是一种改进的“一对其余”方式,共需要 𝐶 个判别函数。

“一对其余”方式和“一对一”方式都存在一个缺陷:特征空间中会存在一些难以确定类别的区域,而“argmax”方式很好地解决了这个问题。
在这里插入图片描述

Logistic 回归

Logistic 回归(Logistic Regression,LR)是一种常用的处理二分类问题的线性模型.
在这里插入图片描述

参数学习

Logistic 回归采用交叉熵作为损失函数,并使用梯度下降法来对参数进行优化.

Softmax回归

Softmax 回归(Softmax Regression),也称为多项(Multinomial)或多类的Logistic回归,是Logistic回归在多分类问题上的推广。

参数学习

Softmax 回归采用交叉熵作为损失函数,并使用梯度下降法来对参数进行优化.

感知器

是一种广泛使用的线性分类器.感知器可谓是最简单的人工神经网络,只有一个神经元。感知器是对生物神经元的简单数学模拟,有与生物神经元相对应的部件,如权重(突触)、偏置(阈值)及激活函数(细胞体),输出为+1或−1.感知器是一种简单的两类线性分类模型

参数学习

感知器的学习算法是一种错误驱动的在线学习算法。采用随机梯度下降。
在这里插入图片描述

感知器的收敛性

虽然感知器在线性可分的数据上可以保证收敛,但其存在以下不足:
(1) 在数据集线性可分时,感知器虽然可以找到一个超平面把两类数据分
开,但并不能保证其泛化能力.
(2) 感知器对样本顺序比较敏感.每次迭代的顺序不一致时,找到的分割
超平面也往往不一致.
(3) 如果训练集不是线性可分的,就永远不会收敛.

更至第三章第四节,因理论太多,基础不好停更…待学点其他的再来

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值