作者: 龍心塵
時間:2021年1月
出處:https://blog.csdn.net/longxinchen_ml/article/details/113074403
其實這是一個不太好解釋的問題,因為并沒有一個完整的定義,筆者在演算法領域這些年遇到了不少做演算法的同行,發現各自的差別還是很大的,作業側重點甚至思維方式都不同,為了給剛入門的朋友介紹得清晰一些,這里就簡單串一串我遇到的不同的演算法,
演算法與非演算法的區別
一般來說,可以把編程作業分為兩種,一種是面向實作的,一種是面向優化的,前者如實作一個功能、搭建一個服務、實作一種展現互動方式等,更關注的是如何實作功能,如何對于各種復雜甚至小眾的場景都不出錯,互聯網中典型的后端、前端、平臺、網路工程師的主要作業是這一類,

如果一些功能已經實作了,你主要需要優化它,那這類作業一般比較偏向演算法,其中一個關鍵是你的優化目標要是客觀可量化的,比如一些代碼優化的作業是提升代碼的可維護性、可讀性和可擴展性,這個優化目標具備比較強的主觀性,難以形成量化的指標,屬于設計模式主要關注的問題,一般不納入演算法范疇,
另一個區分演算法與非演算法作業的重要特征是一般涉及數學知識較多的編程作業更偏向演算法,比如對于面向優化的編程作業,為了很好地衡量可量化的目標,其數學定義往往比較明確,相應引入的數學知識會比較多,
那么如果面向實作的編程作業也依賴大量數學知識時是否算作演算法呢?其中一個例子是可計算性理論,它涉及到可判定性問題、數理邏輯等問題都需要大量復雜的數學知識,這種情況下,它其實更關心何種問題原則上是否可用演算法解決,在實際工程領域中并沒有大量的崗位與之相匹配,所以本文暫不將其作為演算法工程師所考慮的范圍,

另一個例子是加密演算法,加密演算法的目標是保證資料的安全通信,保證其加密性、完整性和身份唯一確認,看起來是面向實作,但換一個視角,加密演算法設計的指導思想是提高其解密成本,也可以算是面向優化的,

不同種類演算法之間的區別
如果你的優化目標是要降低程式的時間復雜度與空間復雜度,它們都是能夠比較嚴格地量化定義的,就屬于經典的“資料結構與演算法”中關注的“演算法”的問題,LeetCode中大部分Algorithm的題目都屬于此類,也是互聯網面試中的高頻考點,如常見的分治、遞回、動態規劃等,在實際作業中,特別是一些架構師相關的角色,會著重關注這類問題,比如提升增刪改查的速度、降低其記憶體消耗等等,相應的數學理論是計算復雜性理論,依賴的數學知識包括離散數學、組合數學、圖論等,

如果你的優化目標是要降低在未見過的case上的預測誤差,這是典型的機器學習中的演算法問題,這里面涉及到一些核心的概念,包括:泛化誤差、訓練誤差、過擬合、欠擬合、偏差等,相應的演算法崗位非常多,影像演算法、語音演算法、自然語言處理演算法、搜索推薦演算法等,它的數學理論是計算學習理論,依賴的數學知識包括概率與統計、最優化理論、線性代數與矩陣論等,

當然,最優化本身就是一種演算法,稍微嚴格一點的表述是在一定的約束條件下控制自變數達到目標函式最優的問題,最優化問題也叫作運籌學,在工程界應用非常廣泛,典型的如外賣騎手調度、網約車調度、航班調度、物流路徑調度、廣告/補貼金額投放等,

最優化演算法的種類也比較多,以自變數是否連續可分為連續最優化和組合優化,很多計算復雜度優化演算法可以看做一種廣義的組合優化問題,機器學習演算法一般是連續最優化問題,
不同演算法思路的相互組合
其他一些的高階演算法可以理解為以上多種演算法的組合,比如強化學習演算法可以理解成機器學習中的有監督學習演算法與最優化決策演算法的組合,也就是智能體根據其對當前環境下長期最大收益進行決策(最優化),而這個收益的函式是需要通過大量樣本統計(有監督學習)才能得到,并且智能體的當下決策往往影響周圍的環境狀態進而進一步影響下一步自身的決策,其典型應用場景是基于用戶實時行為的個性化推薦與搜索,外賣騎手路徑優化與訂單分配的在線優化等,其實,“強人工智能”如果可行的話,強化學習是其繞不開的學習思路,

以上介紹的優化演算法都是基于單智能體的,而博弈論就將其拓展到多個智能體的最優化,視野一下就打開了,多個智能體的優化策略是會相互影響的,也就是說多智能體各自基于各自的優化函式進行優化,并且各自的優化行動可以影響其他智能體優化策略的程序,博弈論演算法典型的應用場景是拍賣競價策略,在ACG文化中的《大逃殺》、《賭博默示錄》、《彌留之國的愛麗絲》甚至《JOJO》等大量作品中都充滿了大量的博弈論場景,有一個小程式的游戲叫作《信任的進化》,簡單玩一下就能夠體會到博弈論的有趣之處,

多智能體強化學習則是多個智能體的強化學習得到最優策略,并且各自的最優策略會影響對方智能體的下一步優化策略的程序,或者理解成其認為博弈論收益函式是不確定的,需要對通過大量樣本統計(長期收益的有監督學習),典型的案例是AlphaGo、AlphaZero之類,
生成對抗網路(GAN)有點特殊,可以理解成兩種機器學習演算法的組合,一種演算法的優化目標是降低生成樣本與真實樣本的區分難度,另一種演算法的優化目標是提升他們的區分難度,而這兩個目標是相互對立的,這又借鑒了博弈論的思路,這類演算法在影像風格遷移、影像修復等場景有非常多的應用,

另外,模型壓縮演算法可以理解成機器學演算法與優化計算復雜度演算法組合,在一定的誤差容忍范圍下顯著降低模型的空間復雜度和推斷時間復雜度,其典型應用場景是模型的實時運算加速、邊緣部署壓縮等,
小結一下
這里簡單梳理了一些典型演算法的思路,主要是從面向優化的角度上進行串講,因為是科普向,很多細節沒展開,特別是機器學習演算法和優化計算復雜度演算法的各個子種類沒有探討,我們將在接下來的文章中進行更加詳細的介紹,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253046.html
標籤:AI
下一篇:如何區分前端Bug與后端Bug?
