我正在扩展一个人类立即连续回忆任务性能模型,最初在本文中描述. 该模型采用一系列项目,例如数字或音素,在它们出现时存储它们,然后按顺序重复该序列。他们的模型使用 one-hot 编码和解码来将要记住和调用的项目(例如数字或音素)描述为内存中的原子单元。我想调整这个模型来将项目描述为特性的集合。例如,我不想将音素 /b/ 编码为 one-hot 向量中的唯一元素,而是将其建模为音素特征的组合(例如浊音 = true,方式 = 停止,位置 = 唇音),每个输入和输出对应一个特征。类似地,我不想将数字“一”建模为 one-hot 向量中的唯一元素,而是将其建模为音素的输入序列(例如 [w,^,n])。
问题的这种表述自然会导致一组可能的模型输出大于训练集中出现的项目集。然而,到目前为止我训练的模型似乎并没有在数据集中学习到这种结构。当模型产生不正确的音素时,它会产生在训练集中不会以大约机会率出现的音素特征组合。同样,该模型似乎没有学习单词中音素之间的转换概率,相反,它的错误响应似乎与连续音素无关。重申一下,该模型似乎没有学会利用训练数据中的音素或单词集,而是通过将每个输入记住为一系列音素特征来“强力”召回任务。
因此,我的问题是,是否有特定的模型结构或优化器旨在利用这种交叉输出和交叉时间信息来了解某些输出模式是“有效的”(发生在训练集中)或“无效”(从不发生在训练集中)训练集)?我不知道这是否是先前已解决的问题,或者我是否使用了正确的术语,因此将不胜感激。
迄今为止,我已经尝试了一个带有一组密集单热输出层的普通循环层来表示输出特征。我尝试在循环层之前和之后添加一个 softmax-activation 密集层,但这似乎削弱了模型存储序列的能力。对于优化器,我尝试过 SGD、Adagrad 和 Adam 优化器,Adam 通常会给出最好的结果。用 LSTM 或 GRU 单元替换 vanilla 循环层提高了模型召回项目序列的能力,但没有解决“无效”响应率问题。我一直在使用 Keras 来实现模型。