FPGA教程目录
MATLAB教程目录
-----------------------------------------------------------------------
创新一直是一个令人纠结的话题,研究生毕业设计多数需要算法的创新,而博士生毕业更需要大量的创新才行。另外一方面,一些前沿的课题,更是对算法的创新有着较高的要求。这里,我就十几年来的工作经验,谈谈如何进行合理的算法创新。
一、创新角度
通常,我们使用一个算法,这里举个简单的粒子,PSO粒子群优化算法,我们通过仿真,会得到该算法的收敛速度,仿真精度等一些参数指标。如果我们需要对该算法进行创新,一般就需要从原算法的性能指标角度考虑,比如收敛速度和精度的提高,对于一些低要求,可以在保证收敛速度不变的情况下,提高精度,或者在精度不变的情况下,加快收敛速度,如果要求较高,则同时考虑如何提高收敛速度和精度。一般情况下,针对这种情况,我们需要考虑别的类似算法,而这些算法必须具备快速收敛和高精度中的某些特性,这样我们就可以将多种算法的优势进行整合,从而实现算法的创新并提高原算法的性能。
再比如在通信领域,虽然目前技术非常成熟了,包括信道编译码,调制解调,各种同步,信道估计均衡等等。但是随着这些年深度学习的兴趣,通信领域的创新又有了新的方向。目前应用比较多的有基于深度学习的信道估计均衡方面,例如通过CNN对LTE进行信道估计等等。
此外,人工智能领域,创新更是层出不穷,目前,几乎每年都会有新的网络被提出,但是几乎所有的网络都源于CNN。基于CNN,后来就有了RCNN,fast RCNN等等一些列网络。学者通过改进网络卷积层结构,或者加入一些其他算法,产生新的网络模型。
因此,创新的首要前提,就是要有足够多的理论储备,同时对算法本身有着非常深入的理解,包括其优缺点,然后针对缺点,提出改进。
二、创新依据
什么是创新依据?所谓创新依据,就是我们使用的创新算法,所考虑的角度是有理论依据的,我们不能凭空修改原来的算法,这样即使获得了布局的更优解,但也无法证明全局的更优。因此,正如一所说,我们需要选择某些性能比原算法更好的其他现成算法,进行算法的整合。
我这里举2个例子,比如,我们要对一个通信中的载波同步做改进,那么初学者会想到,载波同步里面有个鉴相器,对鉴相器的结构进行改进。例如经典的costas环,他的鉴相器是个乘法模块,通过这个过程,我们可以从理论上推导出最后的锁定相位值。那么说明这个乘法模块还是有效的,那么你改进他的时候,需要按原来的推导方式,也可以得到一个锁定的相位,同时这个相位最后的表达式,要比经典的costas换的相位表达式,抖动更新,收敛更快。那么改进才算有效。如果无法推导出一个合理的结果,或者推导的结果反而比原来的差,那么不算改进,只能算是算法的“奇思妙想”了。
再举个例子,比如深度学习,我们比较常用的CNN,如何改进?我们自然就想到,他的卷积层提取图像特征,是否可以改进卷积层,增强其特征提取效果,或者加入多尺度的思想,或者调试最优的卷积层参数等等。
三、创新的验证
对于改进后的算法,我们需要使用大量的测试样本进行对比分析,验证算法的各个性能指标是否较原来的算法有所提高。
1.无线基带,无线图传,编解码:这个领域,那么自然就要用到误码率这个指标,对相关的改进进行误码率检测,如果误码率提升,则表示你的改进有效,否则无效。
2.机器视觉,图像处理,三维重建:这个方面,对图像处理的结果,可以和原始的图像做对比,比如PSNR,NC等,假设处理后的图像更接近理想图像了,那么说明改进有效、
3.人工智能,深度学习,一般用到混淆矩阵,得到四个指标,验证网络模型的识别率等。
4.智能控制,智能优化,一般通过对比算法的收敛性速度,收敛值来验证改进是否成功。
以上过程,验证软件一般用matlab,python比较多,我个人熟悉matlab,然后最后落地,做原型机,则使用FPGA做相关开发。
四、完全的创新
完全的创新,这个是高要求的创新,一般有两个层次,一个是跨学科的创新,一个理论开拓。
我们通过这几年的情况看,一般,要求稍高的硕士,会涉及到跨学科的算法创新,比如,我们将物理上的一些公式应用到生物化学上的公式,并结合进行创新,或者是使用一组数学公式,去研究一些文科的问题。
理论的开拓,这个属于是最高要求的创新了,即没有现成的理论依据,需要我们去研究,总结出相关的理论,一般学生的课题不会涉及到这方面的要求,通常是一些较为复杂的工程项目或者博士课题,需要根据已知的一些条件,推算出一些新的公式,来表征一个过程或者现象。这个就非常有难度。