oa系统哪个品牌好西安官网seo公司
大概看了一点动手学深度学习,简单整理一些概念。
一些问题
测试结果
Precision-Recall曲线定性分析模型精度average precision(AP) 平均精度
Precision :检索出来的条目中有多大比例是我们需要的。
一些概念
- 损失函数(loss function,或cost function):一个可优化的目标函数,量化目标的实际值与预测值之间的差距。
- 张量(tensor):n维数组。
- 维度:向量的维度指向量的元素数量,张量的维度指其具有的轴(向量)数。
- 梯度(gradient):指向变化最大的方向。
- 梯度下降法:在每个步骤中,检查每个参数,看看如果仅对该参数进行少量变动,训练集损失会朝哪个方向移动。 然后,在可以减少损失的方向上优化参数。
- 训练误差和泛化误差(generalization error):前者是在训练集上的误差,后者是测试的误差。
- 学习率太小导致更新慢,需要更多迭代,太大会难以收敛。
监督学习
在给定输入特征的情况下预测标签(可以是已知输入的,也可以是作为预测结果输出的)。
- 回归(regression)问题:标签是任意数值。预测所依据的自变量称为特征。
- 分类(classification)问题:标签是类别。
- 层次分类(hierarchical classification):宁愿错误地分入一个相关的类别,也不愿错误地分入一个遥远的类别。
- 序列学习:输入是连续的,例如通过前一帧的图像,对后一帧作出更好的预测。序列学习需要摄取输入序列或预测输出序列,或两者兼而有之。
无监督学习
没有标签,数据中不含目标的机器学习。
强化学习
智能体(agent)在一系列的时间步骤上与环境交互。 在每个特定时间点,智能体从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后智能体从环境中获得奖励(reward)。
问gpt下面这段话中端到端的具体含义:
毋庸置疑,深度学习方法中最显著的共同点是使用端到端训练。 也就是说,与其基于单独调整的组件组装系统,不如构建系统,然后联合调整它们的性能。 例如,在计算机视觉中,科学家们习惯于将特征工程的过程与建立机器学习模型的过程分开。 Canny边缘检测器 (Canny, 1987) 和SIFT特征提取器 (Lowe, 2004) 作为将图像映射到特征向量的算法,在过去的十年里占据了至高无上的地位。 在过去的日子里,将机器学习应用于这些问题的关键部分是提出人工设计的特征工程方法,将数据转换为某种适合于浅层模型的形式。 然而,与一个算法自动执行的数百万个选择相比,人类通过特征工程所能完成的事情很少。 当深度学习开始时,这些特征抽取器被自动调整的滤波器所取代,产生了更高的精确度。
pytorch一些数学知识
A = torch.arange(20).reshape(5, 4) # 得到一个5x4矩阵
# axis = 几,哪一个轴(维度)就会被降维而消失
row_sum = A.sum(axis = 0) # 按行求和,即将一列中的所有元素求和,且降维成一个向量,得到[40, 45, 50, 55]
col_sum = A.sum(axis = 1, keepdims = True) # 按行求和,且不降维,得到一个5x1矩阵
# 广播机制: 当用一个向量加一个标量时,标量会被加到向量的每个分量上。
范数
向量的范数将其映射为标量,反映向量的大小。
L 2 L_2 L2范数=各元素平方和的平方根。torch.norm(x)
L 1 L_1 L1范数=各元素绝对值之和。torch.abs(x).sum()
矩阵的Frobenius范数是其元素平方和的平方根。
线性神经网络
线性回归
仿射变换通过加权和对特征进行线性变换(linear transformation), 并通过偏置(bias)项来进行平移(translation)。
线性回归与其他大部分模型不同的是,它的解可以用一个公式简单地表达出来, 这类解叫作解析解(analytical solution)或显式解。
梯度下降法
不断地在损失函数递减的方向上更新参数来降低误差。最简单的方法是计算损失函数(数据集中所有样本的损失均值) 关于模型参数的导数(在这里称为梯度)。 但因为在每一次更新参数之前必须遍历整个数据集,所以实际中的执行会非常慢。因此,通常采用小批量随机梯度下降(minibatch stochastic gradient descent)在每次需要计算更新的时候随机抽取一小批样本,每个小批量中的样本数即batch size。batch size太小不利于并行计算,太大则浪费资源。并且公式中的伊塔表示学习率,这些训练前手动设置,不在训练中更新的参数称为超参数。
- 全连接层(fully-connected layer):每个输入都通过矩阵向量乘法得到每个输出。
softmax回归
对于分类问题,采用独热编码(one-hot encoding)表示类别,独热编码是一个向量,其分量和类别一样多。例如要识别的分类为{猫,狗,鸡},对应的标签y就分别是(1, 0, 0), (0, 1, 0)和(0, 0, 1)。
作为输出,数据本身可能是任意的值,但我们想要将其视为概率,这就需要校准(calibration)来将其变为非负且总和为1,softmax函数完成了该功能。它首先做求幂变成非负,然后除以总和来规范化到0~1的范围。
多层感知机
在输入层和输出层之间可以加上若干个隐藏层,来实现从线性到非线性的转变,隐藏层不能使用线性函数,否则会等价于不使用隐藏层。
激活函数
因此隐藏层使用非线性函数,即激活函数(activation function)来确定神经元是否应该被激活,激活函数的输出
称为活性值(activations)。
过拟合(overfitting)
模型在训练集上表现良好,但不能推广到测试集。表现的形式就是训练集的损失函数正常下降,但测试集的损失函数并没有,甚至上升,且高于训练集的损失函数。
以下情况容易过拟合。
- 可调整参数的数量(自由度)很大时。
- 权重的取值范围较大时。
- 训练样本少时。
正则化用于解决过拟合问题。
权重衰退(weight decay)
权重衰退是正则化的技术之一,也叫L2正则化。主要是针对上述提到的第二点情况进行优化。给损失函数加上一个惩罚项,将原来的训练目标最小化训练标签上的预测损失,调整为最小化预测损失和惩罚项之和。
L o s s ( ) + l a m b d a / 2 ∗ ∣ ∣ w ∣ ∣ 2 Loss() + lambda / 2 * ||w||^2 Loss()+lambda/2∗∣∣w∣∣2其中lambda用来控制衰退的程度,过小就丧失了意义,过大则可能欠拟合。在pytorch框架中一般用weight_decay
表示。
暂退法(dropout)
将一些输出项随机置为0,将其他的项扩大以保持数学期望不变。常作用在多层感知机的隐藏层输出上。实际上就是在向前传播的过程中,计算每一内部层的同时丢弃一些神经元。
卷积神经网络(convolutional neural networks,CNN)
- 平移不变性(translation invariance):不论检测对象在图像中的哪里,神经网络的前面几层应该对相同的图像区域具有相似的反应。
- 局部性:神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系。最终可以聚合这些局部特征,以在整个图像级别进行预测。
卷积层
对全连接层利用以上两点得到卷积层。因此也可以看出,卷积层是对全连接层的简化,需要更少的参数。
卷积层将输入和卷积核矩阵进行卷积,加上偏移后得到输出。其中卷积核和偏移是可学习的参数,而核矩阵的大小是超参数。
卷积层的输出有时被称为特征映射(feature map)。而在卷积神经网络中,某一层的任意元素x,其感受野(receptive field)是指在前向传播期间可能影响x计算的所有元素(来自x的所有先前层)。
在卷积时可能会丢失边界信息,针对于此可以采用填充(padding)操作。从另一个角度想,卷积也会减少输出的
大小,而如果要输出较少的维度,就需要作大量的卷积计算,这时就可以用到步幅,来让卷积核每次移动不止一个像素。
卷积核不一定是一个二维的,在处理多通道图像时也可以是纵向的。1x1卷积核通常用于调整网络层的通道数量和控制模型复杂性。移除全连接层可减少过拟合。
池化(pooling)层
池化(也叫汇聚)层通常放在卷积层之后,目的是降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。
与卷积核不同的是,池化层不包含参数,只在原输入上进行运算。池化层分为最大池化(max pooling)和平均池化(average pooling)。 使用max pooling以及大于1的步幅,可减少空间维度。
批量归一化(batch normalization)
训练时,数据在最底部,而损失出现在最后。反向传播时后面的层训练得快,底部则较慢,但底部层一经变化,后面的所有都要跟着重新学习,因此导致收敛的速度变慢。
批量归一化放在激活函数前,通过固定批量中的均值和方差,可以持续加速深层网络的收敛速度。
另外,注意若batch_size为1,那么批量归一化是无效的。因为并不存在均值方差。
计算机视觉
图像增广
对训练图像进行一系列的随机变化之后,生成相似但不同的训练样本,从而扩大了训练集的规模。且可以减少模型对某些属性的依赖,从而提高模型的泛化能力。
常见的做法如翻转,切割,变色等。
微调(fine-tuning)
一个神经网络一般可以分为两块:很多层的特征提取将原始像素变成容易线性分割的特征(变得可学习),以及一个线性分类器。
假设现在要训练的模型是目标模型,微调的思路是,在另一个源数据集上训练源模型,将其特征提取层的参数直接复制到目标模型上(使用相同的网络架构),此时在目标数据集上进行训练的话,输出层将从头开始进行训练,而所有其他层的参数将根据源模型的参数进行微调。这也就是迁移学习(transfer learning),即将从源数据集学到的知识迁移到目标数据集(源数据集和目标数据集应该是相似的东西,如猫和狗,或热狗和香蕉)。
总结地说,微调通过使用在大数据上得到的预训练好的模型来初始化模型权重来提升精度。
锚框
用边界框(bounding box)描述位置。
在输入图像中,以每个像素为中心生成多个放缩比和宽高比(aspect ratio)不同的边界框,即锚框(anchor box)。然后判断锚框中是否有目标,若有则调整边界从而更精准地预测目标的真实边界框(ground-truth bounding box)。
以每个像素为中心会生成过多的锚框,因此对于大目标可以采样较少的区域,小目标可以采样较大的区域。
在训练集中,将每个锚框视为一个训练样本。 训练时,需要每个锚框的类别(class)和偏移量(offset)标签,其中前者是与锚框相关的对象的类别,后者是真实边界框相对于锚框的偏移量。 在预测时,为每个图像生成多个锚框,预测所有锚框的类别和偏移量,根据预测的偏移量调整它们的位置以获得预测的边界框,最后只输出符合特定条件的预测边界框。
IoU
用交并比(intersection over union,IoU)衡量锚框覆盖目标的程度。具体地说就是用锚框和真实边界框的相交面积比上相并面积,0表示无重合,1表示完全重合。给每个锚框要么标注成背景,要么关联到一个边界框。背景类别的锚框通常被称为负类锚框,其余的被称为正类锚框。
假设有n个真实边界框,m个锚框,计算每个锚框对每个真实边界框的IoU,生成一个mxn的矩阵。每次从中选取最大的IoU,将其对应的真实边界框分配给对应的锚框,并删除该元素所在的行列。
非极大值抑制
当有许多锚框时,可能会输出许多相似的具有明显重叠的预测边界框,都围绕着同一目标。 为了简化输出,就需要使用非极大值抑制(non-maximum suppression,NMS)合并属于同一目标的类似的预测边界框。
R-CNN算法
区域卷积神经网络(region-based CNN,R-CNN)。
若每个锚框不一样大,怎么让他们可以在一个batch里训练呢,就要用到兴趣区域(region of interest, RoI)池化层(相当于一个max pooling),将他们变成固定大小。
语义分割
语义分割(semantic segmentation)识别每一个像素并将其分类。
全卷积网络
卷积不会增加输入的高宽,有时候需要将图片放大,即上采样(upsampling)。可以用转置卷积(transposed convolution)增大高宽。
全卷积网络(fully convolutional network,FCN)通过1x1卷积将通道数变为类别数,然后利用转置卷积将中间层特征图的高和宽变换回输入图像的尺寸。
风格迁移
风格迁移(style transfer)使用内容损失、风格损失和全变分损失将内容图像的风格转为风格图像。
合成的图像中会有大量高频噪点,需要用全变分损失来进行全变分去噪(total variation denoising)。