Softmax 函数
Softmax 将多分类的输出数值转化为相对概率
Si 表示的是当前元素的指数与所有元素指数和的比值。把一些输入映射为0-1之间的实数,并且归一化保证和为1,因此多分类的概率之和也刚好为1。
Backpropagation
通过链式法则对参数进行一层一层的求导。这里重点强调:要将参数进行随机初始化而不是全部置0,否则所有隐层的数值都会与输入相关,这称为对称失效
激活函数
用来加入非线性因素的,因为线性模型的表达力不够。RELU函数构建稀疏矩阵,也就是稀疏性,这个特性可以去除数据中的冗余,最大可能保留数据的特征,也就是大多数为0的稀疏矩阵来表示,加快计算收敛
常用的激活函数
为什么ReLU常用于神经网络的激活函数?
1.在前向传播和反向传播过程中,ReLU相比于Sigmoid等激活函数计算量小;
2.在反向传播过程中,Sigmoid函数存在饱和区,若激活值进入饱和区,则其梯度更新值非常小,导致出现梯度消失的现象。而ReLU没有饱和区,可避免此问题;
3.ReLU可令部分神经元输出为0,造成网络的稀疏性,减少前后层参数对当前层参数的影响,提升了模型的泛化性能;
参数更新方法
Batch size
太大(内存,一般来说 Batch_Size 越大,其确定的下降方向越准,由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难,容易达到局部最优,引起训练震荡越小,采用RMSprop) 太小(训练速度很慢,训练不容易收敛)
fine tune微调
利用已有模型的参数训练,少量的训练集即可以收敛
FCN全卷积
取消全连接层,使得输入图片尺寸可变
BN层
规范参数W防止梯度消失和爆炸,深度网络层次太多后,信号和梯度越来越小,深层难以训练,被称作梯度弥散。也有可能越来越大,又被称作梯度爆炸
可以事先将特征去相关,模型的输入特征不相关且满足标准正态分布N(0, 1)时,模型的表现一般较好。初始时加速训练速度,具有快速训练收敛的特性。消除W放大缩小的影响解决梯度消失与梯度爆炸。
L0、L1、L2正则化?
L0范数:计算向量中非0元素的个数。
L1范数:计算向量中各元素绝对值之和。
L2范数:计算向量中各元素平方和的开方。
L0范数和L1范数目的是使参数稀疏化。
L1范数比L0范数容易优化求解。
L2范数是防止过拟合,提高模型的泛化性能。
自编码器
用于有损压缩,输出节点少于输入,导致只能重构重要信息不能完全恢复
YOLO3
Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类。Softmax可被独立的多个logistic分类器替代,且准确率不会下降。分类损失采用binary cross-entropy loss.
对于选择softmax分类器还是个logistic分类器
取决于所有类别之间是否互斥。所有类别之间明显互斥用softmax分类器,所有类别之间不互斥有交叉的情况下最好用个logistic分类器。
YOLO置信度
因此置信度可以定义为Pr(object)IOU。很多人可能将Yolo的置信度看成边界框是否含有目标的概率,但是其实它是两个因子的乘积,预测框的准确度也反映在里面。每个单元格需要预测(B5+C)个值。如果将输入图片划分为SS网格,那么最终预测值为SS*(5+C)大小的张量。
NMS非极大值抑制算法
主要解决的是一个目标被多次检测的问题
anchor boxes
没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。
神经网络
就是学习如何利用矩阵的线性变换+激活函数的非线性变换,将原始输入空间投向线性可分/稀疏的空间去分类/回归。增加节点数:增加维度,即增加线性转换能力。增加层数:增加激活函数的次数,即增加非线性转换次数。
对卡在局部极小值的处理方法:
1.调节步伐:调节学习速率,使每一次的更新“步伐”不同;
2.优化起点:合理初始化权重(weights initialization)、预训练网络(pre-train),使网络获得一个较好的“起始点”,如最右侧的起始点就比最左侧的起始点要好。常用方法有:高斯分布初始权重(Gaussian distribution)、均匀分布初始权重(Uniform distribution)、Glorot 初始权重、He初始权、稀疏矩阵初始权重(sparse matrix)。
浅层VS深层
浅层神经网络可以模拟任何函数,但数据量的代价是无法接受的。深层解决了这个问题。相比浅层神经网络,深层神经网络可以用更少的数据量来学到更好的拟合。深层的前提是:空间中的元素可以由迭代发展而来的。
防止过拟合
(1)L2正则化
(2)Dropout(若规律不是在所有样本中都存在,则dropout会删除这样的规律), dropout只在训练的时候用,让一部分神经元随机失活。
(3)每个epoch之后shuffle训练数据,设置early-stopping
(4)加Batch Normalization为了让输出都是单位高斯激活,方法是在连接和激活函数之间加入BatchNorm层,计算每个特征的均值和方差进行规则化。
(BN首先是把所有的samples的统计分布标准化,降低了batch内不同样本的差异性,然后又允许batch内的各个samples有各自的统计分布),BN最大的优点为允许网络使用较大的学习速率进行训练,加快网络的训练速度(减少epoch次数),提升效果。
欠拟合
丢数据,增加模型复杂度
为何使用Batch Normalization
若用多个梯度的均值来更新权重的批量梯度下降法可以用相对少的训练次数遍历完整个训练集,其次可以使更新的方向更加贴合整个训练集,避免单个噪音样本使网络更新到错误方向。然而也正是因为平均了多个样本的梯度,许多样本对神经网络的贡献就被其他样本平均掉了,相当于在每个epoch中,训练集的样本数被缩小了。batch中每个样本的差异性越大,这种弊端就越严重。一般的解决方法就是在每次训练完一个epoch后,将训练集中样本的顺序打乱再训练另一个epoch,不断反复。这样重新组成的batch中的样本梯度的平均值就会与上一个epoch的不同。而这显然增加了训练的时间。同时因为没办法保证每次更新的方向都贴合整个训练集的大方向,只能使用较小的学习速率。这意味着训练过程中,一部分steps对网络最终的更新起到了促进,一部分steps对网络最终的更新造成了干扰,这样“磕磕碰碰”无数个epoch后才能达到较为满意的结果。
为了解决这种“不效率”的训练,BN首先是把所有的samples的统计分布标准化,降低了batch内不同样本的差异性,然后又允许batch内的各个samples有各自的统计分布。
为什么神经网络高效
并行的先验知识使得模型可用线性级数量的样本学习指数级数量的变体
学习的本质是什么
将变体拆分成因素和知识(Disentangle Factors of Variation)
为什么深层神经网络比浅层神经网络更高效
迭代组成的先验知识使得样本可用于帮助训练其他共用同样底层结构的样本。
神经网络在什么问题上不具备优势
不满足并行与迭代先验的任务
非迭代
该层状态不是由上层状态构成的任务(如:很深的CNN因为有max pooling,信息会逐渐丢失。而residual network再次使得迭代的先验满足)
什么造成梯度消失问题?
何为共线性, 跟过拟合有啥关联?
多变量线性回归中,变量之间由于存在高度相关关系而使回归估计不准确。
共线性会造成冗余,导致过拟合。
解决方法:排除变量的相关性/加入权重正则。
正则化方法有哪些,具体怎么实现?
L1、L2正则化,是通过在损失函数中添加一项对权重的约束来实现正则化的,L1是求权重的绝对值之和,L2是求权重的平方和;
dropout是通过设置keep_prob参数随机让部分神经元在训练过程中不起作用来实现正则化的;
早停是通过比较验证集损失和测试集损失在适当时候提前停止训练神经网络来实现正则化的;
数据扩增是在图像处理领域通过对输入图片进行裁剪、旋转等方法增大训练数据集来实现正则化的。
Momentum 优化算法原理,为什么要用?
Momentum 实际上就是指数加权平均,每次更新参数值时通过对最新的数值和以往的数值分配一定权重来实现更新过程,可以让参数平滑更新,某些情况下能够加快训练速度。
Batch Normalization 怎么实现?
Batch Normalization 就是对神经网络中的数据进行归一化,使得数据的均值为 0 ,方差为 1。在数据变化范围比较大的情况下可以对数据进行一下缩放,增强系统对输入数据的鲁棒性,加快神经网络的收敛速度,同时还可能会有一点正则化的效果。给定 HWC 的数据,具体怎么实现 BN。针对每个channel的数据分别求均值和方差,然后再带入相应公式。
解决训练样本类别不平衡问题?
现象:训练样本中,正负样本数量的比例较大。
1过采样。增加正例样本数量,使得正负样本数量接近,然后再进行学习。
2欠采样。去除反例样本数量,使得正负样本数量接近,然后再进行学习。
3设置阈值。基于原始数据集学习,当使用已训练好的分类器进行预测时,将正负样本数量的比例作为阈值嵌入到决策过程中。
分类问题的评价标准
准确率 = (TP+TN)/总样本数
精确率 = TP/(TP+FP) = 所有预测为正类样本中正类的概率
召回率 = TP/(TP+FN) = 所有真正类样本中正类的概率
2/调和平均值 = 1/精确率+1/召回率
P-R曲线:纵轴为精确率,横轴为召回率,基于平衡点(P=R)度量各个基分类器的优劣;
ROC曲线:纵轴为TPR,横轴为FPR
TPR = TP/(TP+FN) FPR = FP/(FP+TN)
AUC:ROC曲线下的面积
mAP = 所有类别的AP之和/类别数量
P = (一张图片类别C识别正确数量)/(一张图片类别C的总数量)
AP = 每张图片的P之和/图片数量
回归问题的评价指标
平均绝对值误差(MAE)
均方差(MSE)
简单介绍一下 PCA,为什么会有主要特征?
PCA 通过对数据的协方差矩阵进行奇异值分解,然后可以提取出数据的主要特征对数据进行降维。数据之间的相关性可能会导致数据冗余,因此数据就会有主要特征。
简介 TensorFlow 怎么使用?
TensorFlow 通过定义一系列操作来构成一个图模型,然后构建一个会话运行这个图模型,通过自动的反向传播来训练神经网络,并通过 TensorBoard 可视化工具来辅助调试。ResNet 反向求导有1,缺点可能很多层无用,
densnet 缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量,特征利用率大 收敛块 缺点特征爆炸DneseNet在训练时十分消耗内存
交叉熵损失函数「Cross Entropy Loss」
Pi为生成值,y为期望值!
风格迁移 gram矩阵
计算特征相关性 最小化特征层损失可以重构图像
网络参数越接近输出层越容易训练。
梯度下降法和牛顿法的优缺点?
优点:梯度下降法可用于数据量较大的情况;牛顿法收敛速度更快;
缺点:梯度下降法每一步可能不是向着最优解的方向;牛顿法每次迭代的时间长,需要计算一阶和二阶导数;
CNN:
改变全连接为局部连接,这是由于图片的特殊性造成的(图像的一部分的统计特性与其他部分是一样的),通过局部连接和参数共享大范围的减少参数值。可以通过使用多个filter来提取图片的不同特征(多卷积核)。
1)卷积:对图像元素的矩阵变换,是提取图像特征的方法,多种卷积核可以提取多种特征。一个卷积核覆盖的原始图像的范围叫做感受野(权值共享)。一次卷积运算(哪怕是多个卷积核)提取的特征往往是局部的,难以提取出比较全局的特征,因此需要在一层卷积基础上继续做卷积计算 ,这也就是多层卷积。
2)池化:降维的方法,按照卷积计算得出的特征向量维度大的惊人,不但会带来非常大的计算量,而且容易出现过拟合,解决过拟合的办法就是让模型尽量“泛化”,也就是再“模糊”一点,那么一种方法就是把图像中局部区域的特征做一个平滑压缩处理,这源于局部图像一些特征的相似性(即局部相关性原理)。
3) 全连接:softmax分类训练过程:卷积核中的因子(×1或×0)其实就是需要学习的参数,也就是卷积核矩阵元素的值就是参数值。一个特征如果有9个值,1000个特征就有900个值,再加上多个层,需要学习的参数还是比较多的。
卷积层和全连接层的区别?
1.卷积层是局部连接,所以提取的是局部信息;全连接层是全局连接,所以提取的是全局信息;
2.当卷积层的局部连接是全局连接时,全连接层是卷积层的特例;
filter尺寸的选择
通常尺寸多为奇数(1,3,5,7)
1*1卷积核的作用?
1.跨通道信息的融合;
2.通过对通道数的降维和升维,减少计算量;
常用的池化操作有哪些?
1.Max pooling:选取滑动窗口的最大值
2.Average pooling:平均滑动串口的所有值
3.Global average pooling:平均每页特征图的所有值
优点:
1.解决全连接层所造成的过拟合问题 CNN网络需要将特征图reshape成全连接层,然后再连接输出层,而global average pooling不需要此操作,直接将特征图pooling成输出层
2.没有权重参数
CNN的三个优点
sparse interaction(稀疏的交互),parameter sharing(参数共享),equivalent respresentation(等价表示)。适合于自动问答系统中的答案选择模型的训练。
几个CNN模型
CNN与DNN的区别
DNN的输入是向量形式,并未考虑到平面的结构信息,在图像和NLP领域这一结构信息尤为重要,例如识别图像中的数字,同一数字与所在位置无关(换句话说任一位置的权重都应相同),CNN的输入可以是tensor,例如二维矩阵,通过filter获得局部特征,较好的保留了平面结构信息。
filter尺寸计算
Feature Map的尺寸等于(input_size + 2 * padding_size − filter_size)/stride+1
增大感受野的方法?
空洞卷积、池化操作、较大卷积核尺寸的卷积操作
卷积层中感受野大小的计算?
卷积层的感受野大小与其之前层的卷积核尺寸和步长有关,与padding无关。基于从深层向浅层递归计算的方式。计算公式为:Fj-1 = Kj + (Fj - 1)*Sj(最后一层特征图的感受野大小是其计算卷积核大小)
反卷积、group convolution、dilated convolution?
反卷积可以理解为卷积的逆过程,最开始是为了可视化卷积过程,现在多用来生成图片;dilated convolution 叫做空洞卷积,是在卷积过程中引入空洞,可以增大感受野;group convolution是将卷积过程分散到多个 GPU 上去运算,最后再把计算结果进行合并。
低维特征映射到高维,自编码器
空洞卷积(dilated convolution)的理解?
基于FCN的语义分割问题中,需保持输入图像与输出特征图的size相同。
若使用池化层,则降低了特征图size,需在高层阶段使用上采样,由于池化会损失信息,所以此方法会影响导致精度降低;
若使用较小的卷积核尺寸,虽可以实现输入输出特征图的size相同,但输出特征图的各个节点感受野小;
若使用较大的卷积核尺寸,由于需增加特征图通道数,此方法会导致计算量较大;
所以,引入空洞卷积(dilatedconvolution),在卷积后的特征图上进行0填充扩大特征图size,这样既因为有卷积核增大感受野,也因为0填充保持计算点不变。
基于候选区域的目标检测器
(包括滑动窗口、选择性搜索(selective search,SS)、R-CNN、边界框回归器、Fast R-CNN、Faster R-CNN、候选区域网络(RPN)、基于区域的全卷积神经网络(R-FCN)
单次目标检测器
SSD、YOLO、YOLOv2、YOLOv3、YOLO9000、DSSD、RetinaNet
两目标检测器
R-CNN、Fast R-CNN、Faster R-CNN
SSD
是使用 VGG19 网络作为特征提取器,主要特点在于采用了特征融合。
预测出每个box相对于default box的位置偏移和宽高值。yolo-v3的作者觉得这样。所以yolov3的作者对于这位置偏移值都再做一个sigmoid激活,将范围缩为0-1
ResNet(残差网络)
DenseNet(密集连接卷积网络)
缓解梯度消失问题,加强特征传播,鼓励特征复用,极大的减少了参数量,特征利用率大,收敛快
缺点特征爆炸,在训练时十分消耗内存
Faster-RCNN
分别训练RPN 和fast-RCNN
Faster rcnn较为准确,但是慢十倍
Faster RCNN中 anchor 只用在最后一个卷积层,但是在SSD中,default box 是应用在多个不同层的feature map上
Feature Pyramid Network(FPN)
RCNN
真值重叠面积大于0.6的候选框进行边框回归,
RPN
它能和整个检测网络共享全图的卷积特征;faster rcnn。
ROIpooling
ROIalign固定特征维度,后面连接两个全连接层:bbox回归层(reg)和box分类层(cls)。
mask rcnn
主要贡献其实就是roi align以及加了一个mask分支
RNN:
在普通的全连接网络或CNN中,每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被成为前向神经网络(Feed-forward+Neural+Networks)。而在RNN中,神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出
引入了循环的概念,但是在实际过程中却出现了初始信息随时间消失的问题,即长期依赖(Long-Term Dependencies)问题,
为什么具有记忆功能?
这个是在RNN就解决的问题,就是因为有递归效应,上一时刻隐层的状态参与到了这个时刻的计算过程中,直白一点呢的表述也就是选择和决策参考了上一次的状态。
为什么LSTM记的时间长?
因为特意设计的结构中具有CEC的特点,误差向上一个状态传递时几乎没有衰减,所以权值调整的时候,对于很长时间之前的状态带来的影响和结尾状态带来的影响可以同时发挥作用,最后训练出来的模型就具有较长时间范围内的记忆功能。
误差回传的主力还是通过了Memory Cell而保持了下来。所以我们现在用的LSTM模型,依然有比较好的效果。
最后整个梳理一下误差回传的过程,误差通过输出层,分类器,隐层等进入某个时刻的Block之后,先将误差传递给了Output Gate和Memory Cell两个地方。
到达输出门的误差,用来更新了输出门的参数w,到达Memory Cell之后,误差经过两个路径,
1是通过这个cell向前一个时刻传递或者更前的时刻传递,
2是用来传递到input gate和block的输入,用来更新了相应的权值(注意!不会经过这里向前一个时刻传递误差)。
最关键的问题就是,这个回传的算法,只通过中间的Memory Cell向更前的时刻传递误差。在RNN中U、V、W的参数都是共享的,也就是只需要关注每一步都在做相同的事情,只是输入不同,这样来降低参数个数和计算量。
GRU对LSTM做了两个大改动:
将输入门、遗忘门、输出门变为两个门:更新门(Update Gate)和重置门(Reset Gate)。将单元状态与输出合并为一个状态:。
GRU只用了两个gates,将LSTM中的输入门和遗忘门合并成了更新门。并且并不把线性自更新建立在额外的memory cell上,而是直接线性累积建立在隐藏状态上,并靠gates来调控。
LSTM防止梯度弥散和爆炸
LSTM用加和的方式取代了乘积,使得很难出现梯度弥散。但是相应的更大的几率会出现梯度爆炸,但是可以通过给梯度加门限解决这一问题。
GAN
结合了生成模型和判别模型,相当于矛与盾的撞击。生成模型负责生成最好的数据骗过判别模型,而判别模型负责识别出哪些是真的哪些是生成模型生成的。
本质上就是一个minmax问题。其中V(D, G)可以看成是生成模型和判别模型的差异,而minmaxD说的是最大的差异越小越好。这种度量差异的方式实际上叫做Jensen-Shannon divergence。
GAN的实际计算方法
因为我们不可能有Pdata(x)的分布,所以我们实际中都是用采样的方式来计算差异(也就是积分变求和)。具体实现过程如下:
关键点:判别方程训练K次,而生成模型只需要每次迭代训练一次,先最大化(梯度上升)再最小化(梯度下降)。 但是实际计算时V的后面一项在D(x)很小的情况下由于log函数的原因会导致更新很慢,所以实际中通常将后一项的log(1-D(x))变为-logD(x)。实际计算的时候还发现不论生成器设计的多好,判别器总是能判断出真假,也就是loss几乎都是0,这可能是因为抽样造成的,生成数据与真实数据的交集过小,无论生成模型多好,判别模型也能分辨出来。
解决方法有两个: 用WGAN 、引入随时间减少的噪声
WGAN
用f-divergence来衡量两个分布的差异,而WGAN的思路是使用Earth Mover distance (挖掘机距离 Wasserstein distance)。
L1范式和L2范式的区别
L1范式是对应参数向量绝对值之和,具有稀疏性,可以用来作为特征选择,并且可解释性较强(这里的原理是在实际Loss function中都需要求最小值,根据L1的定义可知L1最小值只有0,故可以通过这种方式来进行特征选择)
L2范式是对应参数向量的平方和,再求平方根,是为了防止机器学习的过拟合,提升模型的泛化能力
优化算法及其优缺点
(1)随即梯度下降优点:可以一定程度上解决局部最优解的问题缺点:收敛速度较慢
(2)批量梯度下降优点:收敛速度较快缺点:容易陷入局部最优解
(3)mini_batch梯度下降综合随即梯度下降和批量梯度下降的优缺点,提取的一个中和的方法。
(4)牛顿法牛顿法在迭代的时候,需要计算Hessian矩阵,当维度较高的时候,计算Hessian矩阵比较困难。
(5)拟牛顿法拟牛顿法是为了改进牛顿法在迭代过程中,计算Hessian矩阵而提取的算法,它采用的方式是通过逼近Hessian的方式来进行求解。
(6)共轭梯度
(7)启发式的优化算法启发式的优化算法有遗传算法,粒子群算法等。这类算法的主要思想就是设定一个目标函数,每次迭代根据相应的策略优化种群。直到满足什么样的条件为止
梯度消失和梯度爆炸
(1)梯度消失
由于激活函数的选择导致的, 最简单的sigmoid函数为例,在函数的两端梯度求导结果非常小(饱和区),导致后向传播过程中由于多次用到激活函数的导数值使得整体的乘积梯度结果变得越来越小,也就出现了梯度消失的现象。
根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话,那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0可以采用ReLU激活函数有效的解决梯度消失的情况
(2)梯度爆炸
出现在激活函数处在激活区,而且权重W过大的情况下。但是梯度爆炸不如梯度消失出现的机会多。
根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都大于1的话,在经过足够多层传播之后,误差对输入层的偏导会趋于无穷大可以通过激活函数来解决
什么是偏差与方差?
偏差是真实值和预测值之间的偏离程度;
方差是预测值得分散程度,即越分散,方差越大;
泛化误差可以分解成偏差的平方+方差+噪声。偏差度量了学习算法的期望预测和真实结果的偏离程度,刻画了学习算法本身的拟合能力,方差度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所造成的影响,噪声表达了当前任务上任何学习算法所能达到的期望泛化误差下界,刻画了问题本身的难度。偏差和方差一般称为bias和variance,一般训练程度越强,偏差越小,方差越大,泛化误差一般在中间有一个最小值,如果偏差较大,方差较小,此时一般称为欠拟合,而偏差较小,方差较大称为过拟合。
偏差:
方差:
L1和L2正则化的作用,解释。
L1正则化是在代价函数后面加上,L2正则化是在代价函数后面增加了,两者都起到一定的过拟合作用,两者都对应一定的先验知识,L1对应拉普拉斯分布,L2对应高斯分布,L1偏向于参数稀疏性,L2偏向于参数分布较为稠密。
word2vec
是一种高效的从原始语料中学习字词空间向量的预测模型。分为CBOW(Continous Bag of Words)和Skip-Gram两种形式。其中CBOW是从原始语句推测目标词汇,而Skip-Gram相反。CBOW可以用于小语料库,Skip-Gram用于大语料库。
TF-IDF是什么?
TF指Term frequecy,代表词频,IDF代表inverse document frequency,叫做逆文档频率,这个算法可以用来提取文档的关键词,首先一般认为在文章中出现次数较多的词是关键词,词频就代表了这一项,然而有些词是停用词,例如的,是,有这种大量出现的词,首先需要进行过滤,比如过滤之后再统计词频出现了中国,蜜蜂,养殖且三个词的词频几乎一致,但是中国这个词出现在其他文章的概率比其他两个词要高不少,因此我们应该认为后两个词更能表现文章的主题,IDF就代表了这样的信息,计算该值需要一个语料库,如果一个词在语料库中出现的概率越小,那么该词的IDF应该越大,一般来说TF计算公式为(某个词在文章中出现次数/文章的总词数),这样消除长文章中词出现次数多的影响,IDF计算公式为log(语料库文章总数/(包含该词的文章数)+1)。将两者乘乘起来就得到了词的TF-IDF。传统的TF-IDF对词出现的位置没有进行考虑,可以针对不同位置赋予不同的权重进行修正,注意这些修正之所以是有效的,正是因为人观测过了大量的信息,因此建议了一个先验估计,人将这个先验估计融合到了算法里面,所以使算法更加的有效。
文本中的余弦距离是什么,有哪些作用?
余弦距离是两个向量的距离的一种度量方式,其值在-1~1之间,如果为1表示两个向量同相,0表示两个向量正交,-1表示两个向量反向。使用TF-IDF和余弦距离可以寻找内容相似的文章,例如首先用TF-IDF找出两篇文章的关键词,然后每个文章分别取出k个关键词(10-20个),统计这些关键词的词频,生成两篇文章的词频向量,然后用余弦距离计算其相似度。
为什么用 Linux,Linux 命令:wc、grep、cat、重定向?
我说 Ubuntu 下方便配置深度学习框架的环境,又问了我使用的编程工具,我说用 PyCharm、Clion 和 Code:Blocks。
wc: 统计指定文件中的字节数、字数、行数,并将统计结果显示输出(这个没用过,当时没答上来)
grep: 正则化匹配
cat: 输出文件内容
重定向:默认的标准输入设备是键盘,输出设备是终端,重定向就是在输入输出的时候重新配置输入设备和输出设备,比如输入时从文件读入和输出时写入文件。