算法踩坑小记

 经过前面研究图像算法和近阶段研究视频和音频算法的经历经验.

在2019年快要来临的时候,写下这篇小记.

目的很简单,总结过往,展望未来.

这里列举一些本人在算法上踩过的坑和出坑思路.

 

主要是数据标准化问题.

 

1.临界值问题  (最大值,最小值,阈值,无穷小,无穷大)

最早做一键修图的时候,在这个坑上踩了太多次.

简单描述就是,

(示例伪代码例子仅供理解思考参考,不具有实际意义)

1.1 梯度消失

 

如果一个算法在计算过程中,存在最小值(无穷小,一般为0或接近0的数),

那就很可能出现"梯度消失"的问题.

例如:  

float weight = 0f; // (或 趋近于0)

float num = 255.0f;

float taget = num/weight;

这种问题最简单的解法就是归一化取值范围, 

原来取值范围是 0-255,归一化为 1-256

或转换到对数空间计算然后再转回来.

 

1.2 梯度爆炸

反之,结果为最大值或者接近无穷大的数,甚至溢出有效范围,那就可能出现"梯度爆炸"的问题.

例如:

int num1 = 255;
int num2 = 256;
unsigned char taget = num1-num2;
clamp 虽搓,但是简单有效,
这个解决思路基本跟梯度消失是一个逻辑,归一化.

1.3 阈值人为主义,非黑即白

采用阈值的做法,除非你清楚的知道你后续计算,

只有两种明确情况,否则不要轻易使用阀值.

 int threshold = 127;

if ( num>threshold)

 taget = 0;

else

 taget = 1;

 

其实,这三个临界值问题,熟悉深度学习的朋友,

可以类比一下激活函数.

 

深度学习现有的激活函数,其实并没有很好解决临界值问题,

只是采用规避的策略,降低临界值事件的发生概率.

这里不打算展开讨论,流言止于智者.

 

2.信息信号属性问题

多维空间与时序序列 的困局

2.1 多维空间

一般多维空间的问题在图像领域比较常见,当然音频领域也有.

例如:

灰度,彩色,YUV空间等.

多维数据绝大多数情况是为了 "信息互补","信息压缩".

也就是预计通过多个维度的信息,互相补充作用,最终合成最佳的信号.

这里最常见的坑就是,多维数据的归一化问题.

因为很有可能,RGB三个通道的颜色分布并不完全一致,

这个时候你要融合RGB三个通道的信息,

就必须考虑将数据归一化到三个通道都适宜的取值范围.

否则,最后合入时,就会出现上面提到的 临界值问题.

基本上只要做好 临界值的处理 就可以规避掉了.

例如图像领域做梯度金字塔融合时候,出现的晕轮效应或强边缘溢色.

 

当然,还有一种特例,就是评估策略.

当你碰到一个问题,对一张彩色图片,你只能用一个值来表达这张图片的全局情况.

一定要谨记,这个值的得出,必须所有数据参与计算.

不然就会犯多维数据的 阈值人为主义,非黑即白.

这个问题,当年设计一键修图算法的时候,就碰到过.

你怎么判断一张图片的是否需要去雾.

局部有雾或者全局有雾,去雾系数的确认就是这种问题.

 

2.2 时序序列

时序序列除了 多维空间碰到的问题,它还有更加恼人的问题.

主要是音频数据和文字语义数据的问题.

时序信号最最最严重的问题就是时长和叠加.

也就是一句话的长短,一句话中重叠数据的多少,都有可能推翻所有.

例如:

在一起,好不好.

在一起,不好.

在一起,好.

时序问题绝大多数,数据中某个孤立的数据,反而是决定性因子.

这就有点像,

中国政府某年颁布了什么什么条例.

某某行业消亡了.

时序信号问题,真的就有点大海里去捞针.

 

关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信