課程學習
課程學習,是按照好學校教孩子的方式去訓練機器人:從簡單的任務開始,再一步步加大難度,而不是在第一天就把最難的挑戰丟給它。正如你不會把一個初學游泳的人直接扔進深水區,你也不會要求一個剛剛初始化的機器人在亂石地上衝刺;你會讓它先學會站立,再學會邁步,然後在平地上行走,到更晚才去對付斜坡和碎石。每一項簡單的技能,都成了機器人腳下的一塊墊腳石,讓它得以踏上下一項更難的技能。
它之所以重要,是因為許多機器人技能幾乎不可能靠隨機試錯從零學會。如果一個腿式機器人在一無所知的情況下從險惡地形起步,它會立刻摔倒、每一次都摔倒,而且幾乎從來撞不上那串能教會它點東西的、罕見而幸運的動作序列——於是學習陷入停滯。而從那些成功足夠頻繁、能提供有用回饋的溫和任務起步,再隨著能力增長逐漸提高難度,機器人就能持續得到一串它真正能據以行動的「課程」。讓最終那項困難技能變得可達的,是經歷被安排的先後順序,而不僅僅是這些經歷本身。
設計者會用不同方式來構建這套「課程」:要麼手工編排一串難度不斷升高的固定關卡,要麼讓一段程式自動調節難度——機器人表現好就把難度往上推一點,機器人吃力就把難度往回調一點,使挑戰始終落在它剛好搆不到的位置上。這樣做的回報,是更快、更可靠的學習,以及一些純粹靠蠻力訓練往往根本達不到的最終技能。
為了教會一隻四足機器人穿越崎嶇地面,訓練者先讓它在平坦的虛擬地板上行走,再到平緩的起伏路面,然後是台階,最後才是隨機散佈的大石塊。一隻直接從石塊地起步的機器人根本學不會走路;而那隻被一級級帶上「課程」的機器人,最終能穿越它若一上來硬碰就永遠掌握不了的地形。
走路是分級學會的——平地、起伏、台階、石塊——每一級都為下一級做好準備。
這個名字是借用學校「課程」作比喻——一套從淺到深、有計劃安排的課目順序——它最常與強化學習搭配使用,被逐步抬高難度的,正是練習環境本身。