Rotation
unsupervised representation learning by predicting image rotations
摘要
1、ConvNets
优点:由于强大的能力在CV领域大量的使用
缺点:需要大量的人工标注的数据,昂贵且不易大量获得
2、unsupervised
优点:不需要人工注释
3、 our work
提出自己的想法:学习图像特征通过训练ConvNets识别输入图片的2d旋转。
定性定量的证明了:这提供了一个强有力的监督信号来学习图片的语言。
在各种各样的无监督特征学习benchemarks上进行了实验,特别的是,实验效果很好,相比之前最先进的无监督方法有了明显的进步,缩小了与supervised 特征学习之间的差距。
作者在 ImageNet classification 、 PASCAL classification、PASCAL segmentaion 和CIFAR-10 classification上进行了实验。
code
介绍
简单介绍了前人的一些自监督方法,并着重说了自己与他人的不同。
介绍了下自己的贡献:简单并且又有效,提供了一个强有力的辅助监督信号;并做了大量的实验;最后强调了下自己的方法能够缩小无监督和有监督学习之间的差距。
方法
概述
研究目标:训练出一个CNN网络结构\(F\left(X^{y *} \mid \theta\right)\)预测图片的旋转角度。
主要解决的问题是:$ {} {i=1}^{N} (X_{i}, )\(,其中\)(.)\(是\)(X_{i}, )=- {y=1}^{K} (F^{y}(g(X{i} y) ))$
主要方法
将图片分别旋转0、90、180、270度,然后对于旋转后的照片进行预测。
旋转的算法
以下算法都是对图片的矩阵进行操作
90:先转置再讲矩阵上下颠倒
180:先上下颠倒再左右颠倒
270:先上限颠倒再进行转置
改进的算法
旋转算子: \[ S=\left[\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right] \] 则一个图片的位置坐标为 \[ X'=\left[\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right]*{X} \] 当\(\theta =0\)时: \[ S=\left[\begin{array}{cc} 1 & 0\\ 0 & 1 \end{array}\right] \]
优点
1、和自监督相比需要同等的算力,相同的收敛速度
2、能处理大规模数据集
3、相比其他无监督和自监督方法,rotation不需要太多的预处理过程
实验结果
数据集:CIFA-10、ImgaeNet、PASCAL、Placses205
实验任务:目标检测、目标分割、图像分类
现象:随着RotNet深度的增加,网络能够在更早的层中生成特征提高物体识别的准确度。
猜想:随着模型深度的加深,网络的头部结构变得更加的复杂,使得早期特征对于旋转预测任务的特异性降低。
实验细节设置
一般是是前两层网络结构采用了RotNet,学习到一定的特征。最后在第三层采用了目标检测的分类器,实现目标前侧的下游任务。
在样本数数量较少时,半监督模型的准确率比有监督时要好。
pytorch
回归 vs 分类
回归估计一个连续值,单连续数值输出,自然区间R
分类估计一个离散值,通常为多输出,输出i为第i类的置信度 \[ \hat{y}_{i}=\frac{\exp \left(o_{i}\right)}{\sum_{k} \exp \left(o_{k}\right)} \]
softmax回归
softmax回归的输出层是一个全连接层。
softmax运算符
softmax解决了输出层的输出值的范围不确定的问题;由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。
softmax将输出值变换成值为正且和为1的概率分布: \[ {\hat y}_1,{\hat y}_2,{\hat y}_3 = sfotmax(o_1,o_2,o_3) \] 其中 \[ \hat{y}_{1}=\frac{\exp (o_1)}{\sum_{i=1}^{3} \exp \left(o_{i}\right)},\hat{y}_{1}=\frac{\exp (o_2)}{\sum_{i=1}^{3} \exp \left(o_{i}\right)},\hat{y}_{1}=\frac{\exp (o_3)}{\sum_{i=1}^{3} \exp \left(o_{i}\right)} \] 容易看出\({\hat y}_1+{\hat y}_2+{\hat y}_3=1\)且$0 {1}, {2}, _{3} $.
softmax并不改变预测类别的输出结果。
小批量样本分类的矢量计算表达式
为了进一步提升计算效率,通常对小批量数据进行矢量计算。
对于给定的一个小批量样本,其批量大小为n,输入个数(特征数)为d,输出个数(类别数)为q。设批量特征为\(\boldsymbol{X} \in \mathbb{R}^{n \times d}\)。假设softmax回归的回归权重和偏差参数分别为\(\boldsymbol{W} \in \mathbb{R}^{d \times q}\)和\(\boldsymbol{b} \in \mathbb{R}^{1 \times q}\)。softmax回归的矢量计算表达式为 \[ \begin{array}{l} \boldsymbol{O}=\boldsymbol{X} \boldsymbol{W}+\boldsymbol{b} \\ \hat{\boldsymbol{Y}}=\operatorname{softmax}(\boldsymbol{O}) \end{array} \]
交叉熵损失函数
交叉熵损失函数思路:想要预测分类结果正确并不需要预测概率完全等于标签概率。而只需要正确的标签概率比其他的预测值都大就行。
改善的方法是使用更适合衡量两个概率分布差异的测试函数。其中,交叉熵(cross entropy)是一个常用的方法: \[ H\left(\boldsymbol{y}^{(i)}, \hat{\boldsymbol{y}}^{(i)}\right)=-\sum_{j=1}^{q} y_{j}^{(i)} \log \hat{y}_{j}^{(i)} \] 其中带下标的\(y^{(i)}_j\)是向量\(\boldsymbol y^{(i)}\)中非0即1的元素,即是元素值。
交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。
假设训练数据集的样本数为n,交叉熵损失函数定义为 \[ \ell(\boldsymbol{\Theta})=\frac{1}{n} \sum_{i=1}^{n} H\left(\boldsymbol{y}^{(i)}, \hat{\boldsymbol{y}}^{(i)}\right) \] 其中\(\boldsymbol{\Theta}\)代表模型参数。
数据库2-关系代数
关系模式
数据结构
关系
关系模式是型,是静态的、稳定的。而关系是关系模式的具体的值,是动态的、变化的
候选码
关系中的一组属性能够唯一的标识一个元组,而且这组属性任何一个属性去掉后都不能具有标识作用,则这组属性被称为候选码
主码
从多个候选码中选一个作为标识,这个候选码被称为主码
外码
参照关系R中的一个或一组属性F是被参照关系S中的主码,则F就是外码
关系的完整性约束
实体完整性
关系中的主码不能为空
参照完整性
参照关系R上的外码F是被参照关系S上的主码,则F必须是空值或者是S中某个元组的主码值
在参照完整性中,如果外码F不是关系R上的主属性,则F可以为空。
用户定义的完整性
反映了某一具体应用所设计的数据必须满足的语义要求。
关系代数
五个基本运算:并、差、选择、投影、笛卡尔积
常用的运算
运算 | 符号 |
---|---|
选择 | σ |
投影 | π |
连接 | ⋈ |
除 | ÷ |
数据库1-绪论
数据库基本概念
数据(D)
定义:描述事务顶点符号记录
种类:数字、文字、图形、图像、音频、视频等
数据的含义称为数据的语义,数据与语义是不可分的。
数据库(DB)
DB是长期存储在计算机内,有组织的、可共享的 、大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户所共享。
数据库管理系统(DBMS)
DBMS是对数据库进行管理的大型软件,它是数据库系统的核心组成部分。DBMS是位于用户和操作系统之间的一层数据管理软件,和操作系统一样属于基础软件。
主要功能:
- 数据定义功能
- 数据组织、存储和管理
- 数据操纵功能
- 数据库的事务管理和运行管理
- 数据库的建立和维护功能
数据库系统(DBS)
数据库系统是由数据库、数据库管理系统(及其应用开发工具)、应用系统和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。
数据库的发展
人工管理 | 文件系统 | 数据库管理 | |
---|---|---|---|
应用背景 | 科学计算 | 科学计算、数据管理 | 大规模的数据管理 |
硬件背景 | 无直接存取的存储设备 | 硬盘、磁鼓 | 大容量磁盘、磁盘阵列 |
软件背景 | 没有操作系统 | 有文件系统 | 有数据库管理系统 |
处理方式 | 批处理 | 联机实时处理、批处理 | 联机实时处理、批处理、分布处理 |
数据的管理者 | 用户(程序员) | 文件系统 | 数据库管理系统 |
数据面向的对象 | 某一项应用程序 | 某一应用 | 显示世界 |
数据的共享程度 | 无共享、冗余程度大 | 共享性差、冗余度大 | 共享性高、冗余度小 |
数据的独立性 | 不独立,完全依赖于程序 | 独立性差 | 具有较高的物理独立性和一定的逻辑独立性 |
数据的结构化 | 无结构 | 记录年内有结构化、整体无结构 | 整体结构化,用于数据模型描述 |
数据的控制能力 | 应用程序自己控制 | 应用程序自己控制 | 由数据库管理系统提供数据的安全性、完整性、并发控制和恢复能力 |
- 数据库系统实现整体数据的结构化,这是数据库的主要特征之一,也是数据库系统和文件系统的本质区别。
- 数据库系统的三层视图:视图层、逻辑层和物理层。
数据模型
数据模型是一种模型,是一种对现实世界数据特征的抽象。
数据模型是数据库系统的核心和基础。
数据模型应满足三方面要求:
- 能比较真实的模拟现实世界
- 容易为人所理解
- 便于在计算机上实现
数据模型的组成要素:
- 数据结构(静态特征):描述数据库的组成对象及对象之间的关系(静态特征)
- 数据操作(动态特征):指数据库中各种对象的实例允许的操作的集合,包括操作及有关的操作规则
- 数据约束条件:是一组完整性规则的集合
概念模型(信息模型)
概念模型按照用户的观点来对数据和信息建模,用于数据库的设计。
概念模型是现实世界到机器世界的一个层次。
可以用E-R图(实体-联系图)表示st=>start: 基本概念
基本概念
实体
属性
码/建(key)
实体型
实体集
联系:实体之间的联系通常是指不同实体集之间的联系,实体之间的联系有一对一、一对多和多对多等多种类型。
逻辑模型
主要包括层次、网状、关系、面向对象和半结构化数据模型等,按计算机系统的观点对数据建模,用于DBMS实现。
层次模型:用树型结构表示实体及实体间的联系的数据模型
定义:
- 有且只有一个结点没有双亲结点,这个结点称为根结点
- 根以外的其他结点有且仅有一个双亲结点。
每个结点表示一个记录类型,记录类型之间的联系用结点之间的连线(有向边)表示,这种连线是父子之间的一对多的联系。
操作:增、删、查、改
约束条件:
- 无相应的双亲结点值就不能插入子女的结点值
- 删除双亲结点,则相应的子女结点也同时删除
- 更新操作时,应更新所有相应记录,以保证数据的一致性
优点:
- 简单易用
- 自然表示1:M关系
- 速度较快
缺点:
- 不能直接表示m:n关系(须引入冗余结点)
- 插入、删除操作限制较多
- 在层次模型中有一定的存取路径,查子女须经过双亲(从上到下,从左到右:他仅允许自顶向下的单向查询,随机存取效率低)
网状模型:用网状结构表示实体及实体间联系的数据模型
表示方法:
- 一个结点表示一个实体
- 有向连线表示实体间联系
- 两个结点之间的联系不唯一,所以联系必须命名
特征:
- 可以有多个结点无父节点
- 至少有一个结点有多个父节点
优点:
- 直接表示m:n 联系
- 存取效率高
缺点:
- 结构复杂
- DDL、DML复杂
- 一次存取一个记录值
- 应用程序与数据结构相互依赖,应用程序在访问数据时必须选择适当的存取路径
约束:
- 插入不受限制
- 删去双亲,子女不受影响
关系模型:以集合论中的关系概念为基础发展起来的数据模型
从用户角度来看,关系模型是用二维表格表示实体及其间联系的数据模型
一个关系就是没有重复行和重复列的二维表
关系模型要求关系必须是规范的,关系中的每一个分量必须是一个不可分的数据项,不允许表中还有表。
数据操作时集合操作,操作对象和操作结果都是关系,即若干元组的集:查询、插入、删除、更新。
存取路径对用户隐蔽
关系的完整性约束条件:
- 实体完整性
- 参照完整性
- 用户定义的完整性
优点:
- 建立在严格的数学概念的基础上
- 概念单一:实体和各类联系都用关系来表示;对数据的检索结果也是关系
- 关系模型的存取路径对用户透明:具有更高的数据独立性,更好的安全保密性;简化了程序员的工作和数据库开发建立的工作
缺点:
- 存取路径对用户透明导致查询效率往往不如非关系数据模型
- 为提高性能,必须对用户的查询请求进行优化,增加了开发DBMS的难度
物理模型
物理模型是对数局最底层的抽象,描述数据库系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法。
1 | st=>start: 现实世界 |
数据库系统结构
在数据模型中有“型”和“值”的概念。型是对某一类数据的结构和属性的说明,类是型的一个具体赋值。
模式
数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图
仅仅是型的描述,与具体的值无关。
反映的是数据的结构及其联系
模式是相对稳定的
实例
实例是模式的一个具体的值;反映数据库某一时刻的状态。
同一个模式可以有很多的实例;
实例随数据库中的数据的更新而变动
三级模式结构
外模式
外模式也称为子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是某一应用有关的数据的逻辑表示。
定义在逻辑模式之上,独立于存储模式和存储设备。
设计外模式要考虑到应用的扩充性
地位:介于模式和应用之间
模式与外模式的关系:1:m
外模式与应用的关系:1:m
用途:
- 支持不同用户建立适应局部应用特征的结构,每个用户只能看见和访问所对应的外模式中的数据
- 简化应用处理
- 提高安全性,保证数据库安全性的一个有力措施
模式
模式也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
地位: 是数据库系统模式结构的中间层,独立于数据库的其他层次。
- 与数据的物理存储细节和硬件环境无关
- 与具体的应用程序、开发工具及高级程序设计语言无关
内模式
内模式是数据物理结构和存储方式的描述
是数据在数据库内部的表示方式
一个数据库只有一个内模式
三级模式:
外模式 | 模式 | 内模式 |
---|---|---|
概念模式的某一部分的抽象表示,反映的是数据的存储观 | 是整个数据库的抽象表示,反映的数据库的全局观 | 整个数据库的实际存储表示,反映的是数据的存储观 |
二级映像
外模式/模式映像
定义某一个外模式和模式之间的对应关系。
作用:保证数据的逻辑独立性
模式/内模式映像
定义了数据全局逻辑结构与存储结构之间的对应关系
数据库中模式/内模式映像是惟一的
作用:保证数据的物理独立性
三级模式的优点
- 保证数据的独立性
- 简化了用户接口
- 有利于数据共享
- 利于数据的安全保密
数据库的组成
硬件平台及数据库
要求:
- 足够大的内存
- 足够大的外存
- 较高的通道能力,以提高数据传送率
软件
- DBMS
- 支持DBMS运行的操作系统
- 与数据库接口的高级语言及其编译系统
- 以DBMS为核心的应用开发工具
- 为特定应用环境开发的数据库应用系统
人员
- DBA
- 系统分析员
- 数据库设计人员
- 应用程序员
- 用户
编译原理2-文法和语言
文法
0型文法
产生式的左部至少有一个非终结符
1型文法
产生式的左部至少有一个非终结符且左部的长度小于等于右边的长度。又叫上下文有关文法。
2型文法
产生式的左部有且仅有一个非终结符。又叫上下文无关文法。
3型文法
产生式的左部有且仅有一个非终结符,右边是a或者aB或空规则。
规范推导和规范规约
最右推导是规范推导
最左规约是规范规约
句型、句子、
推导过程中产生的每一步都是一个句型;推导中产生的全由终结符构成的句型是句子。
短语、直接短语、句柄
在语法树中,每一个能够由全部是终结符的后代构成的结点就有短语,其短语是终结符;
直接短语是指能够由一步推导得到的短语;最左直接短语就是句柄。
编译原理
什么是编译程序?
编译程序是把一种语言编写的程序(源程序)翻译成等价的另一种语言程序(目标程序)的程序。
编译程序的构成成分
词法分析
词法分析:扫描字符串表示的源程序,根据词法规则识别出具有独立意义的单词符号,输出单词符号流。
语法分析
根据语法规则,把单词符号流分解成语法短语(又叫语法单位),可表示成语法树。
语义分析
对语法成分的类型、含义进行检查,以保证程序各部分能有机地结合在一起,并为以后生成目标代码收集必要的信息,如类型、目标地址等。
中间代码生成
将源程序转换为一种结构简单、含义明确的中间表示形式,以便进一步转换成目标代码。
代码优化
对中间代码进行改进以获得更高效的代码:占用空间少、运行速度快。
目标代码生成
将中间代码转换成特定机器上的目标代码。
表格管理
编译过程中的各种信息都被保存在不同的表格里,编译各阶段都涉及建立、查找和更新有关表格。
错误处理程序
报告编译各阶段发生的错误性质和发生错误的语句,并将错误造成的影响限制在尽可能小的范围内,使编译程序能够继续处理源程序的剩下部分。
编译程序的划分
前端
编译系统的前端由于源程序有关而与目标机器无关的部分组成,通常包括词法分析、语法分析、语义分析,中间代码生成、符号表的建立以及与机器无关的代码优化工作,当然前端也包括相应的错误处理和符号表达管理。
后端
后端由编译程序中与目标机器有关的部分组成,一般来讲,这些部分与源语言无关而仅依赖于中间代码。后端包括目标代码的生成,与机器有关的代码优化以及相应的错误处理和符号表的管理。
遍
编译程序的遍是指对源程序或基于中间表示形式从头到尾扫描一次,并在扫描过程中作相关的加工处理,生成新的中间表示形式或目标程序。
解释程序和编译程序
解释程序是解释、执行高级语言源程序的程序。编译程序是把高级语言编写的程序翻译成某种机器的汇编语言或者机器语言的程序。
不同:
编译程序把源程序翻译成等价的目标程序(只翻译,不执行),此后目标程序的运行不再依赖于编译程序。
解释程序是边翻译(解释)边执行,不产生目标代码,直接输出源程序的运行结果。源程序的每一次运行都离不开解释程序。
hexo的使用
简单的使用
创建文章
1 | $ hexo new "new page" |
本地预览
1 | $ hexo s |
上传到github
1 | $ hexo clean |