2

这个问题是一个棘手的问题:我如何为神经网络提供动态输入?

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

让我们以这个简单的例子为例:

假设您需要知道在“井字游戏”游戏中获胜、失败或平局的概率。

所以我的输入可能是一个表示状态的 [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.]

但是这种乘法是不可能计算出来的。我们将不得不添加更多层和/或更改我们之前训练的层并重新训练它,因为未经训练的权重(在这种情况下初始化为 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可以提供帮助。千千万万个脑袋比一个脑袋好。有任何想法吗?

4

1 回答 1

0

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

空间金字塔池允许您使用可变大小的图像训练和测试 CNN,它通过引入动态池层来实现这一点,其中输入可以是任意大小,输出是固定大小,然后可以馈送到全连接层。

池化非常简单,在每个维度(例如 7x7)中定义多个区域,然后该层将每个特征图拆分为不重叠的 7x7 区域,并对每个区域进行最大池化,输出 49 个元素的向量。这也可以在多个尺度上应用。

于 2016-05-12T17:49:47.183 回答