Loading...
墨滴

张春成

2021/10/15  阅读:66  主题:默认主题

神经网络的表达能力

神经网络的表达能力

人工神经网络是近年来火热的模式识别算法, 在计算机视觉领域应用广泛。

本文是一个例子, 表明如何使用一个结构异常简单的神经网络, 在随机参数的情况下, 对一只兔子进行剖析。

可以看到, 如此简单的神经网络, 即使未经训练,也具有表达兔子各个部位的能力。

至于如何对它进行训练和优化,则是另一个问题。


剖析兔子

当计算机“看见”一只兔子, 通常代表三维空间中的一系列点构成点阵, 这些点阵构成一只兔子的表面。

我们的目的是教会计算机如何识别这只兔子, 比如自动识别出兔子的部位,如尾巴、耳朵、爪子及兔头等。

具体的做法是给特定部位的点赋予一些概率值, 概率值代表这个点属于某个部位的概率, 比如下面的图

  • 尾巴热图

    Rabbit-tail
    Rabbit-tail
  • 耳朵热图

    Rabbit-ear
    Rabbit-ear
  • 爪子热图

    Rabbit-foot
    Rabbit-foot
  • 兔头热图

    Rabbit-head
    Rabbit-head

如何教会计算机识别这些部位呢? 神经网络算法是十分有效的方法。

神经网络

神经网络结构

为了演示方便, 我建立了一个结构异常简单的神经网络,

NeuralNetworkLayout
NeuralNetworkLayout

如图,它的输入为点的三维坐标值,经过三层网络计算:

  1. 非线性激活层,其中包括若干个通道;
  2. 线性全连接层;
  3. 非线性激活层。

简单来说,经过网络计算之后, 点的坐标值被转换为这个点属于某个部分的概率值。

简单计算可知,该网络包含以下参数

  1. 非线性激活层,包含 个权重参数和同样数量的偏置参数;
  2. 线性全连接层,包含 个权重参数和同样数量的偏置参数;
  3. 非线性激活层没有参数。

其中, 代表通道数量;权重和偏置参数的意义是计算线性方程

其中, 分别代表权重和偏置;非线性激活层采用 函数

至此,网络定义完毕。

神经网络计算

由于缺乏训练数据, 我也不是神仙,能够预知哪些参数能够达到我的目的。

因此,我使用随机连续变化的参数值进行网络计算, 以此来对神经网络的表达能力进行验证。

【这是一段棒到不行的视频】

可以看到,在网络参数连续变化的情况下, 我们的网络具有表征兔子各个部位的能力。 具体代码可见我的Web Notebook[1]。 它包含简要的介绍、一些便于使用的控件以及全部可视化原码。

NeuralNetworkDemoIntro
NeuralNetworkDemoIntro

参考资料

[1]

Web Notebook: https://observablehq.com/@listenzcc/demo-of-neural-network

张春成

2021/10/15  阅读:66  主题:默认主题

作者介绍

张春成