搜參,序列生成,最佳化方法——窮舉,greedy search,beamsearch,bayessearch, viterbisearch

tangshine發表於2024-08-15
  1. exhaustive search(窮舉搜尋)
    最直觀的方法就是窮舉所有可能的輸出序列。從所有的排列組合中找到輸出條件機率最大的序列。窮舉搜尋能保證全域性最優,但計算複雜度太高,當輸出詞典稍微大一點根本無法使用。

  2. greedy search(貪心搜尋)
    貪心搜尋在解碼下一個選擇的時候,直接選擇條件機率最大的候選值作為當前最優。

  3. beamsearch(集束搜尋)
    beam search的每一步不再只選擇條件機率最大的值,而是選擇機率值topk個(也即beam_size(束寬))。然後分別以這K個值做為下一個字解碼的輸入,則下個字會預測出K^2個機率。然後從這些機率中再選擇topK個,重複上述過程。當beam_size=1時集束搜尋就退化成了貪心搜尋。

  4. bayessearch (貝葉斯搜尋)
    建立目標函式的機率模型,並用它來選擇最有希望的超引數來評估真實的目標函式。利用先驗知識逼近未知目標函式的後驗分佈從而調節超參。花一點時間選擇下一個超引數,以減少對目標函式的呼叫。貝葉斯調參採用高斯過程,考慮之前的引數資訊,不斷地更新先驗;網格搜尋未考慮之前的引數資訊,貝葉斯調參迭代次數少,速度快;貝葉斯調參針對非凸問題依然穩健。

  5. viterbisearch (維特比搜尋)
    相應的當前選擇,最優解一定是前一個選擇的最優解。在沒有得到最終結果之前,每一個選擇都有可能是最優解,所以在序列生成過程中,保留每一個選擇的前一個選擇的最優選,到最後一個選擇時,回溯出全域性最優解
    設建模單元為N, beam_size為K,解碼所需時間步驟為T:
    (1) 如果k=1,即為greedy search,時間複雜度為O(NT)

    (2)beam_search,時間複雜度為O(KNT),區域性最優

    (3)如果K=N,即維特比演算法,時間複雜度為O(NNT),全域性最優

相關文章