為了讓 AI 不斷打怪升級,DeepMind 打造「宇宙」
作者 雷鋒網 | 發布日期 2021 年 07 月 30 日 8:15 |
DeepMind 又給我們小驚喜。我們都知道,強化學習苦於類化能力差,經常只能針對單個任務從頭學習。
DeepMind之前開發的AlphaZero,儘管可以玩圍棋、西洋棋和日本將棋,但每種棋牌遊戲都只能從頭訓練。類化能力差也是AI一直被詬病為人工智障的一大原因。人類智慧的厲害之處,就在藉鑑之前經驗迅速適應新環境。
但類化能力不是一蹴而就,就像玩遊戲,也是先做簡單任務,逐步升級到複雜任務。《空洞騎士》(Hollow Knight)一開始只需要隨意走動揮刀砍怪,但噩夢級難度的「苦痛之路」關,沒有前面累積的技巧,只能玩寂寞。
多任務宇宙
DeepMind此次採用「課程學習」,讓智慧體於不斷擴展升級的開放世界學習。也就是說,AI新任務(訓練資料)是基於舊任務不斷生成。智慧體可盡情鍛鍊自己,簡單的如「靠近紫色立方體」,複雜點的如「靠近紫色立方體或將黃色球體放在紅色地板」,甚至和其他智慧體玩耍,如捉迷藏──「找到對方,且不要被對方發現」。
每個小遊戲存在世界小角落,千千萬萬個小角落拼成龐大的物理模擬世界,如下圖的幾何「地球」。總體來說這個世界的任務由三個要素構成,即任務=遊戲+世界+玩家,並根據三要素關係,決定任務的複雜度。
複雜度的判斷有四個維度:競爭性、平衡性、可選項、探索難度。
比如「搶方塊」遊戲,藍色智慧體需要把黃色方塊放到白色區域,紅色智慧體需要把黃色方塊放到藍色區域。這兩個目標矛盾,因此競爭性較強;同時雙方條件對等,平衡性比較高;因目標簡單,所以可選項少;DeepMind把探索難度評為中上,可能是因定位區域算較複雜的場景。
再如「球球喜歡和方塊一起玩」遊戲,藍色和紅色智慧體有共同目標,讓相同顏色的球體和方塊放在相近位置。
這時競爭性自然很低,平衡性毋庸置疑很高的;可選項比上面遊戲高很多;探索難度沒有定位區域,智慧體隨便把球體和方塊放哪都行,難度就變小了。
基於這四個維度,DeepMind打造超大規模「宇宙」任務空間,幾何「地球」也只是這宇宙的小角落,是四維任務空間的一點。DeepMind將「宇宙」命名為XLand,包含數十億個任務。
來看XLand的全貌,由一系列遊戲組成,每個遊戲在許多模擬世界進行,這些世界的拓樸和特徵平滑變化。
終生學習
數據有了,接下來得找到合適的算法。 DeepMind發現,目標注意代理(GOAT)可學習更通用的策略。
具體來說,智慧體輸入包括第一視角的RGB圖像、本體感覺以及目標。經過初步處理後,生成中間輸出,傳遞給GOAT模組,會根據智慧體目前目標處理中間輸出的特定部分,邏輯分析目標。
邏輯分析是指,每個遊戲可藉由一些方法,構建另一個遊戲,並限制策略的價值函數的最優值上限或下限。
DeepMind提出一個問題:對每個智慧體,什麼樣的任務是最好的?換句話說,打怪升級時,什麼樣的關卡設置才讓玩家順利升級為「真」高手,而不是一刀9999?
DeepMind的答案是,每個新任務都基於舊任務生成,「不會太難,也不會太容易」。其實恰好是讓人類學習時感覺「爽」的興奮點。
訓練開始時,太難或太容易的任務可能會鼓勵早期學習,但會導致訓練後期的學習飽和或停滯。不要求智慧體某任務非常優秀,而是鼓勵終身學習,即不斷適應新任務。所謂太難、太容易是較模糊的描述。需要量化方法,在新任務和舊任務之間彈性連接。
怎麼不讓智慧體做新任務時不適應而「暴死」?進化學習就提供很好的靈活性。總體來說,新任務和舊任務同時進行,且每個任務有多智慧體參與「競爭」。舊任務適應好的智慧體,會選拔到新任務繼續學習。
新任務中,舊任務的優秀智慧體權重、瞬間任務分佈、超參數都會複製,參與新一輪「競爭」。除了舊任務的優秀智慧體,還有很多新人參與,這就引進隨機性、創新性、靈活性,不用擔心「暴死」問題。
當然,因任務不斷生成、動態變化,一個任務可訓練不同長處的智慧體,並往不同方向演化(隨著智慧體相對性能和強健性進行)。最終每個智慧體都會形成擅長任務的集合,就像春秋戰國時期「百家爭鳴」。說打怪升級顯得格局小,簡直是模擬地球。
DeepMind表示,「這種組合學習系統的特性是,不最佳化有界性能指標,而是更新定義的通用能力範圍,這使智慧體開放式學習,僅受環境空間和智慧體的神經網路表達能力的限制。」
智慧初現
最終這複雜「宇宙」升級、進化、分流的智慧體長成了什麼優秀物種?DeepMind說,智慧體有很明顯的零樣本學習能力,比如使用工具、合圍、數數、合作+競爭等。
來看具體例子。首先智慧體學會臨機應變。目標有三個:
黑色金字塔放到黃色球體旁邊
紫色球體放到黃色金字塔旁邊
黑色金字塔放到橙色地板
AI一開始找到一個黑色金字塔,想拿到橙色地板(目標3),但搬運過程瞄見黃色球體,瞬間改變主意,「我可以實現目標1啦」,將黑色金字塔放到黃色球體旁邊。
第二個例子是,不會跳高,怎麼拿到高台上的紫色金字塔?智慧體需要想辦法突破障礙,取得高台上的紫色金字塔,高台周邊並沒有類似階梯、斜坡的路。
因不會跳高,所以智慧體「掀桌子」,把周邊幾塊豎起來的板子弄倒。然後一塊黑色石板剛好倒在高台邊,「等等,這不就是我要的階梯嗎?」這過程是否體現了慧體的智慧,還無法肯定,可能只是一時幸運。關鍵還是,要看統計數據。
經過5代訓練,智慧體在XLand的4千個獨立世界玩了約70萬個獨立遊戲,涉及340萬個獨立任務,最後一代每個智慧體都經歷2千億次訓練步驟。智慧體已能順利參與幾乎每個評估任務,除了少數即使人類也無法完成的任務。
DeepMind的研究,或許一定程度體現「密集學習」重要性。也就是說,不僅資料量要大,任務量也要大。這也使得智慧體在類化能力有很好表現,如資料顯示,只需對一些新複雜任務進行30分鐘集中訓練,智慧體就可快速適應,而從頭開始用強化學習訓練的智慧體根本無法學習這些任務。
往後我們也期待這「宇宙」更複雜和生機勃勃,AI經過不斷演化,不斷給我們帶來驚喜(細思極恐)的體驗。
資料來源:https://technews.tw/2021/07/30/deepmind_xland/
「函數指標參數」的推薦目錄:
- 關於函數指標參數 在 台灣物聯網實驗室 IOT Labs Facebook 的最佳貼文
- 關於函數指標參數 在 TechOrange 科技報橘 Facebook 的最讚貼文
- 關於函數指標參數 在 iThome Facebook 的最佳貼文
- 關於函數指標參數 在 [問題] 函數指標的void*參數個數可不定? - 看板C_and_CPP 的評價
- 關於函數指標參數 在 C++ 快速導覽- 函數指標參數 - 程式語言教學誌FB, YouTube ... 的評價
- 關於函數指標參數 在 C 程式語言第六章6-9 函數指標Function Pointer 的評價
- 關於函數指標參數 在 C語言的函數指標(function pointer)的參數特性 - gists · GitHub 的評價
函數指標參數 在 TechOrange 科技報橘 Facebook 的最讚貼文
▍工業製程居然能用 Python 做優化?
Python 語言易學又強大,近年不但頻頻挑戰常居第二名的 Java 語言,還成為 AIoT 智慧製造的關鍵技能?想快速掌握 #智慧製造 #機器學習 應用實務,現在正是進修好時機!
立即報名 https://supr.link/sPDp9
工研院《Python工業連續製程分析:參數指標、預測建模一把罩》
用 · 線上+實體 · 兩階段精實課程,教會你如何用 Python 從基礎應用到案例演練!
【數位先修】 學習時程彈性的線上數位課程,完整奠定基礎
🔹工業參數資料轉換
🔹資料處理與清理
🔹視覺化呈現數據結果
【線下實戰】活用案例與模型操作,並應用至實際的工業製程優化
🔹六大機器學習模型學習與操作(使用Linear Regression、Random Forest、XGBoost、GAM等)
🔹以敏感性分析找出影響品質與成本的重要參數
🔹藉模型損失函數完成模型最佳化調整
完成兩階段課程,你將能學會:
■ 品質及成本控管參數選擇
■ 重要製程參數篩選
■ 製程品質與節能的最佳化
■ 預測節流矩陣評估方案最佳的效益
...
課程已在工研院產業學習網上開設,現在即可報名,隨時觀看體驗新技能!
更多課程介紹:https://supr.link/sPDp9
函數指標參數 在 iThome Facebook 的最佳貼文
打造各種AI應用的中華電信揭露物件偵測模型輕量化3大作法,模型骨幹直接採用現成結構(如EfficientNet-Lite),模型頸部、頭部則以近似運算來減少參數量,比如用差值讓長寬一致、用一層卷積讓Channel數一致,並用深度可分離卷積來重組頭部,同時輕量化損失函數,來避免無法收斂的結果。
https://www.ithome.com.tw/news/143462
-------------------------------------------------
◤ 最具指標年度盛事.CYBERSEC 2021 臺灣資安大會 ◢
2,300+ 家企業指定造訪、臺灣唯一超規格資安展會
掌握趨勢、諮詢專家,尋求資安解方的第一首選!
🔴 馬上報名 https://r.itho.me/register
🟢 邀請好友抽 AirPods Pro https://r.itho.me/share
★ 全方位主題論壇 200+ 場專業演說 👑
★ 破 200+ 品牌參展 歷年最大資安展覽 ⛹
★ 佳評如潮 CyberLAB 實機攻防演練 🏆
★ 獨門 CYBERSEC Playground 資安體驗區 🃏
★ 臺灣資安館 看見 MIT 自主研發實力 👊
★ CyberTalent Connect 資安新鮮人才專區 🙋
★ 票選最受歡迎 Tech Demo Award 拿大獎 📣
… and more!
🔵 鎖定大會動態 https://r.itho.me/CYBERSEC_2021
🔴 免費參加 https://r.itho.me/signup
________________________________
CYBERSEC 2021 臺灣資安大會
時間:5 月 4 - 6 日
地點:臺北南港展覽二館
#TRUST_redefined #信任重構
#CYBERSEC2021 #2021臺灣資安大會
#CYBERSECEXPO #臺灣資安大展 #資安 #iThomeSecurity
函數指標參數 在 C++ 快速導覽- 函數指標參數 - 程式語言教學誌FB, YouTube ... 的推薦與評價
如果有需要用函數(function) 直接修改某些變數(variable) ,就可以用該變數的指標(pointer) 當參數(parameter) ,例如 #include <iostream> void do_something(int ... ... <看更多>
函數指標參數 在 C 程式語言第六章6-9 函數指標Function Pointer 的推薦與評價
: · Function Pointers in C / C++ · C程式語言第八章8-1結構與聯合型態,struct結構內含多種資料包在一起,資料結構常用struct結構當節點 · 宣告 指標 為 參數 時, ... ... <看更多>
函數指標參數 在 [問題] 函數指標的void*參數個數可不定? - 看板C_and_CPP 的推薦與評價
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
我看了別人的程式,當中他宣告一個function pointer, 其中引數部份有六個void*,
這個function pointer可以接受不同的回傳值型別或引數個數不定的function address,
我用VC++驗証如下:
// void_ptr.cpp : main project file.
#include "stdafx.h"
#include <iostream>
using namespace std;
typedef bool (*func_ptr)(void* input0, void* input1, void* input2, void* input3, void* input4, void* input5, void* input6);
bool func1(int* a, int* b){
cout << __FUNCTION__;
return true;
}
bool func2(char* a, int* b, int* c){
cout << __FUNCTION__ ;
return true;
}
bool func3(int* a, int* b, char* c, char* d){
cout << __FUNCTION__;
return true;
}
void func4(int* a, int* b)
{
cout << __FUNCTION__;
}
void func5(void)
{
cout << __FUNCTION__;
}
static func_ptr list[]={
(func_ptr)&func1,
(func_ptr)&func2,
(func_ptr)&func3,
(func_ptr)&func4,
(func_ptr)&func5,
};
int main(array<System::String ^> ^args)
{
void *g0, *g1, *g2,*g3, *g4, *g5, *g6;
int x=10;
int y=5;
g0=&x;
g1=&y;
list[0](g0,g1,g2,g3,g4,g5,g6);
char* str;
str="hihihi";
g0=str;
g2=&y;
list[1](g0,g1,g2,g3,g4,g5,g6);
list[4](g0,g1,g2,g3,g4,g5,g6);
system("pause");
return 0;
}
結果會印出func1func2func5,無任何錯誤
我一直以為function pointer只能接受與宣告時相同型別的
function address(回傳值,引數型別,引數個數),
別人的code是在linux下, 我的驗証是在vs2010 vc++,
這該如何解釋, void*可以接受任何位址, 但在轉成(func_ptr)時應該mapping錯才對...
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.220.130
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1426502921.A.59A.html
※ 編輯: aMaa (114.32.220.130), 03/16/2015 18:50:23
... <看更多>