哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

谷歌DeepMind發(fā)現(xiàn)更快排序算法,已集成到C++庫

jf_WZTOguxH ? 來源:AI前線 ? 2023-06-09 17:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

接觸過基礎計算機科學課程的朋友們,肯定都曾親自動手設計排序算法——也就是借助代碼將無序列表中的各個條目按升序或降序方式重新排列。這是個有趣的挑戰(zhàn),可行的操作方法也多種多樣。人們曾投入大量時間探索如何更高效地完成排序任務。

作為一項基礎操作,大多數(shù)編程語言的標準庫中都內置有排序算法。世界各地的代碼庫中使用了許多不同的排序技術和算法來在線組織大量數(shù)據(jù),但至少就與 LLVM 編譯器配套使用的 C++ 庫而言,排序代碼已經有十多年沒有任何變化了。

近日,谷歌 DeepMind AI 小組如今開發(fā)出一種強化學習工具 AlphaDev,能夠在無需通過人類代碼示例做預訓練的情況下,開發(fā)出極限優(yōu)化的算法。如今,這些算法已經集成到 LLVM 標準 C++ 排序庫中,這是十多年來排序庫部分第一次發(fā)生變化,也是第一次將通過強化學習設計的算法添加到該庫中。

編程過程視為“游戲”

由于不必預先接觸任何人類游戲策略,DeepMind 系統(tǒng)往往能發(fā)現(xiàn)人類從未設想過的攻關思路。當然,由于完全依靠自我對抗來學習經驗,DeepMind 在某些情況下也會形成可被人類利用的盲點。

這種方法跟編程其實非常相似。大語言模型之所以能夠編寫出有效代碼,就是因為它們看到過大量人類代碼示例。但也正因為如此,語言模型很難產出人類之前沒做過的東西。如果我們希望對普遍存在的現(xiàn)有算法(例如排序函數(shù))做進一步優(yōu)化,那么繼續(xù)依賴現(xiàn)有人類代碼將很難突破固有思路的束縛。那么,如何才能讓 AI 找到真正的新方向?

DeepMind 的研究人員采用了與國際象棋和圍棋相同的方法:把代碼優(yōu)化任務轉化成單人“組裝游戲”。AlphaDev 系統(tǒng)開發(fā)出一種 x86 匯編算法,會將代碼的運行延遲視為一個分數(shù),在努力將該分數(shù)最小化的同時確保代碼能夠順暢跑通。通過強化學習,AlphaDev 逐漸具備了編寫緊湊、高效代碼的能力。

AlphaDev 基于 AlphaZero。DeepMind 向來以開發(fā)能自學游戲規(guī)則的 AI 軟件而聞名。這種思路被證明效果拔群,也先后攻克了國際象棋、圍棋和《星際爭霸》等諸多游戲難題。雖然具體細節(jié)因所玩游戲而異,但 DeepMind 軟件確實能在重復游玩中不斷學習,持續(xù)探索能令得分最大化的辦法。

AlphaDev 的兩個核心組件是學習算法和表示函數(shù)。

AlphaDev 學習算法可以結合 DRL 和隨機搜索優(yōu)化算法來玩組裝游戲。AlphaDev 中的主要學習算法是 AlphaZero 33 的擴展,AlphaZero 33 是一種著名的 DRL 算法,其中訓練神經網絡以指導搜索完成游戲。

表示函數(shù),負責跟蹤代碼開發(fā)時的整體性能,其中包括算法的常規(guī)結構以及對 x86 寄存器和內存的使用。該系統(tǒng)會單獨添加匯編指令,通過蒙特卡洛樹搜索(同樣是一種從游戲系統(tǒng)中借用的方法)進行選擇。樹狀結構允許系統(tǒng)快速將搜索范圍縮小至包含大量潛在指令的有限區(qū)域,而蒙特卡洛方法則以一定程度的隨機性從這個分支區(qū)域內選擇具體指令。(請注意,這里所說的“指令”是為創(chuàng)建有效、完整程序集而選擇特定寄存器等操作。)

之后,系統(tǒng)會評估匯編代碼的延遲和有效性狀態(tài),為其打分并與前一次得分進行比較。而通過強化學習,系統(tǒng)會在給定的程序狀態(tài)之下保留樹結構中不同分支的工作信息。隨著時間推移,系統(tǒng)將逐漸“學會”如何以最高得分(代表最低延遲)獲得游戲勝利(成功完成排序)。AlphaDev 的主要表示函數(shù)基于 Transformer。

為了訓練 AlphaDev 發(fā)現(xiàn)新算法,AlphaDev 在每輪中都會觀察它生成的算法和中央處理器 (CPU) 中包含的信息,然后通過選擇要添加到算法中的指令完成游戲。AlphaDev 必須有效地搜索大量可能的指令組合,以找到可以排序的算法,并且還要比當前最好的算法更快,同時代理模型可以根據(jù)算法的正確性和延遲獲得獎勵。

4093e6a4-0691-11ee-962d-dac502259ad0.png

圖 A:組裝游戲,圖 B:獎勵計算

最終,AlphaDev 發(fā)現(xiàn)了新的排序算法,這些算法可以讓 LLVM libc++ 排序庫得到改進:對于較短的序列,排序庫的速度提高了 70%;對于超過 250,000 個元素的序列,速度提高了約 1.7%。

具體而言,該算法的創(chuàng)新主要在于兩種指令序列:AlphaDev Swap Move(交換移動)和 AlphaDev Copy Move(復制移動),通過這兩個指令,AlphaDev 跳過了一個步驟,以一種看似錯誤但實際上是捷徑的方式連接項目。

40ae4328-0691-11ee-962d-dac502259ad0.png

左圖:帶有 min(A,B,C) 的原始 sort3 實現(xiàn)。?

右圖:AlphaDev Swap Move - AlphaDev 發(fā)現(xiàn)你只需要 min(A,B)。

40ec3dc2-0691-11ee-962d-dac502259ad0.png

左:max (B, min (A, C)) 的原始實現(xiàn)用于對八個元素進行排序的更大排序算法。

?右:AlphaDev 發(fā)現(xiàn)在使用其復制移動時只需要 max (B, min (A, C))。

這套系統(tǒng)的主要優(yōu)勢在于,其訓練過程不借助任何代碼示例。相反,系統(tǒng)會自主生成代碼示例,然后對其做出評估。過程當中,它也就逐漸掌握了關于有效排序的指令組合信息。

從排序到散列

在發(fā)現(xiàn)更快的排序算法后,DeepMind 測試了 AlphaDev 是否可以概括和改進不同的計算機科學算法:散列。

哈希是計算中用于檢索、存儲和壓縮數(shù)據(jù)的基本算法。就像使用分類系統(tǒng)來定位某本書的圖書管理員一樣,散列算法可以幫助用戶知道他們正在尋找什么以及在哪里可以找到它。這些算法獲取特定密鑰的數(shù)據(jù)(例如用戶名“Jane Doe”)并對其進行哈希處理——這是一個將原始數(shù)據(jù)轉換為唯一字符串(例如 1234ghfty)的過程。計算機使用此散列來快速檢索與密鑰相關的數(shù)據(jù),而不是搜索所有數(shù)據(jù)。

DeepMind 將 AlphaDev 應用于數(shù)據(jù)結構中最常用的散列算法之一,以嘗試發(fā)現(xiàn)更快的算法。當將其應用于散列函數(shù)的 9-16 字節(jié)范圍時,AlphaDev 發(fā)現(xiàn)的算法速度提高了 30%。

今年,AlphaDev 的新哈希算法被發(fā)布到開源 Abseil 庫中,可供全球數(shù)百萬開發(fā)人員使用,該庫現(xiàn)在每天被數(shù)萬億次使用。

實際可用的代碼

復雜程序中的排序機制能夠處理大量任意條目的集合。但在標準庫層面來看,這種能力源自一系列高度限定的具體函數(shù)。這些函數(shù)各自只能處理一種或幾種情況。例如,某些單獨算法只能對 3、4 或 5 個條目做排序。我們也可以同時使用一組函數(shù)對任意數(shù)量的條目作排序,但原則上每一次函數(shù)調用最多只能對 4 個條目做排序。

DeepMind 在每個函數(shù)上都設置了 AlphaDev,其實際運行方式有著很大區(qū)別。對于負責處理特定數(shù)量條目的函數(shù),可以編寫出不含任何分支的代碼,即根據(jù)變量狀態(tài)執(zhí)行不同的代碼。因此代碼性能往往與所涉及的指令數(shù)量成反比。

AlphaDev 已經成功將 sort-3、sort-5 和 sort-8 的指令數(shù)量各減一,在 sort-6 和 sort-7 中的指令削減量甚至更多。只有 sort-4 上沒能找到改進現(xiàn)有代碼的方法。而在實際系統(tǒng)上的重復運行測試證明,更少的指令確實帶來了更好的性能。

至于對可變數(shù)量條目進行排序,則要求代碼中包含分支,而不同處理器專用于處理這些分支的元件數(shù)量也有區(qū)別。

對于這類情況,研究人員在 100 臺不同的計算設備上對代碼性能做出了評估。AlphaDev 在這類場景下同樣找到了進一步榨取性能的方法,下面我們以一次最多排序 4 個條目的函數(shù)為例,看看它到底是怎么操作的。

在 C++ 庫的現(xiàn)有實現(xiàn)中,代碼需要進行一系列測試來確認具體需要對多少個條目做排序,再根據(jù)條目數(shù)量調用相應的排序函數(shù)。

而 AlphaDev 修改后的代碼則采取更加“神奇”的思路:它先測試是不是 2 個條目,如果是則調用相應函數(shù)立即做排序。如果數(shù)量大于 2 個,則代碼會先對前 3 個條目做排序。這樣如果確實只有 3 個條目,則返回排序結果。由于實際是有 4 個條目要做排序,所以 AlphaDev 會運行專門代碼,以非常高效的方式將第 4 個條目插入到前 3 個已經排序完成的條目中的適當位置。

這種辦法聽起來有點怪異,但事實證明其性能確實始終優(yōu)于現(xiàn)有代碼。

由于 AlphaDev 確實生成了更高效的代碼,所以研究團隊打算把這些成果重新合并到 LLVM 標準 C++ 庫中。但問題是這些代碼為匯編格式,而非 C++。所以他們必須通過逆向計算找到能夠生成相同程序集的 C++ 代碼。

現(xiàn)如今,代碼成果已經被合并至 LLVM 工具鏈內,成為十多年來這部分代碼的首次更新。研究人員估計,AlphaDev 生成的新代碼正每天被執(zhí)行數(shù)萬億次。

結束語

“太棒了!將我們程序員很早就學會的這種基本排序任務的速度提高了 70%??吹?AI 在我們都依賴的算法和庫中提供重大加速,真是令人興奮?!庇?a target="_blank">開發(fā)者對谷歌 DeepMind 的成果表示振奮。

但也有開發(fā)者并不買賬:“相當令人失望……1.7% 的改善?5 個元素的序列 70%?可能是最不受歡迎、最不切實際的應用研究……”也有開發(fā)者表示:“說發(fā)現(xiàn)了新算法是不是有點誤導人?似乎更像是算法優(yōu)化。無論如何這仍然很酷?!?/p>

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4804

    瀏覽量

    98541
  • 編程語言
    +關注

    關注

    10

    文章

    1965

    瀏覽量

    39864
  • C++
    C++
    +關注

    關注

    22

    文章

    2129

    瀏覽量

    77364
  • 強化學習
    +關注

    關注

    4

    文章

    273

    瀏覽量

    11997

原文標題:AI幫助人類打破十年算法瓶頸:谷歌 DeepMind 發(fā)現(xiàn)更快排序算法,已集成到C++庫

文章出處:【微信號:AI前線,微信公眾號:AI前線】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    手搓C++離散小波變換DWT程序

    關于小波變換,我們當然可以選擇速度更快地方式來使用它。和python相比,C++編譯后的代碼在對同一組參數(shù)配置并且處理同一組數(shù)據(jù),在沒有優(yōu)化的情況下,處理速度可以快達10倍上,均不包括把結果寫入csv文件步驟的時間。下圖中的19.9s是指被處理的數(shù)據(jù)時長。
    的頭像 發(fā)表于 04-22 14:15 ?60次閱讀
    手搓<b class='flag-5'>C++</b>離散小波變換DWT程序

    C++音視頻實戰(zhàn)-FFmpeg基礎工程-多路H265監(jiān)控錄放開發(fā)

    pan.baidu.com/s/1g64x9D_jp9ufk4uBpQBmvA?pwd=497f? 未來安防底層核心:C++ 音視頻實戰(zhàn),從 FFmpeg 多路 H265 監(jiān)控開發(fā) 站在2026年
    的頭像 發(fā)表于 04-20 15:49 ?522次閱讀

    C++:const 的空間,常量也能占內存?

    5g.5jh.dg8sg.cnJIWWQc++語言 c++語言5g.Zq2.dg8sg.cnJIWWQc++語言 def lock_tetromino(self): \"\"\"將落地的方塊鎖定網格中
    發(fā)表于 04-16 19:19

    keil實現(xiàn)cc++混合編程

    起因項目中使用到一個開源的模擬IIC的,封裝的比較好,但是是使用c++寫的。于是將其移植自己的項目中,主要有以下三步操作: 在工程選項中 C/
    發(fā)表于 01-26 08:58

    C語言插入排序算法和代碼

    插入排序排序算法的一種,它不改變原有的序列(數(shù)組),而是創(chuàng)建一個新的序列,在新序列上進行操作。   這里以從小到大排序為例進行講解。   基本思想及舉例說明   插入
    發(fā)表于 01-15 06:44

    C語言增量式PID的通用算法

    C語言增量式PID通用算法控制算法中PID使用的非常廣泛,但是在網上找代碼的時候發(fā)現(xiàn)好多代碼都不夠通用,需要自己改好多東西,而且當一個項目需要使用多個PID控制器時也頗為麻煩,這里設計
    發(fā)表于 01-14 08:28

    C語言與C++的區(qū)別及聯(lián)系

    C語言和C++到底是什么關系? 首先C++C語言本來就是兩種不同的編程語言,但C++確實是對C
    發(fā)表于 12-24 07:23

    CC++之間的聯(lián)系

    1、語法兼容性: C++完全兼容C語言的語法,這意味著任何有效的C語言程序都可以直接在C++編譯器下編譯通過。 2、底層控制: C++
    發(fā)表于 12-11 06:51

    C語言和C++之間的區(qū)別是什么

    C++的標準那樣集成度高和功能齊全。 6、編譯器與語言特性: C++編譯器通常比C語言編譯器更加復雜,因為它需要處理更多的語言特性,
    發(fā)表于 12-11 06:23

    C++程序異常的處理機制

    的健壯不僅僅有算法上的優(yōu)越性,還存在程序對各種異常情況的識別和處理能力,如果對這些異常沒有得到較好的處理,就非常容易引起程序的奔潰。 那么C++設計了一套異常處理機制,一方面能夠使得異常處理和正常
    發(fā)表于 12-02 07:12

    C語言的常見算法

    # C語言常見算法 C語言中常用的算法可以分為以下幾大類: ## 1. 排序算法 ###
    發(fā)表于 11-24 08:29

    技能+1!如何在樹莓派上使用C++控制GPIO?

    在使用樹莓派時,你會發(fā)現(xiàn)Python和Scratch是許多任務(包括GPIO編程)中最常用的編程語言。但你知道嗎,你也可以使用C++進行GPIO編程,而且這樣做還有不少好處。借助WiringPi
    的頭像 發(fā)表于 08-06 15:33 ?4492次閱讀
    技能+1!如何在樹莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    C++ 與 Python:樹莓派上哪種語言更優(yōu)?

    Python是樹莓派上的首選編程語言,我們的大部分教程都使用它。然而,C++在物聯(lián)網項目中同樣廣受歡迎且功能強大。那么,在樹莓派項目中選擇哪種語言更合適呢?Python因其簡潔性、豐富的和資源而被
    的頭像 發(fā)表于 07-24 15:32 ?1107次閱讀
    <b class='flag-5'>C++</b> 與 Python:樹莓派上哪種語言更優(yōu)?

    Perforce QAC產品簡介:面向C/C++的靜態(tài)代碼分析工具(通過SO 26262認證)

    Perforce QAC專為C/C++開發(fā)者打造,支持多種編碼規(guī)范、功能安全標準(ISO 26262)等,廣泛用于汽車、醫(yī)療、嵌入式開發(fā)領域,可幫助快速識別關鍵缺陷、提升代碼質量、實現(xiàn)合規(guī)交付。
    的頭像 發(fā)表于 07-10 15:57 ?1453次閱讀
    Perforce QAC產品簡介:面向<b class='flag-5'>C</b>/<b class='flag-5'>C++</b>的靜態(tài)代碼分析工具(<b class='flag-5'>已</b>通過SO 26262認證)

    AlphaEvolve有望革新AI玩具芯片設計,算法進化驅動能效與成本雙突破

    電子發(fā)燒友網綜合報道,近期,谷歌?DeepMind發(fā)布了一款AlphaEvolve,是一款通用科學AI代理,基于大語言模型Gemini系列與進化計算框架,專注于算法發(fā)現(xiàn)與優(yōu)化。可以支持
    的頭像 發(fā)表于 06-18 00:09 ?3966次閱讀
    克山县| 原阳县| 汤阴县| 上蔡县| 三门县| 斗六市| 兴文县| 邓州市| 苏尼特右旗| 伊宁市| 花垣县| 虹口区| 迭部县| 闸北区| 罗江县| 海城市| 龙陵县| 江山市| 西乡县| 黄山市| 纳雍县| 定陶县| 石嘴山市| 石门县| 澳门| 德州市| 民和| 茌平县| 伽师县| 丹阳市| 鹤峰县| 和硕县| 大名县| 芦溪县| 洪江市| 吉木萨尔县| 三门峡市| 共和县| 涞源县| 阿拉善左旗| 水富县|