Questions tagged «machine-learning»

有关计算机算法的问题,这些算法会自动发现数据中的模式并根据这些模式做出正确的决策。

2
解释其决策的文本分类器
我正在为短句构建文本分类程序。除了告诉用户“您输入的文本的类别为C”之外,我还希望能够以简短易懂的方式解释为什么做出此决定。例如,我不想告诉用户“我将您的句子放入了一个复杂的3层神经网络,这是得分最高的答案”;我想要这样的解释:“由于训练数据中出现了X,Y和Z之类的句子,因此您的句子包含U,V和W这两个类别的特征”。 我的问题是:哪种分类算法最适合此类应用? k近邻似乎是一个很好的候选者,因为我可以告诉用户“您的句子具有类别C,因为它与具有相同类别的句子X,Y和Z相似。但是,它在文本分类问题上的性能众所周知我正在寻找一个可以在表现和解释能力之间取得平衡的分类。 编辑:花了很多时间寻找这样的分类器之后,我开始构建一个名为limdu的机器学习库,该库可以使分类器解释其决策。它仍在开发中,但是,它已经帮助我向自己和我的同事解释了为什么我们的分类器经常失败...

1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

2
高维特征空间中的K参数最近邻等非参数方法
k最近邻的主要思想考虑了最近点,并通过多数表决决定数据的分类。如果是这样,那么它在高维数据中应该不会有问题,因为像位置敏感的哈希这样的方法可以有效地找到最近的邻居。ķķk 此外,利用贝叶斯网络进行特征选择可以减少数据量并简化学习过程。 但是,约翰·拉弗蒂(John Lafferty)在统计学习中的这篇评论文章指出,高维特征空间中的非参数学习仍然是一个挑战,尚未解决。 怎么了?

2
接受给定字符串并拒绝其他给定字符串的最小DFA
给定字母两组字符串,我们可以计算最小的确定性有限状态自动机(DFA)从而使A,BA,BA,BΣΣ\SigmaMMMA⊆L(M)A⊆L(M)A \subseteq L(M)和?L(M)⊆Σ∗∖BL(M)⊆Σ∗∖BL(M) \subseteq \Sigma^*\setminus B 换句话说,代表一组积极的例子。DFA必须接受A中的每个字符串。 B代表一组否定示例。DFA不接受B中的任何字符串。AAAAAABBBBBB 是否可以使用DFA最小化技术来解决此问题?我可以想象创建一个具有三种状态的类似于DFA的自动机:接受状态,拒绝状态和“无关”状态(任何以“无关”状态结尾的输入都可以被接受或被拒绝)。但是,我们能否找到一种将这种情况最小化到普通DFA的方法呢? 给出正面和负面的例子,您可以将其视为学习DFA的问题。 这是受 regex golf NP-Complete吗?,它向正则表达式而不是DFA询问类似的问题。

1
基因编程与今天相关吗?
我主要关心的是基因编程是否是活跃的研究领域,并且在实践中有一些有希望的应用。似乎在机器学习领域中,神经网络是主要的流行语,在当今的主流新闻中都有提及,但我从未听说过类似的基因编程“成功故事”。


4
不断发展的人工神经网络解决NP问题
最近,我从Google Research Blog上读了一个非常有趣的博客条目,内容涉及神经网络。基本上,他们使用这种神经网络来解决各种问题,例如图像识别。他们使用遗传算法来“进化”轴突的重量。 所以基本上我的想法如下。如果我应该写一个能识别数字的程序,我将不知道如何开始(我可能有一个模糊的想法,但我的意思是:这并不琐碎,也不容易。)但是通过使用神经网络,我不必这样做。通过创建正确的上下文以使神经网络进化,我的神经网络将“找到正确的算法”。在下面,我引用了文章中一个非常有趣的部分,其中他们解释了每一层如何在图像识别过程中发挥不同的作用。 神经网络的挑战之一是了解每一层到底发生了什么。我们知道,经过训练后,每一层都会逐步提取图像的越来越高的特征,直到最后一层基本上决定了图像显示的内容。例如,第一层可能寻找边缘或拐角。中间层解释基本特征以寻找整体形状或组件,例如门或叶子。最后几层将它们组合成完整的解释-这些神经元会响应非常复杂的事物(例如整个建筑物或树木)而激活。 所以,基本上我的问题是:我们不能使用遗传算法+神经网络来解决每个NP问题吗?我们只是创造正确的进化环境,而让“自然”找到解决方案。 感应主义:更深入地研究神经网络 编辑:我知道我们可以在许多情况下使用蛮力或找到效率不高的解决方案。这就是为什么我试图强调不断发展的人工神经网络。正如我在评论中所说:给定足够的时间和适当的突变率,我们可以找到最佳解决方案(或者至少我认为如此)。

2
哪个分类器对SVM分类更准确?
我正在学习SVM分类并遇到问题。我不确定这个难题是否有专门的术语。 假定我们要根据SVM对患者(既有健康人,也有性别)和肝癌(有性别)的样本进行分类。如果我们将健康人样本标记为1类,将癌症人标记为2类,则可以训练二进制SVM并获得分类器1来预测任何新患者。现在,想象另一个场景。假设我们先将所有样本按性别划分,然后再进行SVM分类。对于每种性别,我们仍将健康患者与癌性患者分为2类,并训练二元SVM分别获得女性和男性样本的分类器2和分类器3。问题是是否有新的女性患者,应该使用哪个分类器1或2来获得更准确的预测?这是我争论的两难境地 (1)当样本数量很大时,预测应该更准确。基于此论点,分类器1似乎是一个不错的选择。 (2)但是,如果我们首先将样本分为女性和男性,分类器2似乎是更好的选择,因为新患者(未知检测样本)是女性。 这种困境是否有术语,或者有人知道任何进一步的信息,或者如何解决这样的问题?我什至不确定这是否是一个合法的问题,并且对预先提出的幼稚问题表示抱歉。谢谢

2
如何对仿真器输入优化问题进行分类,应该使用哪种算法进行处理?
由于问题的性质,我必须包括许多背景信息(因为我的问题是:如何缩小此范围?)也就是说,据我所知,可以总结为: 有哪些方法可以在极大的组合搜索空间中找到局部最优值? 背景 在工具辅助的超级游戏社区中,我们希望为视频游戏机或仿真器提供特制的(不是实时生成的)输入,以最大程度地减少成本(通常是完成时间)。这是目前做的方法是通过玩游戏帧一帧,并确定各帧的输入,经常重做多次运行的部分(例如,最近公布的运行塞尔达传说:时之笛有总共198,590次重试)。 使这些运行达到其目标通常可以归结为两个主要因素:路线规划和遍历。前者比后者更具“创造力”。 路线规划是确定玩家应该整体导航以完成游戏的方式,并且通常是奔跑过程中最重要的部分。例如,这类似于选择使用哪种排序方法。世界上最好的气泡排序根本不会胜过100万个元素的快速排序。 然而,在追求完美的过程中,遍历(路线的执行方式)也是一个巨大的因素。继续类推,这就是实现排序算法的方式。如果没有非常具体的输入帧,甚至无法执行某些路由。这是最繁琐的工具辅助过程,因此完成完整生产的过程要花费数月甚至数年。对于人类而言,这不是一个困难的过程,因为它可以尝试对同一想法进行不同的变体,直到被认为是最好的,但是人类只能在注意力范围上尝试如此多的变体。在这里,将计算机应用于此任务似乎是正确的。 我现在的目标是尝试使Nintendo 64系统的遍历过程自动化。对于这个问题的搜索空间是远远太大用蛮力的方法来攻击。N64运行的n帧段具有2个30n可能的输入,这意味着仅30帧输入(每秒30FPS)就有2 900个可能的输入;测试这些潜在的解决方案是不可能的,更不用说整整运行两个小时了。 但是,我对尝试(或者甚至不想尝试)完整的全局全局优化没有兴趣。相反,在给定初始输入的情况下,我想近似某个运行特定段的局部最优值(对于某种半全局优化,则近似为n个局部最优值)。也就是说,给定一条路线和该路线的初始遍历:搜索该遍历的邻居以最大程度地降低成本,但不要退化为尝试所有可以解决问题的情况。 因此,我的程序应采用启动状态,输入流,评估函数,并通过使评估结果最小化来输出局部最优值。 当前状态 目前,我已经处理了所有框架。这包括通过仿真器的操作,设置和拆卸,配置等评估输入流。作为各种占位符,优化器是一种非常基本的遗传算法。它只是评估输入流的总数,存储/替换获胜者,并通过更改获胜者流来生成新的总数。这个过程一直持续到满足一些任意标准,例如时间或世代号。 注意,到目前为止,该程序最慢的部分将是对输入流的评估。这是因为这涉及到模拟n帧游戏。(如果有时间,我要编写自己的仿真器来提供此类功能的钩子,但是现在,我剩下的工作是合成消息并为来自另一个进程的现有仿真器修改内存。)在我的主计算机上,相当现代,评估200帧大约需要14秒。因此,我更喜欢一种算法(给定的选择),该算法可以最大程度地减少函数求值的次数。 我在框架中创建了一个同时管理模拟器的系统。这样,我可以立即以线性性能尺度评估多个流,但是实际上,在系统性能下降之前,正在运行的仿真器的数量只能是8到32(并且实际上是在推动它)。这意味着(根据选择),可以在进行评估时执行处理的算法将非常有益,因为优化器可以在等待评估时进行一些繁重的工作。 作为测试,我的评估功能(对于游戏Banjo Kazooie)是每帧求出从玩家到目标点的距离之和。这意味着最佳解决方案是尽可能快地接近该点。仅将突变限制在模拟摇杆上,就花了一天的时间才得到一个好的解决方案。(这是在我实现并发之前。) 添加并发之后,我启用了A按钮按下的突变,并在需要跳转的区域执行了相同的评估功能。在运行24个仿真器的过程中,从最初空白的输入流中花费了大约1个小时才能达到目标,但可能要花几天时间才能达到接近最佳的水平。 问题 我面临的问题是,我对数学优化领域的了解不足,无法知道如何正确地对我的优化问题建模!例如,我可以大致遵循Wikipedia上描述的许多算法的概念,但是我不知道如何对问题进行分类或如何为该类别选择最新的算法。 据我所知,我在一个非常大的邻里中遇到一个组合问题。最重要的是,评估功能非常不连续,没有梯度,并且有很多平稳状态。而且,约束不多,但如果可以解决问题,我很乐意添加表达约束的能力;我想允许指定例如不应使用“开始”按钮,但这不是一般情况。 题 所以我的问题是:如何建模?我要解决哪种优化问题?我应该使用哪种算法?我不害怕阅读研究论文,所以让我知道我应该阅读什么! 直觉上,遗传算法不可能是最好的,因为它似乎并没有真正学习。例如,如果按Start(开始)似乎总是使评估变得更糟(因为它使游戏暂停),那么应该有一些设计师或大脑可以学习:“在任何时候按Start都是没有用的。” 但是,即使达到这个目标也不是那么简单,因为有时按启动是最佳选择,例如在Super Mario 64中所谓的“暂停向后跳远” !在这里,大脑必须学习一个更为复杂的模式:“按下开始是没有用的,除非玩家处于这种非常特定的状态,并且会继续进行某些按键组合。” 似乎我应该(或机器可以学习)以更适合修改的其他方式表示输入。每帧输入似乎太细粒度了,因为真正需要的是“动作”,它可能跨越多个帧...但是许多发现是逐帧进行的,因此我不能完全排除它(上述暂停向后长跳需要帧级精度)。似乎也可以串行处理输入,这是可以利用的事实,但我不确定如何使用。 目前,我正在阅读(反应式)禁忌搜索,超大规模邻域搜索,基于教学的优化以及蚁群优化。 除了随机遗传算法,这个问题是否真的很难解决?还是实际上是一个很久以前解决的琐碎问题?感谢您的阅读,并预先感谢您的任何答复。

1
伪随机序列预测
免责声明:我是一名生物学家,对于如此粗略的措辞(也许)是一个基本问题,我们深表歉意。 我不确定是否应该在这里还是在DS / SC上问这个问题,但是CS是三个中最大的一个,所以去吧。(发布之后,我发现交叉验证可能是更合适的选择,但是可惜)。 想象有一个代理,他做出二进制决策。还有一个环境,对于代理的每个决定(“试验”),奖励或不奖励代理。奖励代理商决定的标准并不简单。通常,标准是随机的,但有一定的局限性,例如,环境对同一决策的奖励永远不会超过3倍,并且对奖励决策的选择也不会连续超过4次。 条件序列可能看起来像这样 0 0 0 1 0 1 0 0 1 1 1 0 1 1 0 0 1 0 ... 但从来没有 0 0 0 1 0 1 0 0 1 1 1 1 1 1 0 0 1 0 ... 因为奖励标准不能重复超过3次。 在这种情况下,制定理想的观察者应该采取的使报酬最大化的策略是很容易的。遵循以下原则 随机决定 如果您检测到该标准重复了3次-决定与上一个标准相反 如果您发现该标准交替出现了4次,请根据最后一个标准进行决策 …

1
冲突驱动子句学习回溯澄清
在这里的Wikipedia页面上,它很好地描述了CDCL算法(似乎图片是由普林斯顿的Sharad Malik创建的幻灯片拍摄的)。但是,当描述如何回溯时,它只是说“到适当的位置”。MiniSAT还使用了CDCL算法的变体,因此我阅读了本文。他们似乎在说,您应该回溯到Learned子句是unit子句之前。那当然是澄清,但对我来说没有意义。据我所知,最后一个赋值肯定会成为学习到的冲突子句的一部分(也许我在这里错了?),所以当您回溯一步时,您将立即使学习到的子句成为单位,最后分配的值将翻转,并且该算法将完全按照DPLL进行,而不会回溯足够远。另外,维基百科页面不遵循此规则,它似乎可以回溯得多。 应该回溯多远?

1
反向传播算法的动量项如何工作?
当使用带有动量项的反向传播算法更新神经网络的权重时,是否也应将学习率应用于动量项? 我可以找到的有关动量的大多数信息都使方程看起来像这样: W′i=Wi−αΔWi+μΔWi−1w ^一世′=w ^一世-αΔw ^一世+μΔw ^一世-1个W_{i}' = W_{i} - \alpha \Delta W_i + \mu \Delta W_{i-1} 其中αα\alpha是学习率,是动量项。μμ\mu 如果项大于项,则在下一次迭代中,前一次迭代的对权重的影响将大于当前值。μμ\muαα\alphaΔWΔW\Delta W 这是动量术语的目的吗?还是方程看起来更像这样? W′i=Wi−α(ΔWi+μΔWi−1)Wi′=Wi−α(ΔWi+μΔWi−1)W_{i}' = W_{i} - \alpha( \Delta W_i + \mu \Delta W_{i-1}) 即。通过学习率扩展一切吗?

3
内核化技巧,用于神经网络
我一直在学习神经网络和SVM。我阅读的教程强调了内核化对于SVM的重要性。没有内核功能,SVM只是线性分类器。通过内核化,SVM还可以合并非线性功能,这使它们成为更强大的分类器。 在我看来,也可以将内核化应用于神经网络,但是我见过的神经网络教程都没有提到这一点。人们通常在神经网络中使用内核技巧吗?我认为一定有人尝试过它,看看它是否有很大的不同。内核化对神经网络的帮助与对SVM的帮助一样吗?为什么或者为什么不? (我可以想像几种将核技巧整合到神经网络中的方法。一种方法是使用合适的核函数将输入(的向量)预处理为高维输入,R m中的向量对m ≥ ñ。对于多层神经网络,另一种方法是在神经网络的每个级别应用内核函数。)RnRn\mathbb{R}^nRmRm\mathbb{R}^{m}m≥nm≥nm\ge n

1
为什么用随机数初始化神经网络的权重?
为什么神经网络的初始权重被初始化为随机数?我在某处读过,这样做是为了“打破对称性”,这使神经网络学习得更快。如何打破对称性使其学习更快? 将权重初始化为0会不是一个更好的主意?这样,权重就能更快地找到其值(正负)。 除了希望权重在初始化时会接近最佳值之外,还有其他一些潜在的基本哲学吗?

2
PAC学习之前发生了什么
我正在研究PAC学习(计算学习理论),它是一个没有机器学习/ AI知识的初学者。我主要从历史的角度来研究模型。 为此,最重要的当然是基于模型的结果。有足够的论文记录这些结果。但是,我也想写一些关于PAC学习之前发生的事情的信息,以勾勒出Valiant PAC模型概念出现的历史背景。 到目前为止,我还没有发现任何论文/调查记录这一点,而且作为一个不真正了解机器学习的人,很难找到答案。因此,我在这里问这个软问题,因为我相信有足够的专家可以为我提供帮助。引用受到高度赞赏。 当我可以研究和研究PAC之前发生的事情时,我可能会更好地了解学术界为何如此热衷于PAC模型,这也是我的历史著作中有记载的地方!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.