srinsp的个人博客分享 http://blog.sciencenet.cn/u/srinsp

博文

闲话噪声的作用

已有 5138 次阅读 2020-7-10 20:06 |系统分类:科研笔记

  谚语说:一瓶子不满,半瓶子逛荡!

  别人晃动一个瓶子,你听声音,当出现声音时你可以判断里面有液体并且不满,这个晃动的动作帮助了你的判断。

  有研究证实,人睡觉的时候环境噪声还是必须的,绝对安静的房间里面你自己反而睡不着,最适宜的噪声是高斯白噪声,当然这个噪声不能强度太大。

  利用噪声帮助动物觅食,帮助人体平衡,健康恢复,手术钳的稳定等等,越来越多的证据表明适宜的扰动是非常有利生物体的功能体现的。

 信息处理中许多低精度传感器,这些传感器在噪声的有益扰动下,得到精度高的估计和检测是我们的研究目标。

   最近机器学习中噪声的作用也非常热,统计学习方法中如何利用这种扰动,有很多学者开始了慢慢尝试也得到了很多结果,值得我们继续深入!

  噪声在寻优过程中是非常有用处的,模拟退火实际就是一开始加以扰动,温度代表了扰动强度,噪声强度慢慢降低,等系统稳定了,那么一个可以接受的局部最优解出现了。下面这个例子就说明了系统学习过程中噪声是有利的,和随机共振的思想有非常相似之处。


模拟退火优化算法:噪声的作用

   当我们有多个局部最优点的时候,模拟退火随机优化非常有意义,基本思想 就是给初始点进行迭代,数据点的更新用噪声进行扰动,然后判断其对应的函数值是否比前面一步低,如果低则更新,否则继续扰动。注意的是,当接近最优点时候,扰动则需要控制好方差,慢慢收敛。这种方法适用于多个局部最优点,找到的解可以接受但是不一定全局最优。

   f = @(x) real(besselj(2,x)); ezplot(f,[-50,50])


这是一个Bessel函数,有多个局部最优值,两个全局最优值,如果用导数为零确定解有无穷多,还是不能判定那个点是最小值。用模拟退火,我们定义温度随着迭代次数成指数衰减率

k = 1e-2;

sched1 = @(iter) exp(-k*iter);

X = 0;%给定初始点

MaxIter = 20000;%最大迭代次数

X_T = zeros(MaxIter,2);

fold = f(X);%初始函数值

X_T(1,:) = [X,fold];

std0 = 3;%初始噪声均方根,方差为9

for iter = 2:MaxIter

  % current temperature (using the exponential form)

  T = sched1(iter);%当前噪声方差的系数值

  Xpert = std0*randn(1)*sqrt(T);%当前值的扰动值

  Xnew = X + Xpert;%更新当前坐标值

  fnew = f(Xnew);%更新函数值

  if fnew < fold

    X = Xnew;%如果函数减小,则接受更新

    fold = fnew;

    X_T(iter,:) = [X,fnew];

  elseif rand(1) <= (T^2)

    X = Xnew;% 为了防止陷入局部最优值,一定的概率更新

    fold = fnew;

    acceptflag = false;

    X_T(iter,:) = [X,fnew];

  else

    X_T(iter,:) = [X,fold];

  end

end

[fmin,minind] = min(X_T(:,2));%最后找到循环次数内的最小值

x1 = min(-50,min(X(:,1)));

x2 = max(50,max(X(:,1)));

ezplot(f,[x1,x2])

hold on

plot(X_T(:,1),X_T(:,2),'r-')

plot(X_T(minind,1),fmin,'go')

hold off




https://wap.sciencenet.cn/blog-1065241-1241520.html

上一篇:bilibili 讲座第3部分 “广义”匹配滤波器上线了
下一篇:随机共振理论在人体感知能力研究的进展与展望
收藏 IP: 223.80.95.*| 热度|

2 蔡宁 杨正瓴

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-3-29 16:53

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部