當深度學習遇上敏捷開發,會發生怎樣的“化學反應”?
說出來你可能不信,有一種從軟體發展領域誕生的思維方式,自誕生以來就一直深遠地影響著我們日常的工作和生活。這就是“敏捷方法”,即軟體發展領域的“敏捷軟體發展”(Agile Software Development)。
2001年初,十幾位來自美國各個軟體發展的細分領域的代表們共同簽署了一份名為《敏捷軟體發展宣言》(Manifesto for Agile Software Development)的檔,標誌著這一全新的軟體發展方式的誕生(或者也可以稱其為一種思維方式)。
敏捷開發包含的內容十分豐富,總體上要求客戶參與到整個的開發中,開發者需要根據客戶的需求靈活變更代碼,採用反覆運算、循序漸進的方法持續集成,提供持續可用的版本。
事實證明,隨著軟體規模和複雜度的升高,在現實生活中成功應用於工廠生產的那一套瀑布式流程並不適合於軟體發展。而敏捷開發正是為了解決瀑布式開發帶來的諸多問題而提出的。
將敏捷開發應用於深度學習
事實上,敏捷開發自提出以來就一直在進行演變,而且目前正向著自動化的方向演變。
隨著這種自動化的引入,所謂“持續集成”和“持續開發”的概念將得以真正做到“持續不間斷”。
換句話說,當人們清楚地認識到究竟哪些環節適合於自動化實現,並成功地將自動化過程應用於強化人類的日常工作,敏捷方法才能發揮其最大的優勢。
就好像對於初創公司來說,敏捷方法幾乎已經成為了他們的必修課。正是基於敏捷方法的核心理念,越來越多的創業公司開始嘗試在一次又一次的商業計畫反覆運算中,過濾那些潛在客戶最感興趣的回饋,然後基於這些回饋靈活調整公司的發展方向,從而獲得商業的成功。也就是說,針對那些缺少發展規劃的初創公司來說,這種“精益求精”的取巧過程顯然是更明智的做法。
如果說敏捷方法已經遍及所有的開發過程,那麼將深度學習應用于現實場景的關鍵就變成了:瞭解它在敏捷開發環境中具體的適用位置。
也就是說,要把深度學習應用在一個具體流程中,開發者應該清楚地認識到原本的人工流程具體是怎樣的,然後尋找其中可以進行自動化的部分進行強化,而不是簡單粗暴地追求所謂取代人類。在反復的反覆運算中,當所有的流程都被自動化之後,完全取代人類才具有實際意義。
例如,深度學習作為與人類溝通的媒介就得到了很好的應用,目前已經成功應用在語音辨識和手勢理解。在這種情況下,深度學習本質上成為了一種全新的使用者介面(UI),一個允許用戶靈活調度當前任務的UI環境。這就是一個典型的例子,將深度學習應用在一個具體的環節,而不是完全取代人類。
然而,目前許多企業還停留在將深度學習(甚至機器學習和人工智慧)簡單地看成一種預測工具的階段,他們認為深度學習只是一種資料科學家們用來輔助研究的工具。但事實上,深度學習的現實應用場景要寬泛得多。
雷鋒網雷鋒網
深度學習的能力分類
目前,基於持續集成的敏捷方法,大體可以將深度學習的能力分為以下兩種類型:輔助型和生產型。前者將自動化應用在了某些特定的環節,而後者近乎取代了人類。
其中輔助型的能力目前可以說已經非常普遍了。例如輸入法的自動校正和建議輸入,有些相機具有的智慧背景虛化功能,以及軟體發展環境中對代碼的自動校正、錯誤檢查、代碼品質評估甚至漏洞檢測等。
可以看到,這種輔助型能力可以即時得到結果或者在後臺運行。在這種類型的應用裡,深度學習可以幫助我們執行重複的和耗時的任務,例如對照片進行排序和分類等。在某些特定領域,這種資訊的組織和分析能力非常重要。通常可以將海量資訊分解成易於分析的小體量區塊來強化訓練這一能力。
相對於輔助型能力,生產型是一種更全面的自動化,並且正在變得越來越普及。近期,傳播非常廣泛的Prisma就是一個例子(如下圖所示,Prisma軟體能夠將照片重新渲染為不同藝術家的風格)。
這就是生產型能力的典型示例。就像“頭腦風暴”那樣,我們可以利用深度學習的這種能力遍歷一個設計空間的所有可能性。例如應用在規劃和執行領域時,就可以依靠這種能力遍歷所有的可選項,然後向使用者提供一個詳細的選擇列表。目前,針對這一能力的應用具有非常廣闊的探索空間。例如此前報導的利用深度學習來進行工業設計,或者利用深度學習來設計遊戲,就是幾種未來可能的發展方向。
來源:
medium
,由雷鋒網編譯