误差传播算法

误差种类及来源

测量学中,真值X减去测量值Li被称为误差(观测误差):
Δ i = L i − X \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad Δ_i=L_i-X Δi=LiX
误差可分为:
                 1、粗差 Δ c Δ_c Δc
                 2、系统误差 Δ x Δ_x Δx
                 3、 偶然误差 Δ o Δ_o Δo
偶然误差的特点就是,当观测次数无限时,误差均值为0:

lim ⁡ n → ∞ Δ 1 + Δ 2....... + Δ n ) n = lim ⁡ n → ∞ [ Δ o ] ) n = 0 \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad \lim_{n\to \infty}\frac{\Delta 1+\Delta 2.......+\Delta n)}{n}= \lim_{n\to \infty}\frac{[\Delta_o])}{n}=0 limnnΔ1+Δ2.......+Δn)=limnn[Δo])=0
当然,这些今天的重点,我们知道误差 Δ = Δ c + Δ x + Δ o Δ=Δ_c+Δ_x+Δ_o Δ=Δc+Δx+Δo就够了。

观测精度

中误差通常用来衡量精度:
m = ± [ Δ 2 ] ) n = 0 \qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad m= \pm \sqrt{\frac{[\Delta^2])}{n}}=0 m=±n[Δ2]) =0

误差正向传播

正向传播是一个已知各项变量测量误差推求函数变换后的总误差的过程。
Z Z Z是独立变量 X 1 , X 2 … … X n X_1,X_2……X_n X1,X2Xn的函数:
Z = f ( X 1 , X 2 … … X n ) Z=f(X_1,X_2……X_n) Z=f(X1,X2Xn)
假设中误差为 m z m_z mz各变量的观测误差为 m 1 , m 2 … … m n m_1,m_2……m_n m1,m2mn,我们便可以通过各变量的观测值中误差来推求出函数的中误差:
设 : X i = L i − Δ i 设:X_i=L_i-\Delta_i Xi=LiΔi
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad 其中 L i L_i Li为观测值, Δ i \Delta_i Δi为误差
则函数 Z Z Z为: Z = f ( L 1 − Δ 1 , L 2 − Δ 2 … … L n − Δ n ) Z=f(L_1-\Delta_1,L_2-\Delta_2……L_n-\Delta_n) Z=f(L1Δ1,L2Δ2LnΔn)
对其进行泰勒展开,取前两项: f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) f(x)=f(x0)+f'( x0)(x- x0) f(x)=f(x0)+f(x0)(xx0)有: Z = f ( L 1 , L 2 … … L n ) − ( ∂ f ∂ X 1 Δ 1 + ( ∂ f ∂ X 2 Δ 2 … … ( ∂ f ∂ X n Δ n ) Z=f(L_1,L_2……L_n)-(\frac{\partial{f}}{\partial{X_1}}\Delta_1+(\frac{\partial{f}}{\partial{X_2}}\Delta_2……(\frac{\partial{f}}{\partial{X_n}}\Delta_n) Z=f(L1,L2Ln)(X1fΔ1+(X2fΔ2(XnfΔn)
所以函数 Z Z Z的中误差为: Δ z = ( ∂ f ∂ X 1 Δ 1 + ( ∂ f ∂ X 2 Δ 2 … … ( ∂ f ∂ X n Δ n ) \Delta_z=(\frac{\partial{f}}{\partial{X_1}}\Delta_1+(\frac{\partial{f}}{\partial{X_2}}\Delta_2……(\frac{\partial{f}}{\partial{X_n}}\Delta_n) Δz=(X1fΔ1+(X2fΔ2(XnfΔn)

当然,这只是观测一次,当观测多次时,我们能推出如下表格:

函数名称函数式中误差传播公式
倍数函数 Z = A X Z=AX Z=AX m Z = ± A m m_Z=\pm Am mZ=±Am
和差函数 Z = X 1 ± X 2 … … ± X 2 Z=X_1\pm X_2……\pm X_2 Z=X1±X2±X2 m Z = ± m 1 2 + m 2 2 … … + m n 2 m_Z=\pm \sqrt{m_1^2+m_2^2……+m_n^2} mZ=±m12+m22+mn2
线性函数 Z = A X 1 ± A X 2 … … ± A X 2 Z=AX_1\pm AX_2……\pm AX_2 Z=AX1±AX2±AX2 m Z = ± A 1 2 m 1 2 + A 2 2 m 2 2 … … + A n 2 m n 2 m_Z=\pm \sqrt{A_1^2m_1^2+A_2^2m_2^2……+A_n^2m_n^2} mZ=±A12m12+A22m22+An2mn2

误差反向传播

反向传播是一个已知函数变换后的总误差推求各项变量误差的过程。
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad 在这里插入图片描述
假设如上测量过程,我们以A为起点(设高度为0)沿箭头方向测
当我们到B点时,高度增加了 D a b = + 5 c m D_ab=+5cm Dab=+5cm,高度为 L b = 0 + D a b = 5 c m L_b=0+D_ab=5cm Lb=0+Dab=5cm
到c点时,高度增加了 D b c = − 3 c m D_bc=-3cm Dbc=3cm,高度为 L c = L b + D b c = 2 c m L_c=L_b+D_bc=2cm Lc=Lb+Dbc=2cm
回到A点时,高度增加了 D c a = − 3 c m D_ca=-3cm Dca=3cm,高度为 L a = L c + D c a = 1 c m L_a=L_c+D_ca=1cm La=Lc+Dca=1cm
所以在A点时出问题了,高度既是0又是1,这就是测量误差导致的,我们可以用如下方法纠正误差:

总误差 Δ Z = 0 − 1 = 1 c m \Delta_Z=0-1=1cm ΔZ=01=1cm,求 A B AB AB段误差为 Δ 1 = ? c m \Delta_1=?cm Δ1=cm B C BC BC段误差为 Δ 2 = ? c m \Delta_2=?cm Δ2=cm C A CA CA段误差为 Δ 3 = ? c m \Delta_3=?cm Δ3=cm

我们可以将总误差平均到各段路程中去:
总路程: S = 3 + 4 + 5 = 12 m S=3+4+5=12m S=3+4+5=12m,则:

\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad A B AB AB段误差为 Δ 1 = S a b S Δ Z = 3 Δ Z 12 c m \Delta_1=\frac{S_ab}{S}\Delta_Z=\frac{3\Delta_Z}{12}cm Δ1=SSabΔZ=123ΔZcm

\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad B C BC BC段误差为 Δ 2 = S b c S Δ Z = 4 Δ Z 12 c m \Delta_2=\frac{S_bc}{S}\Delta_Z=\frac{4\Delta_Z}{12}cm Δ2=SSbcΔZ=124ΔZcm

\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad C A CA CA段误差为 Δ 3 = S c a S Δ Z = 5 Δ Z 12 c m \Delta_3=\frac{S_ca}{S}\Delta_Z=\frac{5\Delta_Z}{12}cm Δ3=SScaΔZ=125ΔZcm

然后对测量值进行修正 ( X i = L i − Δ i ) (X_i=L_i-\Delta_i) (Xi=LiΔi)

\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad B B B点高度 X b = L b − Δ 1 = ( 0 + 5 − 3 12 ) c m X_b=L_b-\Delta_1=(0+5-\frac{3}{12})cm Xb=LbΔ1=(0+5123)cm

\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad C C C点高度 X c = X b − Δ 1 = 5 − 3 − ( 3 12 + 4 12 ) c m X_c=X_b-\Delta_1=5-3-(\frac{3}{12}+\frac{4}{12})cm Xc=XbΔ1=53(123+124)cm

\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad A A A点高度 X a = X c − Δ 1 = 5 − 3 − 1 − ( 3 12 + 4 12 + 5 12 ) = 0 c m X_a=X_c-\Delta_1=5-3-1-(\frac{3}{12}+\frac{4}{12}+\frac{5}{12})=0cm Xa=XcΔ1=531(123+124+125)=0cm

这样我们就解决了测量上误差不闭合的问题。不过测量中,我们所用到的函数是简单的和差函数 D = D a b + D b c + D c a D=D_ab+D_bc+D_ca D=Dab+Dbc+Dca

神经网络中,我们用的是向量函数的误差传播:
假设只有一层神经元:
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad o u t → = f ( A X → ) \overrightarrow{out}=f(A\overrightarrow{X}) out =f(AX )
其中我们的A是一个齐次坐标变换矩阵。为了简化分析,我们采用两个神经元组成一层:
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad 在这里插入图片描述
我们可以写成二维向量函数形式:
[ O 1 O 2 ] = f ( [ w 11 w 21 w 12 w 22 ] ∗ [ x 1 x 2 ] + [ b 1 b 2 ] ) \begin{bmatrix} O_1 \\ O_2 \\ \end{bmatrix}=f(\begin{bmatrix} w11& w21 \\ w12&w22 \\ \end{bmatrix}*\begin{bmatrix} x_1 \\ x_2 \\ \end{bmatrix}+\begin{bmatrix} b_1 \\ b_2 \\ \end{bmatrix}) [O1O2]=f([w11w12w21w22][x1x2]+[b1b2])
也可以写成三维向量式:
[ O 1 O 2 O 3 ] = f ( [ w 11 w 21 b 1 w 12 w 22 b 2 0 0 1 ] ∗ [ x 1 x 2 x 0 ] ) \begin{bmatrix} O_1 \\ O_2 \\ O_3 \end{bmatrix}=f(\begin{bmatrix} w11& w21 &b1\\ w12&w22 &b2\\ 0&0&1 \end{bmatrix}*\begin{bmatrix} x_1 \\ x_2 \\ x_0 \end{bmatrix}) O1O2O3=f(w11w120w21w220b1b21x1x2x0)
那么问题就来了,随便丢了一个权重矩阵A,得到了输出向量,我们该怎么修正权重。
我们可以把输出进行单独分析,比如,只分析 O 1 O_1 O1的输出和目标差了多少,假设目标值(真值)为 O b O_b Ob,那么误差为: Δ o = O 1 − O b \Delta_o=O_1-O_b Δo=O1Ob
很显然: O 1 = f ( w 11 ∗ x 1 + w 21 ∗ x 2 + b 1 ∗ x 0 ) O_1=f(w11*x_1+w21*x_2+b1*x_0) O1=f(w11x1+w21x2+b1x0)
我们为了方便分析,拆分为如下两个函数:’

u 1 = w 11 ∗ x 1 + w 21 ∗ x 2 + b 1 ∗ x 0 u_1=w11*x_1+w21*x_2+b1*x_0 u1=w11x1+w21x2+b1x0

O 1 = f ( u ) O_1=f(u) O1=f(u)

函 数 u 1 函数u_1 u1是简单的线性函数,做误差传播分析很容易
函 数 O 1 函数O_1 O1是非线性函数,误差传播势必需要用微分求导:

Δ O 1 = Δ f ( u ) = Δ f ( u ) Δ u ∗ Δ u = f ′ ( u ) ∗ Δ u \Delta O_1=\Delta f(u)=\frac{ \Delta f(u)}{\Delta u}*\Delta u=f'(u)*\Delta u ΔO1=Δf(u)=ΔuΔf(u)Δu=f(u)Δu

Δ u 1 = Δ w 11 ∗ x 1 + Δ w 21 ∗ x 2 + Δ b 1 ∗ x 0 \Delta u_1=\Delta w11*x_1+\Delta w21*x_2+\Delta b1*x_0 Δu1=Δw11x1+Δw21x2+Δb1x0

假设我们使用的传递函数为 s i g m o i d sigmoid sigmoid函数,那么 O 1 = f ( u ) = 1 1 + e − u O_1=f(u)=\frac{1}{1+e^-u} O1=f(u)=1+eu1,导数为 f ′ ( u ) = f ( u ) ( 1 − f ( u ) ) f'(u)=f(u)(1-f(u)) f(u)=f(u)(1f(u))
所以: Δ O 1 = f ′ ( u ) ∗ Δ u = f ( u ) ( 1 − f ( u ) ) ∗ ( Δ w 11 ∗ x 1 + Δ w 21 ∗ x 2 + Δ b 1 ∗ x 0 ) \Delta O_1=f'(u)*\Delta u=f(u)(1-f(u))*(\Delta w11*x_1+\Delta w21*x_2+\Delta b1*x_0) ΔO1=f(u)Δu=f(u)(1f(u))(Δw11x1+Δw21x2+Δb1x0)
即: Δ O 1 = f ′ ( u ) ∗ x 1 ∗ Δ w 11 + f ′ ( u ) ∗ x 2 ∗ Δ w 21 + f ′ ( u ) ∗ x 0 ∗ Δ b 1 ) \Delta O_1=f'(u)*x_1*\Delta w11+f'(u)*x_2*\Delta w21+f'(u)*x_0*\Delta b1) ΔO1=f(u)x1Δw11+f(u)x2Δw21+f(u)x0Δb1)
我们令 K i = f ′ ( u ) ∗ x i K_i=f'(u)*x_i Ki=f(u)xi,改写为 Δ O 1 = K 1 ∗ Δ w 11 + K 2 ∗ Δ w 21 + K 0 ∗ Δ b 1 ) \Delta O_1=K_1*\Delta w11+K_2*\Delta w21+K_0*\Delta b1) ΔO1=K1Δw11+K2Δw21+K0Δb1)

很显然, Δ O 1 \Delta O_1 ΔO1不仅仅和 w 11 w11 w11相关,就像前面测量中的误差不仅仅由一段距离产生,但是前面我们能通过按距离平差的方式将误差平均到各段中去,这里并没有距离之类的参考信息进行平差.
或者假设我们可以假设:总路程: S = K 1 + K 2 + K 3 S=K_1+K_2+K_3 S=K1+K2+K3
那么: Δ w 11 = 1 S ∗ Δ O 1 ∗ K i ) \Delta w11=\frac{1}{S}*\Delta O_1*K_i) Δw11=S1ΔO1Ki)

当我们令 α = 1 S \alpha=\frac{1}{S} α=S1时,我们可得 Δ w 11 = α ∗ Δ O 1 ∗ K i \Delta w11=\alpha *\Delta O_1*K_i Δw11=αΔO1Ki

所以我们在神经网络中可以这么更新的权重的:
w i ⟵ w i − α ∗ Δ O 1 ∗ K i w_i\longleftarrow w_i-\alpha*\Delta O_1*K_i wiwiαΔO1Ki

当然,我们这里使用的误差是测量值减真值,但大部分机器学习中误差是真值减去测量值,即如下:
E = O t − O E=O_t-O E=OtO
其中 O t O_t Ot是用来教学的教师数据, O O O才是实际输出,所以和本文中的更新刚好相反:

w i ⟵ w i + α ∗ Δ O ∗ K i w_i\longleftarrow w_i+\alpha*\Delta_O*K_i wiwi+αΔOKi

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值