导航:首页 > 源码编译 > 最佳全局对齐算法

最佳全局对齐算法

发布时间:2022-11-12 02:41:25

⑴ 关于读取图片时候行字节数的算法LineBytes=(width*8+31)/32*4的疑问

该算法为:LineBytes = (width * bitCount + 31) / 32 * 4
bitCount为位图位宽,32位BMP,位宽为32、24位BMP位宽为23、256色位图位宽为8、等等。
这是一种对齐算法,对于BMP等位图来说,要求是4字节对齐,即每行字节数必须为4的整数倍。
因为8bit等于1Byte,同时满足以4字节为对齐单位向下对齐,所以可以得:
LineBytes = (width * bitCount / 8 + 3) / 4 * 4
对于位宽不足8的位图,有可能是多个像素才占用1Byte,所以应该将“/ 8”移出括号,进一步得:
LineBytes = (width * bitCount + 31) / 32 * 4

⑵ C语言字节对齐怎么操作

成为一名合格的IT人才

⑶ CVPR 2019 Oral 论文解读 | 无监督域适应语义分割

雷锋网 AI 科技评论按: 网络研究院、华中科技大学、悉尼科技大学联合新作——关于无监督领域自适应语义分割的论文《 Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent Domain Adaptation》被 CCF A 类学术会议 CVPR2019 收录为 Oral 论文 。该论文提出了一种从“虚拟域”泛化到“现实域”的无监督语义分割算法,旨在利用易获取的虚拟场景标注数据来完成对标注成本高昂的现实场景数据的语义分割,大大减少了人工标注成本。 本文是论文作者之一罗亚威为雷锋网 AI 科技评论提供的论文解读。

论文地址: https://arxiv.org/abs/1809.09478

1.问题背景

基于深度学习的语义分割方法效果出众,但需要大量的人工标注进行监督训练。不同于图像分类等任务,语义分割需要像素级别的人工标注,费时费力,无法大规模实施。借助于计算机虚拟图像技术,如3D游戏,用户可以几乎无成本地获得无限量自动标注数据。然而虚拟图像和现实图像间存在严重的视觉差异(域偏移),如纹理、光照、视角差异等等,这些差异导致在虚拟图像上训练出的深度模型往往在真实图像数据集上的分割精度很低。

2. 传统方法

针对上述域偏移问题,一种广泛采用的方法是在网络中加入一个域判别器Discriminator (D),利用对抗训练的机制,减少源域Source (S)和目标域Target(T)之间不同分布的差异,以加强原始网络(G)在域间的泛化能力。方法具体包括两方面:

(1)利用源域的有标签数据进行有监督学习,提取领域知识:

其中Xs,Ys为源域数据及其对应标签。

(2)通过对抗学习,降低域判别器(D)的精度,以对齐源域与目标域的特征分布:

其中XT为目标域数据,无标签。

3.我们针对传统方法的改进

以上基于对抗学习的传统域适应方法只能对齐全局特征分布(Marginal Distribution),而忽略了不同域之间,相同语义特征的语义一致性(Joint Distribution),在训练过程中容易造成负迁移,如图2(a)所示。举例来说,目标域中的车辆这一类,可能与源域中的车辆在视觉上是接近的。因此,在没有经过域适应算法之前,目标域车辆也能够被正确分割。然而,为了迎合传统方法的全局对齐,目标域中的车辆特征反而有可能会被映射到源域中的其他类别,如火车等,造成语义不一致。

针对这一问题,我们在今年CVPR的论文中,向对抗学习框架里加入了联合训练的思想,解决了传统域适应方法中的语义不一致性和负迁移等键问题。具体做法见图2(b),我们采用了两个互斥分类器对目标域特征进行分类。当两个分类器给出的预测很一致时,我们认为该特征已经能被很好的分类,语义一致性较高,所以应减少全局对齐策略对这些特征产生的负面影响。反之,当两个分类器给出的预测不一致,说明该目标域特征还未被很好地分类,依然需要用对抗损失进行与源域特征的对齐。所以应加大对齐力度,使其尽快和源域特征对应。

4.网络结构

为了实现上述语义级对抗目标,我们提出了Category-Level Adversarial Network (CLAN)。 遵循联合训练的思想,我们在生成网络中采用了互斥分类器的结构,以判断目标域的隐层特征是否已达到了局部语义对齐。在后续对抗训练时,  网络依据互斥分类器产生的两个预测向量之差(Discrepancy)来对判别网络所反馈的对抗损失进行加权。网络结构如下图3所示。 

图3中,橙色的线条表示源域流,蓝色的线条表示目标域流,绿色的双箭头表示我们在训练中强迫两个分类器的参数正交,以达到互斥分类器的目的。源域流和传统的方法并无很大不同,唯一的区别是我们集成了互斥分类器产生的预测作为源域的集成预测。该预测一方面被标签监督,产生分割损失(Segmentation Loss),如式(3)所示:

另一方面,该预测进入判别器D,作为源域样本。

绿色的双箭头处,我们使用余弦距离作为损失,训练两个分类器产生不同的模型参数:

目标域流中,集成预测同样进入判别器D。不同的是,我们维持两个分类器预测的差值,作为局部对齐程度的依据 (local alignment score map)。该差值与D所反馈的损失相乘,生成语义级别的对抗损失:

该策略加大了语义不一致特征的对齐力度,而减弱了语义一致的特征受全局对齐的影响,从而加强了特征间的语义对齐,防止了负迁移的产生。

最后,根据以上三个损失,我们可以得出最终的总体损失函数:

基于以上损失函数,算法整体的优化目标为:

在训练中,我们交替优化G和D,直至损失收敛。

5. 特征空间分析

我们重点关注不常见类,如图4(a)中黄框内的柱子,交通标志。这些类经过传统方法的分布对齐,反而在分割结果中消失了。结合特征的t-SNE图,我们可以得出结论,有些类的特征在没有进行域迁移之前,就已经是对齐的。传统的全局域适应方法反而会破坏这种语义一致性,造成负迁移。而我们提出的语义级别对抗降低了全局对齐对这些已对齐类的影响,很好的解决了这一问题。

6. 实验结果 

我们在两个域适应语义分割任务,即GTA5 -> Cityscapes 和 SYNTHIA -> Cityscapes 上进行了实验验证。我们采用最常见的Insertion over Union作为分割精度的衡量指标,实验结果如下。从表1和表2中可以看出,在不同网络结构(VGG16,ResNet101)中,我们的方法(CLAN)域适应效果都达到了 state-of-the-art的精度。特别的,在一些不常见类上(用蓝色表示),传统方法容易造成负迁移,而CLAN明显要优于其他方法。

表 1. 由虚拟数据集GTA5 迁移至真实数据集 Cityscapes 的域适应分割精度对比。 

表 2. 由虚拟数据集SYNTHIA 迁移至真实数据集 Cityscapes 的域适应分割精度对比。

第二个实验中,我们了展示隐空间层面,源域和目标域间同语义特征簇的中心距离。该距离越小,说明两个域间的语义对齐越好。结果见图 5。

最后,我们给出分割结果的可视化效果。我们的算法大大提高了分割精度。

7. 总结

《Taking A Closer Look at Domain Shift: Category-level Adversaries for Semantics Consistent Domain Adaptation》引入了联合训练结合对抗学习的设计,在无监督域适应语义分割任务中取得了较好的实验结果。该算法能应用前景广泛,比如能够很好地应用到自动驾驶中,让车辆在不同的驾驶环境中也能保持鲁棒的街景识别率。

最后

CVPR 2019 Oral 论文精选汇总,值得一看的 CV 论文都在这里(持续更新中)

CVPR 2019 即将于 6 月在美国长滩召开。今年有超过 5165 篇的大会论文投稿,最终录取 1299 篇,其中 Oral 论文近 300 篇。为了方便社区开发者和学术青年查找和阅读高价值论文,AI 研习社从入选的 Oral 论文中,按应用方向挑选了部分精华论文,贴在本文,打开链接即可查看~

https://ai.yanxishe.com/page/postDetail/11408

linux下怎么设置内存对齐

内存对齐是有规则的:
a. 基本类型:所有的基本类型都有相应的对齐参数,编译器在编译时,会用全局的对齐参数和当前类型的对齐参数中较小的一个进行对齐。比如,编译时指定按8bytes对齐(用#pragma pack(8)实现之),可是由于一个char变量的大小为一个byte,所以最后还是按1byte对齐。

b. 复合类型:复合类型的对齐原则,就是取其成员变量数据类型的字节数的最大者和在编译时指定的对齐数两者之间较小的字节数进行对齐。如果没有用诸如#pragma pack指定全局对齐数,则该复合类型的对齐数就是其成员变量数据类型字节数之最大者。

⑸ 生物信息学

一, 生物信息学发展简介

生物信息学是建立在分子生物学的基础上的,因此,要了解生物信息学,就

必须先对分子生物学的发展有一个简单的了解.研究生物细胞的生物大分子的结

构与功能很早就已经开始,1866年孟德尔从实验上提出了假设:基因是以生物

成分存在[1],1871年Miescher从死的白细胞核中分离出脱氧核糖核酸(DNA),

在Avery和McCarty于1944年证明了DNA是生命器官的遗传物质以前,人们

仍然认为染色体蛋白质携带基因,而DNA是一个次要的角色.

1944年Chargaff发现了着名的Chargaff规律,即DNA中鸟嘌呤的量与胞嘧

定的量总是相等,腺嘌呤与胸腺嘧啶的量相等.与此同时,Wilkins与Franklin

用X射线衍射技术测定了DNA纤维的结构.1953年James Watson 和Francis

Crick在Nature杂志上推测出DNA的三维结构(双螺旋).DNA以磷酸糖链形

成发双股螺旋,脱氧核糖上的碱基按Chargaff规律构成双股磷酸糖链之间的碱基

对.这个模型表明DNA具有自身互补的结构,根据碱基对原则,DNA中贮存的

遗传信息可以精确地进行复制.他们的理论奠定了分子生物学的基础.

DNA双螺旋模型已经预示出了DNA复制的规则,Kornberg于1956年从大

肠杆菌(E.coli)中分离出DNA聚合酶I(DNA polymerase I),能使4种dNTP连接

成DNA.DNA的复制需要一个DNA作为模板.Meselson与Stahl(1958)用实验

方法证明了DNA复制是一种半保留复制.Crick于1954年提出了遗传信息传递

的规律,DNA是合成RNA的模板,RNA又是合成蛋白质的模板,称之为中心

法则(Central dogma),这一中心法则对以后分子生物学和生物信息学的发展都起

到了极其重要的指导作用.

经过Nirenberg和Matthai(1963)的努力研究,编码20氨基酸的遗传密码

得到了破译.限制性内切酶的发现和重组DNA的克隆(clone)奠定了基因工程

的技术基础.

正是由于分子生物学的研究对生命科学的发展有巨大的推动作用,生物信息

学的出现也就成了一种必然.

2001年2月,人类基因组工程测序的完成,使生物信息学走向了一个高潮.

由于DNA自动测序技术的快速发展,DNA数据库中的核酸序列公共数据量以每

天106bp速度增长,生物信息迅速地膨胀成数据的海洋.毫无疑问,我们正从一

个积累数据向解释数据的时代转变,数据量的巨大积累往往蕴含着潜在突破性发

现的可能,"生物信息学"正是从这一前提产生的交叉学科.粗略地说,该领域

的核心内容是研究如何通过对DNA序列的统计计算分析,更加深入地理解DNA

序列,结构,演化及其与生物功能之间的关系,其研究课题涉及到分子生物学,

分子演化及结构生物学,统计学及计算机科学等许多领域.

生物信息学是内涵非常丰富的学科,其核心是基因组信息学,包括基因组信

息的获取,处理,存储,分配和解释.基因组信息学的关键是"读懂"基因组的核

苷酸顺序,即全部基因在染色体上的确切位置以及各DNA片段的功能;同时在

发现了新基因信息之后进行蛋白质空间结构模拟和预测,然后依据特定蛋白质的

功能进行药物设计[2].了解基因表达的调控机理也是生物信息学的重要内容,根

据生物分子在基因调控中的作用,描述人类疾病的诊断,治疗内在规律.它的研

究目标是揭示"基因组信息结构的复杂性及遗传语言的根本规律",解释生命的遗

传语言.生物信息学已成为整个生命科学发展的重要组成部分,成为生命科学研

究的前沿.

二, 生物信息学的主要研究方向

生物信息学在短短十几年间,已经形成了多个研究方向,以下简要介绍一些

主要的研究重点.

1,序列比对(Sequence Alignment)

序列比对的基本问题是比较两个或两个以上符号序列的相似性或不相似

性.从生物学的初衷来看,这一问题包含了以下几个意义[3]:

从相互重叠的序列片断中重构DNA的完整序列.

在各种试验条件下从探测数据(probe data)中决定物理和基因图

存贮,遍历和比较数据库中的DNA序列

比较两个或多个序列的相似性

在数据库中搜索相关序列和子序列

寻找核苷酸(nucleotides)的连续产生模式

找出蛋白质和DNA序列中的信息成分

序列比对考虑了DNA序列的生物学特性,如序列局部发生的插入,删除(前

两种简称为indel)和替代,序列的目标函数获得序列之间突变集最小距离加权

和或最大相似性和,对齐的方法包括全局对齐,局部对齐,代沟惩罚等.两个

序列比对常采用动态规划算法,这种算法在序列长度较小时适用,然而对于海

量基因序列(如人的DNA序列高达109bp),这一方法就不太适用,甚至采用算

法复杂性为线性的也难以奏效.因此,启发式方法的引入势在必然,着名的

BALST和FASTA算法及相应的改进方法均是从此前提出发的.

2, 蛋白质结构比对和预测

基本问题是比较两个或两个以上蛋白质分子空间结构的相似性或不相似性.

蛋白质的结构与功能是密切相关的,一般认为,具有相似功能的蛋白质结构一般

相似.蛋白质是由氨基酸组成的长链,长度从50到1000~3000AA(Amino Acids),

蛋白质具有多种功能,如酶,物质的存贮和运输,信号传递,抗体等等.氨基酸

的序列内在的决定了蛋白质的3维结构.一般认为,蛋白质有四级不同的结构.

研究蛋白质结构和预测的理由是:医药上可以理解生物的功能,寻找docking

drugs的目标,农业上获得更好的农作物的基因工程,工业上有利用酶的合成.

直接对蛋白质结构进行比对的原因是由于蛋白质的3维结构比其一级结构

在进化中更稳定的保留,同时也包含了较AA序列更多的信息.

蛋白质3维结构研究的前提假设是内在的氨基酸序列与3维结构一一对应

(不一定全真),物理上可用最小能量来解释.

从观察和总结已知结构的蛋白质结构规律出发来预测未知蛋白质的结构.同

源建模(homology modeling)和指认(Threading)方法属于这一范畴.同源建模用

于寻找具有高度相似性的蛋白质结构(超过30%氨基酸相同),后者则用于比较

进化族中不同的蛋白质结构.

然而,蛋白结构预测研究现状还远远不能满足实际需要.

3, 基因识别,非编码区分析研究.

基因识别的基本问题是给定基因组序列后,正确识别基因的范围和在基因组

序列中的精确位置.非编码区由内含子组成(introns),一般在形成蛋白质后被丢

弃,但从实验中,如果去除非编码区,又不能完成基因的复制.显然,DNA序

列作为一种遗传语言,既包含在编码区,又隐含在非编码序列中.分析非编码

区DNA序列目前没有一般性的指导方法.

在人类基因组中,并非所有的序列均被编码,即是某种蛋白质的模板,已

完成编码部分仅占人类基因总序列的3~5%,显然,手工的搜索如此大的基因序

列是难以想象的.

侦测密码区的方法包括测量密码区密码子(codon)的频率,一阶和二阶马尔

可夫链,ORF(Open Reading Frames),启动子(promoter)识别,HMM(Hidden

Markov Model)和GENSCAN,Splice Alignment等等.

4, 分子进化和比较基因组学

分子进化是利用不同物种中同一基因序列的异同来研究生物的进化,构建进

化树.既可以用DNA序列也可以用其编码的氨基酸序列来做,甚至于可通过相

关蛋白质的结构比对来研究分子进化,其前提假定是相似种族在基因上具有相似

性.通过比较可以在基因组层面上发现哪些是不同种族中共同的,哪些是不同的.

早期研究方法常采用外在的因素,如大小,肤色,肢体的数量等等作为进化

的依据.近年来较多模式生物基因组测序任务的完成,人们可从整个基因组的角

度来研究分子进化.在匹配不同种族的基因时,一般须处理三种情况:

Orthologous: 不同种族,相同功能的基因

Paralogous: 相同种族,不同功能的基因

Xenologs: 有机体间采用其他方式传递的基因,如被病毒注入的基因.

这一领域常采用的方法是构造进化树,通过基于特征(即DNA序列或蛋白

质中的氨基酸的碱基的特定位置)和基于距离(对齐的分数)的方法和一些传统

的聚类方法(如UPGMA)来实现.

5, 序列重叠群(Contigs)装配

根据现行的测序技术,每次反应只能测出500 或更多一些碱基对的序列,

如人类基因的测量就采用了短枪(shortgun)方法,这就要求把大量的较短的序列

全体构成了重叠群(Contigs).逐步把它们拼接起来形成序列更长的重叠群,直

至得到完整序列的过程称为重叠群装配.从算法层次来看,序列的重叠群是一个

NP-完全问题.

6, 遗传密码的起源

通常对遗传密码的研究认为,密码子与氨基酸之间的关系是生物进化历史上

一次偶然的事件而造成的,并被固定在现代生物的共同祖先里,一直延续至今.

不同于这种"冻结"理论,有人曾分别提出过选择优化,化学和历史等三种学说

来解释遗传密码.随着各种生物基因组测序任务的完成,为研究遗传密码的起源

和检验上述理论的真伪提供了新的素材.

7, 基于结构的药物设计

人类基因工程的目的之一是要了解人体内约10万种蛋白质的结构,功能,

相互作用以及与各种人类疾病之间的关系,寻求各种治疗和预防方法,包括药物

治疗.基于生物大分子结构及小分子结构的药物设计是生物信息学中的极为重要

的研究领域.为了抑制某些酶或蛋白质的活性,在已知其蛋白质3级结构的基础

上,可以利用分子对齐算法,在计算机上设计抑制剂分子,作为候选药物.这一

领域目的是发现新的基因药物,有着巨大的经济效益.

8, 其他

如基因表达谱分析,代谢网络分析;基因芯片设计和蛋白质组学数据分析等,

逐渐成为生物信息学中新兴的重要研究领域;在学科方面,由生物信息学衍生的

学科包括结构基因组学,功能基因组学,比较基因组学,蛋白质学,药物基因组

学,中药基因组学,肿瘤基因组学,分子流行病学和环境基因组学.

从现在的发展不难看出,基因工程已经进入了后基因组时代.我们也有应对

与生物信息学密切相关的如机器学习,和数学中可能存在的误导有一个清楚的认

识.

三, 生物信息学与机器学习

生物信息的大规模给数据挖掘提出了新课题和挑战,需要新的思想的加入.

常规的计算机算法仍可以应用于生物数据分析中,但越来越不适用于序列分析问

题.究竟原因,是由于生物系统本质上的模型复杂性及缺乏在分子层上建立的完

备的生命组织理论.

西蒙曾给出学习的定义:学习是系统的变化,这种变化可使系统做相同工作

时更有效[4].机器学习的目的是期望能从数据中自动地获得相应的理论,通过采

用如推理,模型拟合及从样本中学习,尤其适用于缺乏一般性的理论,"噪声"

模式,及大规模数据集.因此,机器学习形成了与常规方法互补的可行的方法.

机器学习使得利用计算机从海量的生物信息中提取有用知识,发现知识成为可能

[5].

机器学习方法在大样本,多向量的数据分析工作中发挥着日益重要的作用,

而目前大量的基因数据库处理需要计算机能自动识别,标注,以避免即耗时又花

费巨大的人工处理方法.早期的科学方法—观测和假设----面对高数据的体积,

快速的数据获取率和客观分析的要求---已经不能仅依赖于人的感知来处理了.因

而,生物信息学与机器学习相结合也就成了必然.

机器学习中最基本的理论框架是建立在概率基础上的,从某种意义来说,是

统计模型拟合的延续,其目的均为提取有用信息.机器学习与模式识别和统计推

理密切相关.学习方法包括数据聚类,神经网络分类器和非线性回归等等.隐马

尔可夫模型也广泛用于预测DNA的基因结构.目前研究重心包括:1)观测和

探索有趣的现象.目前ML研究的焦点是如何可视化和探索高维向量数据.一般

的方法是将其约简至低维空间,如常规的主成分分析(PCA),核主成分分析

(KPCA),独立成分分析(Independent component analysis),局部线性嵌套(Locally

Linear embedding).2)生成假设和形式化模型来解释现象[6].大多数聚类方法可

看成是拟合向量数据至某种简单分布的混合.在生物信息学中聚类方法已经用于

microarray数据分析中,癌症类型分类及其他方向中.机器学习也用于从基因数

据库中获得相应的现象解释.

机器学习加速了生物信息学的进展,也带了相应的问题.机器学习方法大多

假定数据符合某种相对固定的模型,而一般数据结构通常是可变的,在生物信息

学中尤其如此,因此,有必要建立一套不依赖于假定数据结构的一般性方法来寻

找数据集的内在结构.其次,机器学习方法中常采用"黑箱"操作,如神经网络

和隐马尔可夫模型,对于获得特定解的内在机理仍不清楚.

四, 生物信息学的数学问题

生物信息学中数学占了很大的比重.统计学,包括多元统计学,是生物信息

学的数学基础之一;概率论与随机过程理论,如近年来兴起的隐马尔科夫链模型

(HMM),在生物信息学中有重要应用;其他如用于序列比对的运筹学;蛋白质

空间结构预测和分子对接研究中采用的最优化理论;研究DNA超螺旋结构的拓

扑学;研究遗传密码和DNA序列的对称性方面的群论等等.总之,各种数学理

论或多或少在生物学研究中起到了相应的作用.

但并非所有的数学方法在引入生物信息学中都能普遍成立的,以下以统计学

和度量空间为例来说明.

1, 统计学的悖论

数学的发展是伴随悖论而发展的.对于进化树研究和聚类研究中最显着的悖

论莫过于均值了,如图1:

图1 两组同心圆的数据集

图1是两组同心圆构成的数据集,显然,两组数据集的均值均在圆点,这也

就说明了要采用常规的均值方法不能将这两类分开,也表明均值并不能带来更多

的数据的几何性质.那么,如果数据呈现类似的特有分布时,常有的进化树算法

和聚类算法(如K-均值)往往会得错误的结论.统计上存在的陷阱往往是由于

对数据的结构缺乏一般性认识而产生的.

2, 度量空间的假设

在生物信息学中,进化树的确立,基因的聚类等都需要引入度量的概念.举

例来说,距离上相近或具有相似性的基因等具有相同的功能,在进化树中满足分

值最小的具有相同的父系,这一度量空间的前提假设是度量在全局意义下成立.

那么,是否这种前提假设具有普适性呢

我们不妨给出一般的描述:假定两个向量为A,B,其中,

,则在假定且满足维数间线性无关的前提下,两个

向量的度量可定义为:

(1)

依据上式可以得到满足正交不变运动群的欧氏度量空间,这也是大多数生物信息

学中常采用的一般性描述,即假定了变量间线性无关.

然而,这种假设一般不能正确描述度量的性质,尤其在高维数据集时,不考

虑数据变量间的非线性相关性显然存在问题,由此,我们可以认为,一个正确的

度量公式可由下式给出:

(2)

上式中采用了爱因斯坦和式约定,描述了变量间的度量关系.后者在满足

(3)

时等价于(1),因而是更一般的描述,然而问题在于如何准确描述变量间的非线

性相关性,我们正在研究这个问题.

五, 几种统计学习理论在生物信息学中应用的困难

生物信息学中面对的数据量和数据库都是规模很大的,而相对的目标函数却

一般难以给出明确的定义.生物信息学面临的这种困难,可以描述成问题规模的

巨大以及问题定义的病态性之间的矛盾,一般从数学上来看,引入某个正则项来

改善性能是必然的[7].以下对基于这一思想产生的统计学习理论[8],Kolmogorov

复杂性[98]和BIC(Bayesian Information Criterion)[109]及其存在的问题给出简要介

绍.

支持向量机(SVM)是近来较热门的一种方法,其研究背景是Vapnik的统计

学习理论,是通过最大化两个数据集的最大间隔来实现分类,对于非线性问题则

采用核函数将数据集映射至高维空间而又无需显式描述数据集在高维空间的性

质,这一方法较之神经方法的好处在于将神经网络隐层的参数选择简化为对核函

数的选择,因此,受到广泛的注意.在生物信息学中也开始受到重视,然而,核

函数的选择问题本身是一个相当困难的问题,从这个层次来看,最优核函数的选

择可能只是一种理想,SVM也有可能象神经网络一样只是机器学习研究进程中

又一个大气泡.

Kolmogorov复杂性思想与统计学习理论思想分别从不同的角度描述了学习

的性质,前者从编码的角度,后者基于有限样本来获得一致收敛性.Kolmogorov

复杂性是不可计算的,因此由此衍生了MDL原则(最小描述长度),其最初只

适用于离散数据,最近已经推广至连续数据集中,试图从编码角度获得对模型参

数的最小描述.其缺陷在于建模的复杂性过高,导致在大数据集中难以运用.

BIC准则从模型复杂性角度来考虑,BIC准则对模型复杂度较高的给予大的

惩罚,反之,惩罚则小,隐式地体现了奥卡姆剃刀("Occam Razor")原理,近

年也广泛应用于生物信息学中.BIC准则的主要局限是对参数模型的假定和先验

的选择的敏感性,在数据量较大时处理较慢.因此,在这一方面仍然有许多探索

的空间.

六, 讨论与总结

人类对基因的认识,从以往的对单个基因的了解,上升到在整个基因组水平

上考察基因的组织结构和信息结构,考察基因之间在位置,结构和功能上的相互

关系.这就要求生物信息学在一些基本的思路上要做本质的观念转变,本节就这

些问题做出探讨和思索.

启发式方法:

Simond在人类的认知一书中指出,人在解决问题时,一般并不去寻找最优

的方法,而只要求找到一个满意的方法.因为即使是解决最简单的问题,要想得

到次数最少,效能最高的解决方法也是非常困难的.最优方法和满意方法之间的

困难程度相差很大,后者不依赖于问题的空间,不需要进行全部搜索,而只要能

达到解决的程度就可以了.正如前所述,面对大规模的序列和蛋白质结构数据集,

要获得全局结果,往往是即使算法复杂度为线性时也不能够得到好的结果,因此,

要通过变换解空间或不依赖于问题的解空间获得满意解,生物信息学仍需要人工

智能和认知科学对人脑的进一步认识,并从中得到更好的启发式方法.

问题规模不同的处理:

Marvin Minsky在人工智能研究中曾指出:小规模数据量的处理向大规模数

据量推广时,往往并非算法上的改进能做到的,更多的是要做本质性的变化.这

好比一个人爬树,每天都可以爬高一些,但要想爬到月球,就必须采用其他方法

一样.在分子生物学中,传统的实验方法已不适应处理飞速增长的海量数据.同

样,在采用计算机处理上,也并非依靠原有的计算机算法就能够解决现有的数据

挖掘问题.如在序列对齐(sequence Alignment)问题上,在小规模数据中可以采用

动态规划,而在大规模序列对齐时不得不引入启发式方法,如BALST,FASTA.

乐观中的隐扰

生物信息学是一门新兴学科,起步于20世纪90年代,至今已进入"后基因

组时代",目前在这一领域的研究人员均呈普遍乐观态度,那么,是否存在潜在

的隐扰呢

不妨回顾一下早期人工智能的发展史[11],在1960年左右,西蒙曾相信不出

十年,人类即可象完成登月一样完成对人的模拟,造出一个与人智能行为完全相

同的机器人.而至今为止,这一诺言仍然遥遥无期.尽管人工智能研究得到的成

果已经渗入到各个领域,但对人的思维行为的了解远未完全明了.从本质来看,

这是由于最初人工智能研究上定位错误以及没有从认识论角度看清人工智能的

本质造成的;从研究角度来看,将智能行为还原成一般的形式化语言和规则并不

能完整描述人的行为,期望物理科学的成功同样在人工智能研究中适用并不现

实.

反观生物信息学,其目的是期望从基因序列上解开一切生物的基本奥秘,从

结构上获得生命的生理机制,这从哲学上来看是期望从分子层次上解释人类的所

有行为和功能和致病原因.这类似于人工智能早期发展中表现的乐观行为,也来

自于早期分子生物学,生物物理和生物化学的成就.然而,从本质上来讲,与人

工智能研究相似,都是希望将生命的奥秘还原成孤立的基因序列或单个蛋白质的

功能,而很少强调基因序列或蛋白质组作为一个整体在生命体中的调控作用.我

们因此也不得不思考,这种研究的最终结果是否能够支撑我们对生物信息学的乐

观呢 现在说肯定的话也许为时尚早.

综上所述,不难看出,生物信息学并不是一个足以乐观的领域,究竟原因,

是由于其是基于分子生物学与多种学科交叉而成的新学科,现有的形势仍表现为

各种学科的简单堆砌,相互之间的联系并不是特别的紧密.在处理大规模数据方

面,没有行之有效的一般性方法;而对于大规模数据内在的生成机制也没有完全

明了,这使得生物信息学的研究短期内很难有突破性的结果.那么,要得到真正

的解决,最终不能从计算机科学得到,真正地解决可能还是得从生物学自身,从

数学上的新思路来获得本质性的动力.

毫无疑问,正如Dulbecco1986年所说:"人类的DNA序列是人类的真谛,

这个世界上发生的一切事情,都与这一序列息息相关".但要完全破译这一序列

以及相关的内容,我们还有相当长的路要走.

(来源 ------[InfoBio.org | 生物信息学研讨组])http://www.infobio.org
生物信息学(Bioinformatics)是在生命科学的研究中,以计算机为工具对生物信息进行储存、检索和分析的科学。它是当今生命科学和自然科学的重大前沿领域之一,同时也将是21世纪自然科学的核心领域之一。其研究重点主要体现在基因组学(Genomics)和蛋白学(Proteomics)两方面,具体说就是从核酸和蛋白质序列出发,分析序列中表达的结构功能的生物信息。

生物信息学是一门利用计算机技术研究生物系统之规律的学科。

目前的生物信息学基本上只是分子生物学与信息技术(尤其是因特网技术)的结合体。生物信息学的研究材料和结果就是各种各样的生物学数据,其研究工具是计算机,研究方法包括对生物学数据的搜索(收集和筛选)、处理(编辑、整理、管理和显示)及利用(计算、模拟)。

1990年代以来,伴随着各种基因组测序计划的展开和分子结构测定技术的突破和Internet的普及,数以百计的生物学数据库如雨后春笋般迅速出现和成长。对生物信息学工作者提出了严峻的挑战:数以亿计的ACGT序列中包涵着什么信息?基因组中的这些信息怎样控制有机体的发育?基因组本身又是怎样进化的?

生物信息学的另一个挑战是从蛋白质的氨基酸序列预测蛋白质结构。这个难题已困扰理论生物学家达半个多世纪,如今找到问题答案要求正变得日益迫切。诺贝尔奖获得者W. Gilbert在1991年曾经指出:“传统生物学解决问题的方式是实验的。现在,基于全部基因都将知晓,并以电子可操作的方式驻留在数据库中,新的生物学研究模式的出发点应是理论的。一个科学家将从理论推测出发,然后再回到实验中去,追踪或验证这些理论假设”。

生物信息学的主要研究方向: 基因组学 - 蛋白质组学 - 系统生物学 - 比较基因组学

姑且不去引用生物信息学冗长的定义,以通俗的语言阐述其核心应用即是:随着包括人类基因组计划在内的生物基因组测序工程的里程碑式的进展,由此产生的包括生物体生老病死的生物数据以前所未有的速度递增,目前已达到每14个月翻一番的速度。同时随着互联网的普及,数以百计的生物学数据库如雨后春笋般迅速出现和成长。然而这些仅仅是原始生物信息的获取,是生物信息学产业发展的初组阶段,这一阶段的生物信息学企业大都以出售生物数据库为生。以人类基因组测序而闻名的塞莱拉公司即是这一阶段的成功代表。
原始的生物信息资源挖掘出来后,生命科学工作者面临着严峻的挑战:数以亿计的ACGT序列中包涵着什么信息?基因组中的这些信息怎样控制有机体的发育?基因组本身又是怎样进化的?生物信息学产业的高级阶段体现于此,人类从此进入了以生物信息学为中心的后基因组时代。结合生物信息学的新药创新工程即是这一阶段的典型应用。

⑹ 结构体内存对齐

1、数据成员对齐规则: 结构( struct )(或联合( union )的)数据成员,第一个数据成员放在 offset 为 0 的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说数组,结构体等)的整数倍开始(如int为4字节,要从4的整数倍地址开始存储)

2、结构体作为成员: 如果一个结构体有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a 里存有struct b, b里有 char, int ,double等元素,那b 应该从8的整数倍开始存储。)

3、收尾工作:结构体的总大小,也就是sizeof的结果,必须是内部最大成员的整数倍,不足要补齐

( 注 :如自定义类或继承关系 属性的多少变化而变化,如单纯的继承NSObject并且没有任何属性 打印为8 因为 有隐藏 isa 万物皆对象,而对象的本质为 继承 objc_object 的结构体 它就是对象模板)

拓 : 我们知道alloc 流程 最重要的三部曲
cls->instanceSize:计算需要开辟的内存空间大小(这里有一个算法为16字节对齐)
calloc:申请内存,返回地址指针
obj->initInstanceIsa:将 类 与 isa 关联

首先创建 3个结构体 这三个结构体内部参数类型 都一样 只不过 是顺序不一样

根据内存规则 我们画图来分析

分析: ofsize 0 开始 存储 char 类型占 一个 字节的 a ; b 要存储了 首先分析 自己自身多大 我是 double 类型的 我需要占 8 个字节 可是 如果从 a 后面 开始 不满足自身 8 的倍数 的地方 那我只能往下数 看来只能到 8的位置开始 容纳我的身体 【8 - 15 】 ; 该 c 出厂 存储了 我自身占用 4字节 我是 int 类型的 我只能先从16 开始 我的天 真幸运 正好符合我 自身4字节的倍数 我可以 存储了 【16- 19】 d 出场了 我 自身占 2个字节 得需要从20 位开始找 能不能满足 我的倍数的规则要求 20 除 2 可以的 我也可以放下了 【20 - 21】
Mystruct1 结构体 承载了 21+1 个字节 突然 大喇叭喊出规则:结构体的 总大小 ,也就是sizeof的结果, 必须是内部最大成员的整数倍,不足要补齐 :好的 那我里面最大的是 8 字节 那么 我现在 算出来 22 那么 补齐就好了嘛 不要激动 心里默念: 二 八 16, 不满足 ; 三八 24 满足啦 结束了。所以 Mystruct1 占用 24个字节空间

分析: 从 0 的位置开始存 自身是double 类型的占用8个字节的 b【0-7】
a 是 占用一个字节的char类型 ,从 8的位置 满足自身1字节的倍数 所以 存储在8的位置【8】,c来了 首先 我自己是 int类型 我占用 4个字节 我只能从 9的位置开始存 可是 不满足 规则 必须是自己字节数的倍数,那我只能往下数了 9.10.11.12 咦!12是我的位置 那就从12开始【12-15】, d来了 首先想自己是 short类型的占用2个字节 我只能先从 16 的位置看 咦!这么巧 正好符合规则 是我的倍数 存这没毛病
Mystruct2 结构体 承载了 17+1 个字节 ,大喇叭又开始广播了:结构体的 总大小 ,也就是sizeof的结果, 必须是内部最大成员的整数倍,不足要补齐 ,好的村长 我补齐: 结构体最大的是 double占 用8个字节 我算出来18。 2*8 = 16 不满足 3 *8 = 24 村长 我满足了。所以 Mystruct2 占用 24个字节空间

分析:从0 开始 存入一个 char类型的a d 来了 首先分析自己 是short类型 占用2个字节 那我如果从1 开始 那不是我的倍数 不满足规则。所以 往下看 2 好像 是我字节的倍数 ,好的存入 【2-3】 c来了我是 int类型的 占4字节 我只能从4开始存储 好像也满足 是我的自身4字节的倍数 ,好的存入【4-7】,b来了 嗯我是double类型 我自身占用8字节 我只能从 8号位置 开始存储 好像 8也是我的倍数 好的 存入【8-15】
`Mystruct3 结构体 承载了 15+1个字节,行了大喇叭别广播了 我知道了 我内部成员最大 的为8字节 必须是 8字节的整数倍 不足要补齐。
2*8 = 16 我满足了 ,所以 Mystruct3占用 16个字节

我们已经对结构体内存很明晰了 那么来个嵌套的

上面我们分析了 Mystruct3 占用 16 个字节 那么 Mystruct4占用多少呢

分析:
a 是占用一个字节的char类型 放在【0】
b是 占4字节的int类型 找到最近的 自身的占用字节的倍数的位置 为【4-7】
sturct3 是一个占用 16字节 的结构体 我们首先分析它最大的成员占多少内存 这里 为double 类型 占8个字节 所以应该 从8 的倍数开始存放第一个元素 上面的b占了【4-7】故只能从8往后数 正好8的位置 是 sturct3里最大元素的倍数 故第一个元素位置为【8】第二个元素为short类型占2个字节 所以需要从8 往后数正好满足自身的倍数 也就是【10 11】 第三个元素为double类型 占8个字节 所以需要从11 往后数满足8 的倍数 也就是【16 - 23】 因为 sturct3 是个结构体 也满足内存对齐原则 也就是 最大元素的倍数 sturct3占了 16字节 正好满足 对齐原则 a 占1 个 空白占3 b 占4 个 加在一起占 24个
sturct4 内存对齐 为 最大成员的倍数 最大成员 为struct3 里double 8 字节 所以
又是大喇叭所说的 内部成员最大字节 的倍数
所以 sizeof(Mysturct4) 最终 为 24
注意:

⑺ 如何对齐零乱的代码

使用快捷键对齐凌乱的代码,在编写程序时,有时只考虑了程序的算法,而忘记了代码的缩进格式。导致写出来的一段代码非常零乱。此时,可以按Alt+F8组合键来对齐代码。在实例中经常使用快捷键将多行不规则的代码对齐,如果不使用该快捷键而是一行一行对齐是很浪费时间的,但使用快捷键对齐也是需要在一定编码规范内的。如果将代码全部写在一行内,则是无法完成对齐的。(1)创建基于对话框的应用程序。(2)在对话框中添加一个编辑框和一个按钮,并填写按钮的实现代码,代码如下:void CArrangeCodeDlg::OnEnter()�0�2�0�2 {�0�2�0�2�0�2�0�2 CString strResult;�0�2 GetDlgItem(IDC_ED_RESULT)->GetWindowText(strResult);�0�2 for(int i=0;i<strResult.GetLength();i++)�0�2 {�0�2 �0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 char cGet;�0�2 �0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 cGet=strResult.GetAt(i);�0�2 �0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 if(cGet>'a')�0�2 �0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 {�0�2 �0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 MessageBox(NULL,"字符输出","提示",MB_OK);�0�2 �0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 }�0�2 }�0�2 }�0�2 (3)将代码的对齐打乱,并通过Alt+F8组合键重新对齐。心法领悟016:移动多行代码的快捷方式。在Visual C++中能够多行移动代码的快捷键还有许多,例如将多行代码整体向左移动的快捷键是Shift+Ctrl+ M,将多行代码整体向右移动的快捷键是Tab键。这两种移动方法都保持原来的对齐方法不变,进行整体移动。

⑻ JAVA算法求助,左对齐 居中和右对齐

style=“text-align:left”--左对齐
style=“text-align:center”--居中对齐
style=“text-align:right”--右对齐

⑼ 什么是数据的对齐为什么要对齐

有关字节对齐的介绍:

什么是对齐,以及为什么要对齐:
现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。

对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32 位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出,而如果存放在奇地址开始的地方,就可能会需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该int数据。显然在读取效
率上下降很多。这也是空间和时间的博弈。

对齐的实现
通常,我们写程序的时候,不需要考虑对齐问题。编译器会替我们选择适合目标平台的对齐策略。当然,我们也可以通知给编译器传递预编译指令而改变对指定数据的对齐方法。
但是,正因为我们一般不需要关心这个问题,所以因为编辑器对数据存放做了对齐,而我们不了解的话,常常会对一些问题感到迷惑。最常见的就是struct数据结构的sizeof结果,出乎意料。为此,我们需要对对齐算法所了解。

对齐的算法:

设结构体如下定义:
struct A
{
int a;
char b;
short c;
};
结构体A中包含了4字节长度的int一个,1字节长度的char一个和2字节长度的short型数据一个。所以A用到的空间应该是7字节。但是因为编译器要对数据成员在空间上进行对齐。
所以使用sizeof(strcut A)值为8。
现在把该结构体调整成员变量的顺序。
struct B
{
char b;
int a;
short c;
};
这时候同样是总共7个字节的变量,但是sizeof(struct B)的值却是12。
下面我们使用预编译指令#progma pack (value)来告诉编译器,使用我们指定的对齐值来取代缺省的。
#progma pack (2) /*指定按2字节对齐*/
struct C
{
char b;
int a;
short c;
};
#progma pack () /*取消指定对齐,恢复缺省对齐*/
sizeof(struct C)值是8。

修改对齐值为1:
#progma pack (1) /*指定按1字节对齐*/
struct D
{
char b;
int a;
short c;
};
#progma pack () /*取消指定对齐,恢复缺省对齐*/
sizeof(struct D)值为7。

对于char型数据,其自身对齐值为1,对于short型为2,对于int,float,double类型,其自身对齐值为4,单位字节。
这里面有四个概念值:
1.数据类型自身的对齐值:就是上面交代的基本数据类型的自身对齐值。
2.指定对齐值:#progma pack (value)时的指定对齐值value。
3.结构体或者类的自身对齐值:其成员中自身对齐值最大的那个值。
4.数据成员、结构体和类的有效对齐值:自身对齐值和指定对齐值中小的那个值。
有了这些值,我们就可以很方便的来讨论具体数据结构的成员和其自身的对齐方式。有效对齐值N是最终用来决定数据存放地址方式的值,最重要。有效对齐N,就是表示“对齐在N上”,也就是说该数据的"存放起始地址%N=0".而数据结构中的数据变量都是按定义的先后顺序来排放的。第一个数据变量的起始地址就是数据结构的起始地址。结构体的成员变量要对齐排放,结构体本身也要根据自身的有效对齐值圆整(就是结构体成员变量占用总长度需要是对结构体有效对齐值的整数倍,结合下面例子理解)。这样就不能理解上面的几个例子的值了。
例子分析:
分析例子B;
struct B
{
char b;
int a;
short c;
};
假设B从地址空间0x0000开始排放。该例子中没有定义指定对齐值,在笔者环境下,该值默认为4。第一个成员变量b的自身对齐值是1,比指定或者默认指定对齐值4小,所以其有效对齐值为1,所以其存放地址0x0000符合0x0000%1=0.第二个成员变量a,其自身对齐值为4,所以有效对齐值也为4,所以只能存放在起始地址为0x0004到0x0007这四个连续的字节空间中,复核0x0004%4=0,且紧靠第一个变量。第三个变量c,自身对齐值为 2,所以有效对齐值也是2,可以存放在0x0008到0x0009这两个字节空间中,符合0x0008%2=0。所以从0x0000到0x0009存放的都是B内容。再看数据结构B的自身对齐值为其变量中最大对齐值(这里是b)所以就是4,所以结构体的有效对齐值也是4。根据结构体圆整的要求, 0x0009到0x0000=10字节,(10+2)%4=0。所以0x0000A到0x000B也为结构体B所占用。故B从0x0000到0x000B 共有12个字节,sizeof(struct B)=12;

同理,分析上面例子C:
#progma pack (2) /*指定按2字节对齐*/
struct C
{
char b;
int a;
short c;
};
#progma pack () /*取消指定对齐,恢复缺省对齐*/
第一个变量b的自身对齐值为1,指定对齐值为2,所以,其有效对齐值为1,假设C从0x0000开始,那么b存放在0x0000,符合0x0000%1= 0;第二个变量,自身对齐值为4,指定对齐值为2,所以有效对齐值为2,所以顺序存放在0x0002、0x0003、0x0004、0x0005四个连续字节中,符合0x0002%2=0。第三个变量c的自身对齐值为2,所以有效对齐值为2,顺序存放
在0x0006、0x0007中,符合 0x0006%2=0。所以从0x0000到0x00007共八字节存放的是C的变量。又C的自身对齐值为4,所以C的有效对齐值为2。又8%2=0,C 只占用0x0000到0x0007的八个字节。所以sizeof(struct C)=8.

⑽ 请写一个字节对齐算法int align(x,y),既输入写,使之对齐到y字节,比如f(3,4)=4;f(11,8)=16。

intalign(intx,inty)
{
intr=x%y;
if(r)returnx+y-r;elsereturnx;
}

阅读全文

与最佳全局对齐算法相关的资料

热点内容
java的读法 浏览:57
nod32局域网服务器地址 浏览:1000
数码科技解压 浏览:233
新网的云服务器管理界面复杂吗 浏览:365
无人声解压强迫症视频 浏览:569
计算机编译运行 浏览:636
单片机嵌套 浏览:986
python字符串中符号 浏览:787
python正则表达式贪婪模式 浏览:648
爱国精神指的是什么app 浏览:408
寿司解压系列全集视频 浏览:913
物体三维重建算法 浏览:984
fuli直播app哪个好 浏览:918
租办公室用什么app 浏览:106
医师定期考核刷题app哪个好 浏览:338
导出dmp文件命令 浏览:288
手机百度网盘怎么解压密码文件 浏览:585
索引重新编译 浏览:606
命令与征服4免cd补丁完美版 浏览:428
kotlin编译为native 浏览:142