《神经网络与机器学习》第5讲随机梯度下降算法-BP起源


神经网络与机器学习

第5章 随机梯度下降法-BP的起源

 

神经网络的训练有很多方法,以数值优化为基础的随机梯度学习算法能够处理大规模的数据集合,它也是后面多层神经网络后向传播算法的基础。

随机梯度下降是以均方误差为目标函数的近似最速下降算法,该算法被广泛用于自适应信号处理领域,是Widrow与学生Hoff提出的,他们当时叫做自适应线性神经元(线性组合滤波器)和最小均方学习。

§5.1 自适应滤波器

我们先学习一下什么是滤波。滤波、平滑、预测都属于信号估计,三种方式的区别如下面图所示。滤波是给出信号$s(K)$在当前时刻$n$的估计$\widehat{s}(k)=f[x(k),\cdots,x(0)]$,$k$时刻前的数据可以用。

平滑是0在$k$到时刻数据中,$k$时刻数据缺少了,那么根据$k^'$前后时刻的数据估计$k^'$时刻的数据,称为平滑$\widehat{s}(k)=f[x(k),\cdots,x(k^'+1),x(k^'-1),\cdots,x(0)]$。数学里叫插值。

预测是依据从0到$k$时刻数据,得到并没有观测到$k+\tau$时刻的数据信息,给出一个估计$\widehat{s}(k+\tau)=f[x(k),\cdots,x(0)]$。

线性滤波器:是构造输入数据的函数$f[x(k),\cdots,x(0)]$,如果$f$为线性函数,比如

\[\widehat{s}(k)=\frac{x(k)}{4}+\frac{x(k-1)}{2}+\frac{x(k-2)}{4}\]

这个滤波器的结构非常简单,就是当前值为3个时刻观测值的加权平均值,线性系数[1/4,1/2,1/4]称为滤波器系数,这类线性函数是线性滤波器,否则是非线性滤波器$f$。维纳滤波和卡尔曼滤波都是线性滤波,维纳滤波适用于平稳的输入,而卡尔曼滤波是时变的最优线性滤波,适用于非稳态的输入。

自适应滤波:按照递归算法自动调节滤波器系数,平稳输入情况下收敛到维纳滤波器,非平稳情况下,如果变化足够缓慢,也能慢慢跟踪输入信号的变化,自适应滤波在通讯、地震、雷达、医学等方面应用广泛,主要可以完成系统辨识,均衡、预测、噪声对消这四个信号处理任务,应用十分广泛,并且由此衍生的随机梯度下降法对于机器学习也影响很大。

自适应滤波器是一类特殊的感知神经元,因为自适应滤波器由抽头延迟线、线性神经元组成的,如

从图5.1可以看出自适应横向滤波器就是一种特殊的线性神经元(感知机),激活函数选择的是线性函数$y=x$,我们可以将神经元$k$时刻的输出写为

\[a(k)=w^{\mathrm{T}}p+b=\sum_{i=1}^Rw_ip_i+b=\sum_{i=1}^Rw_ix(k-i+1)+b\]

如果增广向量

 

\[p\rightarrow \begin{bmatrix} p\\ 1 \end{bmatrix},w\rightarrow \begin{bmatrix} w\\ b \end{bmatrix}\]                                                     5.3

自适应滤波器或者线性神经元可以简化为

$a(k)=\bm{w}^{\mathrm{T}}\bm{p}$                                                5.4

自适应滤波器也和神经网络很像,有训练和测试两个过程,在训练过程中,已知期望响应$t(k)$,通过对权向量的设计,使从神经元输出在某种意义下最佳逼近期望响应。在工作过程中,权向量由训练过程得到,对未知输入(通常是随机信号)滤波得到响应信号。

性能曲面函数

误差信号

$e(k)=t(k)-a(k)=t(k)-\bm{W}^{\mathrm{T}}\bm{p}$                                  5.5

其平方称为瞬时平方误差

 

$e^2(k)=t^2(k)-2t(k)\bm{w}^{\mathrm{T}}\bm{p}+\bm{w}^{\mathrm{T}}\bm{p}\bm{p}^{\mathrm{T}}\bm{w}$                      5.6

设$p(k)$、$t(k)$是平稳的随机过程样本-随机信号,满足一定的分布,那么我们希望均方误差

$E[e^2]=E[t^2]-2\bm{w}^{\mathrm{T}}E[t\bm{p}]+\bm{w}^{\mathrm{T}}E[\bm{p}\bm{p}^{\mathrm{T}}]\bm{w}$           5.7

最小,这里输入数据向量$p$的自相关矩阵

\[R=E[pp^{\mathrm{T}}]\]                                              5.8

输入和期望信号的互相关向量为

$d=E[t\bm{p}]$                                                                 5.9

那么可以进一步将均方误差$E[\epsilon^2(k)]$写成如下形式

\[\xi =E[e^2(k)]=E[t^2(k)]-2dw+w^{\mathrm{T}}Rw\]                                 5.10

可以看出均方误差是权向量$w$的二次函数,其二阶导数-Hessian矩阵

\[\triangledown ^2\xi =\frac{\partial ^2\xi}{\partial w^2} =2R\succeq 0\]

$R\succeq 0$表示$R$矩阵非负定,我们一般遇到$R\succ 0$正定,因此均方误差是权向量$w$的二次凸函数,必定有最小解,那么通过一次导数等于零,解出最优权向量$w^o$

\[\triangledown \xi =\frac{\partial \xi}{\partial w} =2Rw- 2d=0\Rightarrow w^o=R^{-1}d\]    5.11

那么最优权向量$w^o$代入公式(3),最小均方误差$\xi_{min}$写为

\[\xi_{min}=E[t^2(k)]-d^{\mathrm{T}}w^o=E[t^2(k)]-d^{\mathrm{T}}R^{-1}d\]                5.12

我们也一般利用第4章学的最速下降法、牛顿法等迭代求解最优权向量$w^o$

§5.2 随机梯度下降法

我们现实中遇到这样的问题,自相关矩阵$R$得不到,我们不知道随机输入信号的分布,我们只知道样本集合

\[\left \{ p_1,t_1 \right \},\left \{ p_2,t_2 \right \},\cdots,\left \{ p_Q,t_Q \right \}\]

下标$q=1,2,\cdots,Q$是样本数量。最速下降法、牛顿法等迭代求解方法都无法进行,Widrow提出了一种近似最速下降算法,将均方误差$\xi=E[e^2(k)]$被瞬时平方误差代替

\[\widetilde{\xi}=e^2(k)\]

那么每次迭代计算寻优时,都计算梯度估计值

\[\widetilde{\triangledown\xi}=\triangledown e^2(k)=2e(k)\triangledown e(k)=2e(k)\frac{\partial e(k)}{\partial w}\]

由于$e(k)=t(k)-a(k)=t(k)-\bm{W}^{\mathrm{T}}\bm{p}$所以上式可以写为

 $\widetilde{\triangledown\xi}=\triangledown e^2(k)=-2e(k)\bm{p}$

可以看出梯度近似值只是误差和输入向量的乘积而已,所以依次放入样本${ p_1,t_1},{ p_2,t_2 },\cdots,{ p_Q,t_Q }$恒定的学习率$\alpha$,则依次更新权向量

\[w(q+1)=w(q)-\alpha \widetilde{\triangledown\xi}=w(q)+2\alpha e(k)p\]

这样每次样本输入,神经网络权值进行更新,这种学习方式又称为在线学习,最小均方算法,$delta$规则,随机梯度下降法,或者Widrow-Hoff学习。

按照第4章最优化中的二次函数分析,理论分析学习率$\alpha<\frac{2}{\lambda_{max}}$与自相关矩阵$R$最大特征值$\lambda_{max}$相关,但是现实中不知道自相关矩阵,因此学习率经常是试错法选择。理论分析学习可以在自适应滤波理论中详细学习,这里不再一一讲解。

这里列举两个例子来看随机梯度下降法的应用。一是利用随机梯度下降法训练感知机,另外一个是自适应噪声对消。

例子5.1 感知机的训练

我们有两个样本分别表示橘子和苹果,各自的期望目标输出为

\[\left \{ p_1=\begin{bmatrix} 1\\ -1\\ -1 \end{bmatrix},t_1=-1 \right \},\left \{ p_2=\begin{bmatrix} 1\\ -1\\ -1 \end{bmatrix},t_2=-1 \right \}\]

我们利用随机梯度下降法,依次输入${p_1,t_1},{p_2,t_2}$${p_1,t_1},{p_2,t_2}$,...,因为只有两个样本,所以可以组成这样的在线训练序列,${p_1,t_1},{p_2,t_2}$的顺序可以随机输入。初始化,我们选择这样的感知机

\[a=w^{\mathrm{T}}p=[w_1,w_2,w_3]\begin{bmatrix} p_1\\ p_2\\ \vdots\\ p_R \end{bmatrix}\]

$f$取线性函数$f(x)=x$ ,偏置为$b=0$,初始的权向量为$w(0)=[0,0,0]^{\mathrm{T}}$学习率$\alpha=0.2$,那么我们输入${ p_1=\begin{bmatrix} 1\\ -1\\ -1 \end{bmatrix},t_1=-1 }$,得到

\[a(0)=w^{\mathrm{T}}(0)p(0)=w^{\mathrm{T}}(0)p_1=[0,0,0]\begin{bmatrix} 1\\ -1\\ -1 \end{bmatrix}=0\]

误差为

\[e(0)=t(0)-a(0)=t_1-a(0)=-1\]

那么按照随机梯度下降方法更新权

\[w(1)=w(0)+2\alpha e(0)p_1=\begin{bmatrix} 0\\ 0\\ 0 \end{bmatrix}+2\times 0.2\times (-1)\times \begin{bmatrix} 1\\ -1\\ -1 \end{bmatrix}=\begin{bmatrix} -0.4\\ 0.4\\ 0.4 \end{bmatrix}\]

我们输入${ p_2=\begin{bmatrix} 1\\ -1\\ -1 \end{bmatrix},t_2=-1 }$,得到

\[a(1)=w^{\mathrm{T}}(1)p(1)=w^{\mathrm{T}}(1)p_2=[-0.4,0.4,0.4]\begin{bmatrix} 1\\ 1\\ -1 \end{bmatrix}=-0.4\]

误差为

 \[e(1)=t(1)-a(1)=t_2-a(0)=1.4\]

那么按照随机梯度下降方法更新权

 \[w(2)=w(1)+2\alpha e(1)p_2=\begin{bmatrix} -0.4\\ 0.4\\ 0.4 \end{bmatrix}+2\times 0.2\times (1.4)\times \begin{bmatrix} 1\\ 1\\ -1 \end{bmatrix}=\begin{bmatrix} 0.16\\ 0.96\\ -0.16 \end{bmatrix}\]

我们再次输入${p_1,t_1}$,得到

\[a(2)=w^{\mathrm{T}}(2)p(2)=w^{\mathrm{T}}(2)p_1=-0.64\]

 \[e(2)=t(2)-a(2)=t_1-a(2)=-0.36\]

 \[w(3)=w(2)+2\alpha e(2)p_1=\begin{bmatrix} 0.016\\ 1.104\\ -0.016 \end{bmatrix}\]

这样训练下去,我们会得到 

\[w(\infty)=\begin{bmatrix} 0\\ 1\\ 0 \end{bmatrix}\]

这比前面第3章得到感知机决策边界更加好,因为前面的决策边界模式一旦划分正确则停止,而现在的随机梯度下降法是使得决策边界尽量原来样本模式,使得近似均方误差最小,两种决策边界虽然都处于样本模式之间,但是随机梯度法得到决策边界在测试中是非常实用的。

例子5.2 自适应噪声对消

 

图5.3 自适应噪声对消

任务:设噪声源$u(k)$将语音等信号$s(k)$污染,我们不知道噪声强度多少,我们想在语音源附近也测量同源噪声$\beta(k)$,然后用自适应算法预测噪声$u(k)$,然后对消噪声,得到误差就是相对纯净的信号发送出去。

设信号是随机相位信号

\[s(k)=cos(\frac{\pi k}{16}+\varphi )\]

污染信号的噪声是

\[u(k)=0.9u(k)+\eta(k)\]

$\eta(k)$是标准正态分布的高斯白噪,$\sigma_{\eta}^2=1$,而另外一个渠道得到的噪声和$u(k)$同源,但是不同的信道

\[\beta(k)=-0.75\beta(k)+\eta(k)\]

用随机梯度下降算法进行自适应滤波,不需要任何关于随机输入的二阶矩的知识。主程序如下:

%System parameters

omg0 = pi/16; a1 = 0.9; a2 = -0.75; var_eta = 1;

% Generate Desired and Input signals

order=20;

N = 1000;%data length

n = [0:N-1]';

phi = 2*pi*rand(1,1);

s = cos(omg0*n+phi);

eta = randn(N,1);

u = filter(1,[1,-a1],eta);

beta = filter(1,[1,-a2],eta);

t = s + u;

mu = 0.005;%step

w0 = zeros(order,1);

[w,e,yhat] = firlms(beta,t,mu,order,w0);

plot(e,'b-');

hold on

plot(s,'r--')

function [w,e,yhat] = firlms(x,t,mu,L,w0)

% Computes filter coefficients w and the corresponding error in

% e, given signal x, desired signal y, step size mu, filter order L, and

% the initial coefficient vector w0.

N = length(x); % Length of x(n) & number of iterations

x = reshape(x,N,1); % x as a column vector

w = zeros(L,N); % Initialization of w

X = zeros(L,N); % Data matrix

xx = [zeros(L-1,1);x]; % Prepend L-1 zeros

for i = 1:L

X(i,:) = xx(L-i+1:end-i+1)';

end

e = zeros(1,N); yhat = zeros(N,1);

%--LMS Algorithm for FIR filter - real-valued case

% Algorithm initialization

yhat(1) = w0'*X(:,1);

e(1) = t(1) - yhat(1);

w(:,1) = w0 + 2*mu*X(:,1)*e(1);

% Iterations

for n = 2:N

yhat(n) = w(:,n-1)'*X(:,n);

e(n) = t(n) - yhat(n);

w(:,n) = w(:,n-1) + 2*mu*X(:,n)*e(n);

end

 

一开始滤波器并不能消除噪声,随着时间推移,慢慢滤波器系数(神经元权向量收敛),对消了噪声,余下相对纯净的信号。这种系统在飞机、战场、大风等恶劣天气中个人通信等等场景中经常遇到。尽管飞行器发动机、风啸等噪声和人的语音同时进入声音发射器(麦克风),但是相对清晰的语音被发送过去,当然如果遇到与语音频率特别接近的声音是无法消除的。

图5.4 自适应噪声对消示例

 

例子5.3(*选讲):二阶自回归AR(2)过程

\[x(n)-0.96x(n_1)+0.9x(n-2)=\eta(n)\]

$\eta(n)$是高斯白噪声,均值为0,方差为$\sigma_{\eta}^2$,我们利用一个二阶滤波器进行系统辨识

\[y(n)=w_1x(n-1)+w_2x(n-2)\]

%AR过程

N = 501; mu= 0.01;

a1 = -0.950; a2 = 0.9; varx = 1; r0 = varx;

vareta = ((1-a2)*((1+a2)^2-a1^2)/(1+a2))*varx;

r1 = -a1/(1+a2)*r0; r2 = (-a2+a1^2/(1+a2))*r0;

lam1 = (1-a1/(1+a2))*varx; lam2 = (1+a1/(1+a2))*varx;

XR = lam1/lam2;d = [r1;r2];%条件数

R = toeplitz([r0,r1,r2]);%自相关阵

w = sqrt(vareta)*randn(N,1);

x = filter(1,[1 a1 a2],w);%传递函数形式

%观测随机梯度算法的性能

[w,e] = lplms(x,0.01,2,[0 0]');

subplot(121)

plot(w(1,:),w(2,:));

hold on

[w1,w2]=meshgrid(-1:0.01:3,-2:0.01:1);

z=r0+r0*w1.^2+r0*w2.^2+2*r1*w1.*w2-2*r1*w1-2*r2*w2;%MSE

contour(w1,w2,z,50);

subplot(122)

plot(w(1,:),'b--*');

hold on

plot(w(2,:),'r-^')

plot([0 501],[0.95 0.95],'--')

plot([0 501],[-0.9 -0.9],'--')

function [w,e] = lplms(x,mu,L,w0)

% Computes filter coefficients in w and the corresponding error in

% e, given signal x, desired signal d, step size mu, filter order L, and

% the initialcoefficient vector w0.

N = length(x); % Length of x(n)

x = reshape(x,N,1); % x as a column vector

d = x(2:end); % Generate desired d(n)

N = length(d); % Number of iterations

c = zeros(L,N); % Initialization of c

X = zeros(L,N); % Data matrix

xx = [zeros(L-1,1);x];

for i = 1:L

X(i,:) = xx(L-i+1:end-i)';

end

e = zeros(1,N);

%--LMS Algorithm

% Algorithm initialization

yhat = w0'*X(:,1);

e(1) = d(1) - yhat;

w(:,1) = 2*mu*X(:,1)*e(1);

% Iterations

for n = 2:N

yhat = w(:,n-1)'*X(:,n);

e(n) = d(n) - yhat;

w(:,n) = w(:,n-1) + 2*mu*X(:,n)*e(n);

end

w = [w0,w];

e = [x(1),e];

图5.5 随机梯度下降法中函数值和权向量收敛学习曲线

 \[y(n)=w_1x(n-1)+w_2x(n-2)\]

权系数$w_1$和$w_2$相对"随机"地收敛到-0.95和0.9,达到系统辨识的目的。

 

作业:利用随机梯度下降算法训练四分类判定决策界面问题。

图3.2 四类数据的几何表示

训练数据为8个目标向量,分别是

 

\[\left \{ (p_1=\begin{bmatrix} 1\\ 1 \end{bmatrix},t_1=\begin{bmatrix} -1\\ -1 \end{bmatrix}),(p_2=\begin{bmatrix} 1\\ 2 \end{bmatrix},t_2=\begin{bmatrix} -1\\ -1 \end{bmatrix}) \right \}\]

类1标记为

 

\[\left \{ (p_3=\begin{bmatrix} 2\\ -1 \end{bmatrix},t_3=\begin{bmatrix} -1\\ 1 \end{bmatrix}),(p_4=\begin{bmatrix} 2\\ 0 \end{bmatrix},t_4=\begin{bmatrix} -1\\ 1 \end{bmatrix}) \right \}\]

类2标记为

 

\[\left \{ (p_5=\begin{bmatrix} -1\\ 2 \end{bmatrix},t_5=\begin{bmatrix} 1\\ -1 \end{bmatrix}),(p_6=\begin{bmatrix} -2\\ 1 \end{bmatrix},t_6=\begin{bmatrix} 1\\ -1 \end{bmatrix}) \right \}\]

类3标记为

 

\[\left \{ (p_7=\begin{bmatrix} -1\\ -1 \end{bmatrix},t_7=\begin{bmatrix} 1\\ 1 \end{bmatrix}),(p_8=\begin{bmatrix} -2\\ -2 \end{bmatrix},t_8=\begin{bmatrix} 1\\ 1 \end{bmatrix}) \right \}\]

类4标记为

神经元选为带偏置的

\[a=Wp+b=\begin{bmatrix} W & b \end{bmatrix}\begin{bmatrix} p\\ 1 \end{bmatrix}\]

设初值

\[W(0)=\begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix},b(0)=\begin{bmatrix} 1\\ 1 \end{bmatrix}\]

或者增广

\[W(0)=\begin{bmatrix} 1 & 0 & 1\\ 0 & 1 & 1 \end{bmatrix}\]

那么利用随机梯度下降算法40次,并画出收敛的决策边界。

2021年3月27日星期六
2020级系统科学研究生李增伟编制的程序:第5章作业

clc,clear
rate = 0.003;
p = [1 1 2 2 -1 -2 -1 -2;1 2 -1 0 2 1 -1 -2];
t = [-1 -1 -1 -1 1 1 1 1;-1 -1 1 1 -1 -1 1 1];
P=[p(1,:);p(2,:);ones(1,8)];
w = [1 0 1;0 1 1];
for j = 1:40
for i = 1:8
a_value = w*P(:,i);
Error = t(:,i) - a_value;
w_new = w + 2 * rate * Error * P(:,i)';
w = w_new;
end
end
plot(p(1,1:2),p(2,1:2),'o','MarkerSize',10);
hold on
plot(p(1,3:4),p(2,3:4),'p','MarkerSize',10);
hold on
plot(p(1,5:6),p(2,5:6),'s','MarkerSize',10);
hold on
plot(p(1,7:8),p(2,7:8),'h','MarkerSize',10);
hold on
refline(w(1,2)/w(1,1),w(1,3))
refline(w(2,2)/w(2,1),w(2,3))


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM