信息技术领域,我们如何进行算法创新?

一直以来,我都想写一篇信息技术领域该如何进行算法创新的文章。算法是芯片、操作系统乃至整个信息系统的基础,我国是信息技术应用大国,算法的研究在我国却及其薄弱。时至今日,我国还在被国外技术封锁、核心技术卡脖子,而算法创新才能实现信息系统的创新,才能实现操作系统的创新,才能实现行业应用方法的创新。

基于如此急迫的环境,很多学者认为算法创新是数学家们的事,而数学家又不全具备信息技术知识,更不知道哪些应用环境需要算法,需要什么样的算法。程序员或系统架构师又过于偏向应用,拿来主义比较严重。在我国,就算能实现算法创新,却应用壁垒非常高,有些需要形成标准,有些需要形成生态。所以我国算法创新现状就是:

“出成果难,应用更难”

所以编写本文的目的:一方面是通过分享我的研究与市场应用经历,得出算法创新并不难,也并不是需要博士、教授、院士才能创造,他们也是因为创造而获得了该有的荣誉,因为发表论文不能证明技术可用,可用的技术根本无需发表论文,应当进行知识产权保护。另一方面是通过分析,希望具备审批、评审权力的专家权威们,以及各大巨头企业们不能再固步自封和技术化缘了!再不开放姿态接纳国产技术,且共同分享成果,共同打造生态和标准,我国将永远无法形成自主可控的核心技术或标准。而且,现在已经不是单打独斗的时代,也不能因小公司或个人有一点新东西就被收购、纳入或侵吞,生态不是一个企业、一个人打造出来的。

文中我想从下面几个方面进行说明:

1、算法的作用。什么是算法?算法在信息系统中的重要性有哪些?

2、数学是算法的基础。目前都用到了哪些数学理论?哪些算法助推了数学理论的深挖?

3、算法功能分类。算法按功能划分有压缩、加密、检错、纠错、分析、学习、管理等。

4、创新算法的目的。创新的目的无非是:提升效率、降低能耗、增加功能、提升可信度、增强鲁棒性、降低实现难度等。

5、算法创新的方法。通过举例如何从一个基本点拓展到一个优质的算法。

一、算法的作用

信息系统中,算法是极为重要的支柱性存在。算法是芯片、系统和IT行业的灵魂。芯片是实现算法逻辑的微电子电路;系统是算法功能的集合。下面举几个常见的应用领域及其所涉及的算法。

操作系统:作业调度算法、进程调度算法、银行家算法、页面置换算法、磁盘调度算法等等,这些基础算法实现了Windows、Linux(安卓、麒麟等)、Unix(IOS、苹果)系统。

通信系统:检错纠错算法,调度算法,甚至3G/4G/5G中码分多址、时分多址、频分多址,应用协议算法等。

文件系统:JPG、MP3、MP4等文件类型核心是变换算法和压缩算法。

加密系统:AES、DES、RSA等对称、非对称加密算法;MD5、SHA等哈希算法。

这些算法早已经应用于生活中的方方面面,比如数码相机拍照保存的Jpg照片;拍视频、电影、视频电话采用的MP4、RMVB等格式;音乐采用MP3、wav等格式;日常电话、短信使用的3G/4G/5G技术;蓝牙、WiFi、NFC功能;USB接口的存储设备(U盘、硬盘);导航、定位使用了卫星通信;支付宝、微信支付、银行系统中的加密系统。举不胜举。

二、数学是算法的基础

这里通过几个应用领域的算法来举例说明。

(1)JPG图片格式

JPG图片格式中主要应用了三个算法:DCT(离散余弦变换)、预测编码、哈夫曼编码。

离散余弦变换:是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DFT for Discrete Fourier Transform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数),在有些变形里面需要将输入或者输出的位置移动半个单位(DCT有8种标准类型,其中4种是常见的)。傅里叶变换的数学基础是三角函数和积分。

预测编码:预测一般比较简单,就是代数运算中的加减乘除。

哈夫曼编码:是信息论提出以来,基于最优二叉树的熵编码算法;而信息论的数学基础是概率论和随机过程。

也就是说构建JPG算法的数学基础有:代数、三角函数、积分和概率论。所以,如果只进行理论研究的数学家,无法广泛的将各类理论进行综合应用;而作为技术研发人员,不具备这些数学基础将无法实现算法创新。

(2)5G通信技术中的“极化码

5G通信马上要全面应用,作为5G通信标准中核心算法之一的极化码算法(另一个为LDPC算法),其目的是解决数据在无线电传输过程中的错误问题,降低了重传率。直接表象是:用户感觉网速稳定,传输很快,不再卡顿。

构造的核心是通过信道极化(channel polarization)处理,在编码侧采用方法使各个子信道呈现出不同的可靠性,当码长持续增加时,部分信道将趋向于容量近于1的完美信道(无误码),另一部分信道趋向于容量接近于0的纯噪声信道,选择在容量接近于1的信道上直接传输信息以逼近信道容量,是目前唯一能够被严格证明可以达到香农极限的方法。

显然,极化码类的信道检错纠错算法,其构造方式可以是代数、概率,其理论支持是信息论。检错纠错算法全球只有十几个比如奇偶校验(LDPC)、循环冗余、BCH、海明码、卷积码(涡轮码 Turbo code)、极化码等,每一算法都基于数学。3G时代采用了Turbo code,与该码有关的技术创新专利高达几十万个。

(3)银行密码、安全验证中的MD5算法

MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

我国加密标准SM3,也是散列算法的一种,而其数学基础是代数运算。

三、算法功能分类

(1)压缩算法

压缩分为有损和无损,有损主要用于图像、视频、音频等视觉,听觉类的数据压缩,目前市面上主要是一些通过一些方法先对人类不感兴趣的部分进行处理,然后对剩下的数据进行无损压缩。比如:在文字方面,按照中文定义的修饰语、定语之类的对理解语句并不存在大的影响的,可以先去除,把主谓宾相对重要的信息保留,然后进行无损压缩。针对图像来讲,频率高的数据人眼是不敏感的(比如小时候晃动香火,很快时成为了一个圈或线),所以,反过来可以认为图像中颜色相同的地方是高频部分。于是DCT、傅里叶变换、小波变换、部分预测编码就是针对频率区分的算法,适当舍弃高频数据、重点保留低频数据,再将剩下的数据进行无损压缩。这样可以保留图像的视觉效果,同时具有很高的压缩率。

无损压缩主要是针对数据压缩,并且解压后任何数据(字节、比特)均可无损还原。1948年香浓用概率理论给出了信息熵的概念,于是无损压缩就具有了压缩的理论极限。无损压缩算法有香浓费诺码、哈夫曼编码、算术编码、行程编码、字典编码等。

(2)加密

加密分为对称加密、非对称加密、授密与签名等算法。国内有SM系列算法,国外有DES、AES、RSA等算法,有MD5、SHA(美国国家安全局设计发布)等信息摘要算法。比如百度官网(淘宝、支付宝、腾讯等等)的签名算法如下图:

百度采用SHA256签名算法

该证书由GlobalSign签发,该公司是一个具有很高可信度并且发展良好的证书管理机构和SSL 提供商,美国公司。

(3)检错算法

检错算法主要用于通信和数据文件验证,比如奇偶校验码、CRC(循环冗余码)等,该类码不一定会具有纠错能力,主要目的是为了发现错误。比如5G通信中,极化码一般会使用CRC来校验传输后的数据正确性。检错算法冗余度一般比较低,所以在一些相对比较优质的信道中使用,比如光纤通信、有线或同轴电缆等领域。

(4)纠错算法

检错算法主要用于通信领域,比如卫星通信、无线电通信等信号衰变比较大、且干扰多的通信领域。比如5G通信中的极化码(差错控制码)、LDPC等,目前国内也开展海洋通信技术,深空通信技术,甚至量子通信等都需要优越的纠错算法,使得数据得以可靠传输,因为没有绝对不受干扰或绝对无误的物理传输信道和设备。

(5)分析

数据分析类算法具有很多,比如离散数据分析的遗传算法、粒子群算法;又比如针对图像识别的snake、四叉树、主成分分析、等高线等算法;还有针对经济数据和股票分析的模型也是算法。这类算法主要为提取有用的信息而设计开发。

(6)学习

学习算法目前比较热门,主要是让数学模型能完全或半自我修正的算法,通过学习得到与人类有关的、所需要的、能被认知的信息结果。目前BP、MP、网络神经算法等。但目前所有的学习算法仅仅是在分析算法上提升得到的算法。例如语音识别、图像识别主要还是提取大量的样本数据,进行一定程度上的模糊比对后得出对应的结果。

(7)管理

这里介绍的管理算法是一个大概念,比如人类社会中,人需要遵从的法律、道德都可以被理解为设计出来的算法。比如,计算机操作系统中的内存、设备管理方法,调度方法,数据结构和文件类型定义等等都是属于管理类算法。

上面例举了一小部分类型,感兴趣的朋友可以思考其他的场景。

三、创新算法的目的

创新的目的无非是:提升效率、降低能耗、增加功能、提升可信度、增强鲁棒性、降低实现难度等。比如压缩算法可以从三个方面来提升都是属于算法创新:

(1)方法创新,如行程编码、字典编码、哈夫曼编码、算术编码具有不同的方法,这条路比较艰难,属于核心算法理论创新。自信息论确立(1948年)以来全世界核心的算法理论就几个而已。

(2)效率创新,这个相对简单,比如算术编码和区间编码,就从一个小数运算演变成整数运算,使得效率增加;又比如我发明的加权概率模型算法,可以利用概率权系数针对一个或多个符号进行同步编码,也是属于效率增加类型。

(3)增加算法功能,前面我们讨论的是一个算法仅实现一个功能,而通过修改算法流程或方式,让一个算法同时实现压缩或加密,于是可以解决算法硬件化的成本,提升算法应用面。

(4)降低算法步骤,这个主要针对性能优化来讲的,能通过最少的步骤实现同样的功能,这本就是创新。

四、算法创新的方法

算法创新的方法是本文重点讨论的核心,了解算法的人很多,但是真正知道如何创新算法的人很少。然后我将基于不同的算法,结合我本人的经验给出一些创新的思路。希望未来,我国涌现出一批算法创新人才和专利技术。

这里我通过人脸识别和多麦阵列算法来举例,比如最初始的人脸捕捉(定位)算法。

首先,选择一个合理的分析环境和方法。给定一张人脸图或含有人脸的图,有可能是RGB或YUV颜色模式,以YUV为基础,Y可以代表着当前图像的黑白模式(到底是选择Y还是R、G、B可以考虑不同的场景来进行分析)。然后人脸一般可以被囊括在一个多边形的块域内,但是这个块域的中心在哪?块域大小如何确定?是首先应当提出来的问题。

第二,人脸有哪些特征?就是分析人脸在图像中的特征,如果白天拍摄的照片,显然对于人脸来讲,在黑白情况下只有头发、眼睛、鼻孔或口会呈现出黑色,当然有可能穿了黑色的衣服等。

第三,如何排除非人脸?人类固有的脸部特征是头发、眼睛、鼻孔、口的间距是有一定的参考特征范围的,于是就可以排除黑色衣服、包、或其他黑色的物件等。区分人脸还是其他动物的脸?就需要增加一切其他的只有人脸才有的特征参数,比如脸部除了胡子、黑痣以外不存在更接近黑色的色块,而且胡子的位置是相对已知的;如何不做具有胎记的人脸?胎记有很多形状,也存在很多的颜色可能,如何解决这个问题呢?解决办法可以设定场景内只允许出现人(这个是目前国内安检的主要做法)或者利用半脸复制的方法,如果半脸复制去除有胎记的色块,并判断眼、鼻间距相似则可以认定为是一个人脸。值得注意的是:分析并列出所有的可能性,针对每一种可能性寻找事务最基本的本质作为算法因子,如果是一些表象,则无法实现优质算法。

第四,如何获取图像远近中的人脸?又如何获取侧面的人脸?因为块域的大小和摄像头所在的位置、输出图像的尺寸存在关联,所以需要确定一些因数后再考虑通过眼、鼻、口来定位块域的中心位置。那又如何在一张图中捕捉多个人脸,且人脸的大小和遮挡也是不一样的。这里需要的还是去分析本质。首先远近对应的主要是人脸的大小和模糊程度,侧脸就不一样了需要得到眼、鼻、口的曲线关系才是脸的本质,耳朵和帽子、眼睛只能作为不重要的辅助因数。或者(大)半脸的矩阵变换(旋转、扭曲)关系才是本质。

第五,如何提升捕捉率?这里涉及的主要是遍历方法和摄像头的位置、图像采集尺寸、以及块域的初始大小。当确定这些参数,可以分为主扫描和多个辅扫描来提升人脸确定效率和遍历效率。即第一次用最大的块域和最小的块域作为窗口,每次向左下角移动一像素然后分析当前的块内是不是一个人脸(可以多方向同时进行扫描);也可以根据图像的特点和场景,用一个可缩的窗口不断的缩小;可以利用图像颜色和明亮度,得出脸部块的基本数值类型,然后利用四叉树、等高线、snake算法找出人脸的边界。

第六,如何进行识别?由于每次分析的都是事务的本质,所以这些本质同时也能代表某个特定人的生物标识。所以可以适当的在不同的光线和尺寸下,改变矩阵变换参数,利用本质信息进行一定程度的模糊识别不存在问题。

显然,一个简单的人脸识别算法,所涉及的内容巨大的,所能产生的不同创新也是不一样的,当然这里需要具有基础的数学功底,知道矩阵变换、三角函数等基础数学理论。我的方法是先分析问题,然后找数学方法,通过实验找出最优的实现方式和公式。因为移动就涉及向量运算,钮动和缩方涉及矩阵运算,其他的还有求平均值,方差,三角函数和一些数据结构方面的知识,比如二叉树、四叉树等。原则是:

“分析问题的本质,构建最少参数的表达式”

(后续我将逐步描述检错纠错、加密、压缩等算法创新方法)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值