m1
1.cv概念
视觉识别任务有分类、语义分割、目标检测、实例分割
语义分割是像素级的分割:
所以一个种类就一个颜色
目标检测:目标检测模型可以识别一张图片的多个物体,并可以定位出不同物体(给出边界框)。目标检测在很多场景有用,如无人驾驶和安防系统。
实例分割( instance segmentation)在语义分割的基础上,还需要区分出同一类不同的个体,所以同一种类的不同物品也是不同颜色;
运动视盲:人对图像的主体更关注,而容易忽略细节
2.全连接神经网络
项目:fcn.ipynb
2.softmax
Softmax函数将n维实数向量映射到n维0-1的向量,第i个数可以视为该样本属于第i个类的概率,适合分类问题
3.CNN
神经网络的基础上多了卷积层和池化层
详细:
https://www.cnblogs.com/pjishu/p/10234414.html
https://blog.csdn.net/love__live1/article/details/79481052
https://www.cnblogs.com/pjishu/p/14394352.html
2、batch、epoch
每次从所有样本中随机选择 batch-size 个样本,用着 batch-size 个样本更新权重
1个epoch表示过了1遍训练集的所有样本;
当batch-size=1,每次从所有样本中选一个样本
4.New和malloc的区别
1️⃣、申请的内存所在位置不同
new操作符从自由存储区(free store)上为对象分配内存空间。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。
malloc函数从堆上动态内存。
2️⃣、返回类型安全性不同
new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。
malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
5、rnn结构
RNN只能记住近期的信息,对应长期依赖关系,也就是需要参考的信息离当前预测任务特别的远,超过了8到10个步长,可能就会出现"梯度消失"的问题,就是之前的信息会呈几何级丢失,LSTM外部结构和RNN一样,是RNN的改进。LSTM 还可以使神经网络在记忆最近的信息和很久以前的信息之间进行切换,让数据自己决定哪些信息要保留,哪些要忘记。它可以解决梯度消失的问题,能轻松地学习到长期依赖的信息,LSTM 可以往cell状态中添加或者移除信息,这些都是由各种门结构控制的。各种门结构可以选择性地让信息通过,sigmoid层输出0到1之间的数字,描述该组件让多少信息通过, 表示让所有信息都不通过,而 表示让所有信息都通过。 LSTM 把训练信息分为长期信息 和短期信息 ,长期信息可以通过贯穿cell顶部的水平线很容易地传输到较远的cell。
keras LSTM编程和图示:
其中A是1个LSTM单元,B也是
先看RNN单元结构:
LSTM单元,内置了神经网络:
LSTM的内部原理:
【遗忘门】
LSTMs 的第一步是决定要从cell状态中丢弃什么信息,这是由一个被称为“遗忘门”的sigmoid 网络层实现的,遗忘门用来忘记导致错误预测的信息。
它的输入为 和 ,并为cell状态中的每个值输出为一个介于 和 之间的数字。 表示“完全保留这个值”,而 表示“完全删除这个值”。
比如还是那个语言模型的例子,它试图根据前面所有的单词来预测下一个单词,这时它根据当前对象的性别信息,来预测正确的代词。当有新对象出现时,就需要忘记之前对象的性别信息。
【输入门】
下一步是决定要在cell状态中存储什么新信息。这有两个部分。
首先,tanh 网络层创建一个可以添加到cell状态的向量 ;然后 sigmoid 网络层为 中的每个值输出为一个介于 和 之间的数字,来决定要哪些状态值。
在下一步中,需要结合这两者来创建状态的更新值。
对于语言模型的例子,要在cell状态中加入新对象的性别,以取代要遗忘的旧对象。
【更新门】
我们现在知道了遗忘门决定是否遗忘遗忘之前的信息,学习门决定是否更新当前的信息,现在就需要将旧的cell状态 更新为新的cell状态 了。
用旧状态乘以 ,忘记之前决定忘记的信息;然后加上更新值 。
对于语言模型,就是在cell状态中删除旧对象的性别信息,并添加新对象的性别信息。
【输出门】
最后,我们需要决定我们要输出什么,该输出基于上面得到的新cell状态。
首先sigmoid网络层决定要输出cell状态的哪些部分,然后使cell状态通过tanh网络层,并将结果乘以sigmoid层的输出,这样就只输出我们决定输出的部分。
还是对于语言模型,之前已经保留了新对象的性别信息,然后想输出一个与新对象相关的动词,比如是单数还是复数。
总结:
输入门 用于控制当前候选状态 有多少信息需要保存。
遗忘门 用于控制上一个状态 需要遗忘多少信息。
输出门 用户控制当前时刻的状态 有多少信息需要输出给
双向RNN:
能考虑到从前到后,也能考虑到从后到前的逻辑,代码中套一个tf.keras.layers.Bidirectional就好了
详细:https://zhuanlan.zhihu.com/p/42717426
23、Skip-gram 模型和CBOW 模型
word2vec有2种模型Skip-gram 模型和CBOW 模型
【Skip-gram 模型】:一个词语作为输入,来预测它周围的上下文
以skip-gram模型为例(假如a的上下文只取b):
word2vec思想是是把词从超长的one-hot转换成维度较低的向量,一般是50-300维度=隐层神经元个数,转换过程是:单词a的one-hot向量 * embedding矩阵 = > 单词a的词向量
这个embedding 矩阵是V*N的,V是总词数,N是词向量维数,每一行就是一个词语的词向量,用神经网络来解释,输入层的神经元个数=one-hot维度=V,隐层的神经元个数=词向量维度=N
从输入层到隐层的参数就是embedding矩阵,神经网络的训练就是不断地更新这个embedding矩阵,这个隐层的输出就是单词a的词向量,又等于值为1的输入神经元所发出的所有权重
实际不做乘法,而是直接从embedding矩阵中直接取行出来,第三层输出V维向量,再通过softmax层输出属于每个词的概率
即预测后面的词是该词的概率,真实值是单词a的标签,如词语a附近的词语b的one-hot向量,神经网络中W1和W2都是需要更新的参数,但是我们最后只要W1,损失函数是多分类交叉熵(V个类)
对于标签是多个词的情况,cost function 是单个 cost function 的累加
优化1——负采样《=》NCE loss:
将原来的输出层去掉,加入新的输入端口来输入类别向量,新的输出层,形成双塔结构:
此时每个类别都有一个自己的可以被训练的类别向量,可随机初始化,该向量和左端输出向量的长度一致,然后可以经过多层神经网络,但右端最后的输出向量长度和左边一致
为了简单可以不设计神经网络层,塔尖的最后层可以设计为输出一个值(方式1),或者一个sigmoid层(方式2),得到代表输入属于右边类别的概率值
塔尖的其他层可以是多层神经网络,也可以不设计其它层
假定类别标签3类:Y1,Y2,Y3,正样本(X1,Y1)通过模型后的结果是h1,负样本(X1,Y2)、(X1,Y3)通过模型后的结果为h2,h3
方式1:h1,h2,h3通过softmax得到三个概率值,然后极大似然法(等价于损失函数最小)使得h1(1-h2)(1-h3)最大,梯度下降求对应的参数
方式2:模型输出层加一个sigmoid层,这样直接得到h1',h2',h3',然后使得h1'(1-h2')(1-h3')最大
双塔模型的本质就是针对类别太多的问题,如预测是语料库的哪个词,将多分类问题转化成二分类问题
具体的,对于这里的单词模型,输入正样本,并采集num_sampled=K个负样本,一次训练这K+1个样本
根据事实,单词a最后的预测结果是单词b,则a和b构成正样本,另外采样c1,c2..ck,,a和ci构成负样本,此时每个类别(单词)都有自己的参数向量
假定采用方式2:
P(正样本) = P(1 | a,b ) = sigmoid( a的词向量 .* b的参数向量 )
P(负样本1) = P(0 | a,c1 ) = 1 - sigmoid( a的词向量 .* c1的参数向量 ) = sigmoid( - a的词向量 .* c1的参数向量 )
....
目标函数=P(正样本)P(负样本1)P(负样本2)...P(负样本K),对目标函数取log并加负号就是nce_loss
通过极大似然估计使得目标函数最大,等价于NCE loss最小,然后采用梯度下降法更新模型参数,如embedding矩阵E,和参数向量,最后取E
优化2——分层softmax:词向量后接上一个哈弗曼树。
【CBOW 模型】:一个词语的上下文作为输入,来预测这个词语本身
详细:
https://zhuanlan.zhihu.com/p/26306795
https://blog.csdn.net/weixin_40901056/article/details/88568344
24、判别式模型和生成式模型?
判别式模型:
1️⃣假定每个样本都服从某种分布 P( y=? | x ),分布里面的参数未知,需要学习:设样本x1为:(x11,x12,x13...,x1p , y1) ,例如对于lr,P( y=1 | x1 ) = sigmoid ( w*x1 )
2️⃣计算当前所有样本发生的概率积(似然函数):L = P( y1 | x1)P( y2 | x2)P( y3 | x3)...P( yn | xn)
3️⃣求 L 最大时(等价于损失函数最小时)的分布参数:L偏导=0 / 梯度下降法
4️⃣分布确定后进行新样本预测,例如对于lr,计算 P(y | 新样本x )
常见的判别模型有:K近邻、SVM、决策树、感知机、线性判别分析(LDA)、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、条件随机场
生成式模型:
假定标签和特征分别服从某种分布,但是里面的参数未知
通过最大化概率积P(y1|x1)P(y2|x2)P(y3|x3)...P(yn|xn)求出参数,进而比较 P(y=i | 预测x)之间的大小,那个大就属于哪个类
此处根据贝叶斯公式,由于比较P(y|x)之间的大小和比较联合概率P(x,y) = P(x|y)P(y)之间的大小关系等价,所以就是最大化联合概率积
P(x1|y1)P(y1)*P(x2|y2)P(y2)*P(x3|y3)P(y3)*....*P(xn|yn)P(yn)
常见的生成模型有:朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机
25、TensorFlow中padding2个方式“SAME”和“VALID”
padding = “SAME”:补零以遍历特征图每个地方,输出大小=输入大小/步长,再向上取整
padding = “VALID”:不填充,输出大小=(输入大小-卷积核大小+1) /步长,再向上取整
例如:输入是5*5*3,滤波器是3*3*3,7个,padding= “SAME”,步长s = 2,因此输出是(5/2=2.5),2.5向上取整是3,结果是 3*3*7
如果将padding的值改成“VALID”,则(5-3+1)/2=1.5,1.5向上取整是2,最后的输出结果大小是 2*2*7
10、fasttext
FastText是Facebook公司2016年开源的项目,主要用于构建词向量和文本分类。FastText最大的优点是又快又好,输入是一个句子,输出是句子的预测标签,属于有监督学习
FastText在输入层添加了词力度的n-gram特征,这样相对词袋模型可以引入部分语序,以英文举例,I love NLP。词粒度的n-gram(这里假如n为2)则会得到i-love和love-NLP。
num_sampled=K个负样本
关键词提取算法主要有两类:无监督关键词提取方法和有监督关键词提取方法。
1、无监督关键词提取方法
该方法是先抽取出候选词,然后对各个候选词进行打分,然后输出topK个分值最高的候选词作为关键词。
方法主要有三类:
基于统计特征的关键词提取算法的思想是利用文档中词语的统计信息抽取文档的关键词;(TF,TF-IDF)
基于词图模型的关键词提取首先要构建文档的语言网络图,然后对语言进行网络图分析,在这个图上寻找具有重要作用的词或者短语,这些短语就是文档的关键词;(PageRank,TextRank)
基于主题关键词提取算法主要利用的是主题模型中关于主题分布的性质进行关键词提取;(LDA)
2、有监督关键词提取方法
将关键词抽取过程视为二分类问题,先提取出候选词,然后对于每个候选词划定标签,要么是关键词,要么不是关键词,然后训练关键词抽取分类器。当新来一篇文档时,提取出所有的候选词,然后利用训练好的关键词提取分类器,对各个候选词进行分类,最终将标签为关键词的候选词作为关键词。
3、无监督方法和有监督方法优的缺点
无监督方法不需要人工标注训练集合的过程,因此更加快捷,但由于无法有效综合利用多种信息,所以效果无法与有监督方法媲美,有监督的文本关键词提取算法需要高昂的人工成本,因此现有的文本关键词提取主要采用适用性较强的无监督关键词提取。
https://blog.csdn.net/asialee_bird/article/details/96454544