为什么要用beam search:
rnn网络每次可以输出下一个节点的概率,但是如果使用贪心每次选择最大概率的节点,最终序列的概率不一定最大:
例如只按照下一个节点的概率可以获得ABB 0.6^3
但是还有BBB 0.4*0.9^2概率会更大
同时又无法检查所有的路径(计算时间问题)
因此要是用beam search
设定beam的大小 例如为2
那么每一次选择概率最大的2个节点。
首先选择第一层的AB,下一步就有4个节点可以选择,选择最大概率的两个节点BB,以此类推
实例:
设定beam为3,将起始字符输入获得4个输出,选择3个概率最高的,下一步就获得9个对应节点,从9个中再次选择概率最高的3个,依次循环直到结束