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

Neural network 如何创建具有动态输入的神经网络?,neural-network,deep-learning,matrix-multiplication,max-pooling,Neural Network,Deep Learning,Matrix Multiplication,Max Pooling,这个问题很难回答:我如何为一个动态输入的神经网络提供反馈? 回答这个问题肯定会有助于现代人工智能的发展,将深度学习用于计算机视觉和语音识别以外的应用。 我将为神经网络的外行进一步解释这个问题 让我们以这个简单的例子为例: 比如说,你需要知道在一场“井字游戏”中获胜、失败或平局的概率 因此,我的输入可以是一个[3,3]矩阵,表示状态(1-You,2-defect,0-Empty): 假设我们已经有一个先前训练过的隐藏层,一个权重矩阵[3,1]: [1.5] [0.5] [2.5] 因此,

这个问题很难回答:我如何为一个动态输入的神经网络提供反馈?

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

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

比如说,你需要知道在一场“井字游戏”中获胜、失败或平局的概率

因此,我的输入可以是一个[3,3]矩阵,表示状态(1-You,2-defect,0-Empty):

假设我们已经有一个先前训练过的隐藏层,一个权重矩阵[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能帮上忙。成千上万的人比一个人想得好有什么想法吗?

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

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


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

像在图像方法中一样,您可以训练一个固定大小的NN,并预先调整输入(如图像大小调整)。这是如此普遍,以至于它可能是目前最好的工作方法。还要记住,玩家1和玩家2的1/2编码远远不是最好的方法(-1/1甚至多个平面)。还有一句话,因为您似乎对NNs和游戏AI没有太多经验:3值输出是hm。通常有两种方法:值网络或策略网络。前者输出一个描述分数的值(从当前玩家的角度来看),后者是一个关于移动的PDF。是的,但也有这样的例子,我们不能在不丢失信息的情况下调整输入的大小。这只适用于一些像素无关紧要的图像。我们需要一个更好的方法来做到这一点。至于关于示例的评论,是的,可能不是最好的选择,我只是快速拼凑起来帮助解释。我以前在训练图像分类CNN时使用过max pooling,但问题是,有些情况下我们需要输入的所有数据。。。我们不能把整个区域最大化,然后丢失大量数据。。。例如:上述“tic-tac-toe”问题中的每个数字对分类都至关重要。如果我只是删除一些数字,状态将完全不同,并被破坏…@GabrielDiasRezendeMartins Max Pooling是在卷积特征映射上执行的,而不是在输入上执行的。网络学习如何解释这种共享输出。对于这样一个例子,特征图是什么?我知道这就是imagens的工作原理,但这只是一个状态矩阵。每个数字都有计数。@GabrielDiasRezendeMartins图像只是一个矩阵,特征映射通过卷积神经网络学习(通过滤波器)。这种网络可以应用于任何具有局部结构的矩阵输入。你必须试着看看它是否有效。你是在暗示我在状态上应用卷积到第三维度,然后max将其合并到一个固定的形状?我几乎不认为它会起作用。假设5x5变为3x3。NN如何知道这个3x3状态实际上代表的是5x5,而不仅仅是3x3?这个3x3整数矩阵将被处理,就像它是3x3开始一样,原始状态丢失。如果我们把5x5(例如:01和10)任何一个角落的4个单元格变成单个单元格,3x3(例如:1)的一个角落,所有信息都会丢失,现在只需一次播放,而不是4次。
     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.]