神经网络与深度学习读书笔记:通过改变Weights 和Biases进而改变Cost Function

好久未更新笔记了,借口:工作比较忙,懒得动手了... ...。最近因为工作驱动读了点机器学习相关资料。本系列文章记录一下机器学习中的一些容易忘记、比较绕的东西,如有错误请各位兄弟姐妹不吝赐教,谢谢!
  本篇文章主要梳理自己对神经网络中的后向反馈的理解,核心问题:改变Weights与Biases的值如何影响Cost Function?

一、问题由来

了解机器学习的同学们肯定知道,在机器学习中,经常会碰到一个概念Cost Function,其最小二乘法形式表示所有样本的预测值(y hat)与真实值(y)差值的平方的和的平均。

Cost Function 最小二乘法形式

而我们的目的是通过调整参数Weights 与 Biases 来减小真实值与预测值之间的绝对差
  达成此目的的前提就是调整参数Weights 与Biases可以改变Cost Fuction。就此,引出本文的问题改变Weights与Biases的值如何影响Cost Function?

二、问题分析

1.Cost Function为Weights 与 Biases的函数

Weights 与 Biases(下面简称W与B)想要影响Cost Fuction(下面简称C),那么W、B可以看作自变量,C为因变量。

神经网络与深度学习读书笔记:通过改变Weights 和Biases进而改变Cost Function_第1张图片
weight的概念
神经网络与深度学习读书笔记:通过改变Weights 和Biases进而改变Cost Function_第2张图片
biase的概念

隐藏层与输出层的每个神经元的输入值可以定义为:

i为第L-1层的神经元数目,σ为sigma函数

由上述表达式可知,如果y hat可以理解为输出层的某个神经元a的值,那么C就是W与B的函数。

2.梯度下降算法

上一小节中提出了Cost Function的最小二乘法表示,C为Weights和Biases的函数。学过导数的同学知道,如果相求多元函数的最值,可以通过导数求其极值来获得,最值可能出现在极值点。但是为什么在机器学习中最优化问题是通过梯度下降方法比导数求极值的方式更为常见呢?
我理解主要有两点:

  1. 对每个权值与偏移直接求导计算量巨大(深度神经网络中权值与偏移参数数量巨大)。
  2. 求方程组的解,但X不确定,方程组解难以求解。(数值算法可能存在,但是我没找到,如果有同学找到请共享,谢谢!)

因此,大部分机器学习算法寻求最优值时采用梯度下降算法。

神经网络与深度学习读书笔记:通过改变Weights 和Biases进而改变Cost Function_第3张图片
梯度下降算法的经典图

梯度下降就是寻找凸函数的最小值点。这个图可以想象为一个小球沿着坡度往最低点滚动。
假设小球下降方向分解为(v1,v2)两个方向,小球在某个点的下降方向为该点的切线方向即在该点的导数:

二元函数求偏导数

下降的变化值:
下降的变化标量

由此可以求得,C的变化量ΔC:

ΔC
Δv1,Δv2取值


为什么Δv这样取值呢?可以从下面两个角度理解:

  1. 在微分的知识中,梯度的方向指向标量增长的方向。因此,我们要想寻找最小值,那么我们就要与梯度方向相反。所以,v1,v2变化量的方向应该与梯度方向相反。
  2. C>=0,那么要想C减小,那么ΔC<0,那么可以得到:


    \Delta C= -\eta \left (\frac{\partial C}{\partial v_{1}} \right )^{2} -\eta \left (\frac{\partial C}{\partial v_{2}} \right )^{2};


    那么,只要V1,V2按照如下方式更新就可以使小球最终到达谷底:

更新V1,V2从而求得C的最小值

对应这里的神经网络的Cost Function与Weights、Biases,可以得到如下等式:

η为学习速率

3.后向反馈

通过第二小节我们知道了通过梯度下降算法可以更新w,b进而求得C的最小值,那么我们应该怎么计算C对w的导数与C对b的导数?
介绍后向反馈之前,我们先介绍一个概念、两个假设与四个等式及其推导,最后给出后向反馈算法。

1) 一个概念

第L层第j神经元产生的误差为δ,表示:


L层j神经元产生的误差为δ

下面一起来理解一下δ:


神经网络与深度学习读书笔记:通过改变Weights 和Biases进而改变Cost Function_第4张图片
NeuralNetworkAndDeepLearning插图

假设在(layer L,neuron j) 有一个恶魔导致该结点产生误差Δz,然后这个误差通过前向反馈(σ(z + Δz))传导到输出层,从而引起误差,增大C。因此,由导数定义可知:

Paste_Image.png

所以,ΔC可以表示为:
Paste_Image.png

现在这个恶魔为了弥补这个错误减小C,它就要减小C对zjL 的导数与ΔzjL 的乘积,那么这两者一定符合相反。而且,如果C对zjL 的导数很大,说明z的变化会引起C的很大变化,如果C对zjL 的导数,证明z的变化对C的影响很小,因此,我们定义一个中间变量:

度量第L层第J个结点产生的误差

由于δ对C有影响,而C对w、b的偏导数也影响C,因此,可以考虑建立δ与w、b的关系。

2) 两个假设:

  1. C等于训练集中所有样本元素数目n的最小二乘cost fuction的和的均值。


    训练集中所有样本元素数目n


    因此,单一样本的cost Function:


    后面推导x取消
  2. C看作神经网络中所有输出的一个函数。


    神经网络与深度学习读书笔记:通过改变Weights 和Biases进而改变Cost Function_第5张图片
    多输出的神经网络
C看作为神经网络中所有输出的函数

3) 四个等式及其推导

  1. 输出层误差等式 δL
输出层误差等式
  1. δl用δl+1表示的等式:
根据后一层误差推导前一层
  1. C对网络中任意权值的导数(变化率)用δ表示:


    用δ表示C对权值的导数
  2. C对网络中任意偏移的导数(变化率)用δ表示:


    用δ表示C对偏移的导数

4) 后向反馈算法

后向反馈算法为我们提供了一种更新权值与偏移的算法。首先展示一下单一样本后向反馈算法的流程:

  1. Input:设置input X = a^{1}。
  2. 前向反馈:利用前向反馈算法计算每一层的值2,3... ...L,
    利用前馈算法计算每一层的值
  3. 计算输出层L的误差:每一层L-1,L-2... ...1利用后向反馈算法计算δ,
    \delta^{l}= \left ( w^{l+1} \right )^{T}\delta ^{l+1}\cdot \sigma {}'\left ( z^{l} \right )
  4. 通过δ计算网络中的每个权值与偏移
    \frac{\partial C}{\partial w_{ji}^{l}}= a_{i}^{l-1}\cdot \delta _{j}^{l}; \frac{\partial C}{\partial b_{j}}= \delta _{j}^{l}
  5. 更新权值w与偏移b:
    w_{j}^{l} \rightarrow w_{j}^{l}-\eta \frac{\partial C}{\partial w_{j}^{l}}; b_{j}^{l} \rightarrow b_{j}^{l}-\eta \frac{\partial C}{\partial b_{j}^{l}};

上述过程采用的随机梯度下降而非标准的梯度下降。随机梯度下降与标准梯度下降的最大区别在于标准梯度下降通过全训练集来计算误差δ之和的均值进而更新权值和偏移,而随机梯度下降是通过单一训练计算误差δ更新权值与偏移。

标准梯度下降每一次的更新需要计算全训练集,计算量大,自然会想到去掉∑,通过随机梯度下降来更新。但是,随机梯度下降是标准梯度下降的近似更容易陷入局部极小值。

两者的折中方案也产生了成为批量梯度下降:

  1. 输入:全训练集。
  2. 批量梯度下降:m为一批次训练样本的数目,对本批次的每一个样本ax,1执行如下步骤:
    (1) 前向反馈算法:zx,l=wlax,l−1+bl; ax,l=σ(zx,l)。
    (2) 计算输出层误差:
    image.png

    (3) 后向反馈算法计算隐藏层误差:每一层L-1,L-2... ...2计算误差δl:
    image.png
  3. 更新权值与偏移:对于每一层L,L-1,......2更新权值与偏移
    更新权值

    更新偏移

4. 总结

本文梳理cost Function最小值优化问题,解释了为什么梯度下降可以求解优化问题,以及如何操作。
后续从代码示例学习分享,并不断优化模型。

参考:《神经网络与深度学习》、《机器学习》

你可能感兴趣的:(神经网络与深度学习读书笔记:通过改变Weights 和Biases进而改变Cost Function)