机器学习(神经网络)笔记

基础考虑

定义

我们观察 l 层的输入 z^l

  • z^l=w^la^{l-1}+ b^l

对于上面的输入,定义神经元为 S 型神经元,那么其结果 a 为:

  • \sigma(z) \equiv {1 \over 1 + e^{-z}} = a

为了评估和目标的差距,同时用来作为调整的依据,我们定义代价函数:

  • C={1 \over 2n}\sum\limits_x ||y(x) - a^L_x||^2

目标和推导

我们的目标是期望神经网络的输出和目标吻合,即代价函数最小。
观察代价函数 C,我们的思考如下:

  • Ca 的函数(这个函数由训练者决定)
  • az 的函数(这个函数由训练者决定)
  • z 是由 wb 决定的
  • 我们能够调整的是 wb

由上面分析,问题就变成了,对已知的 C,我们应该怎么调整 wb
为此,我们期望知道 wb 的变化和 C 的关系:

  • \frac{\partial C}{\partial w} = \frac{\partial C}{\partial z} \frac{\partial z}{\partial w} = \frac{\partial C}{\partial z}a^{l-1} = \delta a^{l-1}

  • \frac{\partial C}{\partial b} = \frac{\partial C}{\partial z} \frac{\partial z}{\partial b} = \frac{\partial C}{\partial z} = \delta

  • 上面式子中,我们定义了 \delta \equiv \partial C / \partial z,在实际操作中,我们只要计算 \delta,就能算出上面的值,其中 \delta 如下:

    • \delta = \frac{\partial C}{\partial z} = {\partial C \over \partial a } {\partial a \over \partial z} = {\partial C \over \partial a} {\partial \sigma(z) \over \partial z} = {\partial C \over \partial a} \sigma ' (z) = (a-y){\sigma(z)(1-\sigma(z))}
    • 我们根据 \sigma 函数的性质,可知当 z 在较大或较小值的时候,函数变化很缓慢,对应神经元的饱和或未激活

同时,为了能够调整其他层的参数,我们看一下各个层之间的 \delta的关系。\delta^l = ((w^{l+1})^T\delta^{l+1})\odot \sigma'(z^l)

现在,让我们把视线关注在 l 层的 j 神经元上,当一个样本输入后,假设样本预设输出应该是 1.0,而实际神经元输出是 0.1,那么我们将目光放在 l-1 层上,我们逐个计算每个连接的 w^l_{jk} 和本神经元的 b^l_j 的变化对 C 的影响,然后记录下这个应该调整的值。

然后,对于下一个样本,我们同样进行计算,最后我们将这些调整取其平均值,做为调整参数调整到神经网络里面。这批小的样本就叫做 batch,其大小就是 batch size。

这期间,我们会发现不同样本对神经元的 bw 有不同的理解,有些会说 b 该提高很大,有些会说 b 该减少一点点。经过样本一轮一轮的刷新,各个神经元的阈值就会分化,权重也会分化。最终这个神经网络就会适应这个训练任务。

所以,基于神经网络的训练就是一个神经元和权重不断试错和分化的过程,不同的起始参数,不一样的训练顺序,训练出来的参数可能都是不一样的,也对应了不同的模型。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容