如何创建具有动态输入的神经网络?

时间:2016-05-12 16:18:33

标签: neural-network deep-learning matrix-multiplication max-pooling

这个问题很难: 如何提供神经网络,动态输入?

回答这个问题肯定有助于现代人工智能的发展,使用深度学习计算机视觉和语音识别以外的应用程序。 我将进一步为神经网络的外行解释这个问题。

让我们举个例子:

假设您需要知道在“tic-tac-toe”游戏中获胜,失败或吸引的可能性。

所以我的输入可以是表示状态的[3,3]矩阵(1-You,2-En​​emy,0-Empty):

[2. 1. 0.]  
[0. 1. 0.] 
[2. 2. 1.]

假设我们已经有一个以前训练过的隐藏层,一个[3,1]权重矩阵:

[1.5]  
[0.5]  
[2.5]

因此,如果我们使用一个简单的激活函数,它基本上由两个 y(x)= W * x 之间的矩阵相乘,我们在中得到这个[3,1]矩阵输出

[2. 1. 0.]     [1.5]     [3.5]
[0. 1. 0.]  *  [0.5]  =  [0.5]
[2. 2. 1.]     [2.5]     [6.5]

即使没有softmax功能,你也可以判断出抽签的概率最高。

但是,如果我希望这个相同的神经网络能够用于5x5的井字游戏呢?

它具有与3x3相同的逻辑,它只是更大。神经网络应该能够处理它

我们会有类似的东西:

[2. 1. 0. 2. 0.]
[0. 2. 0. 1. 1.]     [1.5]     [?]
[2. 1. 0. 0. 1.]  *  [0.5]  =  [?]                           IMPOSSIBLE
[0. 0. 2. 2. 1.]     [2.5]     [?]
[2. 1. 0. 2. 0.]

但这种乘法无法计算。我们必须添加更多图层和/或更改之前训练过的 RETRAIN 它,因为未经训练的权重(在这种情况下初始化为0)会导致神经网络失败,就像这样:

     input            1st Layer        output1
[2. 1. 0. 2. 0.]     [0.  0. 0.]     [6.5 0. 0.]
[0. 2. 0. 1. 1.]     [1.5 0. 0.]     [5.5 0. 0.]
[2. 1. 0. 0. 1.]  *  [0.5 0. 0.]  =  [1.5 0. 0.]
[0. 0. 2. 2. 1.]     [2.5 0. 0.]     [6.  0. 0.]
[2. 1. 0. 2. 0.]     [0.  0. 0.]     [6.5 0. 0.]

   2nd Layer           output1      final output
                     [6.5 0. 0.]
                     [5.5 0. 0.]
[0. 0. 0. 0. 0.]  *  [1.5 0. 0.]  =  [0. 0. 0.]                POSSIBLE
                     [6.  0. 0.]
                     [6.5 0. 0.]

因为我们扩展了第一层并添加了一个零重量的新图层,所以我们的结果显然是不确定的。如果我们应用softmax函数,我们将意识到神经网络对于每个可能的结果返回33.3%的几率。 我们需要再次训练

显然,我们想要创建能够适应不同输入大小的通用神经网络,但是我还没有想到解决这个问题的方法!所以我想也许stackoverflow可以帮助。成千上万的人比一个人更好。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

除了将输入调整为固定大小之外,还有解决卷积神经网络的解决方案。

Spatial Pyramid Pooling允许您训练和测试具有可变大小图像的CNN,并通过引入动态池层来实现这一点,其中输入可以是任何大小,并且输出具有固定大小,然后可以送到完全连接的层。

汇集非常简单,每个维度定义了多个区域(例如7x7),然后图层在非重叠的7x7区域中拆分每个要素图,并在每个区域上进行最大池化,输出49元素矢量。这也适用于多种规模。