前馈神经网络

前馈神经网络(feedforward neural network)

在这种神经网络中,各神经元从输入层开始,接收前一级输入,并输入到下一级,直至输出层。整个网络中无反馈,可用一个有向无环图(derected acyclic graph,DAG)表示。
通常我们说的前馈神经网络有两种:一种叫 Back Propagation Networks——反向传播网络(简称BP网络),一种叫做 RBF Networks ——径向基函数神经网络。

神经网络本身就有很多种设计模式,并且会在不同的模式下产生不同的训练效果和运用特点。

损失函数(Cost/Loss)
  1. 恒非负
  2. 误差越小函数值越小
  3. 收敛快

神经网络的训练

输入层 i
隐藏层 h
输出层 o

这个网络用函数表达式去写的话会是这样的:
z h = ω h x + b h ,    y h = 1 1 + e − z h z o = ω o y h + b o ,    y o = 1 1 + e − z o \begin{array}{lcl} z_h = \omega_hx+b_h,\;y_h=\dfrac{1}{1+e^{-z_h}} \\\\ z_o = \omega_oy_h + b_o,\;y_o=\dfrac{1}{1+e^{-z_o}} \end{array} zh=ωhx+bh,yh=1+ezh1zo=ωoyh+bo,yo=1+ezo1

  1. 准备样本
    在一个复杂的网络中,我们准备用一定数量的用来训练的 x x x 向量,可以是文本,可以是图片,可以是音频,甚至可以是音视频结合的更为复杂的训练样本,当然只要是输入到网络中作为训练样本的一定是向量化的。
输入层x输出层y输入层x输出层y
10.160.6
20.270.7
30.380.8
40.490.9
50.5101.0
  1. 清洗处理
    在放入网络进行训练之前,需要进行一定处理,处理的目的是为了帮助网络更有效的、更准确地做好分类。
  2. 正式训练
    在前面的工作基本做好的情况下,我们就可以开始训练模型了。
    将上面表格中的数据丢进网络中,根据网络中两个神经元的表达式描述:
    z h = ω h x + b h ,    y h = 1 1 + e − z h z o = ω o y h + b o ,    y o = 1 1 + e − z o \begin{array}{lcl} z_h = \omega_hx+b_h,\;y_h=\dfrac{1}{1+e^{-z_h}} \\\\ z_o = \omega_oy_h + b_o,\;y_o=\dfrac{1}{1+e^{-z_o}} \end{array} zh=ωhx+bh,yh=1+ezh1zo=ωoyh+bo,yo=1+ezo1
    x 1 x_1 x1 一旦代入之后,就会是这样一个映射关系了:
    z h 1 = ω h x 1 + b h ,    y h 1 = 1 1 + e − z h 1 z o 1 = ω o y h 1 + b o ,    y o 1 = 1 1 + e − z o 1 \begin{array}{lcl} z_{h_1} = \omega_hx_1+b_h,\;y_{h_1}=\dfrac{1}{1+e^{-z_{h_1}}} \\\\ z_{o_1} = \omega_oy_{h_1} + b_o,\;y_{o_1}=\dfrac{1}{1+e^{-z_{o_1}}} \end{array} zh1=ωhx1+bh,yh1=1+ezh11zo1=ωoyh1+bo,yo1=1+ezo11
    那么由 x 1 x_1 x1 y 1 y_1 y1 带来的误差值也可以定义了,也就是:
    L o s s 1 = ( y o 1 − y 1 ) 2 Loss_1 = (y_{o_1}-y_1)^2 Loss1=(yo1y1)2
    由 10 个训练数据共同带来的误差值就变成了:
    L o s s = ∑ i = 1 10 ( y o i − y i ) 2 Loss = \sum_{i=1}^{10}(y_{o_i}-y_i)^2 Loss=i=110(yoiyi)2
    不论初始化 ω h \omega_h ωh b h b_h bh ω o \omega_o ωo b o b_o bo 是什么值,这个损失函数 L o s s Loss Loss 都是恒为非负数的,现在就开始 “挪动” ω h \omega_h ωh b h b_h bh ω o \omega_o ωo b o b_o bo 这四个待定系数来逐步减小 L o s s Loss Loss 的过程了,也就是需要有这样四个表达式来做更新:
    ( ω h ) n = ( ω h ) n − 1 − η ∂ L o s s ∂ ω h ( b h ) n = ( b h ) n − 1 − η ∂ L o s s ∂ b h ( ω o ) n = ( ω o ) n − 1 − η ∂ L o s s ∂ ω o ( b o ) n = ( b o ) n − 1 − η ∂ L o s s ∂ b o \begin{array}{lcl} (\omega_h)^n= (\omega_h)^{n-1}-\eta\dfrac{\partial Loss}{\partial \omega_h}\\\\ (b_h)^n=(b_h)^{n-1}-\eta\dfrac{\partial Loss}{\partial b_h}\\\\ (\omega_o)^n=(\omega_o)^{n-1}-\eta\dfrac{\partial Loss}{\partial \omega_o}\\\\ (b_o)^n=(b_o)^{n-1}-\eta\dfrac{\partial Loss}{\partial b_o} \end{array} (ωh)n=(ωh)n1ηωhLoss(bh)n=(bh)n1ηbhLoss(ωo)n=(ωo)n1ηωoLoss(bo)n=(bo)n1ηboLoss
    ⟹ \Longrightarrow
    L o s s = ∑ i = 1 10 ( y o i − y i ) 2 ⇒ L o s s = 1 2 ∑ i = 1 10 ( y o i − y i ) 2 ∂ L o s s ∂ b o = ∂ ∑ i = 1 10 ( y o i − y i ) ∂ b o = ∂ ∑ i = 1 10 y o i ∂ b o = ∑ i = 1 10 ∂ y o i ∂ z o ⋅ ∂ z o ∂ b o ∂ L o s s ∂ ω o = ∂ ∑ i = 1 10 ( y o i − y i ) ∂ ω o = ∂ ∑ i = 1 10 y o i ∂ ω o = ∑ i = 1 10 ∂ y o i ∂ z o ⋅ ∂ z o ∂ ω o ∂ L o s s ∂ ω h = ∂ ∑ i = 1 10 ( y o i − y i ) ∂ ω h = ∂ ∑ i = 1 10 y o i ∂ ω h = ∑ i = 1 10 ∂ y o i ∂ z o ⋅ ∂ z o ∂ y h ⋅ ∂ y h ∂ z h ⋅ ∂ z h ∂ ω h ∂ L o s s ∂ b h = ∂ ∑ i = 1 10 ( y o i − y i ) ∂ b h = ∂ ∑ i = 1 10 y o i ∂ b h = ∑ i = 1 10 ∂ y o i ∂ z o ⋅ ∂ z o ∂ y h ⋅ ∂ y h ∂ z h ⋅ ∂ z h ∂ b h \begin{array}{lcl} Loss=\displaystyle\sum_{i=1}^{10}(y_{oi}-y_i)^2 \Rightarrow Loss=\displaystyle\frac12 \sum_{i=1}^{10}(y_{oi}-y_i)^2\\\\ \dfrac{\partial Loss}{\partial b_o}=\dfrac{\displaystyle\partial\sum_{i=1}^{10}(y_{oi}-y_i)}{\partial b_o}=\dfrac{\displaystyle\partial\sum_{i=1}^{10}y_{oi}}{\partial b_o}=\displaystyle\sum_{i=1}^{10}\dfrac{\partial y_{oi}}{\partial z_o}\cdot\dfrac{\partial z_o}{\partial b_o}\\\\ \dfrac{\partial Loss}{\partial \omega_o}=\dfrac{\partial \displaystyle\sum_{i=1}^{10}(y_{oi}-y_i)}{\partial \omega_o}=\dfrac{\partial \displaystyle\sum_{i=1}^{10}y_{oi}}{\partial \omega_o}=\displaystyle\sum_{i=1}^{10}\dfrac{\partial y_{oi}}{\partial z_o}\cdot\dfrac{\partial z_o}{\partial \omega_o}\\\\ \dfrac{\partial Loss}{\partial \omega_h}=\dfrac{\partial \displaystyle\sum_{i=1}^{10}(y_{oi}-y_i)}{\partial \omega_h}=\dfrac{\partial \displaystyle\sum_{i=1}^{10}y_{oi}}{\partial \omega_h}=\displaystyle\sum_{i=1}^{10}\dfrac{\partial y_{oi}}{\partial z_o}\cdot\dfrac{\partial z_o}{\partial y_h}\cdot\dfrac{\partial y_h}{\partial z_h}\cdot\dfrac{\partial z_h}{\partial \omega_h}\\\\ \dfrac{\partial Loss}{\partial b_h}=\dfrac{\partial \displaystyle\sum_{i=1}^{10}(y_{oi}-y_i)}{\partial b_h}=\dfrac{\partial \displaystyle\sum_{i=1}^{10}y_{oi}}{\partial b_h}=\displaystyle\sum_{i=1}^{10}\dfrac{\partial y_{oi}}{\partial z_o}\cdot\dfrac{\partial z_o}{\partial y_h}\cdot\dfrac{\partial y_h}{\partial z_h}\cdot\dfrac{\partial z_h}{\partial b_h} \end{array} Loss=i=110(yoiyi)2Loss=21i=110(yoiyi)2boLoss=boi=110(yoiyi)=boi=110yoi=i=110zoyoibozoωoLoss=ωoi=110(yoiyi)=ωoi=110yoi=i=110zoyoiωozoωhLoss=ωhi=110(yoiyi)=ωhi=110yoi=i=110zoyoiyhzozhyhωhzhbhLoss=bhi=110(yoiyi)=bhi=110yoi=i=110zoyoiyhzozhyhbhzh
    这样子,我们就可以把每次更新的这 4 个表达式的具体值都可以求出来了。
    其他结构的网络中,可能会有一些小的区别。
    区别1: 在训练样本很多的情况下 ∑ \sum 加和的次数会更多一些,有 1000 个样本就是 1000 次,有 10000 个样本就是 10000 次。
    区别2: 如果网络层数更深,则算出的偏导数连乘的项就很长,在这里我们看到 2 层就出现 4 个,而如果有 10 层,那就是 20 个连乘。
    区别3: 如果网络更为复杂,比如一层网络不止一个节点,那么其中一个节点上系数的偏导数则会从多个路径传播过去,因为在这个节点的后面会有不止一个节点把它的输出当成自己的输入,从而形成多个 “嵌套型关系”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值