Cousera - Machine Learning for Neural Networks - 课程笔记 - Week 3

Week 3

学习一个线性神经元的权重 Learning the Weight of a Linear Neuron

  • 线性神经元学习算法和感知器学习算法类似,但得到的效果不一致
    • 感知器中,参数不断向好的参数集合逼近
    • 线性神经元算法中,输出不停地向目标输出逼近
  • 感知器不能够泛化到隐藏层
    • 感知器通过“确保每一次改变权重都使其更加接近完全可行的权重集合”的方式实现收敛
    • 这种保证不能被扩展到“可行解取均值就不是可行解”的复杂网络中
    • 在多层神经网络中,我们不能使用感知器的学习算法
    • 此外不应该成为“多层感知器”
  • 线性神经元:
    • 输出是其输出的加权和实数值的神经元,即y=iwixi=wTxy=\sum\limits_iw_ix_i=\bold w^T \bold x
    • 学习的目标是使所有训练样例上的错误加和最小化,这里使用期望输出与实际输出差的平方
  • 不使用解析解
    • 我们希望有一个方法去弄清楚真正的神经元如何使用
    • 同时我们希望有一个方法,能够泛化到多层非线性神经网络中(解析解要求线性且由平方误差,迭代方法效率较低但更容易泛化)
  • 推到delta定律
    • 误差:E=12ntraining(tnyn)2E=\frac 12\sum\limits_{n \in training} (t^n - y^n)^2
    • 对权重求导:KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part w_i}=\…
    • 批量求权重,加负号以期错误变小:KaTeX parse error: Undefined control sequence: \part at position 29: …epsilon \frac {\̲p̲a̲r̲t̲ ̲E}{\part w_i}=\…
  • 迭代方法可能永远无法到达最优解,但是我们可以尽可能地逼近最优解,如果学习率足够小,我们可以以或许很慢地速度十分地逼近最优解
  • 迭代方法可能会很慢,尤其输入之间的相关性非常大时
  • 学习率的选择需要非常慎重,如果学习率过大,那么会使系统很不稳定;如果学习率过小,会使系统以非常慢的速度到达最优解
  • 课程中提到的“一个训练样例更新一次权重”的做法是一个便于扩展数据集的很好的操作,同时可以避免一次性收集齐全部的训练数据(便训练便送入新的数据)

线性神经元的误差曲面 The Error Surface for A Linear Neuron

  • 假设一个空间,其水平维度为各个权重,垂直维度误差,那么水平面上每一个点对应一组权重,而垂直高度对应在这个权重下,所有训练数据误差的总和

  • 对(平方差误差)线性神经元,每组权重对应的错误组成了误差曲面,其形状为一个碗状曲面,垂直截面为一个抛物线(parabola),而水平截面为一个椭圆形(ellipse)

  • 对于多层非线性网络,这个误差曲面将会十分复杂

  • 在参数还不是很多的时候,误差曲面还会是光滑的,但是可能存在局部最优解

  • 当我们在进行上述delta定律的批量学习时,相当于在误差平面上进行最陡峭地下降(到最优解)

  • 如果使用的是在线学习(一次一个样本),每一次学习,都会使误差垂直地奔向对应训练样例代表的直线,然后逐渐向最陡峭的方向下降,相当于在满足所有训练样本约束的条件下寻找最优解

  • 为什么有些情况下训练会很慢:

    • 当训练样本所代表的线几乎平行时(相关性很强),那么对应的椭圆就会很细长,这个时候,下降过程就很容易错过下降最快的深谷区域,导致训练非常慢
    • 形式如下:
      Cousera - Machine Learning for Neural Networks - 课程笔记 - Week 3

学习一个逻辑输出神经元的权重 Learning The Weight of A Logistic Output Neuron

  • 逻辑神经元
    • 计算加权和与偏差的结果,然后使用一个平滑节点函数形成输出
    • z=b+ixiwi,y=11+ezz=b+\sum\limits_i x_i w_i,y=\frac1{1+e^{-z}}
    • 连续的平滑函数意味着有一个很好的梯度,可以让学习变得简单
  • 逻辑神经元的梯度:
    • 逻辑元对输入的梯度:KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲z}{\part w_i}=x…
    • 输出对逻辑元的梯度:dydz=y(1y)\frac{dy}{dz}=y(1-y)
  • 为了学习权重,我们需要对每一个权重的梯度:KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲y}{\part w_i}=\…
  • 误差到权重梯度:KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part w_i}=\…

反向传播算法 The Back Propagation Algorithm

  • 一种和进化相关的想法:通过扰乱(perturb)权重进行学习

    • 随机扰乱一个权重,看其是否提升了性能,是则保存
    • 这是实际上是强化学习的一种形式
    • 非常低效,需要来来回回好多次
    • 而且到了最后,扰动变得很麻烦,轻易就会让结果变得更差
  • 我们可以随机扰乱所有的权重,并尝试找出权重改变和性能提升之间的关联性(尝试次数会非常多)

  • 一个尝试:随机扰乱隐藏层的**值

    • 当我们知道如何改变隐藏层**值,我们可以计算如何改变权重
    • **值比权重少,相对地容易
    • 但是还是不行
  • 反向传播的想法:

    • 由于我们不知道隐藏层的具体职能,但是我们可以在改变了隐藏**值之后计算误差的变化有多快
    • 使用误差到隐藏**值的梯度训练隐藏单元
    • 每一个隐藏**值影响着很多输出单元,并对误差有着很多分开的影响,这些影响需要被组合在一起
    • 我们可以同时高效地计算所有隐藏单元的误差梯度
    • 一旦得到了对于隐藏**值的误差梯度,我们可以很容易计算到隐藏层权重的误差梯度
  • 单一训练样例的反向传播

    • 将输出与目标之间的差转换成误差值:(这里使用平方差)KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part y_j}=-…
    • 从上一层的误差梯度计算每一隐藏层的误差梯度(KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part y_i}),注意对上面层的各个误差的加和处理(和前向传播一致)
    • 使用关于**值的误差梯度得到关于权重的误差梯度
  • 反向传播的误差梯度:

    • 对隐藏层输出(zjz_j):KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part z_j}=\…
    • 对隐藏层输入(下一层的输出),需要加权求和(计算其对所有输出单元的影响):KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part y_i}=\…
    • 对隐藏层到j节点权重:KaTeX parse error: Undefined control sequence: \part at position 7: \frac{\̲p̲a̲r̲t̲ ̲E}{\part w_{ij}…
  • 根据上述式子,我们可以在很多层的网络中完成这一过程

使用反向转播计算得到的梯度 Using The Derivatives Computed by Backpropagation

  • 反向传播可以有效地根据一个训练样例计算误差对于每一个权重的梯度

  • 为了能够完成一个学习算法,还有很多关于误差梯度的事情要确定

    • 优化问题:在每一个样例上如何使用这些误差梯度
    • 泛化问题:对于训练集效果很好的样例如何确保对未见过的样例同样优秀
  • 优化问题

    • 更新频率
      • 在线学习:每一个训练样例之后更新权值
      • 全批量:运行了一整个训练集之后更新权值
      • 小批量:在一个小训练集之后更新权值
    • 更新程度
      • 使用一个固定学习率?
      • 自适应全局学习率?
      • 自适应于每个小批量的学习率?
      • 不使用最陡峭的梯度?
  • 训练数据包含了有关输入到输出的映射的规则性内容,但是同样包含了两类噪声

    • 训练数据的目标值可能不可靠
    • 采样误差,根据选择的训练数据所产生的一些意外的规则信息
      • 在拟合模型时,我们很难区分真实规则信息与来自取样误差的信息
  • 避免过拟合

    • 权重衰减,我们尽量将所有的权重保持在一个很小的数值上,使模型变得简单
    • 权重共享,让很多权重的值相同,以简化模型
    • 提前终止,在模型训练时开始变得糟糕时及时停止
    • 平均模型,训练多个网络然后平均之
    • 神经网络的贝叶斯拟合,一个更有意思的平均方法
    • 随机失活,训练时随机失活一些隐藏层
    • 预训练